iLogic コード ブロック
~ Inventor 2027 新機能 iLogic コード ブロック をさわってみた!~
今回のテーマは「iLogic コード ブロック」!
iLogic のコード ブロック は Inventor 2027 の新機能で、処理を「意味ごとのまとまり」に分けて視覚的に組み立てられる機能です。従来のようにすべてを VB コードで書くのではなく、条件分岐や繰り返し処理および変数設定などをブロックとして配置し、流れを直感的に構築できます。
各ブロックは役割がはっきりしているため「どこで何をしているのか」が一目で分かり、初心者でも処理の流れを追いやすいのが特徴です。また、ブロック単位で追加・削除・並べ替えができるので、修正や試行錯誤もしやすくなります。
そこで今回は、「テキスト」(通常の iLogic ルール エディタで作成したコード)で作成したルールを題材に「コード ブロック」で作成する方法をご紹介します。
1. パラメータ値の入力制限による条件分岐ルールの作成例

以下は、通常の iLogic ルール エディタで作成したコードです。
' 幅の制限
If Width < 20
Width = 20
MessageBox.Show("このパラメータの最小値: " & Width & vbCr & "値は自動的に最小値に修正されます。", "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
ElseIf Width > 100 Then
Width = 100
MessageBox.Show("このパラメータの最大値: " & Width & vbCr & "値は自動的に最大値に修正されます。", "最大値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
以下に、iLogic コード ブロックで作成する流れをご説明します。
下のボタンから、必要事項をご記入いただくと動画でも見ることができます。
動画の手順は、以降に記載した手順と一部異なる部分がございます。予めご了承ください。


'ここにコメント

' 幅の制限


' 幅の制限
If False Then
End If


' 幅の制限
If False Then
ElseIf False Then
End If
論理ブロック


RuntimeUtils.AddGetParameterTriggers({Width})
' 幅の制限
If 0 = 0 Then
ElseIf False Then
End If

RuntimeUtils.AddGetParameterTriggers({Width})
' 幅の制限
If 0 < 0 Then
ElseIf False Then
End If
条件左側:パラメータ ブロック


RuntimeUtils.AddGetParameterTriggers({Width})
' 幅の制限
If Parameter() < 0 Then
ElseIf False Then
End If

RuntimeUtils.AddGetParameterTriggers({Width})
' 幅の制限
If Parameter.ValueForEquals("Width") < 0 Then
ElseIf False Then
End If
条件右側:数値ブロック


RuntimeUtils.AddGetParameterTriggers({Width})
' 幅の制限
If Parameter.ValueForEquals("Width") < 123 Then
ElseIf False Then
End If

RuntimeUtils.AddGetParameterTriggers({Width})
' 幅の制限
If Parameter.ValueForEquals("Width") < 20 Then
ElseIf False Then
End If
パラメータ ブロック


RuntimeUtils.AddGetParameterTriggers({Width})
' 幅の制限
If Parameter.ValueForEquals("Width") < 20 Then
Parameter() =
ElseIf False Then
End If

RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 1
ElseIf False Then
End If

RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
ElseIf False Then
End If
メッセージ ボックス ブロック


RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show("メッセージ", "タイトル")
ElseIf False Then
End If

RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show("メッセージ", "最小値ルール")
ElseIf False Then
End If
メッセージ ボックス ブロック▶テキスト結合ブロック


RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {}), "最小値ルール")
ElseIf False Then
End If
メッセージ ボックス ブロック▶テキスト結合ブロック▶テキスト ブロック


RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {""}), "最小値ルール")
ElseIf False Then
End If

RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値"}), "最小値ルール")
ElseIf False Then
End If
メッセージ ボックス ブロック▶テキスト結合ブロック▶パラメータ取得ブロック


RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値"}), "最小値ルール")
ElseIf False Then
End If
Parameter.ValueForEquals("Width")

RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width"))}), "最小値ルール")
ElseIf False Then
End If
VB コード ブロック


RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
ここにコーディング
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width"))}), "最小値ルール")
ElseIf False Then
End If
| crlf | この iLogic ルール内の変数 |
| vbCrLf | VB で使用される、テキスト内で改行を行うための定数 |

RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width"))}), "最小値ルール")
ElseIf False Then
End If
タイプ設定変数

①[名前]を入力:「crlf」
②[タイプ]を選択:「テキスト」
③[OK]をクリック


