連日、"AdvanceCAD" のデータをコピペする作業があり、さすがにウンザリ。
根本的な原因は、CADデータの運用の問題があるのは十分
わかっているのですが、今更運用方法を変更する事に
理解してもらえるはずが無い為、マクロで対応何とか
してしまえと思い、作成してみました。
ファイルAのデータを、ファイルBの同一ピクチャに全て取り込みます。
(ひょっとしたらこの機能は標準で有るのでしょうか?)
すんなり出来そうに無かったので、2段階の作業となります。
○エクスポート
ファイルAのデータをエクスポートする為の情報を取得するマクロです。
/* AdvanceCAD_macro */ /* MDLExport.MAC */ /* 他のAcadファイルの全てのピクチャを同一ピクチャに取り込むマクロです */ /* エクスポート側 */ /* --- 設定 --- */ /* リストパス インポートとエクスポート一致させて下さい*/ listPath = "C:/temp/"; listFileName = "MDLInportList.MAC"; /* ------------ */ clear(); /* ファイル名の取得 */ extern filepath = fname("#MODEL#",#CURFILNAME); vdump(listPath + listFileName,"w",filepath); /* 全ピクチャのアイテムの有無 */ /* 1:あり -1:なし */ picmax = 63; extern picItem,drwScl,picScl; picItem = array(picmax + 1); drwScl = picScl = picItem; startpic=#CURPIC ; LIST/OFF <CE> for ( i=1;i<picmax + 1;i+=1 ) { picItem[i] = getitm(0,i)>0?1:-1; if(picItem[i] >0){ PIC [i] <CE> drwScl[i] = #CURDRWSCF; picScl[i] = #CURPICSCF; } } PIC [startpic] <CE> LIST/ONN <CE> vdump(listPath + listFileName,"a",picItem); vdump(listPath + listFileName,"a",drwScl); vdump(listPath + listFileName,"a",picScl); echo "エクスポートしました"; exit;
必要な情報は "vdump" で出力しています。本来デバッグの為の
機能なのですが、出力したファイルは外部マクロとしてそのまま実行
できる為お手軽な上、非常に便利です。
○インポート
続いてファイルBにファイルAのデータを取り込むマクロです。
コピペではなく、サブモデル-分解の状態で取り込むため
元のデータと同じ状態です。
/* AdvanceCAD_macro */ /* MDLInport.MAC */ /* 他のAcadファイルの全てのピクチャを同一ピクチャに取り込むマクロです */ /* インポート側 */ /* --- 設定 --- */ /* リストパス インポートとエクスポート一致させて下さい*/ listPath = "C:/temp/"; listFileName = "MDLInportList.MAC"; /* ------------ */ msg=" "; clear(); CLA/EVT <CE> /* モデル変更チェック */ if (dbchgd()==1) {msg="モデルを保存して実行してください!!";goto bye;} /* インポート情報取得 */ extern filepath,picItem; extern drwScl,picScl; tmp=fstat(listPath + listFileName,"exist"); if(tmp==0){msg="インポート情報が見つかりません";goto bye;} MACRO NEW [listPath + listFileName] <CE> /* インポート情報チェック */ tmp=vtype(filepath); if(tmp!=4){msg="インポート情報が不正です(listPath)";goto bye;} tmp=fstat(filepath ,"exist"); if(tmp==0){msg="インポートファイルが見つかりません";goto bye;} tmp=vtype(picItem); if(tmp!=30){msg="インポート情報が不正です(picItem)";goto bye;} tmp=vtype(drwScl); if(tmp!=30){msg="インポート情報が不正です(drwScl)";goto bye;} tmp=vtype(picScl); if(tmp!=30){msg="インポート情報が不正です(picScl)";goto bye;} /* インポート-サブモデル分解 */ picmax = 63; LIST/OFF <CE> for ( i=1;i<picmax + 1;i+=1 ) { tmp=vtype(picItem[i]); if(tmp!=3){msg="ピクチャ情報が不正です(picItem)";goto bye;} tmp=vtype(drwScl[i]); if(tmp!=3){msg="ピクチャ情報が不正です(drwScl)";goto bye;} tmp=vtype(picScl[i]); if(tmp!=3){msg="ピクチャ情報が不正です(picScl)";goto bye;} if(picItem[i]>0){ PIC [i] <CE> s=drwScl[i];DRWSCF [s] <CE> s=picScl[i];PICSCF [s] <CE> SUB [filepath] RDPIC [i] ITMXPD <CE><CE> <0,0> <CE> ZOOM/ALL <CE> } } msg="終了しました。確認してください。"; /* Exit Program */ bye: CLA/EVT <CE> RPT/ALL <CE> LIST/ONN <CE> echo msg; exit;
インポート側の同一ピクチャに、問答無用で取り込むため変更されている
ファイル(未保存の状態)では、マクロを実行しないようにしています。
又、取り込む際は出来るだけ元のファイルと同じ状態にしたい為
元のピクチャの "ピクチャスケール" "ドローイングスケール" と同じ値にしています。
(うちでは、ドローイングスケールはあまり使わないですが)
今年のブログはこれでおしまいです。 正直、こんなに続けると
思いませんでした。 CATIAの "ファイル間リンクの取得" は来年の宿題
にします。 良いお年を。