В общем товарищ АлексЮстасу в теме https://geodesist.ru/threads/xdlabel-sozdanie-nadpisej-svjaz-nadpisej-s-obektami.93537/ подал идею использования xdata для связи объектов и попросил не оффтопить в его теме, в связи с чем и создал эту. Мне стало интересно, для чего она практически может быть применена, без излишнего геморроя. В результате сделал небольшую менюшку с несколькими командами. 1) Включить/выключить динамику (что бы обрабатывались все изменения объектов в реальном времени без всяких кнопок обновления и тп) 2) Метка со свойствами кривой - добавляет метку в виде мтекста, связанную с выбранной кривой, отображающую ее длину и площадь. Метку можно двигать, менять стиль/цвет размер и тд, текст в ней изменить можно, но он вернется при любом изменении в связанной кривой. При изменении кривой(положения/геометрии) метка автоматически подвинется вместе с ней и обновит параметры, которые в ней отображены. Связь работает в пределах чертежа, обновление метки происходит через событие изменения кривой, поэтому есть прикольный эффект, при копировании линии метка оказывается связанной с обеими линиями, исходной и скопированной, в связи с чем, будет отображать данные последней потроганной) Дорабатываемо, но пока в этом направлении не действовал. 3) Метка с отметкой в виде мультивыноски, устанавливается на кривую и отображает отметку в месте вставки, тут 2 команды, установить метку и подвинуть ее вдоль кривой в любое место, причем динамически будет показываться отметка кривой, подвинуть можно как кнопкой на панели, так и пунктом в меню по ПКМ если выбрана мультивыноска, но должна быть выбрана только одна. С мультивыноской можно делать все что угодно, при изменении положения линии или запуске команды ее перемещения она вернется обратно на линию. Визуальное отображение интерполяции. 4) Метка с координатами - динамическая мультивыноска, показывающая координаты точки вставки, не привязана ни к чему поэтому будет полноценно работать в любом чертеже где включена динамика, то есть можно копировать между чертежами и ничего с ней не будет. обновляет свое содержимое при любом изменении, то есть написать в ней ничего нельзя так как сразу вернутся координаты ее точки вставки. Ну в общем это такой, тестовый вариант без полноценных настроек чисто посмотреть принципиальные возможности такой связки, запускать через netload, на ленте должна появиться менюшка. PS ПОЛЬЗОВАТЬСЯ С ОСТОРОЖНОСТЬЮ, ВЕРСИЯ ТЕСТОВАЯ, МОЖЕТ ВЫЗЫВАТЬ ПАДЕНИЯ АВТОКАДА. В версии 0.3 исправил баг, вызывающий крит найденный товарищем АлексЮстасу, добавил возможность командой - подвинуть отметку двигать так же и метки с координатами с динамическим изменение координат прямо во время движения. В версии 0.4 добавлена команда связи линии и таблицы с данными этой линии команда на панели - добавить связанную таблицу В версии 0.5 добавлена команда, формирующая связанную с видом профиля и трубами цивила область данных, показывающую длину/уклон, ведущую себя как полноценная область данных цивила, то есть динамически изменяется при изменении параметров труб, но элементы создаются и связываются единовременно, то есть еси что-то из элементов удалить то при изменении труб они не восстановятся, но в отличии от стандартной области цивила имеют полную свободу, то есть любые числа можно независимо двигать и менять все параметры, кроме содержания.
alz, спасибо огромное - я за темой слежу который год. И не мог получить практической реализации хоть чего-то с XDATA/
XData (как и Dictionaries, Xrecord в AutoCAD) - всего лишь место для хранения нужных пользователю/программисту данных при графическом элементе. Любых описательных. Например, так можно объекты чертежа определить: ЛЭП, контур растительности, горизонталь, пункт ГГС и т.д. Просто к графическому элементу присоединяете XData с названием "ЛЭП" или "горизонталь". Или присоединяете XData "объекты", в одном из полей которого записано "ЛЭП" или "горизонталь". Так же в полях XData можно определить характеристики объектов: вольтаж, число проводов ЛЭП, тип растительности, высоту горизонтали, номер, отметки пункта и т.д. Тем самым можно превратить чертеж из графической модели в "объектную". Т.е. чертеж CAD так превращается в другой продукт - пригодный для программного анализа, для передачи в ГИС или т.п. И появляются возможности эти данные использовать - для выбора, назначения соответствующих графических свойств, проверок правильности и т.д, и т.п. Для создания нужных надписей, наконец - как в этой теме или в исходной о проекте XDLabel. В частности, XData могут быть использованы для описания связей между объектами - записываем в XData при объекте, что он связан с таким-то, так-то. И можем соответственно эту связь поддерживать. Об этом тоже эта тема и проект XDLabel. Т.е. это достаточно универсальное средство. Как и Dictionaries и Xrecord. Важно! Мне корифеи AutoCAD постоянно, настоятельно не рекомендуют применять именно XData, но использовать словари (Dictionaries) или Xrecord. Я беру XData только по бедности, для моделирования программ - их легче использовать тем дилетантам от лисп, которые мне помогают. Была бы возможность, давно бы все делал на Dictionaries. --- Сообщения объединены, 19 июн 2023, Оригинальное время сообщения: 19 июн 2023 --- Меня это и резидентность программы останавливает. Кстати, в предыдущей версии получил Fatal error, когда делал что-то уже обычное свое. Не могу терять контроль и получать непредсказуемость в работе - зашкаливает уже та, что создает сам AutoCAD... Или при следующих запусках AutoCAD программа действовать не будет, не прописывается?
Это тестовая версия, где все по умолчанию выключено, во избежание так сказать, так то делается автозагрузка и все работает постоянно в фоне, на остальные мои плагины кнопки появляются при прогрузке автокада сразу, здесь автоверсию я пока делать не стал. Ну так на то и тестовые версии, за день сделать абсолютно без багов работающую программу, такой сложности для меня таки непросто, какой-то функционал добавляется, приносит свои баги, что-то правится, это в принципе нормальный рабочий процесс разработки чего-то.
Рискнул. Нажал Подвинуть метку, указав мультивыноску - фатал. Еще заметил, что при сдвиге ближних вершин метка кривой не всегда реагирует. Кстати, вместо мультивыноски с координатами обычно делают динамический блок. Правда, для отображения новых координат блоку нужно делать REGEN после перемещения. Но как модельный вариант - нормально.
Ну тут как минимум проблема в том, что динамический блок программными средствами создать невозможно, то есть программа расширяется дополнительными двг файлами ресурсов в которых эти блоки будут храниться, та и смысл если мультивыноска прекрасно отображает то же самое? Это кстати пример велосипеда, можно сделать программную выноску, а можно использовать встроенные средства автокада - динамический блок, в первом случае не требуется никаких регенов, но требуется программа, во втором случае вы сами назвали нюанс) Вы прирожденный тестер, самое интересное что кнопка подвинуть метку предназначена для передвижения высотных меток, созданных командой - Отметку на объект и заточена на взаимодействие двух объектов, поэтому видимо не найдя второй что-то пошло не так, а я даже не думал попробовать применить на любую другую метку, завтра поправлю конечно))
В общем в одной из тем натолкнули на мысль динамической связки объекта и его данных, сделал тестовый вариант связи линии и таблицы Таблица привязана к начальной точки линии, может быть отодвинута от нее и это смещение так же будет учитываться при работе с линией. Таблица содержит в себе такие данные линии, которые невозможно изменить из стандартной палитры свойств автокада или которые в ней вообще не показаны - угол этой линии, ее 2д длина и 3д длина, при обычном редактировании линии эти параметры в таблице обновляются автоматически в реальном времени, при изменении этих данных в таблице линия меняется в соответствии с прописанным параметрами. Новая версия в шапке. При установке длины линии в 0, через таблицу будет невозможно изменить параметры, так как направление линии в этом случае будет являться нулевым вектором, в целом можно сохранить направление, которое было до обращение длины линии в 0, но в тестовой версии думаю это не обязательно.
Недавно разбирался с размерами, и оказалось что все мы постоянно пользуемся "практической реализацией ХDATA" напрямую от автодеска, при любом изменении находящегося в чертеже размера от его выбранного стиля, все эти изменения фиксируются в XDATA собственно через это и реализована возможность любому размеру придать какие-то уникальные свойства. В этом кстати и причина некоторых багов в программах, работающих с размерами, например программы типа dimrr, которые добавляют рандомный факт с точностью, которая прописана в размере, например до 3 знака, а у самого размера в чертеже точность переопределена до первого знака в xdata, вот и получается что-то типа такого: 1550 1548.358
Еще один пример использования Xdata и отслеживания событий, но тут все конечно гораздо сложнее, увязано между собой 3 элемента, вид профиля цивила, трубы цивила и группа мтекстов и линий, образующих область данных, все конечно еще сырое, но сам принцип думаю понятен.
А так же для штриховок, видовых экранов, для мтекстов и текстов - XData используются AutoCAD. Гиперссылки - вообще суть XData с названием "PE_URL" с соответствующими инструментами. В Map 3D XData замечены в топологических моделях - в них записаны ID связанных элементов и пр. По поводу XData в "обычных" примитивах, Александр Ривилис: "По мере появления новых типов объектов и добавления к некоторым старых новых свойств, часть свойств стала мигрировать в расширенные данные. Иногда наоборот - в старых версиях это были расширенные данные, а в новых это стали отдельные свойства и методы без использования расширенных данных". Еще раз, на всякий случай: XData программисты считают далеко не самым лучшим средством, рекомендуют Extension Dictionary. Для задач с небольшими объемами данных, при ничтожных ресурсах для программирования XData могут быть вполне применимы. Для решений серьезнее стоит прислушаться к опытным программистам.
Судя по всему это событие отслеживания изменений через табличку свойств, в старых версиях api автокада оно было не реализовано, тут если только прикручивать проверку на версию и блокировать загрузку этого модуля, или просто написать - для autocad 2021+