Ошибка ksSetMacroParam

Автор A.n.d.r.e.w, 12.04.24, 13:11:59

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

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

A.n.d.r.e.w

Привет форум.
Пишу библиотеку по типу стандартной gayka.rtw
Сначала для указания точки использовал ksCursor и все было хорошо
Но потом решил переделать всё на IProcess2D и начались глюки
Глюки происходят при редактировании по даблклику, точнее при окончании
редактирования при записи параметров редактирования в макрообъект
блуждающая ошибка: иногда всё норм, иногда ksSetMacroParam возвращает ошибку
а иногда вообще в мой макро записывается имя другой обрабатывающей библиотеки.
03.png
02.png
Кнопаю на паскале в делфи. Сломал мозг пытаясь найти причину.
Потом начал раскуривать ВизуалСи-шный пример Gayka1 там как раз мой вариант.
Вроде все раскурил, не помогло, психанул, установил ВижуалСтудию откомпилировал,
начал гонять.. мля.. такаяж фигня.
Снимок экрана 2024-04-12 123057.png
Пробовал на разных компах, отключал, удалял свою библу, все тоже самое.
Вот хочу удостовериться.. у меня одного так?
Версия Компас 21.0.24
Если не трудно попробуйте у себя.
Ну а если есть соображения, то помогите.


A.n.d.r.e.w

#1
Для того чтобы глюк произошел надо:
вставить в чертеж объект  из библиотеки ..\SDK\Samples\Visualc\Gayka1
хоть болт хоть гайку пофиг, и несколько раз поредактировать даблкликом.
Иногда с первого раза слетают параметры иногда с пятого, можно вставить несколько
объектов и тыркать их поочереди.
Важно! нужно чтобы панель свойств была развернута.
Если она свернута и выскакивает только в процессе редактирования работает без ошибок

Собственные соображения:
В функции ksSetMacroParam по умолчанию имя библиотеки и имя файла передаются нулевыми
типа тогда сохраняются имена для текущей библиотеки
так вот если передавать эти имена явно то работает без ошибок
Глюк связан как-то с менеджером событий ILibPropertyObject
если отключить реализацию этого механизма то тоже все работает правильно
и еще функция EditMacroMode которая возвращает референс редактируемого макро
после запуска процесса начинает возвращать 0 и в моем и в Сишном примере,
не знаю должно так быть или нет.

A.n.d.r.e.w


p3452

В примере Gayka на C# подобного глюка не наблюдаю.
(Хотя, есть пара других багов - с иконками и обновлением фантома)

UU

Свой проект на Delphi прикрепите.

A.n.d.r.e.w

Цитата: p3452 от 12.04.24, 14:05:34В примере Gayka на C# подобного глюка не наблюдаю.

Спасибо, но там процесс реализуется через ksPlacement немного не мой случай


A.n.d.r.e.w

Вот проект

только там рабочий вариант
в модуле dkoObj  в функции TDkoObject.setParam; нужно перекомментировать строку с ksSetMacroParamНеверный ID вложения.

перезалил проект. не хватало кое чего )

UU


A.n.d.r.e.w

Вот сделал пробник. Всё ненужное удалил.
Там и rtw есть может каждый попробовать
https://disk.yandex.ru/d/MCwa8ds58T8bpw

та же ошибка:

UU

Можете пробовать.

A.n.d.r.e.w

ну так в чем была ошибка? что исправили?

UU

Прописал имя, путь и команду которой будет осуществляться редактирование макроэлемента, в справке внимательнее нужно читать.
https://help.ascon.ru/KOMPAS_SDK/22/ru-RU/kssetmacroparam.html?q=ksSetMacroParam
+ Благодарностей: 1

A.n.d.r.e.w

Цитата: UU от 15.04.24, 08:41:25в справке внимательнее нужно читать.
золотые слова  :grin:  Спасибо!
да зациклился на примере и внимание притупилось.
Понятно все теперь.
После двойного клика Компас лезет в библиотеку в которой создается обработчик событий процесса
после чего выходит и ждать бы ему теперь событий, но макрообъект то теперь сделался выделенным
(селектированным) и панель свойств развернута, значит Компас  хочет отобразить имя макрообъекта
тогда он лезет опять в библиотеку создает другого менеджера и через его функцию
ILibPropertyObject.GetGroupName получает имя. только вот получается что он таким образом опрашивает
не только библиотеку выделенного макро, а все подключенные причем не понятно в каком порядке. так получается?
После чего происходит событие соответствующее и менеджер событий процесса создает макро записывая
в него левые названия. А когда макро создается впервые механизм то такой же, но селектированных макро нет
другие библиотеки не используются. Имена записывается правильные.