Как определить изменение масштаба вида

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

Как определить изменение масштаба вида

Сообщение VladimirK » 30 июл 2014 10:38

Здравствуйте!
Используя CAA RADE, в Drafting сделал примитив для обозначения номера позиции.
Его составил из отдельных текстов с полкой выноской. Один текст является основным, остальные - дочерние.
При перемещении основного текста на виде дочерние тексты двигаются за ним.
Это реализовал путём "подписывания" на события изменения состояния основного текста с помощью интерфейсов CATInterfaceEvents и CATISpecEvents.
Однако столкнулся с такой проблемой: при изменении масштаба листа или вида расстояния между составляющими номера позиции изменяются в соответствии с этим масштабом, номер позиции "рассыпается" на составляющие. Поэтому после изменения масштаба нужно обновить примитив номера позиции.
Для этого пытаюсь определить событие, которое возникает после изменения масштаба.
Проблема заключается в том, что никак не могу найти такое событие.
Пытался подписаться на события вида (View), но при изменении масштаба их нет.
За каким объектом нужно поставить "наблюдение" чтобы поймать событие изменения масштаба?
Может кто-то сталкивался с такой проблемой.
Буду рад помощи.
VladimirK
Новичок
Новичок
 
Сообщения: 63
Зарегистрирован: 15 ноя 2011 21:44

Re: Как определить изменение масштаба вида

Сообщение Wireless_Fidelity » 30 июл 2014 16:30

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

Думаю, стоит попробовать подписаться на изменения CATIDftViewMakeUp (получается через CATISheet::GetCurrentViewMakeUp), т.к. именно в нем находятся методы управления масштабом.
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11

Как определить изменение масштаба вида

Сообщение VladimirK » 04 авг 2014 08:41

Здравствуйте!
Wireless_Fidelity, спасибо Вам за ответ.
Попробовал подписаться на изменение состояния CATIDftViewMakeUp.
Создал интерфейс наблюдателя CAAIDrwAnnotationsObserver и класс CAADrwAnnotationsObserver с реализацией. В классе с помощью макроса CATImplementClass указал, что у объекта типа ViewMakeUp интерфейс наблюдателя реализует класс CAADrwAnnotationsObserver:
Код: Выделить всё
#include "TIE_CAAIDrwAnnotationsObserver.h"
TIE_CAAIDrwAnnotationsObserver(CAADrwAnnotationsObserver);
CATImplementClass(CAADrwAnnotationsObserver, DataExtension, CATBaseUnknown, ViewMakeUp);

Но, к сожалению, отлавливаются только два события: при изменении координат вида и при изменении свойства "Отображение рамки вида". Изменение остальных свойств, масштаба в том числе, не отлавливается.
Может быть ещё кто-то занимался такой задачей... Пока занимаюсь поиском, если найду тип объекта, по которому можно отследить изменение масштаба, то напишу здесь.
Спасибо.
VladimirK
Новичок
Новичок
 
Сообщения: 63
Зарегистрирован: 15 ноя 2011 21:44

Re: Как определить изменение масштаба вида

Сообщение Wireless_Fidelity » 04 авг 2014 16:27

Может, какие event'ы визуализации посмотреть?
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11

Re: Как определить изменение масштаба вида

Сообщение VladimirK » 02 сен 2014 14:15

Здравствуйте!
Наконец-то удалось отловить событие изменения масштаба вида!

Wireless_Fidelity, я пробовал отловить события визуализации, это оказалось не тем, что нужно (отлавливаются события изменения графического представления).
Но этим советом Вы натолкнули на мысль, что нужно отлавливать другие события (и не через CATISpecEvents, CATIModelEvents).
В результате, опытным путём обнаружил, что масштаб вида является не просто атрибутом фичера, а параметром CATIDftViewMakeUp'а.
Поэтому изменение масштаба удалось отловить с помощью интерфейса CATIParmEvents.
Этот интерфейс используется для подписывания на события параметров.
В итоге, создал интерфейс и класс с реализацией наблюдателя, указал что у объекта типа ViewMakeUp этот класс реализует интерфейс наблюдателя.
Потом у вида получил интерфейс CATIDftViewMakeUp, далее нашёл параметр Scale и подписался на события изменения его значения.
В общем, наконец-то разобрался с событиями. :YAHOO:
Wireless_Fidelity, спасибо Вам за помощь!
VladimirK
Новичок
Новичок
 
Сообщения: 63
Зарегистрирован: 15 ноя 2011 21:44

Re: Как определить изменение масштаба вида

Сообщение Wireless_Fidelity » 07 сен 2014 19:54

Отличная идея! Бессовестно стыбрю и буду выдавать за свою ;)
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11


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

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

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