Пишу на CAA RADE фичер CAADrwText для чертежа. Он реализует примитив для обозначения номера позиции в соответствии с ГОСТ (изображение во вложении).
Основные задачи - это сделать единый примитив, не распадающийся на составляющие при его перемещении по чертежу и вызов своего диалогового окна при клике мышью по фичеру.
Написал компоненты:
Add-In для Drafting; модуль генерации файла каталога фичера (*.CATfct);
класс, реализующий весь цикл команды (состояния, переходы между состояниями, обработчики);
класс диалогового окна;
класс, реализующий CATExtIEdit для запуска команды редактирования;
интерфейсы фичера, фабрики, классы с их реализацией;
класс, реализующий интерфейс CATIBuild.
StartUp фичера унаследовал от супертипа DrwText из каталога DraftCatalog.
У StartUp создал два атрибута:
MainText: tk_specobject, sp_IN (ведущий текст с полкой-выноской, CATISpecObject),
SlaveText: tk_list(tk_specobject), sp_NEUTRAL (ведомый текст - список объектов CATISpecObject).
При реализации класса фабрики каталог и фичер помещаю в контейнер вида, вид получаю так:
- Код: Выделить всё
CATIView_var drwView;
// ... получение вида drwView
CATISpecObject_var spView = drwView;
CATIContainer_var cont = spView->GetFeatContainer();
Создаются инстансы CAADrwText, задаются значения атрибутов без ошибок (CATISpecObject, полученные с CATIDrwText).
Объекты CAADrwText сохраняются в чертеже, при проверке они находятся в контейнере (cont = spView->GetFeatContainer()), считываются значения атрибутов.
Пробовал также помещать каталог и фичер в контейнер DressUp'а:
- Код: Выделить всё
CATIDrwDressUp_var dr = drwView->GetDressUp();
CATISpecObject_var spDr = dr;
CATIContainer_var cont = spDr->GetFeatContainer();
На данный момент проблема состоит в следующем:
хотя экземпляры фичера успешно создаются, но визуально на чертеже остаются отдельные составляющие (объекты текста CATIDrwText).
При клике мышью по-прежнему вызывается стандартное диалоговое окно правки текста, а не созданное мной.
Подскажите пожалуйста, как сделать чтобы при манипуляциях мышью "подсвечивались" все объекты, составляющие фичер (в StatusBar'е тоже видно, что выделяется не "CAADrwText", а составляющий его стандартный текст). Почему не отрабатывает метод CATExtIEdit::Activate для запуска команды редактирования?
Может быть нужно создавать StartUp не напрямую c атрибутами tk_specobject (ссылками на объекты CATIDrwText), а на основе вложенных StartUp (и с атрибутами tk_list, tk_component), как в примере "CAAPstIntegrateNewFeatures Use Case"?
И нужно ли дополнительно реализовывать визуализацию фичера, т.е. создавать класс унаследованный от CATExtIVisu и реализовать метод CATRep *BuildRep()?
Буду рад любой помощи, спасибо.