Tecniche avanzate per la scrittura di regole iLogic

È possibile scrivere regole iLogic utilizzando solo istruzioni di assegnazione parametri di Autodesk Inventor, funzioni iLogic predefinite e codice VB.NET semplice. Tuttavia, sono disponibili altre tecniche. È possibile utilizzare funzionalità di VB.NET più avanzate in una regola. Utilizzare Visual Basic 2005 o 2008 per creare file DLL esterni che è possibile chiamare da regole. È inoltre possibile richiamare file DLL scritti in C# o C++.

La sintassi di Visual Basic 2008 (.NET Framework 3.5) è supportata all'interno del codice delle regole.

Nella parte superiore della regola, prima del codice principale, è possibile utilizzare le seguenti istruzioni:

Option Explicit On

Option Strict On

Option Infer Off

AddReference "filename.dll"

Imports ...

AddVbRule "Other Rule"

AddVbFile "filename.vb"

AddResources "filename.resources"

Option e Imports sono istruzioni VB.NET standard.

Option Explicit Off è l'impostazione di default. Consente di utilizzare le variabili locali senza dichiararle.

Option Strict Off è l'impostazione di default. Option Strict On funziona anche per la maggior parte delle regole.

Option Infer On è l'impostazione di default.

Il codice della regola principale è una subroutine "implicita". Per aggiungere altre subroutine, funzioni, proprietà o classi, dichiarare un'istruzione Sub Main() come segue:

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

Sub Main() può essere utilizzata in qualsiasi regola, indipendentemente dal fatto che la regola presenti ulteriori codici. Per informazioni più dettagliate su come dichiarare esplicitamente la classe di una regola, vedere "Modalità di elaborazione di una regola"

AddReference

Utilizza una sintassi iLogic speciale. L'aggiunta del nome di una DLL ad un'istruzione AddReference equivale ad utilizzare il comando AddReference e cercare una DLL in Visual Studio o Visual Basic Express.

Sono supportati solo gli assiemi .NET. La DLL può essere un assieme Microsoft standard, quali quelli presenti nella cartella Microsoft.NET\Framework.

Ad esempio, si prenda in considerazione l'istruzione seguente:

AddReference "System.Drawing.dll"

In questa istruzione, l'estensione .dll è facoltativa.

È inoltre possibile specificare come riferimento una libreria di classi creata dall'utente o da terzi. Le DLL create da utenti o da terze parti devono trovarsi in una sola cartella. Per impostazione predefinita, queste DLL si trovano sotto la cartella di installazione di Autodesk Inventor in una sottocartella iLogicAdd, ad esempio:

C:\Program Files\Autodesk\Inventor [Versione]\Bin\iLogicAdd

È possibile modificare tale posizione mediante il comando Configurazione iLogic. È inoltre possibile aggiungere riferimenti per le DLL nella cartella Bin principale di Autodesk Inventor (ad esempio, C:\Programmi\Autodesk\Inventor [Versione]\Bin).

L'istruzione AddReference non supporta un percorso completo. È possibile specificare solo un nome di file. Aggiungere riferimenti ad assiemi nella cache dell'assieme globale (GAC, Global Assembly Cache), utilizzando un nome qualificato quale:

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

È inoltre possibile creare o accedere ad oggetti COM registrati in una regola mediante CreateObject o GetActiveObject. Non è necessario utilizzare AddReference per una DLL COM.

AddVbRule

Include il codice della regola specificata come codice VB, compilato con la regola principale. La regola specificata non può essere una regola standard. È necessario attivare l'opzione Codice VB nella scheda Opzioni della finestra di dialogo Modifica regola. iLogic non effettua un'elaborazione preliminare del codice in tale regola. La regola contiene Classi o Moduli che possono essere richiamati da altre regole. Utilizzare questa istruzione per condividere codici tra le regole o per mantenere il codice modulare.

Esempio

AddVbRule "Other Rule"

AddVbFile

Funziona in modo analogo a AddVbRule, tranne per il fatto che il codice VB è memorizzato in un file esterno anziché in una regola. Come con AddVbRule, per il codice deve essere attivata l'opzione Codice VB. Questa istruzione è utile per la condivisione di codice comune tra i modelli. La specifica di file deve essere un nome di percorso relativo. iLogic effettua una ricerca nella cartella del documento corrente di Autodesk Inventor e in altre cartelle, sfruttando lo stesso ordine di ricerca utilizzato per le regole esterne.

Esempio

AddVbFile "fileName.vb"

AddResources

Aggiunge risorse quali stringhe o bitmap. Le risorse devono essere compilate con Visual Studio.

Esempio

AddResources "fileName.resources"

Importazioni

Le istruzioni Imports duplicate non sono consentite. Le seguenti istruzioni Imports di default sono implicitamente utilizzate in tutte le regole:

Se si utilizza MessageBox in una regola, iLogic aggiunge automaticamente l'istruzione seguente:

Imports System.Windows.Forms

Se si utilizza ThisApplication o altri oggetti Autodesk Inventor, iLogic aggiunge automaticamente quanto segue:

Imports Inventor

Argomenti delle regole

iLogic fornisce una funzionalità avanzata che consente di passare le informazioni sul contesto come argomenti delle regole nelle regole eseguite. Questa informazione può essere utilizzata per modificare il funzionamento di una regola senza dovere creare una regola duplicata.

Gli argomenti delle regole vengono passati utilizzando le funzioni disponibili nell'interfaccia iLogicAutomation (per i client esterni) e in iLogicVB (per altro codice regola e client interni). Questi argomenti vengono resi disponibili all'interno di una regola tramite la proprietà RuleArguments.

