在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(它是一个MDI应用程序)上更改,因此我不建议像您这样将这些对象存储为STATIC。
相反,依赖于MdiActiveDocument的每个调用应该在每个命令调用中获得所有这些变量。这可能就是你有这种行为的原因。