#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)