- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- パーマリンクを表示
- 印刷
- 報告
お世話になります。
.NETで開いたファイルのモデル空間にあるすべてのオブジェクトをコピーして、テンプレートファイルを元に作成した新しいファイルに貼り付けたくコードを書いているのですが、新しいファイルへの操作切り替えが出来ていない感じで上手くいきません。アドバイスを頂けないでしょうか。よろしくお願い申し上げます。
具体的なコードは下記で、オブジェクトの取得は500ぐらいカウントされており、コピーができていそうで、新しいファイルも問題無く作成されております。そこから新しいファイルをアクティブにしてオブジェクトを貼り付けたいのですが、実行しても元ファイルのコマンドのところに出力されるだけで、新しいファイルでコマンドが実行されている感じがありません。またed2.WriteMessage(""); とするとエラーが発生します。
CAD側での出力(元ファイル側)は下記のような感じです。
コマンド: visionchange
COPYBASE基点を指定:
オブジェクトを選択:
コピー完了
選択したオブジェクトの数:504
コピー完了
PASTECLIP*無効な選択*
点を指定 または 窓(W)/最後(L)/交差(C)/直方体(BOX)/すべて(ALL)/フェンス(F)/ポリゴン窓(WP)/ポリゴン交差(CP)/グループ(G)/追加(A)/除外(R)/複数(M)/直前(P)/元に戻す(U)/自動モード(AU)/単一(SI)
オブジェクトを選択: 1 個見つかりました
public class Class1
{
[CommandMethod("visionchange")]
public void SetLayerAndLineWeight()
{
// アクティブなCADドキュメントをセットしそのDB情報を取得する
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
// 全てのオブジェクトを選択
PromptSelectionResult selRes = ed.SelectAll();
if (selRes.Status != PromptStatus.OK)
{
ed.WriteMessage("\nエラー:オブジェクトの選択に失敗しました。");
return;
}
// 選択したオブジェクトをクリップボードにコピー
ed.Command("COPYBASE", new Point3d(0, 0, 0));
ed.WriteMessage("\nコピー完了\n");
// 選択したオブジェクトの数を取得
int numObjects = selRes.Value.Count;
// 選択したオブジェクトの数をコンソールに出力
ed.WriteMessage($"\n選択したオブジェクトの数:{numObjects}\n");
ed.WriteMessage("\nコピー完了\n");
// setting.dwtを元に新規図面を作成
Document settingDoc = Application.DocumentManager.Add("setting.dwt");
Application.DocumentManager.MdiActiveDocument = settingDoc;
// 新規ドキュメントが完全にロードされるのを待つ
Application.UpdateScreen();
// アクティブなCADドキュメントをセットしそのDB情報を取得する
Database db2 = settingDoc.Database;
Editor ed2 = settingDoc.Editor;
settingDoc.Window.Focus();
// アクティブなドキュメントが正しく設定されたか確認
if (Application.DocumentManager.MdiActiveDocument == settingDoc)
{
ed.WriteMessage("\n移動成功\n");
}
else
{
ed.WriteMessage("\n移動失敗\n");
// return;
}
}
// 新規図面にオブジェクトを貼り付け
ed2.Command("PASTECLIP", new Point3d(0, 0, 0));
ed.WriteMessage("\n貼り付け完了\n");
}
解決済! 解決策の投稿を見る。