Вставка объекта с ручками из библиотеки по команде (кнопке) на палитре.
Существующий способ вставки библиотечного элемента универсален, а потому долог.
Не приходилось ли кому-нибудь разработать команду для вставки объектов из библиотеки по Имени объекта и указанию последовательности запросов к редактированию ручек (в самой команде)?
Например:
ВставкаОбъектаС_РучкамиПоИмени_И_РедактРучек( ИмяБиблиотечногоОбъекта, изменение ручки Имя1,..., Изменение ручки ИмяN)
Пример смонтированного видео
https://t.me/cadcpi/721
https://disk.yandex.ru/i/fjy_udAkQogrNA
Дублирую вопрос на форуме разработчиков
https://developer.nanocad.ru/redmine/boards/13/topics/3376?r=4225#message-4225
Комментарии
-
сама палитра для запуска команд, содержащих запросы была мной разработана ранее, что позволит более удобно обращаться к часто используемым библиотечным элементам (без этого бесконечного скроллинга)
https://youtu.be/AFDqzINt44U
https://www.youtube.com/watch?v=5hegR2O0cds
0 -
На 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\"?>"
"<Constraints>"
"<Constraint type="position3d">"
"<Parameter name="x" value="0.0" />"
"<Parameter name="y" value="0.0" />"
"<Parameter name="z" value="0.0" />"
"</Constraint>""<Constraint type="rotation">"
"<Parameter name="angle" value="90.0" />"
"</Constraint>"
"</Constraints>"))
(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 по этому поводу.0 -
Благодарю.
Буду пробовать.
На сколько я понимаю, как вариант, сам объект можно будет заменить габаритным параллелепипедом, чтобы придать процессу интерактивность: указание точки вставки, задание угла поворота, изменение параметров.Или можно вставить объект и динамически изменять его свойства?, что конечно предпочтительнее.
0 -
Олег. Почему именно нужно редактировать ручки:
Дело в том, что параметрический объект в ручках имеет алгоритмы управляющие параметром, а если просто задать свойство, то эти алгоритмы не будут учтены.
Например, в ручке заданы максимальное значение, шаг и т.п., которые можно принимать параметру.
Если применить параметру длины значение из GetDistance или Jig, то можно задать некорректное значение длины именно для конкретного объекта.
Конечно все условия можно прописать в алгоритме команды, но тогда это будет не универсальная команда вставки, которую можно использовать для вставки любого параметрического объекта, а команда вставки определенного объекта с определенным набором параметров для редактирования в определенной последовательности.
Универсальная же команда с редактированием ручек могла-бы вставлять любой объект с интерактивным редактированием любого количества параметров в любой последовательности.
Например вставка плиты с интерактивным определением только ширины, или
Вставка плиты с определением ширины и длины, или наоборот длины и ширины.0 -
С другой стороны, кто мешает определить длину через параметр!!!, А положение ручки тоже сделать функцией.
0 -
видео: параметр назначается ручкой, и положение ручки определяет параметр https://disk.yandex.ru/i/8uLY4vDLjP0FlA
0 -
0
-
Коллеги, не подскажете, на какие библиотеки ссылаются подчеркнутые функции из примера Руководства по API?
в наличии:ps (программирую время от времени).
0 -
не понос, так золотуха.
получение объекта библиотеки
dynamic library = Marshal.GetActiveObject("LibManager.CADLibrary.1");
на NET4,8 не ругается, но не компилируется под 23
на 6,0 ругается и не компилируется0 -
Чтобы работало на .net 6 объявил новый класс Marshal2
И в нем новый метод со вставкой из библиотек на C++. Метод перебирает зарегистрированные COM интерфейсы и ищет среди них LibManager.CADLibrary.1
0 -
Олег, премного благодарен.
Вставка отлично работает.https://disk.yandex.ru/i/mv1Vs6MDUZutmg
Надеюсь мне удастся осуществить задуманное.
0 -
На текущий момент удалось сделать вставку объекта из палитры по коду Олега.
Сделать панель инструментов с командами для вставки параметрических объектов из базы средствами наноКАДа не удалось, но я и не старался, ибо есть собственная.
Получить доступ к ручкам во время выполнения команды //пока// не удается.
https://disk.yandex.ru/i/FfDbdS24kLnJTQ0 -
Есть более лаконичный вариант получения COM. Без перебора. Но у меня он на некоторых компьютерах вызывает ошибку. С чем связана ошибка не знаю.
0
Разделы
- Все разделы
- 60 Общие вопросы
- 55 Работа nanoCAD в ОС Linux
- 427 Платформа nanoCAD
- 17 nanoCAD GeoniCS
- 88 nanoCAD BIM Строительство
- 42 nanoCAD Механика PRO
- 62 nanoCAD BIM Электро
- 11 nanoCAD BIM Вентиляция
- 13 nanoCAD BIM ВК
- 3 nanoCAD BIM Отопление
- 8 nanoCAD BIM СКС
- 57 nanoCAD BIM ОПС
- 3 nanoCAD Стройплощадка
- 4 nanoCAD Металлоконструкции
- 2 nanoCAD Конструкции PS
- 7 TDMS Фарватер
- 1 Облака точек
- nanoCAD GeoSeries
- NSR Specification
- Учебным заведениям и учащимся
- 8 nano360