Сделал пример из американского примера. Он был не на XData, а на Object Data, но не суть. Я экспортом-импортом создал часть аналогичных XData. На 19 типов объектов: огни, вертикальные структуры и пр. Там сейчас и XData, и Object Data. Шикарный пример - отдавать жалко! Кстати, он, кажется, топологически корректный. Должен быть, не помню, давно было. Для этого и существует Map 3D! Там есть специальный инструменатрий. Не сахар, но жить можно. Они и для меня отнюдь не главное. Но если удастся найти правильные подходы с простым-явным случаем - с надписями, то проще будет и с остальными зависимостями.
А! Понял. Логично. Я ж со своего вершка пока смотрел - про реакции практически не думал. Подумаю, обсудим! Но не быстро.
Но "равность" статуса связанных надписи и объекта, как по мне, никак не отменяет концепцию "объектной модели". Семантика объекта первична? Окей. Но чтобы изменить какое-то семантическое поле объекта (например, вольтаж), нам так или иначе придется прибегнуть к какому-то вспомогательному интерфейсу, грубо говоря, какой-либо палитре-меню, посредством которой можно изменить условные 0,4кВ на 10кВ. Но ведь вместо внесения изменений посредством палитры-меню, мы можем изменить саму надпись. В данном случае надпись будет выступать в качестве дополнительного интерфейса, посредством которого в семантику объекта вносится изменение.
Выше приложил пример как раз объектной модели - все объекты определены в Object Data (это в Map/Civil), часть в XData, у них есть поля для нужных характеристик, во многих полях определены значения характеристик. Надписывай себе что вздумается или для бумотчета нужно. Надписи в такой модели нужны только летчикам, штурманам и, немного, стюардессам. А автопилоту не нужны в принципе, и даже мешать будут, тормозя. Кстати, обратите внимание в примере на цвета-веса-стили и пр. В объектной модели они вообще не важны - их всегда можно сделать такими, как нужно для конкретного использования. Нужна правильная геометрия и объектные определения. В объектной модели все может быть хоть в одном слое, черным и пр. - если все будет соответственно объектно определено, то различить и назначить можно что угодно. Теоретически, т.е. для правильности понимания - отменяют. И фактически тоже отменяют, т.к. надписи де-факто делают несвязанными же, не производными. Но: Согласен, мы же люди, а не компы! Нам наглядность как раз оч. нужна. Только сработает этот ход исключительно в том случае, когда связи надписей и объектов уже определены, и тогда изменения - что в данных объекта, что в содержании надписей - уже будет возможность учесть.
Это понятно. Но я имел в виду конкретное техническое решение этого момента, так как это представлено в программе написанной alz. В данном случае, если я правильно уловил логику его плагина, изменение надписи влечет за собой изменение в семантике объекта. То есть, мы по умолчанию не можем попасть в ситуацию когда на заборе нарисовано одно, а за забором дрова - надпись и семантика объекта связаны. Просто ты воспринимаешь надпись, только как надпись - Текст или Мтекст. Но что, если посмотреть на надпись, как на некое DCL-окно, с помощью которого можно изменить свойства объекта? Окно, аналогичное окну какой-либо ГИС, посредством которого изменяются атрибуты?
Согласен. Я это тоже подразумеваю. Прямо для этого в этом XDLabel уже сделано XDLABEL_UPDATEL - для восстановления содержания, свойств и положения надписей. В плане была еще одна команда - для обновления содержания надписей в семантике объекта (в его XData), для фиксации измененных свойств и параметров надписей. (Хотя, это сейчас можно сделать XDLABEL_LINK). Само собой, оч. хотелось бы сделать это не только командами, а прямой реакцией. Как делает alz. Хотя, это не всегда оправдано - так можно и потерять данные, если изменения были неправильными. Можно потерять контроль над состоянием данных.
Кстати, если есть желание, то Вы можете принять участие в проекте XDLabel - участвующие сейчас полтора программиста будут только счастливы. Например, для начала написать лисп для однострочных текстов XDLABEL_EDITDT - который будет делать все то же, что штатный автокадовский редактор текстов, но и вносить изменения в соответствующие XData объекта. М.б. опционально (на всякий случай можно предусмотреть). С одной из целей - подставить эту команду вместо штатной. А потом продолжить XDLABEL_EDITMT, XDLABEL_EDITL, XDLABEL_EDITML - для МТекстов, Выносок и Мультивыносок.
Структура XData описания связей "XDT_LABEL". Это седьмая, кажется, ее версия. - заменил снова заменил заменил. v.8 v.9 v.10
Добавили команду XDLABEL_DTEXT - создание однострочного текста со связью с указанным объектом. Обновил в первом посте. Делает все то же, что штатная DTEXT плюс возможность сразу создать связь с объектом, взять содержание из XData объекта, сразу загрузить введенный текст в XData объекта. Даже чуть удобнее фирменной , поскольку все определяемые параметры сразу перед глазами в окне диалога (верхняя половина): Текст будет создан, в т.ч., если у базового объекта нет XData или связь с объектом не нужна - обычный Текст. Ахтунг! Это первое в истории человечества окно диалога на lisp, размер которого пользователь может сам изменять - см. стрелки в левом верхнем углу.
Попробовали. Добавили команду XDLABEL_EDITDTEXT - редактирование однострочного текста со связью с указанным объектом. Обновил в первом посте. Редактируется текст плюс возможность изменить связь с объектом, взять содержание из других полей XData объекта, измененное содержание текста загружается в указанное поле XData объекта: Кроме того, подправлены все остальные команды. Изменена структура XData связи - см. две записи выше. Команды опять основательно подправлены и заметно улучшены.
Облегчили использование XDLABEL, добавили возможностей: - можно создавать надписи свойств (координат, длин и пр.) при объектах, не имеющих XData, - можно связывать надписи с объектами, не имеющими XData, - можно создавать и обновлять надписи, отражающие свойства объектов с сохранением в существующие XData, - можно обновлять сразу множество различных надписей, - можно создавать сразу много различных надписей, если к объектам присоединен XData с несколькими полями или несколько XData или есть XData, и используется "создать у базовых объектов XData - "XDT_Label_Create_*" для содержания надписей", - при надписях сохраняется и можно восстанавливать много больше их свойств - практически все их свойства. Для создания надписей, не думая об XData, используется опция "создать у базовых объектов XData - "XDT_Label_Create_*" для содержания надписей". Например, если нужно надписать длины полилиний; используется XDLABEL_CREATE (создание надписей): . Команда создаст у полилиний надписи нужных свойств [их длин] указанным типом примитива (Text, MText, Leader, MLeader), с заданными положениями относительно объекта, с указанными свойствами (высота, стиль, слой и пр.). XData с названием "XDT_Label_Create_..." будут добавлены к полилиниям, в них сохранится значение свойства. Команды: XDLABEL_CREATE - создание надписей, XDLABEL_LINK - связывание существующих надписей с объектами, XDLABEL_UPDATELBL - обновление свойств, содержания и положения связанных надписей, XDLABEL_DTEXT - создание однострочных Текстов со связью с объектами, XDLABEL_EDITDTEXT - редактирование однострочных Текстов с учетом связей с объектами, Новое: XDLINK_LINKSEL - выбор связанных объектов, их надписей, связанных точечных объектов и т.д. Приложил файл с описанием структуры XData при надписях - "XDLINK_LABEL". В этих XData сохраняются параметры связей и свойства надписей. Что позволяет поддерживать логическую и физическую связь надписей с их базовыми объектами.
Уточнили-улучшили XDLABEL_CREATE - создание надписей. Теперь можно в одном сеансе создавать сразу несколько надписей разных свойств в автоматически создаваемых XData, а не одного такого свойства. Новая версия XDLABEL_UPDATE (взамен XDLABEL_UPDATELBL) - обновление свойств, содержания и положения связанных надписей, а так же обновление сохраненных в XData содержания надписей и параметров связей. Последнее - совсем новое. Не стали делать новую команду, а совместили в предыдущей. Теперь с XDLABEL_UPDATE можно зафиксировать измененное содержание надписей и их положения относительно объектов. В зависимости от выбранных опций производится восстановление содержания надписей из сохраненных или из свойств базовых объектов. Например, при изменении длины объектов соответствующие надписи будут отображать новые длины. Так же можно восстановить графические свойства надписей и положение относительно базовых объектов. Если выбраны новые опции (справа внизу), то сохранится измененное содержание надписей и положение относительно базовых объектов. После этого при изменении положения, формы или размеров базовых объектов или при изменении содержания надписей - их можно будет восстановить. Все команды см. в посте #53 или в стартовом.
Новая версия XDLabel, v-0-3. Исправление бесконечных ошибок, несуразностей и пр. Несколько небольших дополнений: - округление до нужного числа знаков чисел в надписях, - добавление префиксов/суффиксов, - добавление некоторых надписываемых свойств объектов и пр. Два существенных дополнения: - возможность сохранения/загрузки в txt-файлы параметров связей надписей с объектами, - создание надписей из свойств вершин/сегментов. Сохранение параметров связей в txt-файлы оч. ускоряет-упрощает создание надписей. И дает еще одну возможность править-создавать параметры связей. В целом идея такая: для текущего проекта заготавливаются параметры нужных надписей в txt-файле, и при необходимости разом или выборочно надписи полуавтоматом создаются в нужных местах. Удобно, если многие проекты делаются в одном своем стандарте, работает несколько человек, много листов. Для вершин, сегментов и регулярного продольного размещения надписей сделано 28 вариантов надписываемых свойств: номеров, 2D и 3D расстояний, координат, их приращений и сумм, углов, направлений, высот и пр. Положение и содержание всех вариантов надписей относительно объектов поддерживается при изменениях положения, форм и размеров объектов и их частей при XDLABEL_UPDATE.
Подпроект XDLabel в целом завершен. Сейчас добавлена команда XDLABEL_MANAGE для общего управления надписями. Ей можно создавать, удалять, выбирать, скрывать надписи. Если к объектам добавлены XData с нужными для всех надписей данными и в txt-файле заготовлены описания параметров всех надписей, то "одним действием" можно создать все надписи на нужных местах и с нужным содержанием. Особенно это удобно для больших проектов или при постоянном использовании одного или немногих стандартов черчения. Условный пример создания сразу всех надписей "одним действием". В sample_manage.dwg вызвать XDLABEL_MANAGE для всех объектов, загрузить параметры надписей из sample_manage.txt, и для всех параметров Создать/. Созданные надписи уже связаны со своими объектами. Если любой объект перенести, изменить его форму, и для объекта и его надписей выполнить XDLABEL_UPDATE, то соответственно изменится и положение этих надписей и изменится их содержание.
fas из предыдущего поста не содержит команду XDLABEL_MANAGE или я что-то делаю не так и ошибка при попытке загрузить описания свойств (autocad 2021): Код: Команда: XDLABEL_CREATE Выберите надписываемые объекты <Все на открытых слоях>: Выбрано для обработки: 15 объектов no function definition: BM:READ-PARAM Еще не хватает инструментария, чтобы существующий текст засовывать в xdata чехом например, есть слой с контурами ОКС и нужно всем ОКС присвоить тип (КЖ МН Н...), текст которых лежит в нужном слое и т.д. Но это такое..., кому надо и на лиспе навояет когда-то в mapinfo/qgis делал такое SQL запросами/конструкторами, чтобы потом работать с характеристиками объектов как со свойствами (фильтры, раскраска и тд). Даже если сделать в гисах - то как такое в xdata засунуть тоже не понятно.
Прошу прощения! Может быть на сайте был сбой, а я не перепроверил - присоединял же... Сейчас опять присоединил к своему предыдущему посту. Это из-за старого fas. На всякий случай, если делать свое, а не смотреть мой пример. Чтобы загружать параметры нужно сначала их определить-сохранить. Если у объектов еще нет XData, то в XDLABEL_CREATE выбираете нужное свойство, в появившемся окне задаете нужные параметры, и их сохраняете. Выбираете название параметра, и при Ok создадутся надписи. У этих объектов появится XData "XDT_Label_Create_...", в него загрузится содержание надписей. Как же "не хватает"? Специально есть такой инструмент - XDLABEL_LINK. :) Можно связать любые надписи с любыми объектами, XData для содержания надписей создадутся автоматически. Но нормально к нужным объектам присоединить XData с полями, каждое из которых предназначено для соответствующих характеристик (надписей). Создать XData можно даже командой XDATA из Express. Но лучше нашей XDTOOLS_MDEFINE. См. https://geodesist.ru/threads/otkryt...anie-svobodnyx-instrumentov-dlja-xdata.88990/ Присоединить XData сразу ко всем нужным объектам - XDTOOLS_ADD. Для XDLABEL_LINK выбираете объекты, нужные надписи, нужный XData, нужное его поле, определяете допуск-расстояние до надписей, и их содержание загрузится в это поле. Появится связь этих надписей с этими объектами, которую можно поддерживать XDLABEL_UPDATE, если что-то менялось.
Добавили надписи для изображений. Для них добавили надписываемое свойство "Image Name". Для изображений, как и для остальных типов примитивов, действуют многие другие свойства - можно надписывать координаты, площади и пр. Может потребоваться для схем больших проектов или т.п. И сделали полнее параметры нумераций по аналогии с улучшенными в XDPoint. --- Сделали лучше учет свойств надписей, создаваемых "По образцу". --- Добавили в Свойства еще варианты отображения координат. --- Заметно увеличили скорость. Хотя, пока все равно неспешно... --- Добавили возможность раздельного связывания надписей с начальными или конечными точками базовых объектов.