C# 使用C在AutoCAD 2015中动态观察摄影机#

C# 使用C在AutoCAD 2015中动态观察摄影机#,c#,autocad-plugin,C#,Autocad Plugin,我正在编写一个静态类,其中包含简化使用AutoCAD摄影机的方法。除了轨道外,我所有的方法似乎都有效。这是我在我的类上下文中的轨道方法 public static class CameraMethods { #region _variables and Properties private static Document _activeDocument = Autodesk.AutoCAD.ApplicationServices.Application.D

我正在编写一个静态类,其中包含简化使用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);
        }
}
公共静态类摄像方法
{
#区域变量和属性
私有静态文档_activeDocument=Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
私有静态数据库_Database=_activeDocument.Database;
私有静态编辑器_Editor=_activeDocument.Editor;
私有静态ViewTableRecord_initialView=_editor.GetCurrentView();
私有静态ViewTableRecord\u activeViewTableRecord=(ViewTableRecord)\u initialView.Clone();
#端区
/// 
///围绕经过的轴旋转角度
/// 
公共静态空心轨道(矢量3D轴、角度)
{
//调整ViewTableRecord
//var oldDirection=\u activeViewTableRecord.ViewDirection;
_activeViewTableRecord.ViewDirection=_activeViewTableRecord.ViewDirection.TransformBy(矩阵3D.旋转(角度弧度、轴、点3D.原点));
//将其设置为当前视图
_SetCurrentView(_activeViewTableRecord);
}
}

问题是,每次我调用“动态观察”时,它都是基于我上次动态观察时的视图进行动态观察的。例如,我第一次调用orbit以绕x轴旋转45度时,它会执行我预期的操作。但是,如果我从autocad中更改摄影机,然后再次调用该方法,它会像我调用了两次一样进行动态观察;在X轴上90度。我需要有关如何修复此问题的建议。

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

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