Получение статуса hide/show

Программирование для CATIA.

Получение статуса hide/show

Сообщение Artem » 16 апр 2012 13:29

Господа а как-нибудь можно получить видимость элемента без selection1.Search или selection1.VisProperties ?...просто скорость работы на больших сборках падает прям в разы с этими командами по соотношению к рекурсивному проходу по продуктам(16 версия)
animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14

Re: Получение статуса hide/show

Сообщение Wireless_Fidelity » 16 апр 2012 14:35

Здравствуйте.

Я знаю как минимум два способа:
1) Через KW правило, пользуясь свойством Show класса Visuzlizable
2) Через поиск, ускоренный рассинхронизацией найденных объектов с выбранными в дереве.
В R18+ это контролируется свойством HSOSynchronized, в R16 должно работать следующее:

Код: Выделить всё
Sub CATMain()

  Dim mySelection As Selection
  Dim HSOSynchronizedFilter(0)
  Dim HSOStatus

  Set mySelection = CATIA.ActiveDocument.Selection

  HSOSynchronizedFilter(0)="SetCATIADotHSOSynchronizedToFalse"
  HSOStatus=mySelection.SelectElement2(HSOSynchronizedFilter,"",False)
  mySelection.Search "Drafting.Geometry,all"
  If mySelection.Count 0 Then
    mySelection.Delete
  End If
  mySelection.Clear
  HSOSynchronizedFilter(0)="SetCATIADotHSOSynchronizedToTrue"
  HSOStatus=mySelection.SelectElement2(HSOSynchronizedFilter,"",True)

 End Sub
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11

Re: Получение статуса hide/show

Сообщение Artem » 16 апр 2012 15:36

1) Через KW правило, пользуясь свойством Show класса Visuzlizable
- я сделал получение данных про тип и каталог пайпинга через формулу - скорость просто ужас - если вы не нашли как и это ускорить, или в 19 дассо решила этот вопрос, то данный способ будет пожалуй еще медленнее (хотя конечно надо проверить - возможно это только на .CatalogPartName/.ClassName)
второе оказалось с 18 версии только :-( ...(SetCATIADotHSOSynchronizedToFalse -вообще как класс не находит CATIADotHSOSynchronizedToFalse/CATDotHSOSynchronizedToFalse - находит но selectelement2 дает ошибку)
animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14

Re: Получение статуса hide/show

Сообщение Wireless_Fidelity » 16 апр 2012 21:45

При использовании формул львиная часть времени тратится на создание и обновление формулы, сам код работает достаточно быстро. Поэтому для нескольких объектов я создаю одно правило, результаты можно выгрузить в List.
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11

Re: Получение статуса hide/show

Сообщение Artem » 17 апр 2012 08:49

ага подумаем спасибо...
Ps А в лист string можно добавить? Или дизайнтейбл использовать?
animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14

Re: Получение статуса hide/show

Сообщение Wireless_Fidelity » 17 апр 2012 11:57

Да, в лист string добавляются.
Про дизайн-таблицу даже не думал, спасибо за идею на будущее.
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11

Re: Получение статуса hide/show

Сообщение Artem » 17 апр 2012 13:19

А как??? в list тот который let list у меня нормально добавилось, а в тот который параметр не хочет ни в какую(через нолиджи пробовал ->AddItem(,) ->SetItem(,) ->Append() ->InsertItem(,) List() Copy() -пытался скопировать тот который let ) - additem ошибку дает на строку и требует выбрать чего-нибудь из дерева, остальные без ошибки отработали, но лист все равно пустой....ну или как достучаться до let list (ну можно запустить скрипт с входным параметром внутри реакции, но это уже дебри для чистых нолиджей без кома)
animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14

Re: Получение статуса hide/show

Сообщение Wireless_Fidelity » 17 апр 2012 15:21

Честно говоря, я думал, что Вы код правила будете из скрипта/кома заполнять, поэтому в нём в Let list всё и запишется, а затем из того же скрипта вы этот параметр прочитаете.
Иными словами, я предлагаю в правиле в явном виде через скрипт написать:
lstList->AddItem("Feature.1")
lstList->AddItem("Feature.2")
lstList->AddItem("Feature.3")
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11

Re: Получение статуса hide/show

Сообщение Artem » 17 апр 2012 15:56

да с удовольствием
того же скрипта вы этот параметр прочитаете
Как прочитать данные "внутреннего" для правила, Let list в наш код?.....или он не внутренний, но в дереве не отражается?
animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14

Re: Получение статуса hide/show

Сообщение Wireless_Fidelity » 17 апр 2012 18:06

"Внутреннего", действительно, никак. Но внутренний лист со строками можно присвоить пустому листу в дереве и уже его прочитать. В примере ниже в дереве создан лист List.1, он же должен быть выбран перед запуском скрипта.

Код правила:
Код: Выделить всё
/*Rule*/
Let lstResult(List)

lstResult->Append("MyText1")
lstResult->Append("MyText2")

`List.1` = lstResult


Код скрипта:
Код: Выделить всё
Sub CATMain()

    ' get list containing string parameters
    Dim parList As ListParameter
    Set parList = CATIA.ActiveDocument.Selection.Item(1).Value
   
    ' get items in the list
    Dim lstValues As List
    Set lstValues = parList.ValueList
   
    ' display each item
    Dim iStrValue As Integer
    Dim parStrValue As StrParam
   
    For iStrValue = 1 To lstValues.Coun
        ' get another string parameter from the list
        Set parStrValue = lstValues.Item(iStrValue)
       
        MsgBox parStrValue.Value
    Next

End Sub
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11

Re: Получение статуса hide/show

Сообщение Artem » 18 апр 2012 11:22

Спасибо за код и помощь, но увы и ах 16 не держит стринги в лист: специально перепроверил на 19 - все отлично. Ну и ладно - можно же засунуть в него скажем видимые фичеры (если касаться конкретно этой задачи) и читать не текстовку, а собственно фичеры (в моем случае продукты) и уже с них снимать имя, ну или сразу работать с ними...к тому же есть еще дизайн тейблы помимо листа
Ps Оказалось главный виновник замедления - получение параметра по неправильному имени(упустил что "Component Activation State" требует некоего окружения до основного имени параметра), а вот добавление элемента и снятие visproperty с одного элемента - особо погоды не делало. На selection подумал из-за search т.к. уже сталкивался с его медлительностью - оказалось зря
Pps.заодно переделал получение пайпинговых параметров напрямик из Parameters продукта, на получение с PspAttribute вроде еще чуть быстрее стало...
animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14


Вернуться в CAA-RADE

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6