• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Потеря атрибутов 3D объекта при перехвате события начала редактирования объекта

Автор anton.gorschnev, 15.01.25, 11:30:40

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

anton.gorschnev

На IBaseLeader3D назначен атрибут. Подписался на события ksModelObjectNotify, обрабатываю  событие BeginProcess, пытаюсь найти ранее назначенные атрибуты и не нахожу их  :bebebe: (в цикле читаю атрибуты на 3D выноски,также отсутствуют атрибуты только на той выноске которая редактируется, на остальных выносках все читается, по переменно запускал редактирование на разных выносках). Подскажите  как это победить? Задача простая перехватить событие редактирования 3D выноски и вместо стандартного окна запустить свое.

UU


anton.gorschnev

Вы имете в виду при создание 3D выноски запретить ее редактирование? Не нашел где это можно сделать. Как потом перехватить попытку редактирования? Если только через события выбора + события нажатия кнопок в документе.

UU

Цитата: anton.gorschnev от 15.01.25, 11:46:41Вы имете в виду при создание 3D выноски запретить ее редактирование? Не нашел где это можно сделать. Как потом перехватить попытку редактирования? Если только через события выбора + события нажатия кнопок в документе.

https://help.ascon.ru/KOMPAS_SDK/23/ru-RU/ksmodelobjectnotify_beginprocess.html

anton.gorschnev

Это я и собирался сделать, только одно но, мне не нужно запрещать редактирование всех 3D выносок, мне нужно запретить только тех у которых есть назначенный мной ранее атрибут. Только при перехват этого события, атрибуты у выноски куда то пропадают. Да после отмены события редактирования возврата false с BeginProcess, компас остается в каком то странном состоянии, такое ощущение что процесс редактирования идет, просто не запустилась форма редактирования.


Lemieux

Цитата: UU от 15.01.25, 12:02:17Это всё щупать нужно.
Да что тут щупать? Там походу в API столько дырок, что с ума сойти можно. Делаешь точку переносом, то в AssociationObject и AssociationVertex пишется та же самая точка.

anton.gorschnev

Цитата: UU от 15.01.25, 12:02:17Это всё щупать нужно.
так я и пощупал, результат удручил. Может какой другой способ есть? Сейчас с события выбора попробую атрибуты прочесть, если нужный мне объект то глобальную переменную в тру поставить, дальше при запуске редактора обработать. Остается вопрос как из атрибута нужные данные получить для заполнения моей формы. В общем буду пока костыли делать, может что интересное по пути найду. Если кто решит проблему с потерянной атрибутикой скажите.

Vi2

Цитата: anton.gorschnev от 15.01.25, 11:30:40На IBaseLeader3D назначен атрибут. Подписался на события ksModelObjectNotify, обрабатываю  событие BeginProcess, пытаюсь найти ранее назначенные атрибуты и не нахожу их  :bebebe: (в цикле читаю атрибуты на 3D выноски,также отсутствуют атрибуты только на той выноске которая редактируется, на остальных выносках все читается, по переменно запускал редактирование на разных выносках). Подскажите  как это победить? Задача простая перехватить событие редактирования 3D выноски и вместо стандартного окна запустить свое.
Проверь равенство интерфейсных указателей на объекты, чтобы убедиться, что это один и тот же объект. Иногда проще сделать копию и работать с ней, а вот во время создания копии атрибуты могут теряться.

UU

Цитата: anton.gorschnev от 15.01.25, 11:55:56Это я и собирался сделать, только одно но, мне не нужно запрещать редактирование всех 3D выносок, мне нужно запретить только тех у которых есть назначенный мной ранее атрибут. Только при перехват этого события, атрибуты у выноски куда то пропадают. Да после отмены события редактирования возврата false с BeginProcess, компас остается в каком то странном состоянии, такое ощущение что процесс редактирования идет, просто не запустилась форма редактирования.
Да по false работает криво, правда я подписывался на IObject3DNotify, но смысла особо не меняет.
Сделал отмену процесса для True и всё нормально стало работать.

anton.gorschnev

Цитата: Vi2 от 15.01.25, 13:57:55Проверь равенство интерфейсных указателей на объекты, чтобы убедиться, что это один и тот же объект. Иногда проще сделать копию и работать с ней, а вот во время создания копии атрибуты могут теряться.
Проверял, совпадают. По мимо того что на выноску атрибут назначен, выноску сохраняю в хранилище объектов IUserDataStorage, при начале редактирования проверяю есть ли такой объект в хранилище, если да отменяю редактирование. Это в принципе работает, но лопатить каждый раз хранилище как то не очень, да и информацию с атрибута получить все равно не удается.

anton.gorschnev

Цитата: UU от 15.01.25, 14:11:53Да по false работает криво, правда я подписывался на IObject3DNotify, но смысла особо не меняет.
Сделал отмену процесса для True и всё нормально стало работать.
можно поподробнее

Lemieux

Цитата: anton.gorschnev от 15.01.25, 14:15:08Проверял, совпадают. По мимо того что на выноску атрибут назначен, выноску сохраняю в хранилище объектов IUserDataStorage, при начале редактирования проверяю есть ли такой объект в хранилище, если да отменяю редактирование. Это в принципе работает, но лопатить каждый раз хранилище как то не очень, да и информацию с атрибута получить все равно не удается.
Когда работаете с хранилищем, то следите за контекстом. А то если сохранить объект из детали, которая открыта на редактирование, то ничего не сохранится.


anton.gorschnev

Результирующий костыль. Если у кого есть предложения лучше, буду рад.
Обрабатывая событие BeginProcess, проверяю редактируемый объект на наличие в IUserDataStorages,там храню объекты для которых нужно открыть не стандартное окно редактирования, в моем случае IBaseLeader3D. Если выноска есть в базе то объект IBaseLeader3D не обнуляю и прерываю текущий процесс IApplication.StopCurrentProcess(true, null), BeginProcess возвращаю true. Далее ловлю событие EndProcess проверяю IBaseLeader3D на ноль, ели не ноль ищу нужный атрибут на выноске и читаю с него данные. Запускаю нужную форму для редактирования с полученными данными.
+ Благодарностей: 1

Lemieux

Цитата: anton.gorschnev от 15.01.25, 16:15:01Результирующий костыль. Если у кого есть предложения лучше, буду рад.
Обрабатывая событие BeginProcess, проверяю редактируемый объект на наличие в IUserDataStorages,там храню объекты для которых нужно открыть не стандартное окно редактирования, в моем случае IBaseLeader3D. Если выноска есть в базе то объект IBaseLeader3D не обнуляю и прерываю текущий процесс IApplication.StopCurrentProcess(true, null), BeginProcess возвращаю true. Далее ловлю событие EndProcess проверяю IBaseLeader3D на ноль, ели не ноль ищу нужный атрибут на выноске и читаю с него данные. Запускаю нужную форму для редактирования с полученными данными.
С крещением Вас!