Поворот элемента ACAD вокруг оси Z

#vb.net #geometry #autocad

#vb.net #геометрия #autocad

Вопрос:

Я хочу повернуть элемент ACAD (AutoCAD 2008) вокруг оси Z. У меня уже есть следующий фрагмент кода:

 Dim mm As Matrix3d = Matrix3d.Rotation(rotateDEG, HOW TO GET THE Z-AXIS HERE?, center)
For Each id As ObjectId In elements
  Dim ent As Entity = CType(tr.GetObject(id, OpenMode.ForWrite), Entity)
  ent.TransformBy(mm)
Next
  

Я использую матрицу преобразования для поворота элемента, но матрицу можно построить только с осью вращения.
Я знаю, что могу получить его из редактора текущего документа. Но мне это нужно из элемента в произвольной базе данных, которая не всегда является активной!

Вопрос: Как мне получить ось Z для приведенного выше поворота?

Редактировать:

Как упоминалось ниже, я могу получить ось Z из текущего редактора:

 Dim doc As Document = Application.DocumentManager.MdiActiveDocument
Dim ucs As Matrix3d = doc.Editor.CurrentUserCoordinateSystem
Dim cs As CoordinateSystem3d = ucs.CoordinateSystem3d
  

Но я не работаю с активным документом и текущей базой данных! У меня есть ObjectId из произвольной базы данных, которая не обязательно должна быть текущей базой данных.
И я хочу получить ось Z из этой базы данных без использования объекта Editor.

Возможно ли это?

Ответ №1:

Это должна быть ось Z относительно текущего пространства:

 Dim doc As Document = Application.DocumentManager.MdiActiveDocument
Dim ucs As Matrix3d = doc.Editor.CurrentUserCoordinateSystem
Dim cs As CoordinateSystem3d = ucs.CoordinateSystem3d
Dim mm As Matrix3d = Matrix3d.Rotation(rotateDEG, cs.Zaxis, center)
  

Комментарии:

1. Спасибо, но это не совсем то, чего я хочу. Я пытаюсь прояснить свой вопрос выше.

Ответ №2:

Вы можете использовать два свойства Database.Ucsxdir и Database.Ucsydir :

 Dim zAxis As Vector3d = db.Ucsxdir.CrossProduct(db.Ucsydir)