iLogic とは?
多くの場合、何らかのタイプのデスクトップ アプリケーションを使用しているユーザーは、自動化とは何であるかを理解しています。Microsoft Excel を使用したことがある方は、マクロについてご存知かもしれません。マクロは、特定のタスクを実行するために Excel 内で開発、設計されるツールです。自動化には多種多様な形がありますが、本質的には、特定のタスク、プロセス、または機能を自動的に実行するための 1 つのツールまたは一連のツールであるという意味で、Inventor の自動化機能は、マクロと非常によく似ています。iLogic は Inventor の自動化機能の一つの形です。
ユーザーと管理者は、Inventor の機能の一つである iLogic を使用して VB.NET の形式でロジックを作成することで、タスクを実行することができます。スニペットやその他のコード記述ステートメントを使用してルールを開発、編成し、指定した時間にタスクを実行して、エンジニアや設計者が行う必要のある作業の一部を一貫して行います。
一連の iLogic ルールを開発することで、さまざまなモデル基準に基づいて iProperty を更新したり、iLogic フォームで選択に基づいてアセンブリ内のコンポーネントを置き換えたり、さらには、関連付けられた図面内のテキスト ブロックを更新したりすることができます。iLogic でできることは数えきれないほどあります。問題は、それを使って何をしたいかということです。
iLogic を導入すべき理由とは?
iLogic の内容を理解したら、次に、なぜ設計プロセスに iLogic を導入することが推奨されるかを考えてみましょう。
世界中の大手/中小規模の製造会社と仕事をし、多くの種類の製品の加工、製造に携わってきた経験から、私は常に一つの真実があることに気づいたのです。それは、どのような環境においても、いくつかのパターンと反復可能なプロセスがあるということです。重要なことは、iLogic がサポートできるプロセスを見つけることです。この単純な作業を行うには、Inventor が作業プロセスの中でどのような役割を担っているかを熟知している必要があります。
たとえば、3D モデルの iProperty の記述や、何らかの iProperty に特定のフォーマットを使用しているとします。フォーマットが予測可能で、標準化されているのであれば、その領域に iLogic を活用できます。ロジックを開発してモデルから情報を収集し、その情報を変換して、新たにフォーマットされた正しい情報で iProperty を上書きすることができます。その情報は常に正しく、常に一貫性があるため、分断された情報をすり合わせる手間もなくなります。
関連資料(英語): Taking It to the Next Level: Drawing Automation with Autodesk Inventor(作業プロセスを次のレベルへ:Autodesk Inventor による図面作成の自動化)、Thomas Fitzgerald 著
Inventor を設定して iLogic を使用する
Inventor で iLogic を効率的に使用するために必要な設定とは何か?
iLogic は Inventor に含まれており、すぐに作成して使用することができますが、それに際して、iLogic を最大限に活用するためにいくつかの設定が必要であることを理解しておくと役立ちます。[iLogic 環境設定]ボタンを使用して、さまざまな設定を構成し、Inventor がサポート情報を検索する場所を定義することができます。
ユーザーと管理者は、これらの設定を変更して、Inventor が検索する外部ルール ディレクトリの場所、およびそれらのディレクトリの優先順位を制御できます。また、ユーザーは、Inventor が DLL (ダイナミック リンク ライブラリ)を検索するディレクトリの場所を定義することもできます。DLL は、カスタムのユーザー インターフェイスの開発用に Microsoft Visual Studio から出力されるライブラリであり、iLogic ルールとその他のロジックを駆動およびトリガーします。
設定ダイアログ ボックスでは、外部ルールを保存する際のファイル拡張子と、デバッグ情報を生成できるデフォルトのログ レベルを設定することができます。また、Inventor の環境内で実行される潜在的に危険なコードからコンピュータとネットワーク システムを保護するための[セキュリティ オプション]設定もあります。外部ルールとデバッグについては、この文書の後半でさらに詳しく説明します。
内部ルールと外部ルール
どちらのルールを、いつ使用すべきですか?
iLogic ルールは、内部ルールと外部ルールの 2 種類で構成されます。どちらのタイプのルールも、Inventor のコンテキスト内で iLogic ブラウザで同じように作成されます。
内部ルールは、ファイルのコンテキスト内に作成され、保存されるルールです。パーツ、アセンブリ、図面のすべてのファイルには、それぞれのファイルに異なる影響を与えるルールを保存、コンパイル、実行する機能があります。外部ルールは、ほぼ同じものですが、Inventor のファイル内には保存されません。内部ルールはファイル内に保存されるため、それらのファイルへの権限を持つユーザーに公開され、アクセス可能となります。外部ルールはユーザーのシステムのローカル フォルダ、または中央サーバーに格納され、地理的な制約を受けません。
外部ルールはファイル内ではなくフォルダに保存されるため、より高いレベルのセキュリティが適用されることになります。もちろん、ユーザーはルール コードを開いて確認できますが、システム管理者は外部ルールのフォルダにフォルダ権限を設定することで、アクセスと編集の権限を制御できます。このことから、設計プロセスにおいて多数のユーザーがコードを実行する可能性のあるエンタープライズ環境では、外部ルールを使用することが推奨されます。権限を管理する必要がない条件下、あるいは複数のユーザーが同時にルールのロジックを利用する必要がない場合は、おそらく内部ルールで十分でしょう。
どちらのタイプのルールも、以下の画像のように iLogic ブラウザ内で確認できます。
どちらのタイプのルールも、右クリックすると、ルールの省略または省略解除などのフィーチャを制御してトリガーのタイミングを制御したり、ルールを削除したり、リストから削除したりすることができます。
パラメータとプロパティ
これらを使用するには?
Autodesk Inventor は、「3D パラメトリック設計アプリケーション」です。どういう意味でしょうか。パラメータとは、特定の型の値を表すプレース ホルダです。Inventor のパラメータの多くは数値型であり、ジオメトリを制御する寸法に関連付けられています。パラメータ値が変更されると、それらのパラメータに関連付けられている寸法も変更され、モデルが視覚的に更新されます。Inventor には、基本的に 4 種類のパラメータがあります。
1) モデル パラメータ
2) ユーザ パラメータ
3) 参照パラメータ
4) リンク パラメータ
モデル パラメータは、Inventor の通常の動作によって作成されるパラメータです。[パラメータ]ダイアログ ボックスで、これらのパラメータには自動的に d0、d1、d2 のような名前が付けられます。モデル パラメータは Inventor によって制御されます。すなわち、システムによって、必要に応じて作成、削除されます。
ユーザ パラメータは、ユーザーによって作成されるパラメータです。それらは数値、テキスト、文字列、または True/False、ブーリアンのいずれかです。ユーザ パラメータは、ユーザーが作成するパラメータであるため特に重要です。さまざまなフィーチャや iLogic コードによって使用され、Inventor の通常の動作で作成されたり削除されることはありません。
注:iLogic ルールでパラメータ情報を使用する場合、命名規則と型を適用してユーザ パラメータを作成する方法が推奨されます。モデル パラメータの名前を変更することも可能ですが、推奨される方法ではありません。
参照パラメータは、Inventor で被駆動寸法を定義する際に作成されます。スケッチ環境で作業しているときに、以下に示すダイアログ ボックスが表示されることがあります。
ここで[適用]を選択すると、参照パラメータが作成されます。[パラメータ]ダイアログ ボックスでは、パラメータの名前と値が表示されますが、値を変更することはできません。名前を変更することは可能であり、iLogic コードで値を使用する際に役立ちます。
リンク パラメータは、通常は Excel スプレッドシートなどから Inventor にリンクされるパラメータです。ユーザーが Excel スプレッドシートで名前や値を更新すると、それらの変更内容が Inventor に反映され、その結果、寸法値の駆動、フィーチャの制御、アセンブリの管理などが行われます。
プロパティ(Inventor の用語では iProperty)は、ファイルに関する追加の記述子やその他の重要な情報です。これはメタデータと呼ばれることもあります。プロパティは新しいものではありませんが、ファイルに関する多くのデータを収集する際に非常に役立ちます。ファイル名、ファイル サイズ、作成者、変更日といった項目はすべてプロパティです。iLogic と Inventor のファイル データを使用して作業する際、多くの場合は、ファイル名とファイル パスの 2 つは最も一般的に使われるプロパティです。部品番号、ストック番号、説明、質量、コスト、カスタム プロパティなどもよく使われるプロパティです。すべてのプロパティは読み取り可能で、大半のプロパティは書き込み可能です。
変数の宣言、型変換、共有変数
コーディングに関するこれらの専門用語の重要性とは?
iLogic はコードであり、明確でシンプルです。ユーザーはプログラマーである必要はなく、コードの記述方法を知っている必要もありませんが、コーディングのベスト プラクティスの基本を理解しておくことには大きな意味があります。それは、プログラマーであれば誰もが理解できるいくつかの標準があるためです。変数の宣言と型変換は、それらの標準の一つです。これらはなぜ重要なのでしょうか。つまり、私たちが言葉を話すのと同じです。標準を用いることで読みやすいロジックを書くことができます。
変数の宣言と型変換
変数の宣言は、とても簡単ですiLogic では、単に名前を書いて値を指定するだけです。
Length = 20
変数を作成したら、それを使用して何かを行うことができます。値を読み取って計算で処理したり、値に書き込んで何か他の内容を更新したりできます。iLogic で名前と値のペアを入力することは可能ですが、コード記述のベスト プラクティスを活用したより良い方法は、名前を入力し、それに対して「型」を指定し、その後に値を指定することです。
Dim Length As Double = 20
このように記述すると、iLogic は Double(浮動小数)型の値のみを保持する変数を作成し、値を入力します。これは型変換と呼ばれます。これにより、その変数に対して特定の値のみが入力されるようにすることができます。String(文字列)または Text(テキスト)の値を Length(長さ)型の変数に入力しても、コードは機能しません。型を指定することで、ルール内でより複雑なコードを使用できるようになるだけでなく、情報の流れを理解して視覚化できるというメリットもあります。たとえば、数学的な計算を行うルールの中にステートメントを記述していて、エラーが発生した場合は、使用している String 型の変数には問題がないと考えることができます。
変数の宣言と型変換の例を以下に示します。
Dim cylinderHeight As Double = Parameter("CylinderHeight")
Dim fileName As String = "This is a string value!"
Dim holeCount As Integer = 2
Dim occurrenceName As String = String.Empty
Dim plateWidth As Double = Nothing
最後の 2 つの例では、値を指定しておらず、空の値または何もない状態です。変数を宣言する必要があっても、その時点ではまだ値が分からないという状況もあります。この場合、変数を宣言し、型変換し、イコール記号の右側に何かを指定することで、一貫性を保持できます。これは、コードをデバッグして、値がプログラムによって入力されるかどうかを確認するのにも役立ちます。
注意して見てみると、最初の例では、変数を宣言し、型変換し、その値がユーザ パラメータの値と同一になるように設定していることに気付くでしょう。この方法は、計算に必要なロジックを構築したり、他のコンストラクタに値を渡したり、他のパラメータを操作したりする際に役立ちます。また、コードにおいてユーザ パラメータの値が必要な時に、その値を瞬時に取得したり設定したりする必要がある場合にも便利です。iLogic を初めて使用するユーザーがルールを実行する際に、特定の動作を予測していながら、Inventor が一歩「遅れて」いるように見えるという問題に遭遇する理由はここにあります。次の例を見てください。
cylinderHeight = CylinderHeight
Dim cylinderHeight As Double = Parameter("CylinderHeight")
これらの両方のステートメントは動作が同じように見えますが、正確には異なります。最初の例で宣言した変数は、ユーザ パラメータと同一の値であれば、どのような型の値でも持つこともできます。文字の色が青なので、Inventor はこのユーザ パラメータを認識しています。Inventor はこのユーザ パラメータを認識しているため、この形式を使用して省略解除されているルールは、自動的に実行されることになります。このような方法でルールを実行したくない場合もあるでしょう。
また、この変数には、前回の更新時のユーザ パラメータの値が設定されることになります。この変数に格納された前回更新時の値が使用されるときまでに、ロジックによってユーザ パラメータの値が変更されてしまうと、最新の値が使用されないことになります。このような場合は更新が必要になり、場合によっては、正しい結果を得るために何度も更新を実行することが必要になります。
このような問題を解決する方法は 2 つあります。第一に、2 番目のステートメントを使用します。変数を宣言し、型変換し、Parameter 関数を指定することで、ユーザ パラメータの値が直接設定されるため、確実に最新の値を使用することができます。これにより、ルールを実行するタイミングを細かく制御することもできます。2 つ目は、iLogic スニペット RuleParametersOutput() を使用する方法です。このスニペットによりすべてのユーザ パラメータが最新の状態になります。続いて、更新を行い、関連付けられたモデルについても最新の状態を確保します。
共有変数
これまでは変数に関するコーディングについて説明しましたが、共有変数は iLogic のフィーチャの一つです。iLogic のルール内に変数を宣言する際、その変数はそのルールのコンテキスト内においてのみアクセス可能です。変数を作成し、その値を設定して多数のルール内で使用する必要がある場合、それを解決するのが共有変数です。
iLogic のルール エディタの[スニペット]パネルを開くと、[変数]インデックスの下に、共有変数関数があります。
共有変数を使用するには、他の変数を宣言する場合と同様の手順を踏襲します。まず、共有変数を宣言し、共有変数の名前を指定し、値を入力します。値には、スタティック値や、他の変数、パラメータ、またはプロパティの値を指定することもできます。
SharedVariable("VariableName") = "This is the value" SharedVariable("cylinderHeight") = Parameter("CylinderHeight")
共有変数が宣言され、値が入力されると、必要に応じて使用、更新できるようになります。
Dim cylinderHieght As Double = SharedVariable("cylinderHeight")
他の共有変数関数を使用して、共有変数が存在するかを確認したり、メモリからあらゆる共有変数を削除したりします。
条件式とループ
常に人間が決定する必要がありますか?
Inventor の通常の操作では、グラフィック ウィンドウを見て、ジオメトリを選択し、それをどうするかを決めることができます。アセンブリでは、コンポーネントが互いに関連する仕組みを理解することができます。iLogic のルールを検討するようになると、設計内に存在しうるさまざまな条件を理解し、意思決定の道筋を明確にする必要が出てくることがあります。iLogic はさまざまな条件を定義する式を使用できるため、こうしたタスクを達成する手段となります。
最も一般的な条件式は、If Then 式です。たとえば、次のように使用します。
If someValue = True Then
'何かを実行
Else
'他の何かを実行
End If
このコードは、ある条件が存在するかどうかを確認し、条件が存在する場合に何かを実行します。条件が存在しない、または別の条件が存在する場合は、何か他のことを実行します。この機能を以下のように拡張することで、いくつもの条件を確認することができます。
If someValue = True Then
'何かを実行
ElseIf someValue = False Then
'他の何かを実行
ElseIf someValue = Nothing Then
'さらに他の何かを実行
End If
これは一見簡単そうで完全に理にかなっているように見えますが、限界があります。この条件が無限に続くことは容易に予測できますが、ある時点を過ぎると実際に何が起こっているのかわからなくなり、特に演算子を追加し始めると紛らわしくなります。条件が 3 つか 4 つまでならこの方法で良いですが、それ以上の場合は、他の方法が適切だと考えられます。
もう一つの一般的な条件式に、Select Case メソッドがあります。仕組みは同じですが、読みやすく、理解しやすく、そして何より、記述するコードは少なくて済みます。Select Case は以下のように使用します。
Select Case someValue
Case True
'何かを実行
Case False '他の何かを実行
Case Nothing
'さらに他の何かを実行 End Select
ご覧の通り、理解しやすく、適用する条件を増やすことがとても簡単です。
コーディングにおける最も重要な方法論の一つに、ループの概念があります。例として、アセンブリ内を反復処理してオカレンスの名前を取得する場合、オカレンスの総数を知らなくても、ループを使用することですべてのオカレンスを処理することができます。コードを書いてロジックを作成する場合、パターン、一貫性、予測可能性を考慮することが重要です。それでも、ときには、予測不可能な状況に使用できるメソッドが必要になります。そのような場合にループを使用します。For Next Loop の例を以下に示します。
Dim counter As Integer = 3
For t As Integer = 1 To counter
MessageBox.Show("Number of Iterations: " & t)
Next
この例では、ループの始点として 1 を定義しています。ループの終点として定義した counter は 3 に設定しています。つまり、このループは 3 回反復を行い、メッセージ ボックスを表示します。ループの終点を把握していない場合は、コレクション内のアイテムを数えて、それを終点にすることができます。以下の例をご確認ください。
Dim items As New List(Of String)
items.Add("Pizza")
items.Add("Sandwich")
items.Add("Milk")
items.Add("Eggs")
For i = 0 To (items.Count - 1)
MessageBox.Show(items(i))
Next
この例では、コレクションを作成し、そのコレクションに情報を入力し、コレクションに含まれるアイテムの数と同じ数だけ反復処理を行うようにループを設定しています。お気づきのように、ループは 0 で始まり、count - 1 で終了しています。このような場合、インデックスを理解することが重要になります。インデックスは、あくまで開始点を指定するだけです。通常は 0 か 1 になります。このタイプのコレクションでは、リストの最初のアイテムは、実際には 1 ではなく 0 から始まっています。
Thomas Fitzgerald 氏は、Inventor での自動化とデータ管理を専門とするシニア インプリメンテーション コンサルタントです。Fitzgerald 氏は、大規模な設計部署と小規模な設計部署の両方において、非常に多様な環境に身を置きながら、多数の企業に向けてコンサルティングを行ってきました。また、機械設計および製造業界において 20 年を超える経験を持ち、数多くのオートデスク製品を使用してきました。オートデスク認定インストラクターであるとともに、Microsoft の認定システム管理者の資格も持っています。
詳細は、フルクラスの配布資料をダウンロードしてください。