[MSCE C#]如何绕二维平面的指定点旋转整个参考

创建了一个参考,虽然创建时可以指定旋转和平移,但只能是先平移,后旋转,无法满足我的需求。有没有类似Eelement.ApplyTransform的函数,可以让参考随意旋转平移?

Parents Reply Children
  • 参考元素其内部应该是仅仅保存了最终的一个变换结果,您如果想要在原有基础上执行新的变换的话,可以善加利用矩阵的特性。

    比如,先调用DgnAttachment.GetRotation获得当前的旋转矩阵,然后用该矩阵乘以您想要旋转的矩阵,最后调用DgnAttachment.SetRotMatrix将结果矩阵设置回去即可。



    Answer Verified By: lingwei liu 

  • DgnDocumentMoniker moniker = DgnDocumentMoniker.CreateFromFileName(dgnFile.GetFileName(), null);
                DgnAttachment attachment = sheetDgnModel.CreateDgnAttachment(moniker, DRAWING_NAME);
                if(attachment != null)
                {
                    attachment.StoredScale = 1/SheetScale;
                    DTransform3d transform = DTransform3d.FromTranslation(new DPoint3d(centerPoint.X, centerPoint.Y, 0.0) * uor);
                    transform = transform * DTransform3d.Rotation(2, Angle.FromRadians(centerVector.Azimuth > Math.PI ? -Math.PI * 3 / 2 + centerVector.Azimuth : -Math.PI / 2 + centerVector.Azimuth));
                    transform = transform * DTransform3d.FromTranslation(new DPoint3d(-centerPoint.X, -centerPoint.Y, 0.0) * uor);
                    DVector3d colX, colY, colZ;
                    transform.GetColumns(out colX, out colY, out colZ);
    
                    attachment.SetMasterOrigin(new DPoint3d(realWidth / 2 / SheetScale, SheetHeight / 2, 0.0) * uor);
                    attachment.SetRefOrigin(new DPoint3d(centerPoint.X, centerPoint.Y, 0.0) * uor);
                    DMatrix3d rotateMatrix = DMatrix3d.FromColumns(colX, colY, colZ);
                    attachment.SetRotMatrix(rotateMatrix);
                    attachment.WriteToModel(true);
                }

    非常感谢,已实现,代码供大家参考!

  • 非常感谢您的分享,贯彻了我们社区的“人人为我,我为人人”的精神。赞一个!ThumbsupClap