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

ADN Club => AutoCAD .NET API => Тема начата: Alexx от 21-07-2015, 10:27:23

Название: Трансляция координат объектов блока на чертеж
Отправлено: Alexx от 21-07-2015, 10:27:23
Добрый день!

Программирую под AutoCAD .NET. Возникла потребность узнать координаты объектов блока относительно чертежа.
Допустим на чертеже есть BlockReference, который, соответственно, имеет координаты на чертеже.
В BlockDefinition, на который ссылается данный BlockReference есть объекты, у которых есть координаты относительно этого блока.
Мне нужно получить координаты (Bounds) этих объектов относительно чертежа учитывая масштаб, смещение, поворот данного BlockReference.

На VBA это делал примерно так:

Код - Visual Basic [Выбрать]
  1.   ' Получаем точку вставки, факт. масштабирования, поворот, и BlockDefinition
  2.  ...
  3.  
  4.   ' Для каждого искомого объекта в BlockDefinition
  5.  
  6.   ' Масштабируем
  7.  min(0) = min(0) * XScaleFactor
  8.   min(1) = min(1) * YScaleFactor
  9.   max(0) = max(0) * XScaleFactor
  10.   max(1) = max(1) * YScaleFactor
  11.  
  12.   ' Поворачиваем
  13.  Dim x, y: x = min(0): y = min(1)
  14.   min(0) = x * Cos(Rotation) - y * Sin(Rotation)
  15.   min(1) = y * Cos(Rotation) + x * Sin(Rotation)
  16.   x = max(0): y = max(1)
  17.   max(0) = x * Cos(Rotation) - y * Sin(Rotation)
  18.   max(1) = y * Cos(Rotation) + x * Sin(Rotation)
  19.  
  20.   ' Смещаем
  21.  min(0) = min(0) + insPoint(0)
  22.   min(1) = min(1) + insPoint(1)
  23.   max(0) = max(0) + insPoint(0)
  24.   max(1) = max(1) + insPoint(1)
  25.  
  26.   ...
  27.  

Полагаю, что в .NET все это можно сделать как-то проще и аккуратнее.
Кроме того, насколько я понимаю, у блока может быть совсем другая система измерения...

Помогите, пожалуйста, разобраться. Спасибо!
Название: Re: Трансляция координат объектов блока на чертеж
Отправлено: Александр Ривилис от 21-07-2015, 11:25:11
Alexx
Приветствую на форуме! Прочитай пожалуйста в моей подписи как следует форматировать код на форуме.
Теперь по сути вопроса. Свойство BlockReference.BlockTransform возвращает матрицу преобразования из координат в системе блока в координаты МСК.
Пример использования: Программная имитация команды Burst (http://adn-cis.org/programmnaya-imitacziya-komandyi-burst.html)
Название: Re: Трансляция координат объектов блока на чертеж
Отправлено: Alexx от 21-07-2015, 12:11:35
Александр, спасибо!

На счет форматирования кода - учту на будущее  :)