Per iLogicAutomation, le funzioni disponibili includono:

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

Per iLogicVB, le funzioni disponibili includono:

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

Creazione di argomenti delle regole

Per creare argomenti delle regole, utilizzare l'API di Inventor per creare un nuovo oggetto NameValueMap. Tale oggetto viene poi passato ad una delle funzioni durante l'esecuzione della regola.

Accesso ad un argomento passato alla regola

x = RuleArguments(“myArg”)

Rilevamento del passaggio di un argomento alla regola

If RuleArguments.Exists(“myArg”) Then...

Passaggio del gruppo di argomenti ad un'altra regola utilizzando RunRule

iLogicVB.RunRule(“someOtherRule”, RuleArguments.Arguments)

Ulteriori istruzioni

Se si utilizza Sub Main(), la regola rispetta il formato standard VB.NET per una classe, tranne per il fatto che le istruzioni Class... e EndClass non sono visibili e le istruzioni prima di Sub Main() sono al di fuori della classe. Di conseguenza, posizionare tutte le istruzioni di assegnazione all'interno di una procedura Sub, Function o Property. È possibile includere istruzioni per la dichiarazione delle variabili dei membri della classe quali Private temp As Double = 4.5 all'esterno di una subroutine o di una funzione.

È possibile aggiungere le definizioni Sub, Function, Property e Class dopo Sub Main()... End Sub. Qualsiasi classe che si aggiunge è nidificata nella classe della regola principale per tale regola e non può essere utilizzata da un'altra regola. Per aggiungere una classe o un modulo indipendenti, dichiarare in modo esplicito la classe della regola mediante le seguenti operazioni:

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

È quindi possibile aggiungere una o più classi o moduli al di fuori del codice. Class ThisRule diventa la classe della regola principale e iLogic richiama Sub Main (al suo interno) per eseguire la regola.

Per includere un modulo o una classe visibile per più regole, inserirli in un assieme esterno (DLL). È possibile inserire più istruzioni nella stessa DLL. È inoltre possibile utilizzare AddVbRule per inserirle in una regola identificata come "Codice VB" all'interno del documento di Inventor (). In alternativa, utilizzare AddVbFile per l'inserimento in un file esterno VB.

Quando si sviluppa codice VB.NET avanzato, utilizzare Visual Studio o Visual Basic Express anziché effettuare la codifica direttamente in una regola. È possibile tagliare e incollare frammenti relativamente piccoli di codice da Visual Studio in una regola. È possibile anche incollare in un'intera classe della finestra di dialogo (sebbene le risorse non siano supportate facilmente). Per unità di codice più grandi, o, se necessario, creare un assieme e utilizzarlo come DLL esterna da una regola.

È possibile memorizzare oggetti che sono istanze di una classe definita dall'utente utilizzando le funzioni Variabile condivisa della regola iLogic. Per memorizzare tali oggetti, serializzare la classe, che altrimenti deve essere derivata da MarshalByRefObject.

DLL esterne

È possibile scrivere una DLL esterna in .NET e richiamarla da una regola. Per eseguire il debug di una DLL, impostare il percorso di output della compilazione in Project Properties (Proprietà progetto) Compile to (Compila in) iLogicAdd (nella cartella Bin di Inventor). Quindi, scegliere Inventor.exe per Avvia programma esterno nelle proprietà del progetto in Visual Studio. Questo metodo consente di sfruttare tutti i vantaggi dell'ambiente di debug, incluse le opzioni Modifica e Continua.

Le DLL esterne sono utili quando si utilizza una regola per visualizzare una finestra di dialogo per l'input dell'utente.

API di Inventor

Per accedere all'API di Inventor da una regola, utilizzare la proprietà ThisApplication per accedere all'applicazione Inventor. Utilizzare ThisDoc.Document per accedere al documento contenente la regola corrente. È possibile creare e modificare lavorazioni. Utilizzare Parameter.Param per ottenere l'accesso diretto ad un parametro di Inventor.

Per utilizzare l'API di Inventor da una DLL personalizzata, aggiungere un riferimento a Autodesk.Inventor.Interop.dll nel progetto Visual Basic. Viene visualizzato nella finestra di dialogo Aggiungi riferimento nella scheda .NET. Per Inventor 2011, la versione è 15.0.0.0.

Utilizzo di interfacce iLogic in DLL esterne

Tutte le funzioni di iLogic sono raggruppate sotto oggetti interfaccia quali Parameter, iProperties, iPart e così via. È possibile trasferire gli oggetti interfaccia iLogic come argomenti di funzioni in DLL esterne. Per utilizzare questi oggetti nel progetto, aggiungere un riferimento a Autodesk.iLogic.Interfaces.dll. Selezionare la scheda Sfoglia nella finestra di dialogo Aggiungi riferimento, quindi individuare la cartella iLogicBin della cartella Bin di Inventor (in genere in C:\Programmi\Autodesk\Inventor [Versione]\Bin\iLogicBin).

La documentazione per le interfacce iLogic viene fornita in Autodesk.iLogic.interfaces.xml. È possibile utilizzare il browser oggetti in Visual Studio per leggere le descrizioni dell'interfaccia. Queste descrizioni includono i nomi degli oggetti che implementano le interfacce nelle regole. Ad esempio, l'oggetto Feature in una regola implementa l'interfaccia ICadFeature.

Parametri nelle regole

Per default, i parametri numerici nelle regole non vengono dichiarati come Double, ma come un tipo iLogic personalizzato chiamato DoubleForEquals.