Определение координат динамического блока в среде VBA
Реклама i
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Определение координат динамического блока в среде VBA

Определение координат динамического блока в среде VBA

Ответ
Поиск в этой теме
Непрочитано 02.12.2009, 15:55 #1
Определение координат динамического блока в среде VBA
ArtemYa
 
Регистрация: 02.12.2009
Сообщений: 31

Здравствуйте, подскажите пожалуйста советом новичку.
Задача следуующая:
Есть некий объект, который имеет две составляющие на чертеже A и В, рамка чертежа -С. Объеты А и В - блоки на чертеже, так же как и рамка С имеют атрибуты. А и В могут находиться на разных листах. Если объект В находиться в поле рамки С, то одному из атрибутов объекта А нужно присвоить атрибут рамки "номер страницы" рамки С, в которой находится объект В. В общем запутался я в координатах, подскажите как из блоков можно вытащить координаты. Так же не могу разобраться как экспортировать атрибуты из када в эксель. Кто знает, подскажите!!!Заранее благодарю!!!

Последний раз редактировалось ArtemYa, 03.12.2009 в 08:50.
Просмотров: 6229
 
Непрочитано 02.12.2009, 23:25
#2
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от ArtemYa Посмотреть сообщение
Здравствуйте, подскажите пожалуйста советом новичку.
Задача следуующая:
Есть некий объект, который имеет две составляющие на чертеже A и В, рамка чертежа -С. Объеты А и В - блоки на чертеже, так же как и рамка С имеют атрибуты. А и В могут находиться на разных листах. Если объект В находиться в поле рамки С, то одному из атрибутов объекта А нужно присвоить атрибут рамки "номер страницы" рамки С, в которой находится объект В. В общем запутался я в координатах, подскажите как из блоков можно вытащить координаты. Так же не могу разобраться как экспортировать атрибуты из када в эксель. Кто знает, подскажите!!!Заранее благодарю!!!
Положи сюда чертеж

~'J'~
Олег (jr.) вне форума  
 
Непрочитано 02.12.2009, 23:49
#3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,432


ArtemYa, твое счастье, что уже есть ответ. Иначе тема была бы уже удалена (с таким названием).
Переименовывай!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.12.2009, 09:22
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Определить точку вставки блока: запросить свойство InsertionPoint.
Определить границы блока: применить метод GetBoundingBox (правда, он для динамических блоков работает не так, как хотелось бы).
Do$ вне форума  
 
Автор темы   Непрочитано 03.12.2009, 10:27
#5
ArtemYa


 
Регистрация: 02.12.2009
Сообщений: 31


Спасибо, все получилось, буду пробовать дальше
ArtemYa вне форума  
 
Непрочитано 03.12.2009, 10:34
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,432


Do$, а если попытаться обращаться к описанию конкретого вхождения? То есть обрабатывать (фактически) анонимный блок?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.12.2009, 11:02
#7
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Знать бы еще, каким образом обращаются к блокам на VBA
Анонимный - это, я так понимаю, блок, у которого свойство Name имеет вид наподобие "*U115"?
Do$ вне форума  
 
Непрочитано 03.12.2009, 11:25
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,432


Так, прошу ногами по голове не охаживать - я попросту запутался
Код:
[Выделить все]
Public Sub test()
Dim ent As AcadEntity, BlockRef As AcadBlockReference, BlockDef As AcadBlock
Dim pickPoint As Variant, minPoint As Variant, maxPoint As Variant

  On Error GoTo lErrorGetEnt
  ThisDrawing.Utility.GetEntity ent, pickPoint, "Select a block"
  Set BlockRef = ent
  BlockRef.GetBoundingBox minPoint, maxPoint
  
  ThisDrawing.ObjectIdToObject(BlockRef.OwnerID).AddPoint minPoint
  ThisDrawing.ObjectIdToObject(BlockRef.OwnerID).AddPoint maxPoint
  
  Exit Sub
  
lErrorGetEnt:
  MsgBox "Error entity selection", vbOKOnly + vbCritical + vbApplicationModal, "Error"
  Exit Sub
  
