ADN Club > VBA

Интеграция с AutoCAD 2010, Получение всех размеров

(1/2) > >>

Artem:
Всем добрый день!
Пишу интеграцию TDMS с AutoCAD 2010. Суть интеграции заключается в получении количества размеров, которые проектировщики проставляют в пространстве листа. Файл нужно открыть в фоне, получить размеры и закрыть.
Как положено создаю:
Set AcadApp = CreateObject("AutoCAD.Application")
а дальше стопор, как же добраться до коллекции размеров?

В своих поисках дошел до коллекции AcadApp.ActiveDocument.Database.Blocks. Выяснил что там размер представлен в виде массива объектов, но возможности отличить его от соседей не представляется возможным.

Буду благодарен за любую наводку.

trir:
DimAligned и прочие Dim*?

ModelSpace.Item
PaperSpace.Item
Block.Item
SelectionSet.Item
Group.Item

http://knowledge.autodesk.com/support/autocad-mep/downloads/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-ActiveX/files/GUID-38EB1E39-B67A-4B90-A394-5C3FA260F9F3-htm.html
http://vbamodel.narod.ru/AutoCAD/idh_dimaligned_object.htm

Александр Ривилис:
Приветствую на форуме! Начни с того, что посмотри документацию AutoCAD ActiveX/COM: http://adn-cis.org/forum/index.php?topic=909.0
Теперь перейдем непосредственно к тому, что тебе нужно:
1) Открываешь чертеж

--- Код - Visual Basic [Выбрать] ---'.........................................................Dim db As ObjectSet db = GetAcDbxDoc()db.Open dwgPath ' полный путь к dwg-файлу'.........................................................Function GetAcDbxDoc() As Object    Dim strAcadVersion As String    With AcadApp       strAcadVersion = Mid(.Version, 1, 2)       If CInt(strAcadVersion) < 16 Then           Set GetAcDbxDoc = .GetInterfaceObject("ObjectDBX.AxDbDocument")       Else           Set GetAcDbxDoc = .GetInterfaceObject("ObjectDBX.AxDbDocument." & strAcadVersion)       End If    End WithEnd Function
2) Следующий этап - нужно пройтись по всем листам чертежа, при этом, как я понимаю вкладку Модель/Model, тебе нужно будет пропустить.
Коллекция листов - это db.Layouts.
3) Для каждого листа layout в этой коллекции проверяешь его свойство layout.ModelType и если оно True, то пропускаешь этот лист, т.к. это Модель.
4) Теперь получаешь для листа layout свойство layout.Block. Это коллекция примитивов находящихся на этом листе. Проходишь по всем всем этим примитивам и отбираешь только размеры. Я не знаю все ли типы размеров тебе нужны. Поэтому на всякий случай указываю что их несколько:



5) У каждого размера dim есть свойство dim.Measurement, которое даёт значение размера (почитай в документации). Следует только помнить, что пользователь может вручную исправить это значение. И еще это значение возможно нужно будет сконвертировать из другой системы единиц. Но с этим уже будешь экспериментировать сам.

6) После всего этого чертеж нужно будет закрыть. Если мне не изменяет память, то это:


--- Код - Visual Basic [Выбрать] ---Set db = Nothing
Ну для начала всё. На VBA я не пишу. Так что только на уровне идей.

Artem:
Спасибо! Разобрался.

Александр Ривилис:

--- Цитата: Artem от 20-10-2014, 17:03:49 ---Спасибо! Разобрался.
--- Конец цитаты ---
Может тогда поделишься решением? Форум именно для этой цели и предназначен. Заодно может и тебе предложат более эффективное решение.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии