AutoCAD.NET API の利用について

AutoCAD.NET API の利用について

Anonymous
適用対象外
5,215件の閲覧回数
3件の返信
メッセージ1/4

AutoCAD.NET API の利用について

Anonymous
適用対象外

はじめまして、伊佐治と申します。


私は .NET での開発経験があり、PCに AutoCAD をインストールしたのを機に C# でのプラグイン制作を試してみましたが、ライブラリの参照がうまくいってないようです。

 

なお、今までに AutoCAD のプラグイン制作の経験はなく、どのような事ができるかを把握しようとしている段階です。

以下のページを参考にNutget を利用しました。
http://adndevblog.typepad.com/technology_perspective/2014/12/nugetorg-and-autocadnet-api.html

 

記載してみたコードは以下の通りです。
1:        public static void Test()
2:       {
3:            Autodesk.AutoCAD.ApplicationServices.DocumentCollection oDocs;
4:            oDocs = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager;
5:        }

 

上記のコードですが、コンパイルは通るのですが実行してみると、アセンブリ accoremgd が見つからないというエラーが発生します。(どうやら4行目なようです) プロジェクトファイル(.csproj) の HintPath に記載された Path を参照すると、dll 自体は存在しているようなので、少し混乱しています。

 

なお、環境ですが

