ともさんのHP >プロブラミング >自作JavaLibrary >CADデータエクセルファイルに変換するJavaClass
CADデータエクセルファイルに変換するJavaClass
CADデータをDFX形式へ変換したのち、CSV形式にして保存するツールを作りました。
CADで作成した図面をDXF形式(Ver.12)で保存し、JAVAで作成したプログラムに読み込ませ、線の座標を取り出します。
取り出した座標データをどう加工するかは未定なのですが、とりあえずCSVファイルに吐き出させています。
DXF-CSV変換プログラムの実行結果
CADの画面で下のように見えるデータを処理して...
CSVファイルにしてエクセルで読み込み、分散グラフにすると...
グラフ上でCADの描画画面と同じ図が表示されます。
グラフで製図データを描画しても意味はないのですが、確認用です。
DXF-CSV変換データの利用方法
将来的には大型のプロッターを自作して、服を自作するときにCADデータをそのまま布地に
書き込めるように出来ないかな、と思っています。CADデータを読み込んで座標データを取得できたことは、このための第一歩といったところ。
以下はJavaプログラムのソースです。
DXFファイル形式はバージョンによって大きく異なります。私の作ったプログラムはDXFバージョン12に対応しています。
DXFファイルを吐き出させるCADの種類によっては、バージョン12で保存しても、うまく読み込めないかもしれません。
洋裁CADのDXFデータはそのままで変換できます。
DXF-CSV変換プログラムのソース
package tomojavalib.cad;
/**
*
* @author tomo
*
*/
public class ReadDxf12 {
/**
* @param args to.totomo.net/
* 図面楽天 ファイルdxf形式(Ver12)ファイルを読み込み、線情報を取り出すClass
*/
public static void main(String[] args)
{
ReadDxf12 rd = new ReadDxf12();
rd.readDxf12( "test.dxf" );
}
public void readDxf12( String filename )
{
String s ="a";
String sx,sy;
double xx,yy,r,sdeg,edeg,lx,ly;
boolean splineflug = false;
tomojavalib.util.TextFile tf = new tomojavalib.util.TextFile();
tomojavalib.util.TextFile tfo = new tomojavalib.util.TextFile();
try{
// System.out.println( filename );
tf.inOpen( filename );
tfo.outOpen( filename+".csv" );
// System.out.println( filename );
do{
s = tf.read();
//System.out.println( s );
//lineの処理
if(s.equals("LINE"))
{
tfo.write( "LINE,," );
for(int i=1;i<8;i++){ tf.read(); }
sx = tf.read();tf.read();
sy = tf.read();tf.read();
tfo.write( "," + sx + "," + sy );
sx = tf.read();tf.read();
sy = tf.read();tf.read();
tfo.write( "," + sx + "," + sy );
}
//splineの処理
if(s.equals("VERTEX"))
{
if( splineflug==false){ tfo.write( "SPLINE,," );}
for(int i=1;i<8;i++){ tf.read(); }
sx = tf.read();tf.read();
sy = tf.read();tf.read();
tfo.write( "," + sx + "," + sy );
splineflug = true;
}
if(s.equals("SEQEND")){splineflug = false;}
//ARCの処理
if(s.equals("ARC"))
{
tfo.write( "ARC,," );
for(int i=1;i<8;i++){ tf.read(); }
xx = Double.parseDouble( tf.read()); ;tf.read();
yy = Double.parseDouble( tf.read());tf.read();
r = Double.parseDouble( tf.read());tf.read();
sdeg = Double.parseDouble( tf.read());tf.read();
edeg = Double.parseDouble( tf.read());tf.read();
lx = xx + r * Math.cos( sdeg * Math.PI / 180.);
ly = yy + r * Math.sin( sdeg * Math.PI / 180.);
tfo.write( "," +lx + "," + ly );
for(int ir = (int)( sdeg + 1. ) ; ir < edeg ; ir++ )
{
lx = xx + r * Math.cos( (double)ir * Math.PI / 180.);
ly = yy + r * Math.sin( (double)ir * Math.PI / 180.);
tfo.write( "," +lx + "," + ly );
}
lx = xx + r * Math.cos( edeg * Math.PI / 180.);
ly = yy + r * Math.sin( edeg * Math.PI / 180.);
tfo.write( "," +lx + "," + ly );
}
if( s.equals( "null" ) ){break;}
}while( true );
tf.inClose();
tfo.outClose();
}catch(Exception e){ System.out.println( e ); };
return ;
}
}
最終更新日: 2018-04-24 04:45:27
ともさんのHP >プロブラミング >自作JavaLibrary >CADデータエクセルファイルに変換するJavaClass
ツイート