📄 asetotecplot.java
字号:
/*
* Created on 2006-2-19
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package ase_convertor;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.StringTokenizer;
/**
* @author yb
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class AseToTecplot
{
private File sfile = null;//sfile代表要读入的文件
private String[] firstTolast = new String[3]; //firstTolast用来把标号为0的一行坐标放置到最后一行
private String[] TreeData = new String[3];//从一行中读取三个数据(点的坐标和三角面片的顶点编号)
private int objectNum = 0;//对象的个数
public AseToTecplot(String sFile)
{
this.sfile = new File(sFile);
}
public void Convert()
{
/////////////////定义变换需要的临时数据。
String tempLine;//用来接受一行的数据
String temp = null;
String fileOut;//输出的文件名
BufferedReader br;
BufferedWriter bw;
StringTokenizer tokenizer;
Long numV;//numV用来记录有多少个点,用于把第0行调到最后一行
Long numF;//numF用来记录有多少个面
if (!sfile.canRead())
{
System.out.println("文件不可读");
return;
}
try
{
br = new BufferedReader(new FileReader(sfile));
} catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
return;
}
/////////////函数操作部分
try
{
while ((tempLine = br.readLine()) != null)
{
tokenizer = new StringTokenizer(tempLine);
/////////////////////////////主要算法都在这里
if (tokenizer.hasMoreTokens())
temp = tokenizer.nextToken();
if (temp.equals("*GEOMOBJECT"))//处理一个对象
{
objectNum++;
fileOut = this.sfile.getName() + objectNum + ".txt";
bw = new BufferedWriter(new FileWriter(fileOut));
// for (int i = 19; i >= 1; i--)
// br.readLine();//向后移动16行
// tempLine = br.readLine();//向下再移一行
tempLine=null;
for(String s ="";!s.equals("*MESH_NUMVERTEX");)
{
tempLine=br.readLine();
tokenizer = new StringTokenizer(tempLine);
if(tokenizer.hasMoreTokens())
s=tokenizer.nextToken();
}//移动,直到” *MESH_NUMVERTEX number“为止
tokenizer = new StringTokenizer(tempLine);
tokenizer.nextToken();
numV = Long.valueOf(tokenizer.nextToken());//获取顶点数量
tempLine = br.readLine();
tokenizer = new StringTokenizer(tempLine);
tokenizer.nextToken();
numF = Long.valueOf(tokenizer.nextToken());//获取顶点数量获得三角面数
/* 此处加上往文件里面写入tecplot文件的开头 */
// VARIABLES = "X", "Y", "Z" Zone N= 482 E= 960
// F=FEPOINT, ET=Triangle
StringBuffer fileStart = new StringBuffer(
" VARIABLES = \"X\", \"Y\", \"Z\" Zone N=");
fileStart.append( numV.toString()+" ");
fileStart.append("E=");
fileStart.append(" "+numF.toString() + " ");
fileStart.append("F=FEPOINT, ET=Triangle");
bw.write(fileStart.toString() + "\r\n");
br.readLine();//向后移动1行,开始读取顶点坐标
tempLine = br.readLine();//读第0行顶点数据
this.ReadVetex(tempLine);
for (int i = 0; i <= 2; i++)
{
firstTolast[i] = TreeData[i];
}
for (int i = numV.intValue(); i >= 2; i--)
{
temp = br.readLine();
this.ReadVetex(temp);
/* 写入文件中 */
for (int j = 0; j <= 2; j++)
{
bw.write(TreeData[j] + " ");
}
bw.write("\r\n");
}
/* 把firtTolast写入文件中 */
for (int j = 0; j <= 2; j++)
{
bw.write(firstTolast[j] + " ");
}
bw.write("\r\n\r\n");
bw.flush();
//下面开始读写三角面片的数据
for (int i = 2; i >= 1; i--)
br.readLine();//向后移动2行
for (int i = numF.intValue(); i >= 1; i--)
{
tempLine = br.readLine();
this.ReadFace(tempLine, numV);
/* 加入把数据写如文件 */
for (int j = 0; j <= 2; j++)
{
bw.write(TreeData[j] + " ");
}
bw.write("\r\n");
// br.readLine();//跳过一行(不用跳,在notepad中看到的两行是由于自动换行)
}
bw.flush();
bw.close();
}//endif
}
} catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
return;
}
System.out.println(this.objectNum);
try
{
br.close();
} catch (IOException e2)
{
// TODO Auto-generated catch block
e2.printStackTrace();
return;
}
}
private void ReadVetex(String line)//读取一行坐标信息,没有检验这一行的格式,靠调用者自己把握
{//小心这里在JAVA中数组是传值还是引用
StringTokenizer tokenizer = new StringTokenizer(line);
String a = tokenizer.nextToken();
String b = tokenizer.nextToken();
for (int i = 0; i <= 2; i++)
{
this.TreeData[i] = tokenizer.nextToken();
}
}
private void ReadFace(String line, Long max)//读取一行三角面信息,没有检验这一行的格式,靠调用者自己把握
{//有与上面类似的问题
String temp;
StringTokenizer tokenizer = new StringTokenizer(line);
tokenizer.nextToken();
tokenizer.nextToken();
tokenizer.nextToken();
temp = tokenizer.nextToken();
for (int i = 0; i <= 2; i++)
{
if(temp.equals("0"))
temp=max.toString();
this.TreeData[i] = temp;
tokenizer.nextToken();
temp = tokenizer.nextToken();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -