2015-07-23 1 views
3

Я пишу статический класс, который содержит методы, упрощающие работу с камерой AutoCAD. Все мои методы, похоже, работают, за исключением орбиты. Heres мой метод орбит в контексте моего классаОбход камеры в AutoCAD 2015 с C#

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); 
     } 
} 

Проблема в том, что каждый раз, когда я называю орбита его орбит построена на вид по сравнению с предыдущим временем я вращался. Например, в первый раз, когда я вызываю орбиту на орбиту 45 градусов вокруг оси х, она делает то, что я ожидаю. Однако, если я сменил камеру внутри автокадра, то снова вызовите этот метод, он вращается, как если бы я дважды вызывал его; 90 градусов по оси X. Мне нужен совет, как это исправить.

ответ

1

Поскольку активный документ может быть изменен в AutoCAD (это приложение MDI), я бы не рекомендовал хранить эти объекты как STATIC, как вы делаете.

Вместо этого каждый вызов, который зависит от MdiActiveDocument, должен получить все эти переменные при каждом командном вызове. Это может быть причиной того, что вы получаете такое поведение.