はじめに
-
AutoCAD .NET APIを使ったカスタマイズ方法のトレーニングは
に教材があるのでこちらを見れば基本的にはひととおり作業ができるようになります。
-
ここでは、少し毛色の違うカスタマイズ、「互換CAD同時開発」 について書きます。
前提
- 以下、下記が実施済みであるつもりで書いています。
- Visual Studio 2019がインストールされている(コミュニティ版でOK)
- AutoCAD 2021 ObjectARXがインストールされている
- AutoCAD 2021 .NET API Wizardsがインストールされている
- AutoCAD 2021がインストールされている
- IJCAD 2020 STD/PROがインストールされている
- ZWCAD 2020がインストールされている
- (IJCAD/ZWCADはどちらかが入っていればOK)
プロジェクトの作成
-
まずはWizardsを使ってプロジェクトを作成します。
-
「AutoCAD 2021 CSharp plug-in」を選択、[次へ]ボタン
-
プロジェクト名を入力し、[次へ]ボタン
-
オプションの選択
- 上側のパスは、ObjectARXのINCフォルダーを指します。ここに入っているDLLを参照するようです。
- 下側のパスはAutoCADのインストールパスを指します。これはデバッグモードで実行する場合にAutoCADを自動実行させるためです。
- 後のチェックは必要なら入れます。今は不要です。
- [OK]ボタンで次へ進みます。
-
ソリューションが作成されます。
-
[MyCommands.cs]を見ると、お約束「Hello World」が作成されているのが確認できます。
-
申し訳ありませんが、各コードをじっくり解説するつもりはありません。
-
コードを詳しく知りたいのであれば、最初に書いたリンクからトレーニング教材をダウンロードして見てください。
AutoCADコード
-
AutoCADのコードだと示すため、条件付きコンパイルシンボルに「ACAD」を入力します。
-
ソリューションを右クリックして、プロパティを開く
-
プロパティが開いたら、「ビルド」を選択「条件付きコンパイルシンボル」に「ACAD」を入力
-
同じく「ビルド」で「出力」に「ACAD」を追記
-
すべて保存し、Visual Studioを閉じます。
プロジェクト・ソリューションファイルのコピー
-
プロジェクトフォルダーを開きます。
-
フォルダー[TranAcad01]を開きます。
![TranAcad01]
(https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426989/cbdd623e-a440-847d-7235-6cab5a1221d2.png) -
[TranAcad01.csproj]ファイルを2度コピーし、
ファイル名 内容 TranAcad01.csproj AutoCAD用 TranIJ01.csproj IJCAD用 TranZW01.csproj ZWCAD用 と改名します。
-
ひとつ上のフォルダーに戻りソリューションファイルを同じようにコピーします。
-
各ソリューションファイルをメモ帳で開き、記述を変更します。
-
IJCAD用(TranIJ01.sln)
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30804.86
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TranIJ01", "TranAcad01\TranIJ01.csproj", "{79677DF9-AFAF-4F69-86FA-759BC7630EC6}"
EndProject
{以後略}
- ZWCAD用(TranZW01.sln)
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30804.86
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TranZW01", "TranAcad01\TranZW01.csproj", "{79677DF9-AFAF-4F69-86FA-759BC7630EC6}"
EndProject
{以後略}
IJCAD用の操作
-
TranIJ01.sln
を開くと、ツリーが変化しています。 -
プロパティで「アプリケーション」のアセンブリ名を「TranACAD01」を「TranIJ01」に変更してください。
-
「規定の名前空間」まで変更すると、いろいろと面倒(Namespaceの記述が)なのでそちらは放置します。
-
「ビルド」で「条件付きコンパイルシンボル」に「ACAD」を「IJCAD」に変更してください。
-
「ビルド」の「出力」もIJCAD用のフォルダーを指定します。
-
DebugおよびReleaseでそれぞれ指定しておきます。
-
参照を変更します。
-
ソリューションエクスプローラーで「参照」を展開
-
AutoCADの参照である、「AcCoreMgd」「AcDbMgd」「AcMgd」を削除します。
-
参照を右クリックし、[参照の追加]を選択
-
参照マネージャーが起動したら、「参照」を選択の上、[参照]ボタンで、IJCADインストールフォルダーから
[gmap.dll]と[gmdb.dll]を選択し、参照マネージャーを閉じます。 -
[gmap.dll]と[gmdb.dll]をプロパティを編集し、「ローカルにコピー」を「False」にしてください。
コードの変更
-
myPlugin.cs
ファイルを開きます。- 参照が変わり、AutoCADではないのでエラーでコードが赤くなっています。
- 現在の
using
文のエラーになっているところをACADシンボル時のコンパイルとして書き換えます。
#if ACAD
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
#endif
- IJCADの参照を追記します。
#if ACAD
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
#elif IJCAD
using GrxCAD.Runtime;
#endif
- エラーが止まります。
-
myCommands.cs
を開いて同じように変更します。
#if ACAD
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
#elif IJCAD
using GrxCAD.ApplicationServices;
using GrxCAD.DatabaseServices;
using GrxCAD.EditorInput;
using GrxCAD.Runtime;
#endif
using System;
-
以上でIJCAD用のコンパイルとしてはできるようになります。
-
プロジェクトをすべて保存して終了してください。
ZWCAD用の操作
-
TranZW01.sln
を開くと、ツリーが変化しています。
- プロパティで「アプリケーション」のアセンブリ名を「TranACAD01」を「TranZW01」に変更してください。
- 「規定の名前空間」まで変更すると、いろいろと面倒(Namespaceの記述が)なのでそちらは放置します。
- 「ビルド」の「条件付きコンパイルシンボル」に「ACAD」を「ZWCAD」に変更してください。
- 「ビルド」の「出力」もZWCAD用のフォルダーを指定します。
- DebugおよびReleaseでそれぞれ指定しておきます。
-
参照を変更します。
-
ソリューションエクスプローラーで「参照」を展開
-
AutoCADの参照である、「AcCoreMgd」「AcDbMgd」「AcMgd」を削除します。
-
参照を右クリックし、[参照の追加]を選択
-
参照マネージャーが起動したら、「参照」を選択の上、[参照]ボタンで、ZWCADインストールフォルダーから
[ZwDatabaseMgd.dll]と[ZwManaged.dll]を選択し、参照マネージャーを閉じます。 -
[ZwDatabaseMgd.dll]と[ZwManaged.dll]をプロパティを編集し、「ローカルにコピー」を「False」にしてください。
コードの変更
myPlugin.cs
ファイルを開きます。
- 現在の
using
文のエラーになっているところをACADシンボル時のコンパイルとして書き換えます。
#if ACAD
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
#elif IJCAD
using GrxCAD.Runtime;
#elif ZWCAD
using ZwSoft.ZwCAD.Runtime;
#endif
-
myCommands.cs
ファイルを開きます。 -
同じ手順でZWCADの記述を追記します。
#if ACAD
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
#elif IJCAD
using GrxCAD.ApplicationServices;
using GrxCAD.DatabaseServices;
using GrxCAD.EditorInput;
using GrxCAD.Runtime;
#elif ZWCAD
using ZwSoft.ZwCAD.ApplicationServices;
using ZwSoft.ZwCAD.DatabaseServices;
using ZwSoft.ZwCAD.EditorInput;
using ZwSoft.ZwCAD.Runtime;
#endif
- 以上でZWCAD用のコンパイルとしてはできるようになります。
まとめ
- いかがでしょうか?
- 今回はHello Worldのみの互換コードなので変更は最低限で済みます。
- 本来はもっとIJ用、ZW用とそれぞれ書き換える部分が出てきます。
それらをきちんと把握するためにプログラムを実行して、動かないところを見つけてそれぞれ用に動くように変更してください。
以上です。