来自C#旋转功能的奇怪行为

时间:2015-10-08 21:10:46

标签: c# rotation autocad autocad-plugin

我正在尝试以编程方式将此处显示的AutoCAD中的紫色块旋转90度,以便它与橙色块对齐。

enter image description here

紫色块的基点是左下角。使用AutoCAD的内置旋转功能可以得到我想要显示的结果:

enter image description here

但是当我尝试使用此功能以编程方式旋转它时

public static BlockReference RotateBlockWithAttributes(ObjectId passedIdOfBlockToRotate)
{
    Transaction tr = _database.TransactionManager.StartTransaction();
    DocumentLock docLock = _activeDocument.LockDocument();

    using (tr)
    using (docLock)
    {
        BlockReference blockToRotate = tr.GetObject(passedIdOfBlockToRotate, OpenMode.ForWrite) as BlockReference;
        blockToRotate.TransformBy(Matrix3d.Rotation(Math.PI / 2, blockToRotate.Normal, blockToRotate.Position));
        tr.Commit();
        return blockToRotate;
    }
}

我得到了这个结果

enter image description here

并且不知道为什么......

1 个答案:

答案 0 :(得分:1)

我认为您应该更改 BlockReference.Rotation 属性。

从帮助文件中:

  

访问块引用的旋转值(以弧度表示)。该   旋转值是相对于坐标系的X轴   与块参考的OCS平行,但其起源于   块引用的位置点。旋转轴是Z.   该坐标系的轴具有正向旋转   向下看Z轴朝向原点时逆时针方向。