Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: zr74 от 19-07-2022, 17:52:06

Название: Чем добавить примитивам автокада свои (пользовательские) атрибуты
Отправлено: zr74 от 19-07-2022, 17:52:06
Добрый день, подскажите пожалуйста, чем можно добавить примитивам автокада свои (пользовательские) атрибуты, но не с помощью Хdata. Чтобы можно было программно (c#) эти атрибуты присваивать, назначать различные типы (число, текст), изменять значения, удалять, делать для пользователя их не видимыми в палитре свойств (ctrl+1)? Чтобы можно было обращаться как с атрибутами блока?
Название: Re: Чем добавить примитивам автокада свои (пользовательские) атрибуты
Отправлено: avc от 19-07-2022, 17:55:46
Проблема как раз сделать новые свойства видимыми в палитре свойств. А невидимые метаданные вы можете хранить где угодно и как угодно - ограничено только вашей фантазией.
Название: Re: Чем добавить примитивам автокада свои (пользовательские) атрибуты
Отправлено: zr74 от 19-07-2022, 18:13:30
Если записывать метаданные можно куда угодно, то получается узнать если у примитива какие-то невидимые атрибуты, присвоенные другой программой (плагином), не возможно?
Название: Re: Чем добавить примитивам автокада свои (пользовательские) атрибуты
Отправлено: avc от 19-07-2022, 18:37:53
Это вам придумывать, как программа прочитает данные. Логично в базе данных сделать ссылку на объект чертежа. Достаточно хранить полное имя dwg-файла и хэндл объекта чертежа, чтоб всегда иметь возможность найти данные по объекту и объект по данным. А если прямо в чертеже хранить данные - то в пользовательских словарях есть рабочий механизм связи с объектами по id. ну и с xData совсем уже просто - она вся в объекте и хранится (не знаю чем она вам не подходит)
Название: Re: Чем добавить примитивам автокада свои (пользовательские) атрибуты
Отправлено: Александр Ривилис от 19-07-2022, 19:03:50
zr74,
Сформулируйте четче что нужно. По тому что вы описали Xdata вполне подходит. В крайнем случае (если объем информации велик) можно воспользоваться Extended Dictionary и Xrecord.
Название: Re: Чем добавить примитивам автокада свои (пользовательские) атрибуты
Отправлено: Захаров Максим от 19-07-2022, 21:00:17
Я бы рекомендовал Наборы данных PropertySet
Название: Re: Чем добавить примитивам автокада свои (пользовательские) атрибуты
Отправлено: avc от 19-07-2022, 21:04:10
Я бы рекомендовал Наборы данных PropertySet
Что за зверь? Почему я не в курсе?
Название: Re: Чем добавить примитивам автокада свои (пользовательские) атрибуты
Отправлено: Александр Ривилис от 19-07-2022, 21:10:27
Что за зверь? Почему я не в курсе?
Их нет в чистом AutoCAD - есть в Civil 3D, AA и MEP.
Название: Re: Чем добавить примитивам автокада свои (пользовательские) атрибуты
Отправлено: zr74 от 20-07-2022, 05:02:27
По поводу подробней описать, что требуется:
Есть сторонний плагин для автокад, который для выполнения своих задач примитивам (отрезок, полилиния) присваивает невидимые атрибуты с определенными значениями. Эти атрибуты в палитре свойств автокада c(trl+1) не видно. Данные атрибуты доступны к редактированию и обзору только в палитре свойств самого плагина. У плагина практически нет инструментов для группового редактирования, копирования, поиска и т.д. этих атрибутов, что делает процесс работы с этим плагином не очень удобным. Задача: найти где и под каким названием (в каких переменных) эти атрибуты хранятся внутри чертежа, написать на c# дополнительные функции (возможности) для этого плагина. Нашел код "GetXdata" и проверил им если у примитивов, созданных данным плагином атрибуты Xdata, выяснилось, что таких атрибутов нет. Поэтому и возник вопрос каким образом еще могут на чертеже храниться эти метаданные, и с помощью каких средств c# их достать. Знаю точно, что плагин написан на c#.
Название: Re: Чем добавить примитивам автокада свои (пользовательские) атрибуты
Отправлено: Александр Ривилис от 20-07-2022, 06:49:31
Покажи dwg-файл с таким примитивом (и отметь этот примитив, чтобы его не искать). Кстати, для исследования очень полезны ARXDBG и MGDDBG (смотри закрепленную тему).
Название: Re: Чем добавить примитивам автокада свои (пользовательские) атрибуты
Отправлено: zr74 от 20-07-2022, 07:57:11
с помощью ARXDBG и MGDDBG смотрел, ничего не нашел. Прикрепляю файл с примитивами и вставленными картинками свойств, которые показываются в в палитре свойств самого плагина.
Название: Re: Чем добавить примитивам автокада свои (пользовательские) атрибуты
Отправлено: Александр Ривилис от 20-07-2022, 13:03:32
с помощью ARXDBG и MGDDBG смотрел, ничего не нашел.
Плохо искал. У примитива есть Extension Dictionary и XRecord. В XRecord похоже вся информация в строке в формате XML:
(https://live.staticflickr.com/65535/52227813782_5bb8b02629_o.png)

Вот это в XRecord:
Код - XML [Выбрать]
  1. ((-1 . <Entity name: 2a0a0430>) (0 . "XRECORD") (5 . "2AFB") (102 . "{ACAD_REACTORS") (330 . <Entity name: 2a0a0310>) (102 . "}") (330 . <Entity name: 2a0a0310>) (100 . "AcDbXrecord") (280 . 1) (1 . "<Trench>\r\n  <Name>Т-1</Name>\r\n  <ObjectType>trench</ObjectType>\r\n  <Number>ТК-1</Number>\r\n  <Length_redef>0</Length_redef>\r\n  <UseRedefLength>false</UseRedefLength>\r\n  <Width>0.2</Width>\r\n  <Depth>0.9</Depth>\r\n  <SandLlayer>0.3</SandLlayer>\r\n  <TiltAngle>0</TiltAngle>\r\n  <IsStandard>true</IsStandard>\r\n  <Parts>\r\n    <Part name=\"CTG12-160-K04-006-R\" quantity=\"2\" sendInSpecification=\"True\" comment=\"\" />\r\n  </Parts>\r\n  <Parts_1m>\r\n    <Part name=\"Кирпич М75\" quantity=\"8.34\" sendInSpecification=\"True\" comment=\"\" />\r\n  </Parts_1m>\r\n</Trench>"))
Название: Re: Чем добавить примитивам автокада свои (пользовательские) атрибуты
Отправлено: zr74 от 20-07-2022, 13:07:25
Спасибо за помощь.