Добро пожаловать!

Войдите или зарегистрируйтесь сейчас!

Войти

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

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

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

    Форумчанин

    Регистрация:
    28 май 2012
    Сообщения:
    1.962
    Симпатии:
    690
    Адрес:
    Маськва
    Экспериментальный проект 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, хранящих при надписях параметры их связи и свойства, приложены:
     

    Вложения:

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

    alz
    Форумчанин

    Регистрация:
    26 май 2014
    Сообщения:
    368
    Симпатии:
    152
    Имхо тут нет смысла в xdata записывать параметры объектов, максимум его хендл, и тип параметров, а команда обновления уже будет считывать тип и хендл, по нему искать объект и с него уже снимать нужные данные, ну как вариант прицепить обновление к событию изменения базы данных чертежа или команде _regen что бы обновлялось автоматически ,в целом ничего сложного не вижу, но смысл всего этого не особо понятен.
     
    #2
    1958 нравится это.
  3. АлексЮстасу

    Форумчанин

    Регистрация:
    28 май 2012
    Сообщения:
    1.962
    Симпатии:
    690
    Адрес:
    Маськва
    Я пытался разобраться с автоматизацией обновления-реакции, но в 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 объектов. Хотя бы временно для вспомогательных целей, наглядности.
     
    #3
  4. Максим

    Форумчанин

    Регистрация:
    19 июл 2007
    Сообщения:
    1.567
    Симпатии:
    476
    Похоже на метки в civil3d.
     
    #4
  5. АлексЮстасу

    Форумчанин

    Регистрация:
    28 май 2012
    Сообщения:
    1.962
    Симпатии:
    690
    Адрес:
    Маськва
    Наверняка. Я в цивиловское решение не залезал, но что есть знаю:
    Может быть полностью конкурировать с возможностями вертикальных не удастся, но хотелось сделать альтернативу в чистом AutoCAD.
     
    #5
  6. 1958

    Форумчанин

    Регистрация:
    21 авг 2013
    Сообщения:
    657
    Симпатии:
    723
    Адрес:
    Ташкент, город пыльный
    Вопрос простой - на хрена это надо? Вас на dwg.ru об этом же спрашивали, но вы так и не смогли объяснить. Похоже на паранойю. ::huh.gif::
     
    #6
  7. АлексЮстасу

    Форумчанин

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

    Форумчанин

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

    alz
    Форумчанин

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

    Вложения:

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

    Форумчанин

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

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

    alz
    Форумчанин

    Регистрация:
    26 май 2014
    Сообщения:
    368
    Симпатии:
    152
    хмм, прикольно, проверил прям щас в папке проекта, виндефендер тоже на архив ругается, сама длл причем норм, попробую через зип, на зип вроде не ругался, странно в общем.
     

    Вложения:

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

    Форумчанин

    Регистрация:
    21 авг 2013
    Сообщения:
    657
    Симпатии:
    723
    Адрес:
    Ташкент, город пыльный
    zip рулит!
     
    #12
  13. АлексЮстасу

    Форумчанин

    Регистрация:
    28 май 2012
    Сообщения:
    1.962
    Симпатии:
    690
    Адрес:
    Маськва
    Как вызывать?
    А! Въехал, это ::-ph34r.gif::.

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


    + (раскрыть)

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

    alz
    Форумчанин

    Регистрация:
    26 май 2014
    Сообщения:
    368
    Симпатии:
    152
    Запустить через netload
    это тестовый вариант, выключится только с закрытием автокада

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

    Форумчанин

    Регистрация:
    28 май 2012
    Сообщения:
    1.962
    Симпатии:
    690
    Адрес:
    Маськва
    Уже допер. ::biggrin24.gif::
    См. выше дополненное.
     
    #15
  16. ivsem

    Форумчанин

    Регистрация:
    26 мар 2009
    Сообщения:
    2.475
    Симпатии:
    1.051
    Адрес:
    Киев
    Загрузил DataLink.dll через команду netload.
    Вычертил отрезок, после нажатия клавиши Enter на отрезке появилась надпись- длина.
    Если редактировать отрезок за ручки, то соответственно меняется значение длины.
     
    #16
    Последнее редактирование: 17 июн 2023
  17. АлексЮстасу

    Форумчанин

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

    Форумчанин

    Регистрация:
    21 авг 2013
    Сообщения:
    657
    Симпатии:
    723
    Адрес:
    Ташкент, город пыльный
    А где доработанный вариант?
    Интересно получилось. Мне понравилось. Начиная с какой версии AC будет запускаться? В 2021 работает, в моем любимом древнем AC2007 не пашет. Для 2007 можете пересобрать?
     
    #18
  19. alz

    alz
    Форумчанин

    Регистрация:
    26 май 2014
    Сообщения:
    368
    Симпатии:
    152
    Совместить навряд ли, с лиспом я не очень дружу (перешел на шарп, когда программа на лиспе обрабатывала чертеж минут 10, а аналог на шарпе секунд 5) максимум можно совместить в части совместного использования кодов, прописанных в xdata, но тут уже нужна документация по структуре данных.
     
    #19
  20. ivsem

    Форумчанин

    Регистрация:
    26 мар 2009
    Сообщения:
    2.475
    Симпатии:
    1.051
    Адрес:
    Киев
    В Autolispe есть реакторы. Я думаю сие можно реализовать через реакторы.
    Сам правда с реакторами не работал. Но скорость работы лиспа- интерпретатора значительно медленнее, чсм работа dll-приложений.
     
    #20

Поделиться этой страницей

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