ともさんのHP >プロブラミング >自作JavaLibrary >CADデータエクセルファイルに変換するJavaClass

CADデータエクセルファイルに変換するJavaClass

CADデータをDFX形式へ変換したのち、CSV形式にして保存するツールを作りました。
CADで作成した図面をDXF形式(Ver.12)で保存し、JAVAで作成したプログラムに読み込ませ、線の座標を取り出します。
取り出した座標データをどう加工するかは未定なのですが、とりあえずCSVファイルに吐き出させています。

DXF-CSV変換プログラムの実行結果

CADの画面で下のように見えるデータを処理して...
CAD画面


CSVファイルにしてエクセルで読み込み、分散グラフにすると...
EXCEL画面


グラフ上でCADの描画画面と同じ図が表示されます。
グラフで製図データを描画しても意味はないのですが、確認用です。

DXF-CSV変換データの利用方法

将来的には大型のプロッターを自作して、服を自作するときにCADデータをそのまま布地に 書き込めるように出来ないかな、と思っています。CADデータを読み込んで座標データを取得できたことは、このための第一歩といったところ。


以下はJavaプログラムのソースです。
DXFファイル形式はバージョンによって大きく異なります。私の作ったプログラムはDXFバージョン12に対応しています。

広告

DXFファイルを吐き出させるCADの種類によっては、バージョン12で保存しても、うまく読み込めないかもしれません。
洋裁CADのDXFデータは変換OKです。


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 ;
    }
    
    
}

最終更新日: 2016-12-26 09:14:09

ともさんのHP >プロブラミング >自作JavaLibrary >CADデータエクセルファイルに変換するJavaClass

このエントリーをはてなブックマークに追加
広告
おすすめ記事
新着ページ

ウエスト切り替えワンピースの作りかた  
気象観測装置を作りました  
五右衛門風呂の修復  
子ウインドウを開く  
キキョウの栽培、手入れ、増やしかた  
ツリービューにポップアップメニューを追加  
JavaFXでPopupMenu  
竹を曲げる方法  
井戸保護カバーの自作  
ルピナスの栽培、手入れ、増やしかた  
アメリカンホック  

私の他のサイト

ともさんの箱庭(ブログ)
家庭菜園
3D-CAD
洋裁CAD

いいねなど

 RSS 
PageSpeedInsights
html5チェック

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます