Трансляция координат объектов блока на чертеж

Автор Тема: Трансляция координат объектов блока на чертеж  (Прочитано 3185 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AlexxАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 76
  • Карма: 1
Добрый день!

Программирую под 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 все это можно сделать как-то проще и аккуратнее.
Кроме того, насколько я понимаю, у блока может быть совсем другая система измерения...

Помогите, пожалуйста, разобраться. Спасибо!
« Последнее редактирование: 21-07-2015, 11:10:52 от Александр Ривилис »

Отмечено как Решение Alexx 21-07-2015, 11:56:09

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Alexx
Приветствую на форуме! Прочитай пожалуйста в моей подписи как следует форматировать код на форуме.
Теперь по сути вопроса. Свойство BlockReference.BlockTransform возвращает матрицу преобразования из координат в системе блока в координаты МСК.
Пример использования: Программная имитация команды Burst
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AlexxАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 76
  • Карма: 1
Александр, спасибо!

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