CATInit - принцип работы в примере CAAProductStructure.edu

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

CATInit - принцип работы в примере CAAProductStructure.edu

Сообщение Vladimir » 25 апр 2013 15:02

Добрый день.

Разбирая принцип работы "CAAProductStructure.edu" (CAAPstProductIconInit.m), встретился с такой проблемой. Не как не пойму, как работает привязка класса "CAAPstProductIconInit" к feature "CAAPstProductIconExt"?
Про него сказано тут CAADoc\Doc\online\CAAPstUseCases\CAAPstProductIcon.htm
Our CAAPstProductIconDoc document not only contains Products but also a feature extension named "CAAPstProductIconExt". The CAAPstProductIconInit::Init method that does the work is called when the CAAPstProductIconDoc.CATProduct document is opened.


И в самом деле, запуск класса происходит, только когда я открываю CAAPstProductIconDoc.CATProduct. При открытии любого другого продукта(.CATProduct), конструктор у класса не срабатывает.

Предполагаю, что скорей всего проблема тут.

CAAPstProductIconCont CATInit libCAAPstProductIconInit
в файле CAAProductStructure.edu.dico. Но например, если я захочу, что бы она работа при любом продукте (.CATProduct), то какие изменения следует произвести?(хотя бы намекните в каком направлении мне искать).
Vladimir
Новичок
Новичок
 
Сообщения: 31
Images: 0
Зарегистрирован: 10 фев 2008 15:44
Откуда: TLT

Re: CATInit - принцип работы в примере CAAProductStructure

Сообщение bit » 25 апр 2013 16:58

CAAProductStructure.edu.dico отвечает только за то, чтобы CAAPstProductIconInit.DLL была загружена в тот момент когда понадобится,
а именно когда будет попытка получить интерфейс CATInit у объекта класса CAAPstProductIconCont.

То, что у объектов типа CAAPstProductIconCont интерфейс CATInit определен и то, что его реализует класс CAAPstProductIconInit, определяется макросами в CAAPstProductIconInit.cpp:

TIEchain_CATInit(CAAPstProductIconInit);
CATImplementClass (CAAPstProductIconInit,
DataExtension,
CATBaseUnknown,
CAAPstProductIconCont);

Вобщем после код работает после загрузки документа, потому что была попытка получить интерфейс CATInit на объекте типа CAAPstProductIconCont. В других документах таких объектов нет.
bit
Участник
Участник
 
Сообщения: 166
Images: 3
Зарегистрирован: 24 июл 2008 11:45
Откуда: Минск

Re: CATInit - принцип работы в примере CAAProductStructure

Сообщение Vladimir » 29 апр 2013 17:59

Большое спасибо за ответ!

Мне не понятна история происхождения объекта CAAPstProductIconCont. Искал в руководстве, упоминается только в CAAPstProductIcon. Соотвествено возникают вопросы. Как он привязывается к документу, каким образом осуществляет доступ к интерфейсу CATInit?
Vladimir
Новичок
Новичок
 
Сообщения: 31
Images: 0
Зарегистрирован: 10 фев 2008 15:44
Откуда: TLT

Re: CATInit - принцип работы в примере CAAProductStructure

Сообщение VladimirK » 13 авг 2013 15:59

Здравствуйте.
В процессе работы возник вопрос по этой же теме.
Скажите пожалуйста, можно ли использовать интерфейс CATInit для того чтобы отследить момент открытия/инициализации чертежа CATDrawing.
Необходимо после открытия любого чертежа без участия пользователя (без вызова команды) сделать определённые действия.
Написал класс CAADrawingInit (class CAADrawingInit : public CATBaseUnknown).
С помощью макроса определил, что интерфейс CATInit для объекта типа CATDrawing реализуется в классе CAADrawingInit:
Код: Выделить всё
#include "TIE_CATInit.h"
TIEchain_CATInit(CAADrawingInit);
CATImplementClass( CAADrawingInit,
DataExtension,
CATBaseUnknown,
CATDrawing );

Потом по аналогии с примером "CAAPstProductIcon Use Case" в классе CAADrawingInit реализовал методы CATInit::Init(CATBoolean) и CATInit::GetRootContainer(CATIdent).
В файле словаря также написал: CATDrawing CATInit libCAADrawingInit.
Также обнаружил в файле словаря DraftingUI.dic из поставки CATIA, что CATDrawing реализует интерфейс CATInit в библиотеке libCATDraftingUI.
Могу ли я дополнительно реализовать этот интерфейс ещё и в своей библиотеке?
При открытии чертежа моя библиотека CAADrawingInit не загружается, код не отрабатывает.
Может быть при открытии чертежа не происходит вызов интерфейса CATInit и нужно использовать другой способ?
Спасибо.
VladimirK
Новичок
Новичок
 
Сообщения: 63
Зарегистрирован: 15 ноя 2011 21:44

Re: CATInit - принцип работы в примере CAAProductStructure

Сообщение bit » 13 авг 2013 20:23

Если интерфейс уже определен на каком-то фичере, то переопределить его нельзя, по крайней мере легально.
Попробуйте CATIUExitIO, должно помочь.
bit
Участник
Участник
 
Сообщения: 166
Images: 3
Зарегистрирован: 24 июл 2008 11:45
Откуда: Минск

Re: CATInit - принцип работы в примере CAAProductStructure

Сообщение VladimirK » 15 авг 2013 09:49

Здравствуйте.
Теперь понятно, значит попробую использовать интерфейс CATIUExitIO.
Из метода CATIUExitIO::OnOpen можно получить имя файла.
Постараюсь по этому имени отфильтровать файл чертежа *.CATDrawing и получить открывшийся документ чертежа для обработки.
bit, большое спасибо за помощь!
VladimirK
Новичок
Новичок
 
Сообщения: 63
Зарегистрирован: 15 ноя 2011 21:44

Re: CATInit - принцип работы в примере CAAProductStructure

Сообщение Kartz » 20 июл 2016 17:47

Vladimir писал(а):Большое спасибо за ответ!

Мне не понятна история происхождения объекта CAAPstProductIconCont. Искал в руководстве, упоминается только в CAAPstProductIcon. Соотвествено возникают вопросы. Как он привязывается к документу, каким образом осуществляет доступ к интерфейсу CATInit?



I can able to call all product document by using CATProduct in dictionary file eg: CATProduct CATInit libIconMod
But I cant able to call GetIconForProduct method.

As it has CAAPstProductIconExt in the corresponding dico file
CAAPstProductIconExt CATICustoIconProduct libCAAPstProductIconImpl

Can anyone help how to call GetIconForProduct for changing the icon of Product in the Specification tree?
Kartz
Новичок
Новичок
 
Сообщения: 4
Зарегистрирован: 20 июл 2016 15:17


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

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

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

cron