Дополнительные методы для написания правил iLogic

Правила iLogic можно создавать, используя только операторы назначения параметров Autodesk Inventor, предварительно заданные функции iLogic и простой код VB.NET. Однако в распоряжении пользователя есть и другие методы. В правилах можно также использовать расширенные функции VB.NET. Используйте Visual Basic 2005 или 2008 для создания внешних файлов DLL, которые можно вызвать из правила. Можно также вызывать файлы DLL, написанные на C# или C++.

Синтаксис Visual Basic 2008 (.NET Framework 3.5) поддерживается внутри кода правила.

Можно использовать следующие выражения в начале правила до основного кода правила:

Option Explicit On

Option Strict On

Option Infer Off

AddReference "filename.dll"

Imports ...

AddVbRule "Другое правило"

AddVbFile "filename.vb"

AddResources "filename.resources"

Option и Imports — это стандартные операторы 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 действует аналогично команде AddReference и поиску файла DLL в Visual Studio или Visual Basic Express.

Поддерживаются только сборки .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". Можно также добавить ссылки на файлы DLL в основном каталоге Autodesk Inventor Bin (например, C:\Program Files\Autodesk\Inventor [версия]\Bin).

Оператор AddReference не поддерживает задание полного пути. Можно указать только имя файла. Добавьте ссылки на сборки в глобальном кэше сборок (GAC), используя полные имена, например:

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

Можно также создать или открыть в правиле зарегистрированные COM-объекты с помощью CreateObject или GetActiveObject. Использовать AddReference для COM DLL необязательно.

AddVbRule

Включает код из указанного правила как код VB, скомпилированный с основным правилом. Заданное правило не может быть стандартным правилом. Для него необходимо включить параметр Прямой код VB на панели "Параметры" в диалоговом окне "Редактировать правило". iLogic не выполняет предварительную обработку кода в таком правиле. Правило содержит классы или модули, которые можно вызвать из других правил. Используйте этот оператор, чтобы несколько правил могли совместно использовать код, или же чтобы поддерживать модульность кода.

Пример

AddVbRule "Other Rule"

AddVbFile

Используется аналогично оператору AddVbRule, только в этом случае код VB хранится не в правиле, а во внешнем файле. Как и в случае оператора AddVbRule, для кода необходимо включить параметр Прямой код VB. Этот оператор полезен, когда в разных моделях требуется использовать общий код. Для задания файла необходимо использовать относительный путь. iLogic выполняет поиск в каталоге текущего документа Autodesk Inventor и в других каталогах, соблюдая тот же порядок поиска, который используется для внешних правил.

Пример

AddVbFile "fileName.vb"

AddResources

Добавляет ресурсы (например, строки или точечные рисунки). Ресурсы необходимо компилировать в Visual Studio.

Пример

AddResources "fileName.resources"

Imports

Дублирующиеся операторы Imports не допускаются. Во всех правилах явно используются следующие операторы Imports по умолчанию:

Если в правиле используется MessageBox, то iLogic автоматически добавляет следующий оператор:

Imports System.Windows.Forms

Если используется ThisApplication или другие объекты Autodesk Inventor, то iLogic автоматически добавляет следующий оператор:

Imports Inventor

Аргументы правил

iLogic предлагает расширенные функции, позволяющие передавать в выполняемые правила сведения о контексте в виде аргументов правила. Эти сведения можно использовать для изменения поведения правила, не создавая при этом дублирующееся правило.

Аргументы правил передаются с помощью функций, доступных в интерфейсе IiLogicAutomation (для внешних клиентов) и в iLogicVB (для кода другого правила и внутренних клиентов). Эти аргументы доступны внутри правила с помощью свойства RuleArguments.

Для IiLogicAutomation доступны следующие функции:

Функция RunRuleWithArguments(ByVal doc As Inventor.Document, ByVal ruleName As String, ByVal ruleArguments As Inventor.NameValueMap) As Integer

