⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asetotecplot.java

📁 这是一个很简单的使用java写的从ase文件中提取tecplot可以使用的格式的文件转换器。
💻 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 + -