【问题标题】:Rotate ACAD element around Z-axis围绕 Z 轴旋转 ACAD 元素
【发布时间】:2011-08-22 14:00:27
【问题描述】:

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

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 轴。

这可能吗?

【问题讨论】:

    标签: vb.net geometry autocad


    【解决方案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)
    

    【讨论】:

    • 谢谢你,但这不是我想要的。我试图澄清我上面的问题。
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢!这正是我一直在寻找的。​​span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2011-10-30
    • 1970-01-01
    • 2015-02-24
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多