iLogic ルールは、Inventor パラメータの代入ステートメント、定義済み iLogic 関数、および単純な VB.NET コードのみで記述できます。
ただし、これらの技法のみに限定されているわけではありません。ルール内では VB.NET の高度な機能を使用することができます。ルールから呼び出すことができる外部 DLL ファイルを作成するには、Visual Basic 2005 または 2008 を使用します。また、C# や C++ で記述された DLL ファイルを呼び出すこともできます。
ルール コード内では、Visual Basic 2012 (VB 11.0)の構文がサポートされています。
ヘッダは、[ルールを編集]ダイアログ ボックスのルール コードの前に入力する必要があるステートメントです。ヘッダ エディタにヘッダ ステートメントを直接入力するか、またはメインのエディタに入力して iLogic によってヘッダ エディタに移動されます。
ヘッダ エディタにアクセスするには、次のいずれかの操作を行います。
ヘッダ エディタでは次のステートメントがサポートされています。
Option Explicit On
Option Strict On
Option Infer Off
AddReference "filename.dll"
Imports ...
AddVbRule "Other Rule"
AddVbFile "filename.vb"
AddResources "filename.resources"
Option および Imports は、標準 VB.NET ステートメントです。
Option Explicit Off が既定です。ローカル変数の使用が可能で、宣言の必要はありません。
Option Strict Off が既定です。Option Strict On も多くのルールで役立ちます。
Option Infer On が既定です。
メインのルール コードは、"implicit" サブルーチンです。さらに、サブルーチン、関数、プロパティ、クラスなどを追加するには、次のように Sub Main() を宣言します。
Sub Main() ' your main rule code here End Sub
Sub Main() は、ルールに追加のコードがあるかどうかに関係なく任意のルールで使用できます。ルール クラスを明示的に宣言する方法の詳細については、「ルールの処理方法」を参照してください。
iLogic 専用の構文を使用します。AddReference ステートメントに DLL 名を追加するのは、[参照を追加]コマンドを使用し、Visual Studio または Visual Basic Express で DLL を参照するのと同じ操作です。
.NET アセンブリのみがサポートされています。DLL は、Microsoft の標準アセンブリとして Microsoft.NET¥Framework フォルダに保存できます。
例として、次のステートメントについて考えます。
AddReference "System.Drawing.dll"
このステートメントでは、.dll 拡張子はオプションです。
また、ユーザが作成したクラス ライブラリや、サードパーティのクラス ライブラリを参照に指定することができます。ユーザが作成した DLL やサードパーティ DLL は、すべて 1 つのフォルダ内に配置する必要があります。既定では、これらの DLL は、次のように Inventor のインストール フォルダ内の iLogicAdd サブフォルダにあります。
C:¥Program Files¥Autodesk¥Inventor [バージョン]¥Bin¥iLogicAdd
この場所は iLogic の環境設定コマンドを使用して変更することができます。また、メインの Inventor Bin フォルダにある DLL への参照を追加することもできます(たとえば C:¥Program Files¥Autodesk¥Inventor [バージョン]¥Bin)。
AddReference ステートメントでは、フル パスの指定がサポートされていません。ファイル名のみを指定できます。次のように修飾名を使用して Global Assembly Cache (GAC)内のアセンブリへの参照を追加します。
AddReference "VsWebSite.Interop, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”
また、ルール内で登録済みの COM オブジェクトを CreateObject または GetActiveObject を使用して作成したり、それらにアクセスしたすることもできます。COM DLL に AddReference を使用する必要はありません。
指定したルールのコードを VB コードとして組み込み、メインのルールとともにコンパイルします。標準のルールを指定することはできません。[ルールを編集]ダイアログ ボックスの[オプション]パネルで、[そのままの VB コード]オプションを有効にする必要があります。iLogic では、このようなルールのコードを事前処理することはできません。ルールには、他のルールから呼び出し可能なクラスやモジュールが含まれています。このステートメントは、ルール間でコードを共有したり、コード モジュールを管理するために使用します。
例
AddVbRule "Other Rule"
VB コードがルールではなく、外部ファイルに保存されていることを除き AddVbRule と同じように操作します。AddVbRule を使用する場合には、[そのままの VB コード]オプションを有効にする必要があります。このステートメントは、モデル間で共通のコードを共有する場合に役に立ちます。ファイルの指定は相対パス名にする必要があります。iLogic では、現在の Inventor ドキュメントのフォルダ、およびその他のフォルダ内が、外部ルールに適用した順序と同じ順序で検索されます。
例
AddVbFile "fileName.vb"
文字列やビットマップなどのリソースを追加します。リソースは Visual Studio でコンパイルする必要があります。
例
AddResources "fileName.resources"
Imports ステートメントを重複して使用することはできません。次の既定の Imports ステートメントがすべてのルールで暗黙的に使用されています。
ルールで MessageBox を使用している場合は、iLogic によって次のステートメントが自動的に追加されます。
Imports System.Windows.Forms
ThisApplication または他の Inventor オブジェクトを使用している場合は、iLogic によって自動的に以下が追加されます。
Imports Inventor
iLogic には、コンテンツ情報をルールの引数として、実行するルールに渡せる高度な機能があります。この情報を使用してルールの動作を変更できるため、重複したルールを作成する必要はありません。
IiLogicAutomation インタフェース(外部クライアント向け)と iLogicVB (その他のルール コードおよび内部クライアント向け)にある関数を使用して、ルール引数を渡します。これらの引数は、RuleArguments プロパティを介してルール内で使用できるようになります。
IiLogicAutomation の場合、以下のような関数を使用できます。
Function RunRuleWithArguments(ByVal doc As Inventor.Document, ByVal ruleName As String, ByVal ruleArguments As Inventor.NameValueMap) As Integer
Function RunExternalRuleWithArguments(ByVal doc As Inventor.Document, ByVal ruleName As String, ByVal ruleArguments As Inventor.NameValueMap) As Integer
Function RunRuleDirectWithArguments(ByVal rule As iLogicRule, ByVal ruleArguments As Inventor.NameValueMap) As Integer
iLogicVB の場合、以下の関数を使用できます。
Function RunRule(ByVal ruleName As String, ByVal ruleArguments As Inventor.NameValueMap) As Integer
Function RunRule(ByVal compoOrDocName As Object, ByVal ruleName As String, ByVal ruleArguments As Inventor.NameValueMap) As Integer
Function RunExternalRule(ByVal ruleName As String, ByVal ruleArguments As Inventor.NameValueMap) As Integer
ルール引数の作成
ルール引数を作成するには、Inventor API を使用して新しい NameValueMap オブジェクトを作成します。このオブジェクトは、ルールの実行時に関数の 1 つに渡されます。
ルールに渡された引数へのアクセス
x = RuleArguments(“myArg”)
引数がルールに渡されたかどうかの確認
If RuleArguments.Exists(“myArg”) Then...
RunRule を使用して引数のセットを別のルールに渡す
iLogicVB.RunRule(“someOtherRule”, RuleArguments.Arguments)
Sub Main() を使用している場合、ルールはクラスの標準の VB.NET 形式に準拠します。ただし、Class... および End Class ステートメントは非表示になり、Sub Main() の前のステートメントはクラスの外部になります。したがって、すべての代入ステートメントは、Sub、Function、または Property の内側に記述します。Private temp As Double = 4.5 などの、クラスのメンバ変数の宣言ステートメントは、サブルーチンや関数の外部で、インクルードすることができます。
Sub、Function、Property、および Class 定義は、Sub Main()... End Sub の後に追加できます。追加するすべての Class は、そのルールのメインのルール Class にネストされ、別のルールから使用することはできません。独立した Class または Module を追加するには、次の記述を使用してルール Class を明示的に宣言します。
Class ThisRule ' ... Sub Main End Sub ' ... End Class
このコードの外部の別の Class または Module (または複数)を追加できます。Class ThisRule はメインのルール Class となり、iLogic はその内部で Sub Main が呼び出されてルールが実行されます。
複数のルールから可視の Module または Class を含めるには、外部アセンブリ(DLL)内に記述します。同じ DLL に複数個記述できます。AddVbRule を使用して、Inventor ドキュメント内の「そのままの VB コード」に識別されるルール内に記述することもできます。または、AddVbFile を使用して外部 VB ファイル内に記述します。
高度な VB.NET コードを作成する場合には、ルール内で直接コード記述するのではなく、Visual Studio または Visual Basic Express を使用します。次に、比較的小さなコードのスニペットを Visual Studio からルールへ切り取って貼り付けます。ダイアログ ボックス Class 全体の中に貼り付けることもできます(ただし、リソースを簡単に使用できなくなります)。大きな単位のコードの場合や、必要時には、アセンブリを作成して、ルールから外部 DLL として使用します。
ユーザ定義 Class のインスタンスであるオブジェクトは、iLogic のルールの共有変数関数を使用して保存できます。これらのオブジェクトを保存するには、Class をシリアライズするか、MarshalByRefObject からの派生を使用する必要があります。
独自の DLL を .NET で記述して、ルールから呼び出すことができます。DLL をデバッグするには、[プロジェクト プロパティ] [コンパイル]で、ビルドの出力パスを iLogicAdd (Inventor Bin フォルダ内)に設定します。次に、Visual Studio で、プロジェクトのプロパティ内の[外部プログラムを起動する]に Inventor.exe を選択します。この方法によって、デバッグ環境の編集や継続などのすべての機能を利用できます。
外部 DLL は、ルールを使用してユーザ入力用のダイアログ ボックスを表示するときに便利です。
ルールから Inventor API にアクセスするには、ThisApplication プロパティを使用して Inventor アプリケーションにアクセスします。ThisDoc.Document を使用して、現在のルールを含むドキュメントにアクセスします。フィーチャを作成および修正できます。Parameter.Param を使用して、Inventor.Parameter に直接アクセスします。
独自に作成した DLL から Inventor API を使用するには、Visual Basic プロジェクトに Autodesk.Inventor.Interop.dll への参照を追加します。[参照の追加]ダイアログ ボックスの[.NET]タブに表示されます。Inventor 2011 の場合、バージョンは 15.0.0.0 です。
すべての iLogic 関数は、インタフェース オブジェクト内で、パラメータ、iProperty、iPart などのグループに分けられています。iLogic インタフェース オブジェクトは、外部 DLL 内の関数に引数として渡すことができます。プロジェクトでこれらのオブジェクトを使用するには、Autodesk.iLogic.Interfaces.dll への参照を追加します。[参照の追加]ダイアログ ボックスで[参照]タブを選択し、Inventor Bin フォルダ内の iLogicBin フォルダを参照してください(通常は、C:¥Program Files¥Autodesk¥Inventor [バージョン]¥Bin¥iLogicBin になります)。
iLogic インタフェースのドキュメントは、Autodesk.iLogic.Interfaces.xml で提供されています。インタフェースの説明は、Visual Studio のオブジェクト ブラウザを使用して参照できます。この説明には、ルールにインタフェースを実装するオブジェクトの名前が記載されています。たとえば、ルール内の Feature オブジェクトは、ICadFeature インタフェースを実装します。