Issue
VPORTS[ビューポート管理] コマンドで作成したモデル空間ビューポート内の表示をすべて再作図したいのですが、.NET API で REGENALL[全再作図] コマンドと同じような実装をすることは可能でしょうか?
Solution
AutoCAD .NET API の Editor.Regen メソッドには、表示中のすべてのモデル空間ビューポートの再作図を指定するパラメーターがありません。このため、すべてのモデル空間ビューポートを走査して、ビューポートを識別する ViewportTableRecord.Number プロパティの値を CVPORT システム変数に指定、アクティブなビューポートをを切り替えて Editor.Regen メソッドを呼び出す必要があります。
[CommandMethod("MyCommand", CommandFlags.Modal)]
public void MyCommand()
{
Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
var curVPort = Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable("CVPORT");
using (Transaction tr = db.TransactionManager.StartTransaction())
{
ViewportTable vpTable = (ViewportTable)tr.GetObject(db.ViewportTableId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead);
if (vpTable != null)
{
ed.WriteMessage(Constants.vbLf + "Model Space Viewports : ");
foreach (ObjectId vpId in vpTable)
{
ViewportTableRecord vptr = (ViewportTableRecord)tr.GetObject(vpId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite);
Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("CVPORT", vptr.Number);
ed.WriteMessage(vptr.Number.ToString());
ed.Regen();
}
}
tr.Commit();
}
Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("CVPORT", curVPort);
}
もちろん、プロジェクトの参照設定に Autodesk.AutoCAD.Interop.Common.dll と Autodesk.AutoCAD.Interop.dll の 2つのアセンブリを追加して、COM Interop(COM 相互運用機能)で ActiveX オートメーション(COM API)を利用、 acAllViewports パラメーターを指定して Regen メソッドを呼び出すことも可能です。
[CommandMethod("MyCommand", CommandFlags.Modal)]
public void MyCommand() // This method can have any name
{
Autodesk.AutoCAD.Interop.AcadApplication COM_App = (Autodesk.AutoCAD.Interop.AcadApplication)Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication;
COM_App.ActiveDocument.Regen(Autodesk.AutoCAD.Interop.Common.AcRegenType.acAllViewports);
}
記事全体を表示