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

ADN Club => VBA => Тема начата: Zailar от 28-05-2021, 18:20:33

Название: Угол между системами координат
Отправлено: Zailar от 28-05-2021, 18:20:33
Добрый день, есть ли способ через VBA получить угол между МСК и системой координат дисплея?
Название: Re: Угол между системами координат
Отправлено: Александр Ривилис от 28-05-2021, 18:43:27
Добрый день, есть ли способ через VBA получить угол между МСК и системой координат дисплея?
Что такое угол между системами координат?
Название: Re: Угол между системами координат
Отправлено: Zailar от 28-05-2021, 19:17:29
(https://i.postimg.cc/WtdYYCp6/2021-05-28-211316.png) (https://postimg.cc/WtdYYCp6)

В обоих видовых экранах оси  ХУ ориентированы одинаково, но при этом в одном видовом экране ось У ориентирована с востока на запад, а в другом с юга на север. В одном случае система координат дисплея не повернута относительно МСК, а во втором повернута, вот этот угол (поворота системы координат дисплея относительно МСК) можно определить через VBA?
Название: Re: Угол между системами координат
Отправлено: Александр Ривилис от 28-05-2021, 19:51:47
Понятнее мне не стало, но на всякий случай вот тебе код, с которым можно поиграться и который возвращает единичный вектор по оси X в МСК преобразованный в систему координат дисплея:

Код - Visual Basic [Выбрать]
  1. Sub Angle()
  2.  
  3.   Dim vX(0 To 2) As Double
  4.   vX(0) = 1: vX(1) = 0: vX(2) = 0
  5.   Dim v1 As Variant
  6.   v1 = ThisDrawing.Utility.TranslateCoordinates(vX, acWorld, acDisplayDCS, True)
  7.   MsgBox ("vX(X) :" & v1(0) & vbCrLf & "vX(Y) :" & v1(1) & vbCrLf & "vX(Z) :" & v1(2) & vbCrLf)
  8.  
  9. End Sub
Надеюсь это тебе поможет разобраться с тем, что тебя интересует.
Название: Re: Угол между системами координат
Отправлено: Александр Ривилис от 28-05-2021, 20:46:13
Пожалуй это то, что ты ищешь:

Код - Visual Basic [Выбрать]
  1. Sub Angle()
  2.  
  3.   Dim vX(0 To 2) As Double
  4.   vX(0) = 1#: vX(1) = 0#: vX(2) = 0#
  5.   Dim v1 As Variant
  6.   v1 = ThisDrawing.Utility.TranslateCoordinates(vX, acWorld, acDisplayDCS, True)
  7.   ' MsgBox ("vX(0): " & v1(0) & vbCrLf & "vX(1): " & v1(1) & vbCrLf & "vX(2): " & v1(2) & vbCrLf)
  8.    
  9.   Dim orig(0 To 2) As Double
  10.   orig(0) = 0#: orig(1) = 0#: orig(2) = 0#
  11.   Dim ang As Double
  12.   ang = ThisDrawing.Utility.AngleFromXAxis(orig, v1)
  13.   MsgBox ("Угол поворота оси X : " & ang / 3.14159265358979 * 180#)
  14.  
  15. End Sub