Поверните элемент ACAD вокруг оси Z - PullRequest
0 голосов
/ 10 мая 2011

Я хочу повернуть элемент 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 для вращения выше?

Edit:

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 11 мая 2011

Это должна быть ось 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 голос
/ 11 мая 2011

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

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