Сообщество программистов Autodesk в СНГ
ADN Club => Inventor API => Тема начата: niksasa от 07-10-2013, 10:02:31
-
Всем доброго дня. Есть два внешних правила, которые создают пользовательские параметры "список материалов" и "список правил обработки листового материала". Параметры добавлены в глобальную форму. Я запускаю эту форму после создания новой детали, меняю значения параметров, закрываю форму и потом мне нужно запустить внешниt правила, чтобы материал модели поменялся и толщина тоже. Если создавать аналогичные списки параметров во внутренних правилах, то всё происходит автоматом. Как автоматизировать этот процесс для внешних правил?
Вот сами правила:
СПИСОК МАТЕРИАЛОВ
Try
p = Parameter.Param("Материал")
Catch
ThisDoc.Document.ComponentDefinition.Parameters.UserParameters.AddByValue("Материал", "", UnitsTypeEnum.kTextUnits)
MultiValue.List("Материал") = iProperties.Materials
Материал = iProperties.Material
End Try
iProperties.Material = Parameter("Материал")
InventorVb.DocumentUpdate()
iLogicVb.UpdateWhenDone = True
MultiValue.UpdateAfterChange = True
СПИСОК ПОЛМ
name = ""
For Each par In ThisDoc.Document.ComponentDefinition.Parameters.UserParameters
If par.Name = "ПОЛМ" Then
name = par.Name
Exit For
End If
Next
If name = "" Then
'try to create new multi-value user parameter
Dim MyArrayList As New ArrayList
For Each st In ThisDoc.Document.ComponentDefinition.SheetMetalStyles
MyArrayList.add(st.Name)
Next
MultiValue.SetValueOptions(True, DefaultIndex := 0, NumericCompare := "=")
ThisDoc.Document.ComponentDefinition.Parameters _
.UserParameters.AddByValue("ПОЛМ", "", UnitsTypeEnum.kTextUnits)
MultiValue.List("ПОЛМ") = MyArrayList
Parameter("ПОЛМ") = SheetMetal.GetActiveStyle()
End If
SheetMetal.SetActiveStyle(Parameter("ПОЛМ"))
iLogicVb.UpdateWhenDone =True
InventorVb.DocumentUpdate()
Буду рад любой помощи.
-
А может на глобальной форме сделать кнопку запуска внешних правил без необходимости закрывать глобальную форму?
-
А может на глобальной форме сделать кнопку запуска внешних правил без необходимости закрывать глобальную форму?
Точно. Спасибо, Владимир.
Ещё один вопрос есть: можно ли как то автоматизировать процесс импорта правил обработки листового материала из определенной папки?
Если листовая деталь создается по шаблону, то правила обработки детали из листового металла есть. Если редактируется старая деталь, то там этих правил нет и приходится всё время это делать вручную.
-
Есть очень популярная утилита iLogic Code Injector tool.
См. например, здесь:
http://beinginventive.typepad.com/being-inventive/2012/08/major-upgrade-to-the-ilogic-code-injector-tool.html (http://beinginventive.typepad.com/being-inventive/2012/08/major-upgrade-to-the-ilogic-code-injector-tool.html)
Может быть этого функционала и хватит. Ее код активно обсуждался на форуме.
Если потянет на собственную разработку, то в Autodesk Exchange Apps среди инвенторовских программ имеется приложение LinkParameters. Эта программа на лету создает в компоненте необходимое правило iLogic. Авторы из Autodesk, поэтому исходный код прилагается. Можно посмотреть метод, как они это сделали. Ничего тут особо хитрого нет. Интерфейс iLogic Automation предоставляет доступ к тексту правил. Можно их читывать, менять и создавать.
Прошу новые вопросы задавать в отдельных темах. Рациональный формат для форума Вопрос - Ответ. Если возникает новая тема, надо создавать новую ветку. Иначе найти ответы на форуме будет невозможно. Спасибо.
-
Есть очень популярная утилита iLogic Code Injector tool.
См. например, здесь:
http://beinginventive.typepad.com/being-inventive/2012/08/major-upgrade-to-the-ilogic-code-injector-tool.html (http://beinginventive.typepad.com/being-inventive/2012/08/major-upgrade-to-the-ilogic-code-injector-tool.html)
Может быть этого функционала и хватит. Ее код активно обсуждался на форуме.о создавать новую ветку. Иначе найти ответы на форуме будет невозможно. Спасибо.
Насколько я знаю эта программка работает только с внутренними правилами. Я же работаю с внешними.
-
На первый взгляд, разницы нет.
В крайнем случае, можно программно создать правило с текстом типа RunExternalRule(...).
-
На первый взгляд, разницы нет.
В крайнем случае, можно программно создать правило с текстом типа RunExternalRule(...).
Спасибо, Владимир. Я об этом знаю. Думаю как всё правильно организовать. Думаю часть правил повесить на инициаторы событий, а часть запускать после выполнения других.