質問
Managed .Net API でレイアウト空間のビューポート表示範囲のオブジェクトを取得する方法はありますか?
回答
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);
}
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | .NET :Interaction.GetObject で起動中の AutoCAD COM オブジェクトを取得できない場合の対処方法 | 0 | 10.2 | 04-09-2026 |
| 2 | Visual Studioで「InventorViewCtrl.ocxの自己登録に失敗しました」エラーが発生して、Inventor ViewコントロールをWindowsフォームへ追加することが出来ない | 0 | 10.94 | 17-08-2026 |
| 3 | AutoCAD .NET API :最後に追加されたエンティティの取得 | 0 | 13.03 | 23-08-2026 |
| 4 | Revit API Tips: 壁プロファイルの取得方法 | 0 | 5.8 | 17-08-2026 |
| 5 | Revit API Tips: ソリッドやメッシュのジオメトリをプロジェクト上に作図する方法 | 0 | 7.59 | 17-08-2026 |
| 6 | Revit API Tips: 複数のファミリを組み合わせて(ネストして)新しいファミリを作成する方法 | 0 | 6.17 | 17-08-2026 |
| 7 | Autocad Web-viewport scale question | 0 | 31.32 | 02-08-2026 |
| 8 | [BUG] "Align to" on a UCS plane orients the view to the Default Coordinate System instead of UCS | 0 | 6.94 | 25-07-2026 |
| 9 | InventorのPack And Go を、VBAから実行する場合の参照設定 | 0 | 13.12 | 17-08-2026 |
| 10 | Shared View does not respect the redefined ViewCube Top orientation | 0 | 5.16 | 02-08-2026 |