End Sub
И вариант "получче":
Код:
[Выделить все]
Public Sub test2()
Dim ent As AcadEntity, BlockRef As AcadBlockReference
Dim pickPoint As Variant, minPoint As Variant, maxPoint As Variant

  On Error GoTo lErrorGetEnt
  ThisDrawing.Utility.GetEntity ent, pickPoint, "Select a block"
  If UCase(ent.ObjectName) Like "*BLOCK*" Then
    Set BlockRef = ent
    If BlockRef.IsDynamicBlock Then
      BlockRef.GetBoundingBox minPoint, maxPoint
      
      ThisDrawing.ObjectIdToObject(BlockRef.OwnerID).AddPoint minPoint
      ThisDrawing.ObjectIdToObject(BlockRef.OwnerID).AddPoint maxPoint
    End If
  End If
  
  Exit Sub
  
lErrorGetEnt:
  MsgBox "Error entity selection", vbOKOnly + vbCritical + vbApplicationModal, "Error"
  Exit Sub
  
End Sub
---
Добавлено: как всегда, некорректно обрабатывается поворот блока, с масштабами проблема и т.п. Но зато и обращение идет именно к вхождению
---
Добавлено 2: Ну и вариант получения координат с описания блока. Дальнейшие преобразования (поворот, масштабирование и перевод в другую систему) я сделать не в силах А так, в качестве примера / затравки - см
Код:
[Выделить все]
Public Sub GetBoxByDefinition()
Dim PickedEnt As AcadEntity, BlockDef As AcadBlock, _
  PickedPoint As Variant, minPoint As Variant, maxPoint As Variant, iCounter As Integer, _
  InsPoint As Variant
  
  On Error GoTo lErrorGetEnt
  ThisDrawing.Utility.GetEntity PickedEnt, PickedPoint, "Select a block"
  If UCase(PickedEnt.ObjectName) Like "*BLOCK*" Then
    InsPoint = PickedEnt.InsertionPoint
    Set BlockDef = ThisDrawing.Blocks.Item(PickedEnt.Name)
    Dim SubEnt As AcadEntity, SubMinPoint As Variant, SubMaxPoint As Variant
    
    For Each SubEnt In BlockDef
      SubEnt.GetBoundingBox minPoint, maxPoint
      If IsEmpty(SubMinPoint) Then
        SubMinPoint = minPoint
      Else
        For iCounter = 0 To 2
          If minPoint(iCounter) < SubMinPoint(iCounter) Then SubMinPoint(iCounter) = minPoint(iCounter)
        Next
      End If
      If IsEmpty(SubMaxPoint) Then
        SubMaxPoint = maxPoint
      Else
        For iCounter = 0 To 2
          If maxPoint(iCounter) > SubMinPoint(iCounter) Then SubMinPoint(iCounter) = maxPoint(iCounter)
        Next
      End If
    Next
    
  End If
  
  Exit Sub
  
lErrorGetEnt:
  MsgBox "Error entity selection", vbOKOnly + vbCritical + vbApplicationModal, "Error"
  Exit Sub
  
End Sub
---
Сейчас придет fixo и от меня останутся рожки да ножки
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 03.12.2009 в 11:52.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.12.2009, 13:57
#9
ArtemYa


 
Регистрация: 02.12.2009
Сообщений: 31


Я просто перебираю все элементы (AcadEntity) в Modelspace, если элемент является динамическим блоком (AcadBlockReference) нужного имени, нахожу его точку привязки(вставки), если это касается чертежной рамки, то по имени блока я уже знаю какого рамка формата, отсюда и могу найти все ее координаты, предварительно определив их и сделав массив!

Появился еще один вопрос, как сравнить два элемента типа Variant, просто знаком равно не получатеся....
ArtemYa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Определение координат динамического блока в среде VBA



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пароль к VBA karp_b Программирование 24 29.08.2013 12:43
VBA Есть ли возможность графики в VBA на форме (PictureBox)? Alexey_02 Программирование 8 13.02.2013 14:08
Проблема с остановкой программы на VBA Linetzev Программирование 4 19.08.2009 14:58
В чем зло VBA? Vildar Разное 224 18.03.2009 21:26
VBA Открыть диалоговое окно выбора файла mmax Программирование 8 26.10.2008 11:17