在AutoCAD 2015中使用c#实现相机的轨道运行

本文关键字:相机 实现 轨道 运行 AutoCAD 2015 | 更新日期: 2023-09-27 18:04:35

我正在编写一个静态类,其中包含简化AutoCAD相机工作的方法。我所有的方法似乎都有效,除了轨道。这是我的轨道方法,在我的类

的上下文中
public static class CameraMethods
    {
        #region _variables and Properties
        private static Document _activeDocument = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
        private static Database _database = _activeDocument.Database;
        private static Editor _editor = _activeDocument.Editor;
        private static ViewTableRecord _initialView = _editor.GetCurrentView();
        private static ViewTableRecord _activeViewTableRecord = (ViewTableRecord)_initialView.Clone();
        #endregion
/// <summary>
        /// Orbit the angle around a passed axis
        /// </summary>
        public static void Orbit(Vector3d axis, Angle angle)
        {
            // Adjust the ViewTableRecord
            //var oldDirection = _activeViewTableRecord.ViewDirection;
            _activeViewTableRecord.ViewDirection = _activeViewTableRecord.ViewDirection.TransformBy(Matrix3d.Rotation(angle.Radians, axis, Point3d.Origin));
            // Set it as the current view
            _editor.SetCurrentView(_activeViewTableRecord);
        }
}

问题是,每次我调用orbit时,它都是基于我上次运行时的视图运行的。举个例子,第一次我叫轨道到轨道绕x轴45度它就像我期望的那样。但是,如果我在autocad中更改相机然后再次调用该方法,它会像我调用两次一样运行;x轴上的90度角。我需要建议如何解决这个问题。

在AutoCAD 2015中使用c#实现相机的轨道运行

由于活动文档可以在AutoCAD(它是一个MDI应用程序)上更改,因此我不建议像您这样将这些对象存储为STATIC。

相反,依赖于MdiActiveDocument的每个调用应该在每个命令调用中获得所有这些变量。这可能就是你有这种行为的原因。