Как програмно конвертировать Product в Part со ссылкой

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

Как програмно конвертировать Product в Part со ссылкой

Сообщение byrakham » 13 янв 2012 03:48

Как програмно конвертировать Product в Part со ссылкой, чтобы при изменении Product-a , Part изменялся.
Я еще зеленый!
Я начал вот с этого:
Код: Выделить всё
  Application catApp = null;
                catApp = Marshal.GetActiveObject("CATIA.Application") as INFITF.Application;
                if (catApp != null)
                {
                    ProductDocument productDocument = null;
                   
                    productDocument = catApp.ActiveDocument as ProductDocument;
                    if (productDocument != null)
                    {
                        Selection selection = catApp.ActiveDocument.Selection;
                        var product = productDocument.Product;
                        if(product !=null)
                        {
                            selection.Add(product.Products.Item(2));

                            catApp.RefreshDisplay = true;
                            catApp.StartCommand("Generate CATPart from Product");
                            catApp.RefreshDisplay = true;
                         
                            //SendKeys.Send("{ENTER}");
                        }
                       

                     
                    }
                }

А дальше как-то не могу придумать - может как-то по другому с помощью ассоциативности. ..????
Help, please!
byrakham
Новичок
Новичок
 
Сообщения: 4
Зарегистрирован: 13 янв 2012 03:38

Re: Как програмно конвертировать Product в Part со ссылкой

Сообщение Artem » 18 янв 2012 10:10

Надо сделать дополнительный функционал по вставке сгенерированного парта, который(функционал -либо макрос вынесенный на панельку, либо темплейт опять же с помощью васика поднимающийся наверх) на самый верхний уровень сборки будет вставлять еще переменную, в которую будет записываться последнее значение размера файла исходной сборки и экспертное правило, что-то типа:
Код: Выделить всё
if CATIA.FileSystem.GetFile("C:\tt.CATProduct").size<>paramoldsize
paramoldsize=CATIA.FileSystem.GetFile("C:\tt.CATProduct").size
'regenerate part and reinserting part from C:\tt.CATProduct
end if
 

Путь лучше всего засунуть куда-нибудь в переменную вновь сгенерированного парта - благо генерить вы собираетесь через макрос...А потом в экспертном правиле не через абсолютный путь, как в моем примере обращаться к исходной сборке, а например, пройти всю сборку с отбором Allcatpart в названии - чтобы внутрь правила не лазить, хотя если у вас это получится, то лучше конечно абсолютный путь. Можно записать путь + имя парта в переменные главной сборки. А в правиле например по парентам до них добраться....
Я если честно не смотрел, но вроде через скрипт создать его нельзя - придется создать дополнительный парт/продукт с которого и будем его копировать(естественно предварительно открыв и закрыв по окончании)
Можно еще что-то подобное вместо экп. правила на реакцию повесить....но придется обдумать на что ее завязать для запуска....
Если не устраивет size по надежности, то можно из этого же правила запустить через ExecuteScript и catScriptLibraryTypeVBAProject CATVba, с использованием WinApi на получение даты модификации + аналогичная работа с переменной
animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14

Re: Как програмно конвертировать Product в Part со ссылкой

Сообщение byrakham » 21 янв 2012 18:23

Спасибо, Artem!
Интересная идея про параметр с объемом файла... я это попробую.
Пока я сделал специальную конвертацию Product в Part по нажатию кнопки - мой код выбирает все тела - и улаживает их в Assemble, и потом вставляет в MainBody.
Когда же я открываю деталь то я могу ее обновить тоже по специальной кнопке - я ищу нужную мне сборку (у меня не получилось этого сделать без открытия файла сборки, потом я ее закрываю)
выбираю опять все тела - и если есть разница то обновляю дерево детали.

Но у меня появился новый вопрос.
Если я добавил в деталь какие-то элементы вручную - к примеру вырезал какое-то отверстие, уже после конвертации. То при "моем" обновлении оно затирается.
Как мне заменить shape или body в Part что бы оставить ссылки на имеющиеся добавленные элементы(эскизы, призмы, полости..)?
Как бы подменить тело на другое - уже обновленное, а связи оставить ?
byrakham
Новичок
Новичок
 
Сообщения: 4
Зарегистрирован: 13 янв 2012 03:38

Re: Как програмно конвертировать Product в Part со ссылкой

Сообщение Artem » 23 янв 2012 09:21

Нуууу...можно создать такое же экспертное правило ...только его уже кидаем не в главную сборку для нашего упрощенного парта, а в собственно парт что-то типа этого:
Код: Выделить всё
CATIA.StartCommand "Undo"
ss = CATIA.MsgBox("You must modify the original assembly!!!" + Chr(10) + Chr(13) + _
"Yes - open in new window" + Chr(10) + Chr(13) + _
"No - Replace in this assembly" + Chr(10) + Chr(13) + _
"Cancel - Cancel", 3, "Select variant:", "", 0)
Select Case ss
Case 6
'Open orig. assembly in new window
Case 7
'Replace our Simple part to orig. assembly
Case 2
'Do nothing
End Select

Единственно что - во втором случае обратный реплейс, придется либо отдать на откуп самому пользователю, либо вообще нафиг убрать эту возможность(оставить только правку в новом окне)...Я бы остановился на первом вариате + добавил бы префикс /суффикс в partnumber.....что-то типа PN_chekin PN_chekout и менял их при реплейсах туда сюда (обычно дерево настроено на показ PN - соответственно будет видно когда подсборка требует обратный реплейс на упрощенку) И еще я не уверен что получится отреплейсить "самого себя"(вернее свой контейнер) - парт куда вставлено запустившееся правило...Если нет - то придется делать через запуск VBA + timer.ocx (settimer/killtimer) - это должно сработать
А воообще...можно пойти по экстенсивному пути-коль уж итак две кнопки можно добавить и третью на изменение :-)
animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14


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

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

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