Autodesk Inventor API Hacking (概略)

# 0. はじめに
[Freeradical](https://www.freeradical.jp)の中の人、[yamarah](https://qiita.com/yamarah)です。
ミドルレンジの3D CADである[Autodesk Inventor](https://www.autodesk.co.jp/products/inventor/overview)のAddinをC#で開発する記事です。
日本語での情報が限られていて、基本的には英語の資料を漁ることになります。
せっかく調べたのに埋もれさせるのは勿体ないので、自分用メモも兼ねて、書いていこうと思います。
ページの最後に、他の記事へのリンクを貼っています。

# 1. 想定する対象者
基本的には自分用メモなので、自分と同等レベルのスキルを持ったユーザーを対象にします。
つまりは、

* CADとしてのInventorに、中程度以上の理解がある。
* VBAでInventorのマクロを書いたことがある。
* C#はカタコトで喋られる。

といった、ユーザーが対象です。
C#の文法や、Inventor APIのオブジェクトモデルについての細かい仕様は、解説はしません。

# 2. 情報ソース
日本語の情報ソースでは、[Technology Perspective from Japan](https://adndevblog.typepad.com/technology_perspective/)が参考になります。というか、ここしかありません。
(後は、[今まさに見ているこのページ](https://qiita.com/yamarah/items/cee08eb8f2b7aecbda83)ですね!)
## 日本語API Help
ここで、新しいInventorがリリースされる度にAPI Helpの日本語訳が公開されるので、それをダウンロードしましょう。
現時点では、[Inventor 2026 APIの日本語プログラミング用ヘルプ](https://adndevblog.typepad.com/technology_perspective/2025/04/japanese-inventor-2026-programming-api-help.html)が公開されています。
日本語訳は誤訳もありますが、原文を想像しながら読めば、十分わかります。
新リリースで追加されたAPIも、その年のHelpに記載されているので、毎年確認すると良いでしょう。

## APIトレーニングマテリアル
また、[Technology Perspective from Japan](https://adndevblog.typepad.com/technology_perspective/)では、APIトレーニングマテリアルという、AddIn開発の勉強に役立つ資料が公開されています。
現時点では、[Autodesk Inventor 2026 の APIトレーニングマテリアル](https://adndevblog.typepad.com/technology_perspective/2025/05/autodesk-inventor-2026-api_trainingmaterial.html)が公開されています。

## 英語のリソース
日本語に拘らなければ(英語で良ければ)、Google先生に聞くのが一番早いです。
キーワードは、*Autodesk*+*Inventor*+*API*+\[知りたいこと\]で良いです。 
検索した結果、だいたいはこのどちらかの中にある記事に案内されます。

* [Inventor Programming - iLogic, Macros, AddIns & Apprentice Forum](https://forums.autodesk.com/t5/inventor-programming-ilogic/bd-p/120)
* [Manufacturing DevBlog](https://adndevblog.typepad.com/manufacturing/)

どうしても分からないことは、悩むより上記の[Inventor Programming - iLogic, Macros, AddIns & Apprentice Forum](https://forums.autodesk.com/t5/inventor-programming-ilogic/bd-p/120)で聞く方が早いです。
大よそ24時間以内に、誰かが返答してくれます。
時差があるので、昼間に質問をポストして、夜中に返答が来ることが多いです。

# 3. Visual Studioについて
Autodeskは正式にサポートしていませんが、無料のVisual Studio Community Editionでも開発できます。ただし、あなたがCummunity Editionの要件を満たしているかどうかは、各自判断してください。
現時点では、Visual Studio 2022が公開されています。Inventorの対応が追い付いていない(つまりは新しい)バージョンのVisual Studioでも経験上は問題なく開発が出来ます。しかし、その場合は新規プロジェクト用のtemplateがinstallされないと思うので、手動でInstallする必要があります。

## developertools.msiからTemplateをぶっこ抜く方法
Inventorをinstallすると、developertools.msiもPublicなDocumentsに配置されます。
しかし、installerが配置されているだけで、installされていません。InventorのSDKが対応しているバージョンのVisual Studioだと、これをinstallすることでTemplateがVisual Studioにinstallされます。
しかし、サポート外バージョンのVisual Studioを使おうとすると、手動でコピーする必要があります。
まずは、developertools.msiから必要なファイルを抜き出します。

```
C:>msiexec /a "C:\Users\Public\Documents\Autodesk\Inventor <バージョン>\SDK\developertools.msi" /qb TARGETDIR="<フォルダ名>"
```

そうして抜き出したファイル、例えば

VCSInventorAddInTemplate2020.zip

を、Visual Studio 2019の場合は、以下にコピーすれば完了です。

C:\Users\\\<ユーザー名>\Documents\Visual Studio 2019\Templates\ProjectTemplates

## mt.exeが無いんですけど・・・
**2025.01.04追記**
manifestの埋め込みは、今となっては廃止されたレジストリ依存のアドインで必要だったものと思われ、今日のレジストリフリーのアドインでは埋め込まなくても動作します。
(ちなみに、まったくの嘘のmanifestを埋め込んでも、動作します)
また、厳密な名前つけも[dotNET時代には不要](https://github.com/dotnet/runtime/blob/main/docs/project/strong-name-signing.md#1-microsoft-strong-names-their-assemblies-should-i)とされています。
ですので、今からアドイン開発される方は、mt.exeとsn.exeは無くても良いと思います。
**追記終わり**

`Visual Studio`の`プロジェクト`の`プロパティー` → `ビルドイベント` → `ビルド後のイベントのコマンドライン`にscriptが書いてあるのですが、まずマトモに動きません。Visual StudioがCommunity Editionだからなのでしょう。
そこで、苦労しながらscriptを編集するのですが、まず最初に立ちはだかるのが、[mt.exe](https://docs.microsoft.com/en-us/windows/desktop/sbscs/mt-exe)がどこにも無いということでしょう。
結論を言うと、[Windows SDK](https://developer.microsoft.com/ja-jp/windows/downloads/windows-10-sdk/)をinstallすれば、この中に含まれています。
install時に選択画面が出てきますが、以下をチェックすると良いです。
![Windows SDK.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424028/2eeca4c0-0e76-4ffc-08cc-ebafd15f1034.png)
上記画像で青くなっている*Windows SDK for Desktop C++ x86 Apps*を選択すれば、自動的にその上の3つも選択されます。他のものは不要です。

もし、mt.exeだけをcopyして、Windows SDKをuninstallするのならば、その前にsn.exeもcopyしておいた方が良いです。たぶん。
参考までに今使っているscriptを貼っておきます。

```
call "%vsappiddir%..\..\Common7\Tools\VsDevCmd.bat"
call mt.exe -manifest "$(ProjectDir)$(TargetName).X.manifest" -outputresource:"$(TargetPath)";#2
XCopy "$(TargetPath)" "%AppData%\Autodesk\ApplicationPlugins\$(TargetName)\" /Y /R
XCopy "$(ProjectDir)Autodesk.$(TargetName).Inventor.addin" "%AppData%\Autodesk\ApplicationPlugins\$(TargetName)\" /Y /R   
mkdir "%AppData%\Autodesk\ApplicationPlugins\$(TargetName)\ja"
XCopy "$(TargetDir)ja" "%AppData%\Autodesk\ApplicationPlugins\$(TargetName)\ja\" /S /Y /R
```

## Debuggerは使えますか?
使えます。
`プロジェクト`の`プロパティー` → `デバッグ` → `動作条件` → `外部プログラムの開始` → Inventorのexeを指定します。
`外部プログラムの開始`は`構成`別に設定できるので、`Debug`と`Release`の双方に設定するのを忘れないでください。
~~但し、Programを修正する(= Compileする)度に、Inventorを再起動する必要があります。~~ 限定的ですが、一時停止中にコードを書き替えて再開すると、反映して続行できます。
この辺りはVBAのルーズさに比べると自由度が低いので、API Hackしている間はVBAでテストコードを書いて、目途が付いたらC#へ移行すると良いです。
(2021.06.17追記)
API Hack時は、[Out processからの操作する](https://qiita.com/yamarah/items/43d5858d22bf8604c7fe)ことによって、制限を大幅に緩和できます。


# 4. 言語(日本語/英語)について
将来的に[AUTODESK APP STORE](https://apps.autodesk.com/ja)で公開したいのであれば、英語のサポートは必須となります。なぜなら、事実上、日本語のみのソフト(≒英語をサポートしないソフト)は受け付けてもらえないからです。
そこで、日本語と英語の両対応にするわけですが、デフォルト言語を英語にしてください。
つまり、

〇 デフォルト : 英語 + 追加 : 日本語
× デフォルト : 日本語 + 追加 : 英語

ということです。なぜなら、英語でも日本語でもないInventor、例えばフランス語版のInventorで実行した時に、デフォルト言語で表示されるからです。
ちなみに、AddInで使われる言語は、Windowsの言語ではなく、Inventorの言語です。ですので、Inventorに英語のLanguage Packをinstallすれば、英語環境でのテストができます。

# 5. 言語(iLogic/VBA/VB.net/C#)について
必ずしも、C#でAddInにする必要はありません。誤解を恐れず言うならば、iLogic/VBA/VB.net/C#の4つで出来ることに違いはありません。
しかし、開発効率は全く違います。一度、Visual Studioでの開発に慣れてしまうと、VBAで組むのが辛くなります。
では、VB.netとC#のどちら? というと、VBAからの繋がりでVB.netを選択する人が多いのかもしれませんが、これを機会にC#を選択することをお勧めします。
あまり強く推すと、宗教論争に発展するので、この辺りに留めておきます。

お気楽さならば、iLogicが良いのかもしれません(この記事の存在意味を否定してしまいますが)。
プロパティーや変数にも簡単にアクセスできます。

# 6. Inventor LT用のAdd-Inも開発できますか
残念ながら、出来ないようです。Inventor LTではVBAも使えず、APIは外部に公開されていないようです。
(2021.06.17追記)
Inventor LTはバージョン2021を最後に開発が終了しました。

# 99. リンク
[Autodesk Inventor API Hacking (Versionあれこれ)](https://qiita.com/yamarah/items/e3f4e23208e54062bf6d)
[Autodesk Inventor API Hacking (firstTimeとは何ぞや)](https://qiita.com/yamarah/items/7d19924270d4173a53b4)
[Autodesk Inventor API Hacking (AddIn/Command名前情報について)](https://qiita.com/yamarah/items/48e58fd867552a465ef9)
[Autodesk Inventor API Hacking (RibbonにIconを登録したい～IPictureDisp～)](https://qiita.com/yamarah/items/bfd85705c9aeba824219)
[Autodesk Inventor API Hacking (Dockable Windowでのキー入力)](https://qiita.com/yamarah/items/f653e93d940917a2641d)
[Autodesk Inventor API Hacking (BrowserNodeの複数選択)](https://qiita.com/yamarah/items/5c5592f03c2aef8fc6fd)
[Autodesk Inventor API Hacking (Transaction処理)](https://qiita.com/yamarah/items/07cf620528ae48f83505)
[Autodesk Inventor API Hacking (InteractionEventsは必須)](https://qiita.com/yamarah/items/5cba5a3772df76c67086)
[Autodesk Inventor API Hacking (スケッチの中点)](https://qiita.com/yamarah/items/abcbcdb71f39358aeebf)
[Autodesk Inventor API Hacking (AddInの動的Load/Unload)](https://qiita.com/yamarah/items/173b010157c52e82585a)
[Autodesk Inventor API Hacking (自作Control開発の注意点)](https://qiita.com/yamarah/items/53e74a49ec543f473e68)
[Autodesk Inventor API Hacking (Context Menuの表示)](https://qiita.com/yamarah/items/8bbef9c5e000efb74a71)
[Autodesk Inventor API Hacking (SelectEventsと事前選択)](https://qiita.com/yamarah/items/60a7b8c200d47bb38952)
[Autodesk Inventor API Hacking (アドイン マネージャ)](https://qiita.com/yamarah/items/a91f5e867ffbfb8a3bcb)
[Autodesk Inventor API Hacking (Modeless FormのZ order)](https://qiita.com/yamarah/items/80ea83d6697581bb7eb7)
[Autodesk Inventor API Hacking (C#8.0、そして.NET Core3.0)](https://qiita.com/yamarah/items/06bb1a67c88ad85277e2)
[Autodesk Inventor API Hacking (Entitlement API)](https://qiita.com/yamarah/items/c7cd1ec7acc6e487d574)
[Autodesk Inventor API Hacking (WPFのWindowを表示)](https://qiita.com/yamarah/items/a36e20f29ea612714040)
[Autodesk Inventor API Hacking (ダークテーマへの対応～アイコン編～)](https://qiita.com/yamarah/items/b1153186bccb15f68177)
[Autodesk Inventor API Hacking (SketchEntityがActivatedObject内かどうか)](https://qiita.com/yamarah/items/c687ac584a8e81dfb8aa)
[Autodesk Inventor API Hacking (C#9.0)](https://qiita.com/yamarah/items/32d3e8cdc89e12ea9d41)
[Autodesk Inventor API Hacking (Out processからの操作)](https://qiita.com/yamarah/items/eb108bfeb5eb7cf771c3)
[Autodesk Inventor API Hacking (Rubberduckを使いたい)](https://qiita.com/yamarah/items/b25e73a015bcf3adbec2)
[Autodesk Inventor API Hacking (安全にDefinitionに到達する)](https://qiita.com/yamarah/items/3968c63724d6771696ac)
[Autodesk Inventor API Hacking (Inventor2025からの注意)](https://qiita.com/yamarah/items/00ddee874dbcf5241c43)
[Autodesk Inventor API Hacking (AddInのpath)](https://qiita.com/yamarah/items/d7a42177662850030731)
[Autodesk Inventor API Hacking (NET環境での別スレッドUI)](https://qiita.com/yamarah/items/505054bca9780e138c7f)
[Autodesk Inventor API Hacking (だいたい一度はハマること)](https://qiita.com/yamarah/items/43d5858d22bf8604c7fe)
[Autodesk Inventor API Hacking (APIのbug)](https://qiita.com/yamarah/items/373e3a8b4169312b1749)