XDLabel - создание надписей, связь надписей с объектами

Тема в разделе "Autodesk", создана пользователем АлексЮстасу, 16 июн 2023.

  1. АлексЮстасу

    АлексЮстасу Форумчанин

    Экспериментальный проект XDLabel, подход к задаче. (Судите строго, но снисходительно - ресурсов ничтожно, а тема как минное поле ::biggrin24.gif::)

    Общее:
    Все надписи в чертежах являются иллюстративными, вспомогательными, т.е. зависимыми элементами. Все надписи всегда логически связаны с конкретными объектами.
    Но Текст, МТекст и пр. в AutoCAD являются самостоятельными примитивами, такими же как отрезки, полилинии и пр. Т.е. надписи AutoCAD в чертежах физически не связанны со своими объектами. (Кроме случая атрибутов, но они только для блоков).
    Это ведет к преобладанию ручной работы, появлению ошибок, невозможности их обнаружения и пр.
    В вертикальных приложениях AutoCAD эта задача связи надписей с объектами решена. Но решена по-разному, не всегда удовлетворительно, и через специальные объекты, недоступные в базовом AutoCAD или в других вертикальных приложениях.
    До сих пор в базовом AutoCAD, которым пользуется большинство, нет инструментов быстрого создания надписей у указанных объектов, проверки их правильности, обновления содержания, свойств, положения относительно объектов и т.п.

    Идея:
    Связать имеющиеся в чертежах надписи с их объектами добавлением к надписям XData с соответствующей информацией. Создавать надписи сразу со связями с объектами.
    XData выбраны из-за их общедоступности во всех AutoCAD, легкой программной работы с ними.

    Предполагаемое решение:
    5-7 команд, действующих в любом AutoCAD, позволяющих связывать надписи с объектами, создавать надписи при объектах, поддерживать актуальность содержания надписей, ускорять отображение/скрытие/удаление надписей и т.п.

    Пока сделали с оч. слабым программистом три пять команды для надписей со связью их с объектами:
    - связывание надписей со своими объектами - XDLABEL_LINK
    - создание надписей - XDLABEL_CREATE
    - обновление надписей - XDLABEL_UPDATELBL
    К объектам должны быть присоединены XData, из полей которых берется содержание надписей или в которые содержание надписей записывается.
    Сделана возможность создания и связывания надписей с объектами, не имеющими XData.
    Сделана возможность надписывания и обновления свойств объектов.

    Добавлено:
    - создание однострочных текстов со связью с объектами - XDLABEL_DTEXT.
    Добавлено:
    - редактирование однострочных текстов со связью с объектами - XDLABEL_EDITDTEXT.
    Повторены действия штатных команд создания и редактирования однострочных текстов с возможностью сразу создать связь с объектом, взять содержание из XData объекта, загрузить содержание в XData объекта, изменить связь с объектом.

    Новое: команда выбора связанных объектов и надписей, точечных объектов - XDLINK_LINKSEL.


    Действия с XData обеспечиваются командами предыдущего проекта - XDTOOLS.
    Этот проект XDLabel в целом является продолжением XDTOOLS и темы неоцененной применимости XData.

    Общий порядок действий:
    1. Создание XData с полями для содержания надписей. (Поля для Z, площади, длины, угла, индекса, этажности, материала или пр. - что нужно надписать или куда сохранить содержание надписей).
    2. Присоединение этих XData к объектам.
    3 (Вариант 1). Связывание уже существующих надписей с их объектами с загрузкой содержания надписей в поля XData объектов.
    3 (Вариант 2). Ввод значений в поля XData вручную или средствами XDTOOLS. Создание надписей с содержанием из этих полей.
    4. Восстановление/изменение содержания, свойств, положения надписей.

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

    Одна из целей - решение задачи в оптимально общем виде, чтобы не зависеть от множества программок на каждый частный случай, от отсутствия возможности найти такие программки.
    __________
    Самая последняя версия XDLABEL.fas и описание структуры XData, хранящих при надписях параметры их связи и свойства, приложены:
     

    Вложения:

    Последнее редактирование: 13 фев 2024
    TulGeo нравится это.
  2. alz

    alz Форумчанин

    Имхо тут нет смысла в xdata записывать параметры объектов, максимум его хендл, и тип параметров, а команда обновления уже будет считывать тип и хендл, по нему искать объект и с него уже снимать нужные данные, ну как вариант прицепить обновление к событию изменения базы данных чертежа или команде _regen что бы обновлялось автоматически ,в целом ничего сложного не вижу, но смысл всего этого не особо понятен.
     
    1958 нравится это.
  3. АлексЮстасу

    АлексЮстасу Форумчанин

    Я пытался разобраться с автоматизацией обновления-реакции, но в dwg.ru меня охладили - в AutoCAD это есть, но тухло.
    Но и в общем случае автоматическое обновление опасно - можно потерять и полезные изменения.
    Они и не записываются.
    Сейчас так:
    1. В XData при объекте записывается только содержание связанной надписи.
    2. К надписям присоединяются специальные XData "XDT_LABEL" с Handle объекта, название-поле нужной XData объекта, основные свойства надписи (стиль, высота, выравнивание, цвет, слой и пр.), параметры связи.
    В каждом чертеже много/очень много работы с надписями. На всех форумах постоянно вопросы о надписях. А в 99.9% вопросы не задают - просто пилят и перепиливают вручную долго, упорно и с косяками.

    Типичный случай 1 - надписи отметок высот точек или блоков. Бывает и с номерами-названиями точек. С многими вариантами задач: присвоить Z из надписей точкам, надписать Z точек, загрузить значение надписи в атрибут, согласовать Z точек и содержание надписей. И пр., и пр. Решается связыванием надписей с точками XDLABEL_LINK, назначением полученных Z точкам XDTOOLS_2PROP, загрузкой Z в поле XData объекта XDTOOLS_PROP2, обновлением XDLABEL_UPDATEL. И пр.
    В т.ч. можно прямо создать новые надписи высот XDLABEL_CREATE.
    Типичный случай 2 - надписи номеров, площадей участков или характеристик строений в контурах или т.д. Создать надписи в площадях объектов XDLABEL_CREATE. Обновить при изменениях площадей и пр. XDLABEL_UPDATEL. И обратные задачи.
    Типичный случай 3 - надписи вдоль линейных объектов, горизонталей, ЛЭП, дорог и пр. Создать надписи XDLABEL_CREATE, восстановить положение при изменениях объектов или содержание надписей XDLABEL_UPDATEL. Присвоить уровень горизонталям из надписи XDTOOLS_2PROP. И пр.
    И т.д.
    С нашего форума, недавнее:
    Нетипичный случай - https://geodesist.ru/threads/vynoska-ugla-i-dliny.93195/. Нужно надписывать у отрезков их длины и углы. (О существовании углов у отрезков я узнал из этой темы ::biggrin24.gif::). Решается загрузкой значения длины в одно поле XData объекта, значения угла в другое XDTOOLS_PROP2, создание надписей XDLABEL_CREATE.
    Относительно типичный случай - https://geodesist.ru/threads/podpis-vysot-s-razryvom-vdol-polilinii.92510/. В т.ч. нужно посадить существующие надписи на горизонтали, развернуть вдоль горизонталей. Решается связыванием надписей с горизонталями XDLABEL_LINK, редактированием связи XDTOOLS_VEDIT, обновлением XDLABEL_UPDATEL.
    Случай легко становится типичным ::biggrin24.gif::, если пришлось надписанные горизонтали переукладывать или сглаживать.

    В т.ч. в любой момент XDLABEL_CREATE можно надписать что угодно из основных свойств объектов или др. информацию из XData объектов. Хотя бы временно для вспомогательных целей, наглядности.
     
  4. Максим

    Максим Форумчанин

    Похоже на метки в civil3d.
     
  5. АлексЮстасу

    АлексЮстасу Форумчанин

    Наверняка. Я в цивиловское решение не залезал, но что есть знаю:
    Может быть полностью конкурировать с возможностями вертикальных не удастся, но хотелось сделать альтернативу в чистом AutoCAD.
     
  6. 1958

    1958 Форумчанин

    Вопрос простой - на хрена это надо? Вас на dwg.ru об этом же спрашивали, но вы так и не смогли объяснить. Похоже на паранойю. ::huh.gif::
     
  7. АлексЮстасу

    АлексЮстасу Форумчанин

    Нахрена нужно ускорять, упрощать, улучшать работу с надписями? Не знаю ответа.
    Гм. Мои предложения работы с надписями на dwg.ru особо не обсуждали. Что было, было, скорее, наоборот - не отрицали потенциальную полезность или даже пробовали сами сделать. Еще давно, но и недавно тоже.
    Стереотипы - могучая сила.
     
    Последнее редактирование: 17 июн 2023
    Максим нравится это.
  8. Максим

    Максим Форумчанин

    Мне нравится ваше стремление упростить работу/задачу. Я похожим образом решал задачи импорта/экспорта точек в автокад, когда под рукой был только "голый VBA", а про Land Desktop я ещё не знал. Кто-то может сказать, что это изобретение велосипеда, по факту это создание инструмента для работы в ограниченных условиях наличия одного автокада под рукой. Сивил имеет смысл поковырять ради интереса хотя бы. Может, удастся что-то полезное/удобное подсмотреть.
     
    АлексЮстасу нравится это.
  9. alz

    alz Форумчанин

    Ну от нефиг делать сваял такую фигню, на любых кривых в чертеже появляется мтекст содержащий их длину, который динамически меняется вместе в объектом, держится на нем и обновляет собственно текст длины, ньюансов тут конечно куча. Текст появляется на всех новосозданных объектах, если они созданы со статусом Ок, то есть если чертите полилинию и закончите интером, если закончите эскейпом текст не появится, но появится при любом изменении любого уже готового объекта, движении, изменении геометрии и тд. С текстом можно сделать что угодно в рамках возможностей автокада, при изменении привязанного объекта меняется только его положение и содержимое (длина).
     

    Вложения:

    • DataLink.rar
      Размер файла:
      13,5 КБ
      Просмотров:
      11
  10. 1958

    1958 Форумчанин

    Что-то у меня браузер Chrome ругается на ваш файл, пишет: Ошибка. Обнаружен вирус. А хотелось бы посмотреть. Хотя, вот честное пионерское, не понимаю я всех этих манипуляций с обновлением полей, текстов, с XData и т.д. и т.п. Тупею наверно с возрастом. Возможно, эти все вкусности интересны проектировщикам, мне это не понятно, никто толком не может объяснить эти плюшки.

    Вот с этим согласен. До сих пор сталкиваюсь, что пикеты (отметки) рисуют точками и текст рядышком, потом сами понять не могут к какой точке текст относится, но с пеной доказывают, что так надо.
     
  11. alz

    alz Форумчанин

    хмм, прикольно, проверил прям щас в папке проекта, виндефендер тоже на архив ругается, сама длл причем норм, попробую через зип, на зип вроде не ругался, странно в общем.
     

    Вложения:

    • DataLink.zip
      Размер файла:
      13,6 КБ
      Просмотров:
      5
  12. 1958

    1958 Форумчанин

    zip рулит!
     
  13. АлексЮстасу

    АлексЮстасу Форумчанин

    Как вызывать?
    А! Въехал, это ::-ph34r.gif::.

    Это оч. полезная бы возможность!
    Но как ее практически встроить для надписей на линиях?
    В XData связей, XDT_LABEL, для надписей на линиях есть поле 7 со значением ON,
    поле 23 - поворот относительно линии, поле 35 с нужным сдвигом вдоль-поперек линии, поле 39 с параметром точки вставки на линии.


    + (раскрыть)

    Давно уже видел близкое у Lee Mac на lisp. Но не уверен, что мои программисты-дилетанты смогли бы применить...
    [​IMG]
     
    Последнее редактирование: 17 июн 2023
  14. alz

    alz Форумчанин

    Запустить через netload
    это тестовый вариант, выключится только с закрытием автокада

    Чутка доработал
     
    Последнее редактирование: 17 июн 2023
    1958 и АлексЮстасу нравится это.
  15. АлексЮстасу

    АлексЮстасу Форумчанин

    Уже допер. ::biggrin24.gif::
    См. выше дополненное.
     
  16. ivsem

    ivsem Форумчанин

    Загрузил DataLink.dll через команду netload.
    Вычертил отрезок, после нажатия клавиши Enter на отрезке появилась надпись- длина.
    Если редактировать отрезок за ручки, то соответственно меняется значение длины.
     
    Последнее редактирование: 17 июн 2023
  17. АлексЮстасу

    АлексЮстасу Форумчанин

    Я восхищен и поражен! И возможностями для пользователей, и немыслимой скоростью Вашего программирования.
    Можно ли этот подход согласовать, совместить с XDLabel? Lisp с C? Или нужно делать полностью на C?
    Минимум, для случаев надписей на объектах.
    --- Сообщения объединены, 17 июн 2023, Оригинальное время сообщения: 17 июн 2023 ---
    Ну, да! Это одна из целей XDLabel - обычные тексты превращаются в аналог Attribute. Причем, для любых основных типов примитивов, а не одних блоков.
    Для существующих надписей с помощью XDLABEL_LINK создается их связь с их объектами. Что дает возможность обмениваться данными надписей с их объектами, восстанавливать надписи, их свойства, положение и пр.
     
  18. 1958

    1958 Форумчанин

    А где доработанный вариант?
    Интересно получилось. Мне понравилось. Начиная с какой версии AC будет запускаться? В 2021 работает, в моем любимом древнем AC2007 не пашет. Для 2007 можете пересобрать?
     
  19. alz

    alz Форумчанин

    Совместить навряд ли, с лиспом я не очень дружу (перешел на шарп, когда программа на лиспе обрабатывала чертеж минут 10, а аналог на шарпе секунд 5) максимум можно совместить в части совместного использования кодов, прописанных в xdata, но тут уже нужна документация по структуре данных.
     
  20. ivsem

    ivsem Форумчанин

    В Autolispe есть реакторы. Я думаю сие можно реализовать через реакторы.
    Сам правда с реакторами не работал. Но скорость работы лиспа- интерпретатора значительно медленнее, чсм работа dll-приложений.
     
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление