Managed .Net API でレイアウト空間のビューポート表示範囲のオブジェクトを取得する方法

Autodesk Support

2020年11月9日


Managed .Net API でレイアウト空間のビューポート表示範囲のオブジェクトを取得する方法はありますか?

 

Solution

AutoCADでの、レイアウトのビューポートは、モデル空間への覗き窓となり、ビューポートに表示されている図形の実態はレイアウト空間には存在しません。

また、ビューポートは、モデル空間とは異なる座標系を持つため、ビューポートに表示されている図形を取得するためには、ビューポートの表示領域の対角点座標をモデル空間上の座標に変換した後に、変換後の座標でモデル空間上の図形を選択する必要があります。

 

次のコードは、ビューポートに表示されている図形の選択を行うサンプルコードです。

Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
Database db = doc.Database;

ed.SwitchToPaperSpace();

//ビューポートを選択
var peo = new PromptEntityOptions("\nSelect viewport: ");
peo.SetRejectMessage("\nRequires a Viewport");
peo.AddAllowedClass(typeof(Viewport), false);
PromptEntityResult result = ed.GetEntity(peo);
if (result.Status != PromptStatus.OK)
    return;
using (var tr = new OpenCloseTransaction())
{
    Viewport viewport = (Viewport)tr.GetObject(result.ObjectId, OpenMode.ForRead);
                            
    /// ビューポート設定から、変換マトリクスを取得
    Point2d viewCenter = viewport.ViewCenter; 
    double x = viewCenter.X; 
    viewCenter = viewport.ViewCenter;
    Point3d center = new Point3d(x, viewCenter.Y, 0.0);
    Point3d vpcenter = viewport.CenterPoint;
    Matrix3d tfmatrix = (Matrix3d.Displacement(new Vector3d(vpcenter.X - center.X, vpcenter.Y - center.Y, 0.0)) 
                       * Matrix3d.Scaling(viewport.CustomScale, center) 
                       * Matrix3d.Rotation(viewport.TwistAngle, Vector3d.ZAxis, Point3d.Origin) 
                       * Matrix3d.WorldToPlane(new Plane(viewport.ViewTarget, viewport.ViewDirection))).Inverse();
                            
    ///ビューポートのMin/Max座標を変換マトリクスでモデル座標に変換
    Extents3d extents = viewport.GeometricExtents;
    Point3d msMinPoint = extents.MinPoint.TransformBy(tfmatrix);
    Point3d msMaxPoint = extents.MaxPoint.TransformBy(tfmatrix);


    tr.Commit();

    ed.SwitchToModelSpace();

    //取得したMin、Maxポイントを用いて図形を選択
    var psr = ed.SelectWindow(msMinPoint, msMaxPoint);
}

 

 



この情報は役に立ちましたか?


サポートが必要な場合は、Autodesk Assistant にお問い合わせください!

Assistant が回答を見つけたり、担当者に連絡するお手伝いをします。


オートデスクではどのようなサポートが提供されますか?

ご利用可能なサポートの種類は、サブスクリプションのプランによって異なります。現在のプランでご利用可能なサポート レベルをご確認ください。

サポート レベルを確認