围绕Z轴旋转ACAD元素

时间:2011-05-10 15:19:09

标签: vb.net geometry autocad

我想围绕Z轴旋转ACAD(AutoCAD 2008)元素。我已经有以下代码段:

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,它不必是当前数据库。 我想在不使用Editor对象的情况下从这个数据库中获取Z轴。

这可能吗?

2 个答案:

答案 0 :(得分:2)

它应该是相对于当前空间的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 :(得分:1)

您可以使用Database.Ucsxdir和Database.Ucsydir这两个属性:

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