Функция RunExternalRuleWithArguments(ByVal doc As Inventor.Document, ByVal ruleName As String, ByVal ruleArguments As Inventor.NameValueMap) As Integer

Функция RunRuleDirectWithArguments(ByVal rule As iLogicRule, ByVal ruleArguments As Inventor.NameValueMap) As Integer

Для iLogicVB доступны следующие функции:

Функция RunRule(ByVal ruleName As String, ByVal ruleArguments As Inventor.NameValueMap) As Integer

Функция RunRule(ByVal compoOrDocName As Object, ByVal ruleName As String, ByVal ruleArguments As Inventor.NameValueMap) As Integer

Функция 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() находятся вне класса. Следовательно, поместите все операторы присваивания внутри подпрограммы, функции или свойства. Операторы описания для переменных элемента класса, таких как 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 и поместить их в правило, определив их как "Прямой код VB" внутри документа Inventor (). Или используйте AddVbRule, чтобы поместить их во внешний VB-файл.

При создании расширенного кода VB.NET рекомендуется выполнять кодирование не в самом правиле, а в Visual Studio или Visual Basic Express. Затем можно вырезать относительно небольшие фрагменты кода из Visual Studio и вставить их в правило. Можно даже вставить целое диалоговое окно Class (хотя на это потребуются дополнительные ресурсы). Для более крупных участков кода или в случае необходимости создайте сборку и используйте ее из правила в качестве внешнего файла DLL.

Можно хранить объекты, которые являются экземплярами пользовательского объекта Class, с помощью функций работы с общими переменными правил iLogic. Чтобы хранить эти объекты, сериализуйте объект Class, или же он должен быть получен из MarshalByRefObject.

Внешние файлы DLL

В .NET можно создать собственные файлы DLL и вызывать их из правила. Чтобы отладить файл DLL, укажите выходной путь в окне "Свойства проекта" "Компилировать в" iLogicAdd (в каталоге Inventor Bin). Затем выберите Inventor.exe для параметра Запустить внешнюю программу в свойствах проекта в Visual Studio. Этот способ позволяет использовать все преимущества среды отладки, включая команды "Редактировать" и "Продолжить".

Внешние файлы DLL полезны при использовании правила для отображения диалогового окна, позволяющего пользователю вводить данные.

Inventor API

Чтобы из правила открыть интерфейс Inventor API, используйте свойство ThisApplication для перехода в приложение Inventor. Используйте ThisDoc.Document для перехода к документу, содержащему текущее правило. Элементы можно создавать и изменять. Используйте Parameter.Param для получения прямого доступа к Inventor.Parameter.

Чтобы использовать Inventor API из собственного файла DLL, добавьте ссылку на Autodesk.Inventor.Interop.dll в свой проект Visual Basic. Он отображается в диалоговом окне "Добавить ссылку" на вкладке .NET. Для Inventor 2011 используйте версию 15.0.0.0.

Использование интерфейсов iLogic во внешних файлах DLL

Все функции iLogic группируются по объектам интерфейса (параметрам, свойствам Inventor, параметрическим деталям и т.д.). Объекты интерфейса iLogic можно передавать как аргументы функциям во внешних файлах DLL. Чтобы использовать эти объекты в проекте, добавьте ссылку на Autodesk.iLogic.Interfaces.dll. Выберите вкладку "Обзор" в диалоговом окне "Добавить ссылку" и откройте папку iLogicBin в каталоге Inventor bin (обычно в папке C:\Program Files\Autodesk\Inventor [версия]\Bin\iLogicBin).

Документация по интерфейсам iLogic содержится в файле Autodesk.iLogic.Interfaces.xml. Чтобы прочесть описания интерфейсов, можно использовать обозреватель объектов в Visual Studio. Эти описания содержат имена объектов, реализующих интерфейсы в правилах. Например, объект Feature в правиле реализует интерфейс ICadFeature.

Параметры в правилах

По умолчанию числовые параметры в правилах объявляются не как переменные двойной точности, а как объекты пользовательского типа iLogic DoubleForEquals.