進階 iLogic 規則編寫技術

您只能使用 Autodesk Inventor 參數指定陳述式、預先定義的 iLogic 函數及簡單的 VB.NET 程式碼編寫 iLogic 規則。但是,您可以隨意使用這些技術。您可以在規則中使用更進階的 VB.NET 功能。使用 Visual Basic 2005 或 2008 建立可從規則呼叫的外部 DLL 檔案。您也可以呼叫使用 C# 或 C++ 編寫的 DLL 檔案。

在規則程式碼中支援 Visual Basic 2008 (.NET Framework 3.5) 語法。

您可以在規則的頂部、主規則程式碼之前使用以下陳述式:

Option Explicit On

Option Strict On

Option Infer Off

AddReference "filename.dll"

Imports ...

AddVbRule "Other Rule"

AddVbFile "filename.vb"

AddResources "filename.resources"

OptionImports 是標準的 VB.NET 陳述式。

Option Explicit Off 為預設。它可讓您在不進行宣告的情況下使用本端變數。

Option Strict Off 為預設。Option Strict On 同樣適用於大多數規則。

Option Infer On 為預設。

主規則程式碼是「隱含」子常式。若要加入更多子常式、函數、性質或類別,請按照如下方式宣告 Sub Main()

Sub Main()
' your main rule code here
End Sub

不論規則是否包含其他程式碼,Sub Main() 均可在所有規則中使用。若要取得有關明確宣告規則類別的更多詳細資訊,請參閱〈如何處理規則?〉。

AddReference

使用特殊的 iLogic 語法。將 DLL 名稱加入至 AddReference 陳述式與在 Visual Studio 或 Visual Basic Express 中使用 AddReference 指令並瀏覽 DLL 相同。

僅支援 .NET 組合。DLL 可以為標準 Microsoft 組合,與在 Microsoft.NET\Framework 資料夾中相同。

例如,考慮以下陳述式:

AddReference "System.Drawing.dll"

在此陳述式中,.dll 副檔名為可選。

您也可以指定使用者建立的類別資源庫或協力廠商類別資源庫做為參考。使用者建立的 DLL 或協力廠商 DLL 必須全部位於一個資料夾中。依預設,這些 DLL 位於 Autodesk Inventor 安裝資料夾下的 iLogicAdd 子資料夾中,例如:

C:\Program Files\Autodesk\Inventor [版本]\Bin\iLogicAdd

您可以使用「iLogic 規劃」指令變更此位置。也可以在主 Autodesk Inventor Bin 資料夾 (例如 C:\Program Files\Autodesk\Inventor [版本]\Bin) 中,加入對 DLL 的參考。

AddReference 陳述式不支援完整路徑規格。您只能指定檔名。使用如下合格名稱加入對 Global Assembly Cache (GAC) 中的組合的參考:

AddReference "VsWebSite.Interop, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”

也可以使用 CreateObjectGetActiveObject 在規則中建立或存取已註冊的 COM 物件。無需針對 COM DLL 使用 AddReference

AddVbRule

將指定規則中的程式碼做為與主規則一起編譯的 VB 程式碼包括在規則中。指定規則不能為標準規則。必須在「編輯規則」對話方塊的「選項」面板中為該規則啟用「Straight VB 程式碼」選項。iLogic 不會預處理此類規則中的程式碼。該規則包含可以從其他規則呼叫的類別或模組。使用此陳述式在規則間共用程式碼,或者保留程式碼模組。

範例

AddVbRule "Other Rule"

AddVbFile

除 VB 程式碼儲存在外部檔案而非規則中之外,該陳述式執行的作業與 AddVbRule 相似。與使用 AddVbRule 相同,必須為程式碼啟用「Straight VB 程式碼」選項。此陳述式對於在模型間共用相同的程式碼十分實用。檔案規格必須為相對路徑名稱。iLogic 使用搜尋外部規則所採用的搜尋順序在目前的 Autodesk Inventor 文件資料夾及其他資料夾中進行搜尋。