OS: Win7 Pro 64bit
開発環境: Visual Studio2017 (C#)
ターゲットフレームワーク: 4.6.1

 

AutoCAD: E.115.0.0 AutoCAD 2011 - Japanese Version 2.1 
(2D の機械設計で使用。ただ、3D用のプラグイン制作の可能性もあるかもしれません)

 


以下は自身で考えた原因と対応です
・ x86 x64 の設定が一致していない? → Visual Studio の構成マネージャ変更
 → 変化なし

 

・AutoCAD のバージョンが未対応 → AutoCAD 2010-2012 DotNet Wizards のインストールを試みる
入手元:https://www.autodesk.co.jp/developer-network/platform-technologies/autocad?referrer=%2Fdeveloper-net...
 → VisualStudio 2008 - 2010 がないとインストールすらできない

 

AutoCAD のプラグイン制作には、開発用PCの環境条件が多少きつめなのでしょうか?
それとも単に設定を間違えているだけで、広いプラットフォームで開発や実行もできるのでしょうか?
正直右も左も分かってない状態ですが、どのようにすれば開発できるのか、ご助言いただけると助かります。

0 件のいいね
解決済み
5,216件の閲覧回数
3件の返信
返信 (3)
メッセージ2/4

Katsuaki.T
Alumni
Alumni
解決済み

伊佐治 様

 

コミュニティフォーラムへようこそ。

 

Nutget については AutoCAD 2015 環境からサポートされているようですので、 AutoCAD 2011 の .NET プラグインの開発環境では、正しいアセンブリの参照ができていないのではと思います。

 

AutoCAD が公開している .NET API をご利用になってこれからプラグインを作成されるのでありましたら、以下のトレーニング資料に目を通されるとよろしいのではと思います。

 

「AutoCAD 2014 API トレーニング マテリアル」
http://adndevblog.typepad.com/technology_perspective/2013/08/autocad-2014-api-training-materials.htm...

 

これより以前のバージョンの資料の掲載は見つかりませんでした。AutoCAD 2011 .NET API とは異なる点もありますが、基本はご理解いただけるはずです。

 

この資料に含まれる「AutoCAD .NET API ガイドブック」(dotNET API Guide.chm)の 「AutoCAD .NET API ガイドブック」>「プロジェクトの作成」>「.NET API アプリケーションのプロジェクトの作成」>「既定テンプレートでのプロジェクト作成」に、 AutoCAD .NET プラグインを作成するための Visual Studio のプロジェクトの作成の説明があります。「AutoCAD .NET API を利用してAutoCAD .NET プラグインを作成するには ObjectARX SDK (Software Development Kit)が必要です。AutoCAD 2011 用には ObjectARX 2011 SDK を使用する必要があります。以前のバージョンなので、オートデスクの公式サイトからは既にダウンロードリンクが削除されています。検索したところ、以下の英語フォーラムの投稿に添付してありました。 

 

「Objectarx 2011」
https://forums.autodesk.com/t5/objectarx/objectarx-2011/td-p/4667823

 

この AutoCAD .NET プラグイン用の Visual Studio のプロジェクトで、以下の2つのアセンブリを参照する必要があります。資料にも記載されていますが、アセンブリの「ローカルコピー」プロパティは「なし」に設定してください。

 

C:\ObjectARX 2011\inc\AcMgd.dll
C:\ObjectARX 2011\inc\AcDbMgd.dll

 

accoremgd.dll は AutoCAD 2011 では存在していませんでしたので、無視してください。

 

AutoCAD 2011 .NET プラグインは .NET Framework 3.5 SP1 を使用します。お持ちの開発環境は Visual Studio 2017 ということですが、Visual Studio のプロジェクトで .NET Framework 3.5 SP1 またはそれ以降のバージョンを設定してください。AutoCAD 2011 .NET プラグインの公式の開発環境は VisualStudio 2008 ですが、Visual Studio 2017 でも .NET Framework 3.5 SP1 またはそれに近い .NET Framework を指定していただければ、ビルド、実行ができるはずです。しかし、確証はないので試してみてください。

 

ObjectARX SDK の以下のフォルダには AutoCAD .NET プラグインのサンプルプロジェクトが含まれています。まず、お持ちの開発環境でサンプルをビルドしてみて、AutoCAD にロード、実行ができるか確かめてみるとよろしいかと思います。また、Visual Studio で新規にプロジェクト作成するのではなく、サンプルプロジェクトのプロジェクトを流用されてもよろしいかと思います。

 

C:\ObjectARX 2011\samples\dotNet

 

AutoCAD .NET プラグインを AutoCAD にロードするには NETLOAD コマンドを使用します。

 

NETLOAD[.NET アプリケーション ロード] コマンド
https://knowledge.autodesk.com/ja/support/autocad/learn-explore/caas/CloudHelp/cloudhelp/2016/JPN/Au...

 


Katsuaki Takamizawa
Technical Support Specialist
0 件のいいね
メッセージ3/4

Anonymous
適用対象外

Katsuaki.T  さん

まずは詳細なご助言にお礼を言いたいと思います。ありがとうございました。

結論から申しますと、おかげ様で上手くいきました。

ただ、すべてが順調だったわけでもなかったので少し書き残しておこうかと思います。


・サンプルコード(VisualStudio 2008?) => 2017 について。
VisualStudio のプロジェクト自動アップグレード機能ではうまくいかず手動で対応。
但し 新規プロジェクト作成 → ソースコードのコピー なので難しくはない。


・追加のアセンブリ
最初に試したサンプルプロジェクトが教えていただいたフォルダに含まれるものではなく、どこかで間違えて拾ってきた? HelloWorld というもので、以下の2つのdll も参照する必要があったので一応記載しておきます。
( ObjectARX 2011\samples のサンプルは、今のところ教えて頂いた2つの dll だけでいいようです。)


ObjectARX 2011\inc-x64\Autodesk.AutoCAD.Interop
ObjectARX 2011\inc-x64\Autodesk.AutoCAD.Interop.Common



・アセンブリバインドのエラーログ
以下のレジストリを登録する必要があった
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
 "EnableLog"=dword:00000001


・.NET のバージョン
3.5 で問題なく動きました。が、バージョンが高くても低くてもダメなようです。

4.0 : AutoCAD から自作 dll がうまく読めないようです。 0x8013101b → .NETのバージョン違いらしい。
3.0 : 見た目はdll が読み込まれたように見えますが、実行してみると AutoCADに「そのようなコマンドはない」と言われる。
      詳しくは調べてませんが、恐らく Initialize メソッド内の例外か何かで落ちていると考えています。


・作った dll を自動で読みこむ方法
情報元:https://knowledge.autodesk.com/ja/support/autocad/troubleshooting/caas/sfdcarticles/sfdcarticles/JPN...
私は 方法A: をとりました。
acad20xxdoc.lsp 内の記述する場所についてまでは書かれていませんでしたが、一番下の行に追加して記述し、うまく読み込まれています。


・クラスのリファレンス
英語ですが、以下のフォルダにありました
ObjectARX 2011\docs\arxmgd.chm


しばらくはサンプルを基にいろいろ試してみます。ありがとうございました。

メッセージ4/4

Katsuaki.T
Alumni
Alumni

伊佐治 様

 

返信、情報の共有を誠にありがとうございます。

 

AutoCAD 2011 の環境で開発環境が整って良かったです。

 

追加情報ですが、.NET では、COM 相互運用機能を利用して COM インタフェースを使用することができます。AutoCAD .NET の環境で AutoCAD が VBA 環境で提供する COM/ActiveX API を使用することができます。

 

COM 相互運用機能(.NET)

https://knowledge.autodesk.com/ja/search-result/caas/CloudHelp/cloudhelp/2016/JPN/AutoCAD-NET/files/...

 

AutoCAD 2011 .NET の環境では、AutoCAD COM/ActiveX API を使用する主な理由としては、AutoCAD .NET API では用意されていない機能を補うことでした。その場合は、以下の2つのアセンブリの参照を Visual Studio に追加する必要があります。注意点ですが、この2つのアセンブリには 32ビット版と64ビット版があります。以下は64ビット版です。すなわち、COM 相互運用機能を利用すると 32ビット版と64ビット版のアプリケーションをそれぞれ個別にビルドする必要が発生します。

 

ObjectARX 2011\inc-x64\Autodesk.AutoCAD.Interop

ObjectARX 2011\inc-x64\Autodesk.AutoCAD.Interop.Common

 

また、COM 相互運用機能を利用すると、EXE 形式の .NET アプリケーションを構築して、そこから AutoCAD COM/ActiveX API を呼ぶこともできます。この場合は(EXE 形式の .NET アプリケーションを構築)AutoCAD .NET API は利用できません。AutoCAD .NET API AutoCAD プラグインとして作成するアプリケーションからのみ利用できます。見つけられた HelloWorld .NET サンプルは AutoCAD COM/ActiveX API を使用していると思われます。 

 

AutoLISP で dll を自動で読み込むのは以前より利用されている方法です。

 

http://adndevblog.typepad.com/technology_perspective/2013/09/auto-loading-for-autocad-addon-apps.htm...

 

上記のブログの他に、英語ですが、以下は AutoCAD API を利用したカスタマイズに関してのブログです。サンプコードも豊富にありますので、どうぞご活用ください。

 

http://adndevblog.typepad.com/autocad/

 

http://through-the-interface.typepad.com/through_the_interface/

 

なお、API リファレンスは英語版のみです。

 

 

 


Katsuaki Takamizawa
Technical Support Specialist
0 件のいいね