Autodesk Inventorでの図面作成をAPIで完全自動化、VBAとC#での実装方法も紹介
はじめに
こんにちは。今回はAutodesk InventorをAPIで制御して図面作成を自動化する方法についてご紹介します。Autodesk Inventorは、製品や機械設備の設計者向けに提供されている3D CADモデリングソフトウェアです。おそらく同じAutodesk社の「Autodesk AutoCAD」の方が知名度が高いと思いますが、AutoCADが2D図面作成に特化しているのに対し、Inventorは3D設計に特化しています。
さて、今回このテーマを扱うことになったのは、毎回の業務で行っている作図作業が「面倒だな」と感じたからです。私は普段システム開発の業務に携わっているのですが、それと並行して自社製品(ラック)の図面を作成する作業も担当しています。通常はInventorで3Dモデルを作成し、そこから手動で2D図面に変換しています。
ただ、作図依頼が集中する日もあり、その作業にかなりの時間を取られることもしばしばあります。今のところは開発業務との両立ができていますが、今後さらに依頼が増えてしまうと、システム開発に影響が出てしまうかもしれません。そこで、「この作業を自動化できないか」と考え、Inventor APIについて調査を始めたという経緯です。
この記事では、私が調べたことや実際に試してみたことを、同じように業務の効率化を目指している方に向けてわかりやすく共有していきたいと思います。よろしくお願いいたします。
図面作成の基本手順
この章では、早速ですがAutodesk InventorをAPIで制御する方法を解説します。なお、Autodesk Inventorが必ずインストールされていて、正常に動作する環境であることが前提です。事前にご準備をお願いいたします。
弊社での図面作成の流れ
弊社では、普段はAutodesk InventorとiLogicを使って以下の手順で図面を作成しています。iLogicはAutodesk Inventorに組み込まれた自動化ツールで、部品のサイズや構成を「ルール」として登録し、フォームから値を入力するだけで3Dモデルや図面を自動的に変更・生成できる機能です。プログラミングの専門知識がなくても使えるように設計されており、設計の効率化・標準化・ミスの削減などに役立ちます。
- プロジェクトの作成
Inventor上で、作業用のディレクトリを指定して新しいプロジェクトを作成 - 作業グループの検索パス設定
作成したプロジェクトに対して、必要な検索パス(作業グループ)を設定 - Inventorファイル(.iam)の配置
iLogicのコードや3Dモデルの構成が含まれている.iam
ファイルを、先ほど指定した作業用ディレクトリに配置 - Inventorファイルを開く
Inventor上で.iam
ファイルを開く - 3D図面の作成
iLogicフォームにて、高さ・幅などの寸法を入力し、「ルールの実行」ボタンを押して3Dモデルを生成 - 2D図面への変換
iLogicフォーム上の「図面を開く」ボタンを押して、3Dモデルから2D図面(.idw
ファイル)を自動生成 - スケール・寸法の自動設定
2D図面のiLogicフォーム上の「ルールの実行」ボタンを押すことで、2D図面にスケールを設定し、必要な寸法線を自動で追加 - 2D図面の出力
完成した2D図面を、PDFやDWG形式で出力
上記のように進めることで、効率的に図面を作成しています。ただし、この方法は弊社の運用に基づくものであり、環境や運用に応じて適宜調整してください。なお、今回の解説ではInventorの基本操作やiLogicの使い方の詳細には触れません。今回は、InventorをVBAなどのAPIを通じて自動制御し、図面作成を効率化する方法をお伝えします。次の章では、ソースコードを紹介します。
ソースコード
VBAでの実装
この章ではVBAでの実装方法を紹介します。まずは実装前に「参照設定」から「Autodesk Inventor Object Library」を選択してください。


