Вставка объекта с ручками из библиотеки по команде (кнопке) на палитре

Существующий способ вставки библиотечного элемента универсален, а потому долог.
Не приходилось ли кому-нибудь разработать команду для вставки объектов из библиотеки по Имени объекта и указанию последовательности запросов к редактированию ручек (в самой команде)?
Например:
ВставкаОбъектаС_РучкамиПоИмени_И_РедактРучек( ИмяБиблиотечногоОбъекта, изменение ручки Имя1,…, Изменение ручки ИмяN)

Пример смонтированного видео

Дублирую вопрос на форуме разработчиков

сама палитра для запуска команд, содержащих запросы была мной разработана ранее, что позволит более удобно обращаться к часто используемым библиотечным элементам (без этого бесконечного скроллинга)

https://youtu.be/AFDqzINt44U

https://youtu.be/AFDqzINt44U

https://www.youtube.com/watch?v=5hegR2O0cds

https://www.youtube.com/watch?v=5hegR2O0cds

На developer.nanocad.ru уже есть примеры со вставкой элемента. Если говорить про COM интерфейс, есть возможность использовать XML для указания параметров вставки, тогда не потребуется использовать командные методы. Ручки объекта как правило завязаны на какие-то параметры внутри объекта, поэтому можно редактировать не сами ручки, а те параметры, которыми управляют ручки.
Пример в видео по ссылке
https://disk.yandex.ru/i/UR3dnEwV-ae9Ww

Ниже код из видео. Часть кода позаимствована отсюда
https://t.me/ModelStudioCS/37606.

(Vl-load-com)
(setq obj (vlax-get-acad-object))
(setq ICADLibrary (vla-GetInterfaceObject obj “LibManager.CADLibrary.1”))
(setq xml (strcat
“<?xml version=\"1.0\" encoding=\"utf-8\"?>”
“”
“”
“”
“”
“”
“”“”
“”
“”
“”))
(vlax-invoke ICADLibrary “Insert” “{1D0DE154-8841-448B-A9CD-9C06AFB033DF}” xml)

(setq obj (entlast))
(setq vlaobj (vlax-ename->vla-object obj))
(setq Elm (vlax-get-property vlaobj “Element”))
(setq Param_List (vlax-get-property Elm “Parameters”))
(vlax-invoke Param_List “SetParameter” “DIM_LENGTH” “100” “Длина”)
(vlax-invoke vlaobj “UpdateGraphics”)

Но всё это работает для типа объекта Параметрическое оборудование (linCSParametricSolid), описание структуры xml для других типов объектов я не видел.
И вероятно, что-то должно быть в SDK касательно .net, пока не смотрел SDK по этому поводу.

Благодарю.
Буду пробовать.
На сколько я понимаю, как вариант, сам объект можно будет заменить габаритным параллелепипедом, чтобы придать процессу интерактивность: указание точки вставки, задание угла поворота, изменение параметров.

Или можно вставить объект и динамически изменять его свойства?, что конечно предпочтительнее.

На developer.nanocad.ru уже есть примеры со вставкой элемента. Если говорить про COM интерфейс, есть возможность использовать XML для указания параметров вставки, тогда не потребуется использовать командные методы. Ручки объекта как правило завязаны на какие-то параметры внутри объекта, поэтому можно редактировать не сами ручки, а те параметры, которыми управляют ручки.
Пример в видео по ссылке
https://disk.yandex.ru/i/UR3dnEwV-ae9Ww

Ниже код из видео. Часть кода позаимствована отсюда
https://t.me/ModelStudioCS/37606.

(Vl-load-com)
(setq obj (vlax-get-acad-object))
(setq ICADLibrary (vla-GetInterfaceObject obj “LibManager.CADLibrary.1”))
(setq xml (strcat
“<?xml version=\"1.0\" encoding=\"utf-8\"?>”
“”
“”
“”
“”
“”
“”“”
“”
“”
“”))
(vlax-invoke ICADLibrary “Insert” “{1D0DE154-8841-448B-A9CD-9C06AFB033DF}” xml)

(setq obj (entlast))
(setq vlaobj (vlax-ename->vla-object obj))
(setq Elm (vlax-get-property vlaobj “Element”))
(setq Param_List (vlax-get-property Elm “Parameters”))
(vlax-invoke Param_List “SetParameter” “DIM_LENGTH” “100” “Длина”)
(vlax-invoke vlaobj “UpdateGraphics”)

Но всё это работает для типа объекта Параметрическое оборудование (linCSParametricSolid), описание структуры xml для других типов объектов я не видел.
И вероятно, что-то должно быть в SDK касательно .net, пока не смотрел SDK по этому поводу.

Олег. Почему именно нужно редактировать ручки:
Дело в том, что параметрический объект в ручках имеет алгоритмы управляющие параметром, а если просто задать свойство, то эти алгоритмы не будут учтены.
Например, в ручке заданы максимальное значение, шаг и т.п., которые можно принимать параметру.
Если применить параметру длины значение из GetDistance или Jig, то можно задать некорректное значение длины именно для конкретного объекта.

Конечно все условия можно прописать в алгоритме команды, но тогда это будет не универсальная команда вставки, которую можно использовать для вставки любого параметрического объекта, а команда вставки определенного объекта с определенным набором параметров для редактирования в определенной последовательности.

Универсальная же команда с редактированием ручек могла-бы вставлять любой объект с интерактивным редактированием любого количества параметров в любой последовательности.
Например вставка плиты с интерактивным определением только ширины, или
Вставка плиты с определением ширины и длины, или наоборот длины и ширины.

F_длина.PNG

С другой стороны, кто мешает определить длину через параметр!!!, А положение ручки тоже сделать функцией.

F_ручка.PNG

видео: параметр назначается ручкой, и положение ручки определяет параметр https://disk.yandex.ru/i/8uLY4vDLjP0FlA

4002.PNG

4003.PNG

Коллеги, не подскажете, на какие библиотеки ссылаются подчеркнутые функции из примера Руководства по API?
в наличии:

image.png

ps (программирую время от времени).

не понос, так золотуха.

получение объекта библиотеки
dynamic library = Marshal.GetActiveObject(“LibManager.CADLibrary.1”);

на NET4,8 не ругается, но не компилируется под 23
на 6,0 ругается и не компилируется

image.png

image.png

Чтобы работало на .net 6 объявил новый класс Marshal2

image.png

И в нем новый метод со вставкой из библиотек на C++. Метод перебирает зарегистрированные COM интерфейсы и ищет среди них LibManager.CADLibrary.1

image.png

Олег, премного благодарен.
Вставка отлично работает.

https://disk.yandex.ru/i/mv1Vs6MDUZutmg

Надеюсь мне удастся осуществить задуманное.

На текущий момент удалось сделать вставку объекта из палитры по коду Олега.

Сделать панель инструментов с командами для вставки параметрических объектов из базы средствами наноКАДа не удалось, но я и не старался, ибо есть собственная.
Получить доступ к ручкам во время выполнения команды //пока// не удается.
https://disk.yandex.ru/i/FfDbdS24kLnJTQ

Есть более лаконичный вариант получения COM. Без перебора. Но у меня он на некоторых компьютерах вызывает ошибку. С чем связана ошибка не знаю.

ссылка к сожалению не работает