メッセージ ボックス ブロック▶テキスト結合ブロック▶変数ブロック


Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf}), "最小値ルール")
ElseIf False Then
End If
メッセージ ボックス ブロック▶テキスト結合ブロック▶テキスト ブロック


Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, ""}), "最小値ルール")
ElseIf False Then
End If

Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール")
ElseIf False Then
End If
メッセージ ボックス ブロック▶ボタンとアイコン
① メッセージ ボックス ブロックの一番右にある[+]をクリック
② ボタン選択:[OK]

Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール", MessageBoxButtons.OK)
ElseIf False Then
End If
① メッセージ ボックス ブロックの一番右にある[+]をクリック
② アイコン選択:「エラー」

Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
ElseIf False Then
End If


Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
ElseIf False Then
End If
Parameter.ValueForEquals("Width") < 20

Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
ElseIf Parameter.ValueForEquals("Width") < 20 Then
End If

Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
ElseIf Parameter.ValueForEquals("Width") > 20 Then
End If

Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
ElseIf Parameter.ValueForEquals("Width") > 100 Then
End If


Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
ElseIf Parameter.ValueForEquals("Width") > 100 Then
End If
Parameter("Width") = 20

Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
ElseIf Parameter.ValueForEquals("Width") > 100 Then
Parameter("Width") = 20
End If

Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
ElseIf Parameter.ValueForEquals("Width") > 100 Then
Parameter("Width") = 100
End If


Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
ElseIf Parameter.ValueForEquals("Width") > 100 Then
Parameter("Width") = 100
End If
MessageBox.Show(String.Join("", {"このパラメータの最小値", Parameter.ValueForEquals("Width"), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)

Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
ElseIf Parameter.ValueForEquals("Width") > 100 Then
Parameter("Width") = 100
MessageBox.Show(String.Join("", {"このパラメータの最小値", Parameter.ValueForEquals("Width"), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If

Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
ElseIf Parameter.ValueForEquals("Width") > 100 Then
Parameter("Width") = 100
MessageBox.Show(String.Join("", {"このパラメータの最大値", Parameter.ValueForEquals("Width"), crlf, "値は自動的に最大値に修正されます。"}), "最大値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値: ", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
ElseIf Parameter.ValueForEquals("Width") > 100 Then
Parameter("Width") = 100
MessageBox.Show(String.Join("", {"このパラメータの最大値: ", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最大値に修正されます。"}), "最大値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
2. 「iLogic テキスト」と「iLogic コード ブロック」の比較
上記で作成した「パラメータ値の入力制限による条件分岐コード」を例に比較しました。
| 比較項目 | iLogic テキスト | iLogic コード ブロック |
|---|---|---|
| コード | <下記参照> | <下記参照> |
| コードの読みやすさ | 読みやすい 読みやすくコーディングすることが可能 | 比較的読みにくい |
| コードの直接編集 | 可 | 不可 必ずコード ブロックを編集する必要がある |
| コード ブロック | 不可 | 可 |
| ウィザード | ある [メッセージ ボックス]や[パラメータ制限]など | ない コード ブロックはウィザード不要で構築する形式 |
| 作成時間 | 慣れると最短 ウィザードなら誰でも最短 | 試行錯誤しやすいがやや時間がかかる場合あり |
| 実行結果 | 違いなし | |
| 実行速度 | 違いなし(体感) | |
' 幅の制限
If Width < 20
Width = 20
MessageBox.Show("このパラメータの最小値: " & Width & vbCr & "値は自動的に最小値に修正されます。", "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
ElseIf Width > 100 Then
Width = 100
MessageBox.Show("このパラメータの最大値: " & Width & vbCr & "値は自動的に最大値に修正されます。", "最大値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Dim crlf As String
RuntimeUtils.AddGetParameterTriggers({Width})
RuntimeUtils.AddSetParameterTriggers({Width})
' 幅の制限
crlf = vbCrLf
If Parameter.ValueForEquals("Width") < 20 Then
Parameter("Width") = 20
MessageBox.Show(String.Join("", {"このパラメータの最小値: ", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最小値に修正されます。"}), "最小値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
ElseIf Parameter.ValueForEquals("Width") > 100 Then
Parameter("Width") = 100
MessageBox.Show(String.Join("", {"このパラメータの最大値: ", StringRuntime.ToString(Parameter.ValueForEquals("Width")), crlf, "値は自動的に最大値に修正されます。"}), "最大値ルール", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
3. まとめ
iLogicの「テキスト」と「コード ブロック」は、どちらも同じ処理を実現できますが、使い勝手に違いがあります。
テキストは自由度が高く、慣れてくると効率よくコーディングできるのが強みです。一方で、コードの理解にはある程度の知識が必要になります。
コード ブロックは、処理の流れを視覚的に組み立てられるため、初心者でも直感的に理解しやすいのが特徴です。ただし、細かい制御や高度な処理には向かない場合があります。
そのため、
「簡単な処理や理解重視ならコード ブロック」
「柔軟な制御や効率重視ならテキスト」
と使い分けるのがおすすめです。
現バージョン(Inventor 2027)では、コード ブロックで全体像を作り、必要に応じてテキスト(VBコード)で補う使い方が実用的と言えそうです。
いずれにしても、コード ブロックはまだ登場したばかりの機能のため、今後の Autodesk によるブラッシュアップに期待したいところです。

