【Inventor】iLogicで別ルール内のクラスを読み込む方法
今回はInventor内でvb.netのコードを作動させることのできるiLogic内で、特定のルール上から別のルール内に作成したクラスのプロシージャを呼び出す方法を説明していきます。
環境
- Autodesk Inventor Professional 2025
アセンブリ上のiLogicで別ルールを呼び出し、パーツを配置するスクリプト
構成
| ルール名 | 機能 |
| ルール1 | パーツの配置 |
| ルール2 | 呼び出すパーツの指定、ルール1の呼び出し |
ルールを2つ作成し、ルール1内にパーツを追加するプロシージャを作成、ルール2でそのプロシージャを呼び出します。
ルール1

ルール1を作成し開いたら、コードを入力する前にエディター上部からオプションタブを開き「そのままのVBコード」にチェックを入れます。
Imports Inventor
Class PlacePartClass
Function PlacePart(oApp As Application, sFilePath As String) As ComponentOccurrence
Dim oDoc As AssemblyDocument = oApp.ActiveDocument
Dim oCompDef As AssemblyComponentDefinition = oDoc.ComponentDefinition
Dim oOccs As ComponentOccurrences = oCompDef.Occurrences
Dim oTG As TransientGeometry = oApp.TransientGeometry
Dim oMatrix As Matrix = oTG.CreateMatrix
Dim oPart As ComponentOccurrence
oPart = oOccs.Add(sFilePath, oMatrix)
Return oPart
End Function
End Class「そのままのVBコード」にチェックを入れていない場合、Imports Inventorを記入しなくても自動でImportsされますが、チェックを入れている場合は記入が必要になります。
Applicationは「そのままのVBコード」にチェックを入れている場合、取得方法が不明(iLogicやInventor APIでの取得方法では取得出来ない)為、ルール2から受け渡します。
アセンブリ内にパーツを配置するには、Document.ComponentDefinition.ComponentOccurrences.Add(<ファイルのパス>, <ポジション>)メゾッドが必要になります。ファイルのパスはString形式で.iptファイルか.iamファイルのパスを指定します。ポジションはMatrixオブジェクトを指定します。Matrixオブジェクトを作成するにはApplication.TransientGeometry.CreateMatrix()メゾッドを使用します。ComponentOccurrences.Addメゾッドで指定するポジションは3DCADで一般的に行われる面拘束のようなものではなく、あくまでパーツを追加する際の初期座標を指定するものなので、Matrix自体の調整は基本的に必要ありません。
配置されたパーツはComponentOccurrence型でComponentOccurrences内に追加されます。
ルール2
AddVbRule "ルール1"
Class RunRuleClass
Dim rule1 As New PlacePartClass
Sub main()
Dim oApp As Application = ThisApplication
Dim oDoc As Document = oApp.ActiveDocument
Dim sFilePath As String
sFilePath = System.IO.Path.GetDirectoryName(oDoc.FullFileName) & "\Part1.ipt"
Dim oPart = rule1.PlacePart(oApp, sFilePath)
logger.info(oPart.Name)
End Sub
End Classルール2では「そのままのVBコード」にチェックを入れず、AddVbRule “ルール名”でルールをインポートし、dim 変数名 as New クラス名で宣言すればプロシージャを呼び出せます。
動作確認の為、ルール1のファンクションから戻り値でComponentOccurrence型のパーツを受け取り、ComponentOccurrence.Nameでアセンブリ内のパーツ名をlogger.infoによりInventor内のログに出力しています。実際に使用する際には拘束設定をする別ルールを用意したりすることになるかと思います。
動作確認

ルール2を一度実行するとアセンブリ内にPart1:1というパーツが追加され、iLogicログにパーツ名が出力されます。再度実行した場合はPart1:2というパーツが追加されログに出力されます。配置されたパーツの名称は、通常のボタン操作でパーツを配置した際と同じく自動で番号を振られリネームされます。任意で変更したい場合はルール内にoPart.Name = <パーツ名>と追加すれば変更できます。また、アセンブリ内に最初に配置されたパーツは、配置位置を自動で固定されてしまいますが、これはoPart.Grounded = falseと追加すれば固定を解除することが出来ます。
iLogic上で「そのままのVBコード」にチェックを入れるとInventor APIでdllを作成した際の挙動に近い動きをしますが、若干違う部分があるのでルール作成する際は注意してください。