.NET API には VBA の GcadApplication.ZoomExtents の様に、
現在のビューを直接操作する為の機能は実装されていません。
API を使用してズームを行うのであればCOMの機能を使用するか、
現在のビューのプロパティを直接編集してズームを行います。
COMの機能を使用する場合のサンプルは次の通りです。
- VB.NET
Imports GrxCAD.ApplicationServices Imports GrxCAD.Runtime <Assembly: CommandClass(GetType(Sample_VB.SampleCmd))> Namespace Sample_VB Public Class SampleCmd <CommandMethod("ZOOM_COM")> Public Sub ZoomSample_COM() Dim icApp = Application.AcadApplication icApp.ZoomExtents() End Sub End Class End Namespace
- C#
using GrxCAD.ApplicationServices; using GrxCAD.Runtime; [assembly: CommandClass(typeof(Sample_CS.SampleCmd))] namespace Sample_CS { public class SampleCmd { [CommandMethod("ZOOM_COM")] public void ZoomSample_COM() { dynamic icApp = Application.AcadApplication; icApp.ZoomExtents(); } } }
.NET API のみを使用する場合のサンプルは次の通りです。
- VB.NET
Imports GrxCAD.ApplicationServices Imports GrxCAD.DatabaseServices Imports GrxCAD.EditorInput Imports GrxCAD.Geometry Imports GrxCAD.Runtime <Assembly: CommandClass(GetType(Sample_VB.SampleCmd))> Namespace Sample_VB Public Class SampleCmd <CommandMethod("ZOOM_NET")> Public Sub ZoomSample_NET() Dim icDb As Database = Application.DocumentManager.MdiActiveDocument.Database Dim IcEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor Using icTrans As Transaction = icDb.TransactionManager.StartTransaction() 'オブジェクト範囲を更新 icDb.UpdateExt(True) '現在のビューを取得 Using icView As ViewTableRecord = IcEd.GetCurrentView() '現在のUCSを取得 Dim UCS As Matrix3d = IcEd.CurrentUserCoordinateSystem 'UCSから平面を作成 Dim ucsPlane = New Plane( UCS.CoordinateSystem3d.Origin, UCS.CoordinateSystem3d.Zaxis) 'オブジェクト範囲の右上点(Point2dに変換) Dim ExtMax As Point2d = icDb.Extmax.Convert2d(ucsPlane) 'オブジェクト範囲の左下点(Point2dに変換) Dim ExtMin As Point2d = icDb.Extmin.Convert2d(ucsPlane) 'オブジェクト範囲の中心 Dim center As Point2d = ExtMin.Subtract(ExtMax.GetVectorTo(ExtMin) * 0.5) 'オブジェクト範囲の幅 Dim width As Double = Math.Abs(ExtMax.X - ExtMin.X) 'オブジェクト範囲の高さ Dim height As Double = Math.Abs(ExtMax.Y - ExtMin.Y) 'ビューの中心を変更 icView.CenterPoint = center 'ビューの幅を変更 icView.Width = width * 1.01 'ビューの高さを変更 icView.Height = height * 1.01 '変更したビューを現在のビューに設定 IcEd.SetCurrentView(icView) End Using icTrans.Commit() End Using End Sub End Class End Namespace
- C#
using GrxCAD.ApplicationServices; using GrxCAD.DatabaseServices; using GrxCAD.EditorInput; using GrxCAD.Geometry; using GrxCAD.Runtime; [assembly: CommandClass(typeof(Sample_CS.SampleCmd))] namespace Sample_CS { public class SampleCmd { [CommandMethod("ZOOM_NET")] public void ZoomSample_NET() { Database icDb = Application.DocumentManager.MdiActiveDocument.Database; Editor icEd = Application.DocumentManager.MdiActiveDocument.Editor; using (Transaction icTrans = icDb.TransactionManager.StartTransaction()) { //オブジェクト範囲を更新 icDb.UpdateExt(true); //現在のビューを取得 using (ViewTableRecord icView = icEd.GetCurrentView()) { //現在のUCSを取得 Matrix3d UCS = icEd.CurrentUserCoordinateSystem; //UCSから平面を作成 Plane ucsPlane = new Plane( UCS.CoordinateSystem3d.Origin, UCS.CoordinateSystem3d.Zaxis); //オブジェクト範囲の右上点(Point2dに変換) Point2d ExtMax = icDb.Extmax.Convert2d(ucsPlane); //オブジェクト範囲の左下点(Point2dに変換) Point2d ExtMin = icDb.Extmin.Convert2d(ucsPlane); //オブジェクト範囲の中心 Point2d center = ExtMin.Subtract(ExtMax.GetVectorTo(ExtMin) * 0.5); //オブジェクト範囲の幅 double width = System.Math.Abs(ExtMax.X - ExtMin.X); //オブジェクト範囲の高さ double height = System.Math.Abs(ExtMax.Y - ExtMin.Y); //ビューの中心を変更 icView.CenterPoint = center; //ビューの幅を変更 icView.Width = width * 1.01; //ビューの高さを変更 icView.Height = height * 1.01; //変更したビューを現在のビューに設定 icEd.SetCurrentView(icView); } icTrans.Commit(); } } } }
.NET API のみを使用したサンプルではデータベースからオブジェクト範囲を取得して、
オブジェクト範囲の中心、幅、高さの計算結果元にビューを作成しています。
ビューの幅と高さの変更の際に width * 1.01 と値を増やしている理由は、
オブジェクト範囲をそのまま使用するとオブジェクトとビューの端がくっついてしまうので、
オブジェクトの端を一目でわかるように、余白を持たせてズームを行っています。