範例

AddVbFile "fileName.vb"

AddResources

加入字串或點陣圖等資源。這些資源必須使用 Visual Studio 進行編譯。

範例

AddResources "fileName.resources"

匯入

不允許重複使用匯入陳述式。可以在所有規則中隱含使用以下預設匯入陳述式:

如果在規則中使用 MessageBox,則 iLogic 會自動加入以下陳述式:

Imports System.Windows.Forms

如果使用 ThisApplication 或其他 Autodesk 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 物件。執行規則時,它會傳遞至其中一個函數。

存取傳遞至規則的引數

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 Main()... End Sub 之後加入 SubFunctionPropertyClass 定義。加入的任何 Class 均嵌套在該規則的主規則 Class 中,無法從其他規則進行使用。若要加入獨立的 ClassModule,請使用以下程式碼明確聲明規則 Class

Class ThisRule ' ...
Sub Main
End Sub
' ...
End Class

然後您可以在此程式碼之外加入另一個 (或多個) ClassModuleClass ThisRule 將成為主規則 Class,且 iLogic 將呼叫 Sub Main (在主規則內) 執行規則。

若要包括對多個規則可見的 ModuleClass,請將其放在外部組合 (DLL) 中。您可以在相同的 DLL 中放置多個類別或模組。您也可以使用 AddVbRule 將它們放在 Inventor 文件 () 內標識為「Straight VB 程式碼」的規則中。或者使用 AddVbFile 將它們放在外部 VB 檔案中。

當您開發進階 VB.NET 程式碼時,請使用 Visual Studio 或 Visual Basic Express,而不要直接在規則中進行編碼。然後,您可以從 Visual Studio 中剪下相對較小的程式碼片段,然後將其貼上到規則中。您甚至可以將程式碼片段貼到整個對話方塊 Class 中 (雖然資源不容易支援)。或者在需要的地方,為更大的程式碼單元建立組合,然後將其做為外部 DLL 從規則進行使用。

您可以使用 iLogic 規則共用變數函數儲存使用者定義 Class 的例證物件。若要儲存這些物件,請串列化 Class,否則必須從 MarshalByRefObject 衍生出它。

外部 DLL

您可以使用 .NET 編寫自己的外部 DLL,然後從規則呼叫它們。若要對 DLL 進行除錯,請在「專案性質」「編譯為 iLogicAdd」下面設定建置輸出路徑 (在 Inventor Bin 資料夾下面)。然後,在 Visual Studio 中,為專案性質中的「啟動外部程式」選擇「Inventor.exe」。此方法可讓您利用除錯環境的一切優勢功能,包括「編輯」和「繼續」。

當使用規則顯示供使用者輸入的對話方塊時,外部 DLL 十分實用。

Inventor API

若要從規則存取 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。

在外部 DLL 中使用 iLogic 介面

所有 iLogic 函數都分組在諸如 Parameter、iProperty、iPart 等介面物件下。您可以將 iLogic 介面物件做為引數傳遞給外部 DLL 中的函數。若要在專案中使用這些物件,請加入對 Autodesk.iLogic.Interfaces.dll 的參考。在「加入參考」對話方塊中選取「瀏覽」頁籤,然後瀏覽至 Inventor Bin 資料夾下的 iLogicBin 資料夾 (通常位於 C:\Program Files\Autodesk\Inventor [版本]\Bin\iLogicBin)。

Autodesk.iLogic.Interfaces.xml 中提供了 iLogic 介面的文件。在 Visual Studio 中,您可以使用「物件瀏覽器」讀取介面描述。這些描述包括在規則中實施介面的物件的名稱。例如,規則中的 Feature 物件實施 ICadFeature 介面。

規則中的參數

依預設,規則中的數值參數不會宣告為 Double,而是宣告為稱作 DoubleForEquals 的自訂 iLogic 類型。