Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: avc от 12-06-2016, 18:20:09
-
Обычно храню свои данные в xData объектов чертежа. Но мне этого уже мало. Планирую в xData оставить только ссылки, а сами данные хранить где-то отдельно. Объем небольшой, несколько таблиц (детали, сборки, материалы и т.п.) , потянет на сотню килобайт. Но где оптимальней сохранить? Отдельный файл не годится. Внешние БД - тем более. Затолкать построчно в свойства чертежа? Но там только текстовые строки. Или преобразовать все данные в бинарную запись xData у какого-то глобального объекта? Не могу придумать, какого объекта? И размер xData сильно ограничен. Есть еще какое-то xRecord, пользовательские словари, именованные объекты, OLE... Я ни с чем таким пока не работал. Подскажите, знатоки, как оптимальней, где копать?
Спасибо
-
Если нужно хранить уникальные данные для объектов чертежа, то можно использовать расширенные данные объектов ExtensionDictionary (примеров много в сети).
Если данные одинаковые для объектов в разных чертежа, то наверно лучше единую внешнюю базу использовать, а цепляться к объектам через xdata.
Расширенные данные использовал, но в небольших объемах (чтобы пару параметров хранить).
-
Да, есть данные идентичные для многих графических объектов, поэтому и возникла мысль не дублировать их в каждом. С внешними базами я давно работаю, тут у меня вопросов нет. Но сейчас задача стоит все сохранить в одном DWG
-
Есть еще какое-то xRecord
Это и следует использовать.
-
Или преобразовать все данные в бинарную запись xData у какого-то глобального объекта?
Есть такой объект - NOD: http://aucache.autodesk.com/au2012/sessionsFiles/2146/2646/handout_2146_CP2146.pdf
-
Да, есть данные идентичные для многих графических объектов, поэтому и возникла мысль не дублировать их в каждом
Вертикальные приложения обычно, как указал Дмитрий, используют NOD. С помощью него можно создать древовидную структуру для хранения общих данных в чертеже
Есть второй вариант, немного непривычный для чистого Autocad NET Api.
Использовать OD - Object Data из Autocad Map 3D.
В чертеже создаются таблицы данных и идет привязка к примитивам. Это ближе к ГИС, таким как MapInfo.
Map API доступно в Autocad, нужно лишь подключить соответствующую dll в составе автокада. По крайней мере в 2012 версии dll был в составе и скорее всего он там появился с какой-то определенной версии.
Описание можно поискать на сайте автодеска, что-то типа:
AutoCAD Map 3D SDK
AutoCAD Map 3D NET API
-
OD - Object Data из Autocad Map 3D
Похоже дезинформировал о доступности OD.
Для AutoCAD Map 3D NET API нужно подключать ManagedMapApi.dll
В 2014 автокаде его не нашел. Скорее всего когда я прибегал к Map Api использовал Civil 3D в составе которого и был этот файл.
Поэтому вариант не для всех.
Скорее всего механизм OD использует в итоге NOD для сохранения данных, но не проверял.
В нем стандартизована работа по созданию таблиц данных и привязка их с примитивами и для этого доступен готовый API.
-
Есть такой объект - NOD
Спасибо. Почитал. Весьма доходчиво. Получается, чтоб сохранить мои данные я должен:
-Создать свой словарь
-Затолкать его в NOD
-Создать xRecord
-Затолкать ее в словарь
-Создать ResultBuffer записать в него мои бинарные данные
-Записать буфер в xRecord
Хм, не скажу что путь короткий, но в общем одолимо. Тем более, что прочитать все это надо 1 раз при открытии файла. А при изменении можно уже будет не шарить по словарям, а просто перезаписывать данные в xRecord. Да?
Всем ответившим - спасибо!
-
Да, все верно.
-
Да?
Да. Тем более, что ты можешь создать сервисные классы/методы для этого, чтобы облегчить процедуру записи/чтения информации.