ソースコードは下記の通りです。注意点などはコメントを参照してください。
Option Compare Database
Option Explicit
Private Sub 図面出力_Click()
Dim destProject As String
destProject = "C:\InventorProjects"
' 代わりに、指定したプロジェクトを名前で検索してアクティブ化
Dim targetProjectName As String
targetProjectName = "プロジェクト名"
Dim wgName As String
Dim wgPath As String
' 新しい検索パスを追加
wgName = "作業グループ" ' 作業グループ名(任意)
wgPath = "C:\作業グループパス\" ' 作業グループのパス
' コピー元ファイルのパス
Dim sourceFile As String
sourceFile = "C:\コピー元パス\product.iam"
' コピー先フォルダ(既にある想定)
Dim destFolder As String
destFolder = "C:\InventorProjects"
' コピー先ファイルのパス(同じファイル名でコピー)
Dim destFile As String
destFile = destFolder & "\product.iam"
' -------------------------------------
' ▼ 注意 ▼
' プロジェクトを新規作成してすぐにiLogicルールを実行すると、内部的にプロジェクト情報がまだ完全に反映されておらず、
' iLogic実行時にエラーが発生することがあります。
' そのため、最初に「SetupInventorProject」だけを実行して、プロジェクトの作成と初期設定を行います。
' その後、もう一度「SetupInventorProject」+「SetUserParamAndRunRule」を実行すると、iLogicルールも問題なく動作します。
'
' このように、プロジェクトの初回セットアップとルール実行は「2段階」に分けることで安定した動作が得られます。
' -------------------------------------
Dim blnCreateProject As Boolean
blnCreateProject = False
'Inventorのプロジェクトを作成
blnCreateProject = SetupInventorProject( _
targetProjectName, _
destProject, _
wgName, _
wgPath, _
sourceFile _
)
If blnCreateProject = False Then
Exit Sub
End If
'Inventorのプロジェクトを作成
blnCreateProject = SetupInventorProject( _
targetProjectName, _
destProject, _
wgName, _
wgPath, _
sourceFile _
)
If blnCreateProject = False Then
Exit Sub
End If
' -------------------------------------
Dim blnRunRule As Boolean
blnRunRule = False
Dim paramNames As Variant
Dim paramValues As Variant
' ユーザーパラメータを設定する
paramNames = Array("Height", "rack1Width", "Depth", "rack1Count", "isMultiRack")
paramValues = Array(90, 90, 45, 4, False)
blnRunRule = SetUserParamAndRunRule(destFile, paramNames, paramValues)
'' 参考文献
'' https://help.autodesk.com/view/INVNTOR/2025/ENU/?guid=DesignProjects_Add
'' https://forums.autodesk.com/t5/inventor-programming-ilogic/change-active-project-file-via-net/td-p/7382988
'' https://help.autodesk.com/view/INVNTOR/2023/ENU/?guid=GUID-B093BC0E-5C79-4A26-A227-83D68D72F341
End Sub
Function SetupInventorProject(projectName As String, projectFolder As String, workgroupName As String, workgroupPath As String, sourceFilePath As String)
'------------------------------------------------------------------------------
' 関数名:SetupInventorProject
' 概要 :指定された名前とパスでInventorのプロジェクトを作成し、
' それをアクティブ化する。さらに、指定された作業グループ
' 検索パスをプロジェクトに追加し、指定されたファイルを
' プロジェクトフォルダにコピーする。
'
' 引数 :
' projectName (String) - 作成またはアクティブ化するプロジェクトの名前
' projectFolder (String) - プロジェクトの保存先フォルダのフルパス
' workgroupName (String) - 作業グループの表示名
' workgroupPath (String) - 作業グループ検索パスの実際のフォルダパス
' sourceFilePath (String) - プロジェクト内にコピーしたい元ファイルのフルパス
'
' 戻り値:あり
'
' 備考 :
' - Inventorが起動していない場合は処理を中断する。
' - すでにプロジェクトが存在する場合は再作成せず、アクティブ化のみを行う。
' - 作業グループパスは重複追加を避けるため、既存のものと照合してから追加。
' - sourceFilePath のファイルが存在しない場合、コピーは実行されない。
'------------------------------------------------------------------------------
' 定数の手動定義(Single User プロジェクト = 12290)
Const kSingleUserProject As Long = 12290
Const kSingleUserMode As Long = 36353
SetupInventorProject = False
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
' Inventorアプリケーションに接続
Dim invApp As Object
On Error Resume Next
Set invApp = GetObject(, "Inventor.Application")
' Inventorが起動していなければ起動する
If invApp Is Nothing Then
Set invApp = CreateObject("Inventor.Application") ' ←ここで起動
If invApp Is Nothing Then
MsgBox "Inventorの起動に失敗しました。", vbCritical
SetupInventorProject = False
Else
invApp.Visible = True ' Inventorのウィンドウを表示
DoEvents ' 起動処理を待つ場合
End If
End If
On Error GoTo 0
' プロジェクトマネージャーの取得
Dim projectManager As Object
Set projectManager = invApp.DesignProjectManager
If Not fso.FolderExists(projectFolder) Then
fso.CreateFolder projectFolder
' 新しいプロジェクトの作成
Dim newProject As Object
Set newProject = projectManager.DesignProjects.Add(kSingleUserMode, "プロジェクト名", projectFolder)
End If
' 代わりに、指定したプロジェクトを名前で検索してアクティブ化
Dim targetProject As Object
Set targetProject = Nothing
Dim proj As Object
For Each proj In projectManager.DesignProjects
If proj.name = projectName Then
Set targetProject = proj
Exit For
End If
Next
If Not targetProject Is Nothing Then
targetProject.Activate
End If
Dim activeProject As Object
Set activeProject = projectManager.ActiveDesignProject
' ======= 作業グループ検索パスがすでに登録済みかチェック =======
Dim existingPath As Variant
Dim alreadyExists As Boolean
alreadyExists = False
For Each existingPath In activeProject.WorkgroupPaths
If StrComp(existingPath.path, workgroupPath, vbTextCompare) = 0 Then
alreadyExists = True
Exit For
End If
Next
' ======= 未登録のときだけ追加 =======
If Not alreadyExists Then
activeProject.WorkgroupPaths.Add workgroupName, workgroupPath
End If
' コピー先ファイルのパス(同じファイル名でコピー)
Dim destFile As String
destFile = projectFolder & "\product.iam"
' ファイルシステムオブジェクトを使ってコピー
If fso.FileExists(sourceFilePath) Then
' ファイルコピー(上書き)
fso.CopyFile sourceFilePath, destFile, True
End If
SetupInventorProject = True
End Function
'------------------------------------------------------------------------------
' 関数名:SetUserParamAndRunRule
' 概要 :指定したInventorアセンブリファイルを開き、
' 引数で与えられた複数のユーザーパラメータに値を設定し、
' iLogicルール "ルールの実行" を実行。
' 処理後、ドキュメントを保存して閉じる。
'
' 引数 :
' docPath (String) - 対象のInventorドキュメントファイルのフルパス
' paramNames (Variant) - 設定対象のパラメータ名の配列
' paramValues (Variant) - 設定値の配列(paramNamesと同じ順番・数)
'
' 戻り値:Boolean - 成功時はTrue、失敗時はFalse
'------------------------------------------------------------------------------
Public Function SetUserParamAndRunRule(docPath As String, paramNames As Variant, paramValues As Variant) As Boolean
On Error GoTo ErrorHandler
Dim invApp As Object
Set invApp = GetObject(, "Inventor.Application")
Dim doc As Object
Set doc = invApp.Documents.Open(docPath)
Dim userParams As Object
Set userParams = doc.ComponentDefinition.Parameters.UserParameters
Dim i As Long
Dim param As Object
For i = LBound(paramNames) To UBound(paramNames)
On Error Resume Next
Set param = userParams.item(paramNames(i))
On Error GoTo ErrorHandler
If param Is Nothing Then
MsgBox "パラメータ '" & paramNames(i) & "' が見つかりません。", vbCritical
GoTo Cleanup
End If
param.value = paramValues(i)
Next i
' iLogicAutomation オブジェクトをアプリケーションから取得
Dim iLogicAuto As Object
Set iLogicAuto = invApp.ApplicationAddIns.ItemById("{3bdd8d79-2179-4b11-8a5a-257b1c0263ac}") _
.Automation
' モデルの更新(ローカル更新)
doc.Update
' ルールを実行(ルール名は固定)
iLogicAuto.RunRule doc, "ルールの実行"
' モデルの更新(ローカル更新)
doc.Update
' ルールを実行(ルール名は固定)
iLogicAuto.RunRule doc, "図面を開く"
' もし上のルールを実行して別のファイルを開いた直後に、最後に開かれたドキュメントを取得(=新しいファイルと仮定)
Dim drawingDoc As Object
Set drawingDoc = invApp.Documents(invApp.Documents.count)
iLogicAuto.RunRule drawingDoc, "ルールの実行"
'=====================
' DWGとしてエクスポート
'=====================
' 図面ファイルと同じフォルダに "export.dwg" を出力
Dim dwgFolder As String
Dim dwgFilePath As String
dwgFolder = Left(drawingDoc.fullFileName, InStrRev(drawingDoc.fullFileName, "\"))
dwgFilePath = dwgFolder & "export" & ".dwg"
' SaveAs メソッドを使用してエクスポート
drawingDoc.SaveAs dwgFilePath, True
'=====================
' PDFとしてエクスポート(警告非表示)
'=====================
Dim pdfFilePath As String
pdfFilePath = dwgFolder & "export" & ".pdf"
' SaveAs メソッドを使用して PDF をエクスポート(警告表示なし)
drawingDoc.SaveAs pdfFilePath, True
' ダイアログを抑制して保存(Save2 を使って強制保存)
drawingDoc.Save2 True
drawingDoc.Close
doc.Save2 True
doc.Close
SetUserParamAndRunRule = True
Exit Function
Cleanup:
doc.Close
SetUserParamAndRunRule = False
Exit Function
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
SetUserParamAndRunRule = False
' 参考文献
'https://www.autodesk.com/jp/support/technical/article/caas/tsarticles/ts/13hZJX2ac2AMMaPc1aKDuP.html
End Function
C#での実装
この章ではC#での実装方法を紹介します。まずは実装前にプロジェクトにカーソルを当てて、右クリックで「追加」から「参照」をクリックしてください。そのあとは「Autodesk Inventor Object Library」を選択してください。



ソースコードは下記の通りです。注意点などはコメントを参照してください。
using Inventor;
using System;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace InventorAutomation
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string destProject = @"C:\InventorProjects";
string targetProjectName = "プロジェクト名";
string wgName = "作業グループ";
string wgPath = @"C:\作業グループパス";
string sourceFile = @"C:\コピー元パス\product.iam";
string destFile = System.IO.Path.Combine(destProject, "product.iam");
// -------------------------------------
// ▼ 注意 ▼
// プロジェクトを新規作成してすぐにiLogicルールを実行すると、内部的にプロジェクト情報がまだ完全に反映されておらず、
// iLogic実行時にエラーが発生することがあります。
// そのため、最初に「SetupInventorProject」だけを実行して、プロジェクトの作成と初期設定を行います。
// その後、もう一度「SetupInventorProject」+「SetUserParamAndRunRule」を実行すると、iLogicルールも問題なく動作します。
//
// このように、プロジェクトの初回セットアップとルール実行は「2段階」に分けることで安定した動作が得られます。
// -------------------------------------
bool blnCreateProject = SetupInventorProject(
targetProjectName,
destProject,
wgName,
wgPath,
sourceFile
);
if (!blnCreateProject) return;
// 再度呼び出し(VBAと同じ動作)
blnCreateProject = SetupInventorProject(
targetProjectName,
destProject,
wgName,
wgPath,
sourceFile
);
if (!blnCreateProject) return;
// -------------------------------------
// ユーザーパラメータを設定する
string[] paramNames = { "Height", "rack1Width", "Depth", "rack1Count", "isMultiRack" };
object[] paramValues = { 90, 90, 45, 4, false };
bool blnRunRule = SetUserParamAndRunRule(destFile, paramNames, paramValues);
// 参考文献
// https://help.autodesk.com/view/INVNTOR/2025/ENU/?guid=DesignProjects_Add
// https://forums.autodesk.com/t5/inventor-programming-ilogic/change-active-project-file-via-net/td-p/7382988
// https://help.autodesk.com/view/INVNTOR/2023/ENU/?guid=GUID-B093BC0E-5C79-4A26-A227-83D68D72F341
}
/// <summary>
/// 指定された名前とパスでInventorのプロジェクトを作成し、
/// それをアクティブ化する。さらに、指定された作業グループ
/// 検索パスをプロジェクトに追加し、指定されたファイルを
/// プロジェクトフォルダにコピーする。
/// </summary>
/// <param name="projectName">作成またはアクティブ化するプロジェクトの名前</param>
/// <param name="projectFolder">プロジェクトの保存先フォルダのフルパス</param>
/// <param name="workgroupName">作業グループの表示名</param>
/// <param name="workgroupPath"> 作業グループ検索パスの実際のフォルダパス</param>
/// <param name="sourceFilePath">プロジェクト内にコピーしたい元ファイルのフルパス</param>
/// <returns>あり</returns>
/// 備考 :
/// - Inventorが起動していない場合は処理を中断する。
/// - すでにプロジェクトが存在する場合は再作成せず、アクティブ化のみを行う。
/// - 作業グループパスは重複追加を避けるため、既存のものと照合してから追加。
/// - sourceFilePath のファイルが存在しない場合、コピーは実行されない。
private bool SetupInventorProject(string projectName, string projectFolder, string workgroupName, string workgroupPath, string sourceFilePath)
{
try
{
const MultiUserModeEnum kSingleUserMode = MultiUserModeEnum.kSingleUserMode;
// Inventorアプリケーションに接続
Inventor.Application invApp;
// Inventorが起動していなければ起動する
SetupInventorProject(out invApp);
// プロジェクトマネージャーの取得
DesignProjectManager projectManager = invApp.DesignProjectManager;
if (!Directory.Exists(projectFolder))
{
// 新しいプロジェクトの作成
Directory.CreateDirectory(projectFolder);
DesignProject newProject = projectManager.DesignProjects.Add(
kSingleUserMode, projectName, projectFolder
);
}
// 代わりに、指定したプロジェクトを名前で検索してアクティブ化
DesignProject targetProject = null;
foreach (DesignProject proj in projectManager.DesignProjects)
{
if (proj.Name == projectName)
{
targetProject = proj;
break;
}
}
if (targetProject != null)
{
targetProject.Activate();
}
DesignProject activeProject = projectManager.ActiveDesignProject;
// ======= 作業グループ検索パスがすでに登録済みかチェック =======
bool alreadyExists = false;
foreach (dynamic existingPath in activeProject.WorkgroupPaths)
{
string path = existingPath.Path;
if (string.Equals(path, workgroupPath, StringComparison.OrdinalIgnoreCase))
{
alreadyExists = true;
break;
}
}
// ======= 未登録のときだけ追加 =======
if (!alreadyExists)
{
activeProject.WorkgroupPaths.Add(workgroupName, workgroupPath);
}
// コピー先ファイルのパス(同じファイル名でコピー)
string destFile = System.IO.Path.Combine(projectFolder, "product.iam");
// ファイルシステムオブジェクトを使ってコピー
if (System.IO.File.Exists(sourceFilePath))
{
System.IO.File.Copy(sourceFilePath, destFile, true);
}
return true;
}
catch (Exception ex)
{
MessageBox.Show("エラー: " + ex.Message);
return false;
}
}
/// <summary>
/// 指定したInventorアセンブリファイルを開き、
/// 引数で与えられた複数のユーザーパラメータに値を設定し、
/// iLogicルール "ルールの実行" を実行。
/// 処理後、ドキュメントを保存して閉じる。
/// </summary>
/// <param name="docPath">対象のInventorドキュメントファイルのフルパス</param>
/// <param name="paramNames">設定対象のパラメータ名の配列</param>
/// <param name="paramValues">設定値の配列(paramNamesと同じ順番・数)</param>
/// <returns></returns>
private bool SetUserParamAndRunRule(string docPath, string[] paramNames, object[] paramValues)
{
try
{
Inventor.Application invApp = (Inventor.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application");
Document doc = invApp.Documents.Open(docPath);
UserParameters userParams = ((AssemblyDocument)doc).ComponentDefinition.Parameters.UserParameters;
for (int i = 0; i < paramNames.Length; i++)
{
try
{
UserParameter param = userParams[paramNames[i]];
param.Value = paramValues[i];
}
catch
{
MessageBox.Show($"パラメータ '{paramNames[i]}' が見つかりません。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
doc.Close(true);
return false;
}
}
// モデルの更新(ローカル更新)
doc.Update();
// iLogicAutomation オブジェクトを取得
ApplicationAddIn iLogicAddin = invApp.ApplicationAddIns.ItemById["{3bdd8d79-2179-4b11-8a5a-257b1c0263ac}"];
if (!iLogicAddin.Activated)
{
iLogicAddin.Activate();
}
object iLogicAuto = iLogicAddin.Automation;
// InvokeMember を使ってルールを実行
iLogicAuto.GetType().InvokeMember(
"RunRule",
BindingFlags.InvokeMethod | BindingFlags.Public,
null,
iLogicAuto,
new object[] { doc, "ルールの実行" }
);
// モデルの更新(ローカル更新)
doc.Update();
// ルールを実行(ルール名は固定)
iLogicAuto.GetType().InvokeMember(
"RunRule",
BindingFlags.InvokeMethod | BindingFlags.Public,
null,
iLogicAuto,
new object[] { doc, "図面を開く" }
);
// 最後に開いたドキュメントを取得(新しく開いたと仮定)
DrawingDocument drawingDoc = null;
int docCount = invApp.Documents.Count;
Document latestDoc = invApp.Documents[docCount]; // 1-based index
drawingDoc = latestDoc as DrawingDocument;
if (drawingDoc == null)
{
Console.WriteLine("DrawingDocument ではありません。");
return false;
}
// iLogicルール実行
iLogicAuto.GetType().InvokeMember(
"RunRule",
BindingFlags.InvokeMethod | BindingFlags.Public,
null,
iLogicAuto,
new object[] { drawingDoc, "ルールの実行" }
);
// ファイルパス設定
string fullPath = drawingDoc.FullFileName;
string folderPath = System.IO.Path.GetDirectoryName(fullPath);
string dwgFilePath = System.IO.Path.Combine(folderPath, "export.dwg");
string pdfFilePath = System.IO.Path.Combine(folderPath, "export.pdf");
// DWGエクスポート
drawingDoc.SaveAs(dwgFilePath, true);
// PDFエクスポート
drawingDoc.SaveAs(pdfFilePath, true);
// 保存してクローズ
drawingDoc.Save2(true);
drawingDoc.Close(true);
doc.Save2(true);
doc.Close(true);
return true;
}
catch (Exception ex)
{
MessageBox.Show("ルール実行エラー: " + ex.Message);
return false;
}
// 参考文献
// https://forums.autodesk.com/t5/autodesk-community-tips-adnopun/inventor-2025de-net-frameworkwotagettonishitebirudoshitac/ta-p/13032752
}
/// <summary>
/// Inventor アプリケーションオブジェクトを取得または起動するメソッド。
/// 起動済みであれば既存のインスタンスに接続し、未起動であれば新しく起動する
/// </summary>
/// <param name="invApp">取得または起動した Inventor アプリケーションインスタンス</param>
private void SetupInventorProject(out Inventor.Application invApp)
{
invApp = null;
try
{
// 既に起動しているInventorに接続
invApp = (Inventor.Application)Marshal.GetActiveObject("Inventor.Application");
}
catch (COMException)
{
// 起動していなければ新しく起動する
try
{
Type inventorAppType = Type.GetTypeFromProgID("Inventor.Application");
invApp = (Inventor.Application)Activator.CreateInstance(inventorAppType);
if (invApp != null)
{
invApp.Visible = true;
}
}
catch (Exception)
{
MessageBox.Show("Inventorの起動に失敗しました。");
}
}
}
}
}
最後に
今回は、VBAとC#を使ってAutodesk InventorをAPIで制御する方法をご紹介しました。図面作成の流れについても、弊社で実際に運用している方法を中心に解説しましたが、図面のルールなどは会社ごとに異なるケースも多いため、実際の現場では各社の運用に合わせて調整していただければと思います。
VBA・C#でのAPI制御も一定の難易度はありましたが、個人的にもっとも苦労したのは、iLogicを用いた3Dモデルおよび2D図面の自動化です。特に2D図面については、これまで長年、手動で調整してきた背景があり、下記のような課題に直面しました。
- 寸法が正常に表示されないことがある
- アイソメ図(等角投影図)が三面図の配置が重なってしまう
- スケールが適切でなく、モデルが枠からはみ出る
- 手作業でAutoCAD上で修正していたため、自動化しにくい構造だった
こうした課題に対応するため、iLogicのロジックを見直し、図面自体を自動化に対応できるように再設計する必要がありました。もし図面の自動化を検討している場合は、iLogic側の作り込みも合わせて見直すことをおすすめします。
また、実際に取り組んでいて感じたことですが、Autodesk Inventorは比較的高価な商用ソフトウェアです。現在以下の料金プランがあります。
- 年間プラン:¥402,600(税込)
- 月間プラン:¥50,600(税込)
さらに、1ライセンスにつき1台のPCでしか使えないため、複数人での活用にはそれなりのコストがかかります。
このような背景から、今後は FreeCAD や Blender といった、オープンソースソフトウェア(OSS)にも注目していきたいと考えています。OSSの魅力は、誰でも無料、または低価格で使えることに加えて、ソースコードの改変や再配布が可能な点です(※商用利用時はライセンス確認が必要です)。これらのソフトもAPIによる制御が可能なものが多く、機能的にも年々進化しています。
今後のブログでは、そういったOSSを使った自動化の方法なども、機会があれば紹介できたらと考えています。最後までお読みいただき、ありがとうございました。それでは、また次回のブログでお会いしましょう!
参考文献
Autodesk Inventor ソフトウェア | Inventor 2026 の価格と購入(公式ストア)
オープンソース(OSS)とは?知っておくべきポイント・注意点・リスク – カゴヤのサーバー研究室
Change active Project file via .net – Autodesk Community
Inventor 2025 Help | DesignProjects.Add Method | Autodesk
Inventor 2023 Help | DesignProjectManager.ActiveDesignProject Property | Autodesk
Inventor APIでiLogicを実行する方法 | Autodesk
Inventor 2025 ヘルプ | iLogic の機能の概要 | Autodesk
このカテゴリの最新記事
2023.11.09
2024.06.07
2024.07.16
2024.04.03