NuGetでAutoCAD .NET API用クラスライブラリを作成する
12810 ワード
はじめに
- AutoCAD .NET APIの開発で新規プロジェクト作成する際の簡単な方法は
- ObjectARXのインストールとAutoCAD .NET API Wizardsをインストール
- 新規プロジェクトから選ぶ
- ObjectARXのインストールとAutoCAD .NET API Wizardsをインストール
- 新規プロジェクトから選ぶ
ですが
- 現状ではNuGetから必要なファイルを入手できるようになっています
- 以下はその方法を記したものです
前提
- Visual Studio 2019がインストールされている
- AutoCAD 2021がインストールされている
- NuGetが問題なく利用できる
作成手順
プロジェクト作成手順
NuGet
コードの追加
ロード時・開放時用のクラス
- 「MyPlugin.cs」クラスファイルを作成し、以下のコードを入力します。
using Autodesk.AutoCAD.Runtime;
[assembly: ExtensionApplication(typeof(nugetTest.MyPlugin))]
namespace nugetTest
{
/// <summary>
/// ロード・開放時の動作
/// </summary>
public class MyPlugin : IExtensionApplication
{
/// <summary>
/// ロード時動作
/// </summary>
public void Initialize()
{
}
/// <summary>
/// クローズ時動作
/// </summary>
public void Terminate()
{
}
}
}
- 先頭の属性は、AutoCADにこれがプラグインだと認識させるおまじないです
-
{ネームスペース}.{クラス名}
を認識させています
- MyPluginクラスが利用するインタフェイス、[IExtensionApplication]はプラグインのロード時・開放時の挙動を制御するためのインタフェイスです
- Initializeがロード時
- Terminateが開放時
プロジェクト作成手順
NuGet
コードの追加
ロード時・開放時用のクラス
- 「MyPlugin.cs」クラスファイルを作成し、以下のコードを入力します。
using Autodesk.AutoCAD.Runtime;
[assembly: ExtensionApplication(typeof(nugetTest.MyPlugin))]
namespace nugetTest
{
/// <summary>
/// ロード・開放時の動作
/// </summary>
public class MyPlugin : IExtensionApplication
{
/// <summary>
/// ロード時動作
/// </summary>
public void Initialize()
{
}
/// <summary>
/// クローズ時動作
/// </summary>
public void Terminate()
{
}
}
}
- 先頭の属性は、AutoCADにこれがプラグインだと認識させるおまじないです
-
{ネームスペース}.{クラス名}
を認識させています - MyPluginクラスが利用するインタフェイス、[IExtensionApplication]はプラグインのロード時・開放時の挙動を制御するためのインタフェイスです
- Initializeがロード時
- Terminateが開放時
のコードを記述します
コマンド用クラス
- 「myCommands.cs」クラスファイルを作成します
- これだけだと、ローカライズ(多国語対応)時に認識されないので、リソースファイルも追加します
-
[プロジェクト]を右クリック、[追加(D)]-[新しい項目(W)]を実行
-
ファイル名を「myCommands.resx」にして追加項目は「リソースファイル」を選択
- ファイル名に注意してください
- 下記画像では「My・・・」になっていますが、「myCommands.resx」です
-
ファイルが次のように認識されているはずです
- コードを追加します。
- コードのクラス名は「MyCommands」でファイル名をつけるときとは変更しています。
- これはリソースファイルのコードと区別のためです。
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
// これはコマンドですよ、という宣言
[assembly: CommandClass(typeof(nugetTest.MyCommands))]
namespace nugetTest
{
/// <summary>
/// コマンド用クラス
/// </summary>
public class MyCommands
{
/// <summary>
/// コマンドラインから実行するコマンドの定義
/// </summary>
[CommandMethod("MyGroup", "MyCommand", "MyCommandLocal", CommandFlags.Modal)]
public void MyCommand()
{
}
/// <summary>
/// 先に図形をピックしてある前提で動作するコマンドの定義
/// </summary>
[CommandMethod("MyGroup", "MyPickFirst", "MyPickFirstLocal", CommandFlags.Modal | CommandFlags.UsePickSet)]
public void MyPickFirst()
{
PromptSelectionResult result = Application.DocumentManager.MdiActiveDocument.Editor.GetSelection();
if (result.Status == PromptStatus.OK)
{
// ----->>> 図形が選択されていた場合の動作
}
else
{
// ----->>> 図形が選択されていない場合の動作
}
}
/// <summary>
/// セッションで有効なコマンド動作
/// </summary>
[CommandMethod("MyGroup", "MySessionCmd", "MySessionCmdLocal", CommandFlags.Modal | CommandFlags.Session)]
public void MySessionCmd()
{
}
/// <summary>
/// Lisp関数を自作する際のコード
/// </summary>
/// <param name="args"></param>
/// <returns></returns>
[LispFunction("MyLispFunction", "MyLispFunctionLocal")]
public int MyLispFunction(ResultBuffer args)
{
return 1;
}
}
}
- リソースにも追記します
名前 | 値 | コメント |
---|---|---|
MyCommandLocal | MyCommand | |
MyLispFunctionLocal | MyLispFunction | |
MyPickFirstLocal | MyPickFirst | |
MySessionCmdLocal | MySessionCmd |
終わりに
-
ローカライズを含まない場合は、リソースを作成せずクラスファイルだけで進められます
その場合は、以下のようにコードを記載してください
[CommandMethod("MyGroup", "MyCommand", CommandFlags.Modal)]
自分で実施の際、このローカライズにかなりの時間迷ったので、ウイザードで作成した場合と自分で1からクラスライブラリを用意した場合での異なる部分を強調したく、ローカライズをあえて取り上げました
開発者の皆様のお役に立てれば幸いです
ローカライズを含まない場合は、リソースを作成せずクラスファイルだけで進められます
その場合は、以下のようにコードを記載してください
[CommandMethod("MyGroup", "MyCommand", CommandFlags.Modal)]
自分で実施の際、このローカライズにかなりの時間迷ったので、ウイザードで作成した場合と自分で1からクラスライブラリを用意した場合での異なる部分を強調したく、ローカライズをあえて取り上げました
開発者の皆様のお役に立てれば幸いです
Author And Source
この問題について(NuGetでAutoCAD .NET API用クラスライブラリを作成する), 我々は、より多くの情報をここで見つけました https://qiita.com/tanoue2715/items/3a2af25b956f953d7124著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .