Тема: Как узнать габариты блока (Bounding Box)?
Имеем некий блок, вставляемый из другого файла. А можно как-то узнать его габариты ? (не лимиты). Или придется вести файл БД, в котором будут прописываться имена файлов-блоков и их габариты ?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Как узнать габариты блока (Bounding Box)?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Имеем некий блок, вставляемый из другого файла. А можно как-то узнать его габариты ? (не лимиты). Или придется вести файл БД, в котором будут прописываться имена файлов-блоков и их габариты ?
Задача в принципе решаема, наверное. Можно пройтись по всем подпримитивам блока, получив от каждого GetBoundingBox и выбрать границы. Теперь плохие новости:
1. Я могу вставить блок с разными (возможно, непредсказуемыми) масштабами по разным осям.
2. Я в момент вставки могу поменять угол поворота.
3. Я могу вставлять вообще не в мировой систем координат.
В любом из эти случаев границы блока не будут совпадать с "предварительно вычисленными".
А как пройтись по подпримитивам ? Есть ли пример ?
Мне сначала надо работать с файлом где блок лежит ? Или можно работать с файлом куда я уже вставил блок ?
По идее (если не делать специальных действий по открытию стороннего файла) работа идет только в текущем рисунке. Я не спец по VBA, но там же постоянно идет (даже по умолчанию) ThisDrawing. Насчет остального - справка и эксперименты, на которые у меня сейчас времени нет совершенно. Я идею подал, а ты попробуй :)
Хотя я далеко не уверен, что сработает (да и о сопутствующих проблемах я уже сказал).
О! Еще один вариант: вставляешь блок в любую точку, получаешь из него GetBoundingBox и потом удаляешь. Вот это тоже может сработать.
Для блока метода GetBoundingBox нет. Проверил. Большое спасибо за помощь
> Max Petroff
для вставки блока или описания блока?
Немного не на Бейсике, но прочитать можно :))
AcadApp.ActiveDocument.ModelSpace.InsertBlock(Point2, ExtractFilePath(Application.ExeName)+'ALEX1.DWG', 1, 1, 1, 0); // Вставили блок ALEX из файла ALEX.DWG blockObj:= AcadApp.ActiveDocument.Blocks.Add(Point4, 'ALEX'); // Здесь присвоили переменной блок - блок с именем 'ALEX'
blockObj. - все границ получить не могу - метода getbound... нет
Все правильно. Потому что ты работаешь с описанием блока. Он еще не вставлен. После получения blockObj вставляй его хоть в точку 0,0,0 с масштабами нужными, и для этой вставки уже получай GetBoundingBox.
Я, конечно, не профессионал. А разве я блок не вставил ? (выше по коду)? Как тогда блок вставить ?
Стоп, я первую строку неправильно прочел. Там блок физически вставляется, но этот объект не присваивается никакой переменной. Поставь впереди переменную и от нее уже пляши (код васиковский, но прочесь тож не проблема):
Sub Example_InsertBlock() ' This example creates a block containing a circle. ' It then inserts the block. ' Create the block Dim blockObj As AcadBlock Dim insertionPnt(0 To 2) As Double insertionPnt(0) = 0#: insertionPnt(1) = 0#: insertionPnt(2) = 0# Set blockObj = ThisDrawing.Blocks.Add(insertionPnt, "CircleBlock") ' Add a circle to the block Dim circleObj As AcadCircle Dim center(0 To 2) As Double Dim radius As Double center(0) = 0: center(1) = 0: center(2) = 0 radius = 1 Set circleObj = blockObj.AddCircle(center, radius) ' Insert the block Dim blockRefObj As AcadBlockReference insertionPnt(0) = 2#: insertionPnt(1) = 2#: insertionPnt(2) = 0 [b]Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(insertionPnt, "CircleBlock", 1#, 1#, 1#, 0)[/b] ZoomAll End Sub
А потом уже на blockRefObj можно попробовать и GetBoundingBox натравить
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Как узнать габариты блока (Bounding Box)?
Форум работает на PunBB, при поддержке Informer Technologies, Inc