ModelSpaceとPaperSpace|AutoCAD VBAマクロの作成方法
ModelSpaceコレクションとPaperSpaceコレクションはAutoCAD VBAで自動化を行う際に最も重要なオブジェクトの1つです。このオブジェクトはモデル空間とペーパー空間での2D/3D形状や寸法線、テキスト、ハッチングなどのあらゆる要素の作成や取得を行うことのできるオブジェクトです。
本ページで学べる内容は以下のとおりです。
ModelSpaceコレクション(モデル空間)について
PaperSpaceコレクション(ペーパー空間)について
モデル空間とペーパー空間
AutoCADにはモデル空間とペーパー空間というものが存在します。モデル空間は2D/3D要素などを使い実物大サイズでの作図をするための空間で、ペーパー空間はビューポートという指定のエリアを切り取るための”枠”を使って、モデル空間で作図した対象物を紙のサイズに収まるよう縮尺や配置位置などを整える(レイアウトする)ための空間です。
AutoCAD画面下部にある「モデル」「レイアウト」のタブがそれぞれモデル空間とペーパー空間を表しています。新規Drawing内にはデフォルトでモデル空間が1つ、ペーパー空間が2つ存在しますが、ペーパー空間は任意で追加することも可能です。(※タブ数の上限はモデル/レイアウト合わせて256個)
AutoCAD VBAではモデル空間は「ModelSpaceコレクション」、ペーパー空間は「PaperSpaceコレクション」としてそれぞれオブジェクトが用意されています。これらオブジェクトはモデル空間/ペーパー空間内に図形や寸法線、テキストなどを新規作成したり、既に存在している要素を編集したりすることができます。これらのオブジェクトは、操作対象がモデル空間かペーパー空間かという違いはありますが基本的な扱い方はほとんど同じです。(※ペーパー空間の場合はビューポートが存在する)
プログラムで自動作図がしたい、寸法線を作成したい、テキストの誤字脱字チェックがしたい等のモデル空間/ペーパー空間内の要素を使う場合に利用される最重要オブジェクトの1つです。
ModelSpaceコレクション
モデル空間に生成される要素は「ModelSpaceコレクション」というオブジェクトの中に作成されていきます。オブジェクトの親子関係としては下図の通り「Application>(Documents)>Document>ModelSpace」となっておりドキュメント(Drawing)直下のオブジェクトです。
ModelSpaceコレクションはDocumentオブジェクト直下に属しているので、DocumentオブジェクトのModelSpaceプロパティを使うことで取得が可能です。ModelSpaceの定義(取得)方法はいくつかありますが基本的には下記のいずれかになるため状況に応じて使い分けをします。
Dim mdlSpace As AcadModelSpace
Set mdlSpace = ThisDrawing.ModelSpace ‘①
Set mdlSpace = AcadApplication.ActiveDocument.ModelSpace ‘②
Set mdlSpace = AcadApplication.Documents.Item(0).ModelSpace ‘③
①はThisDrawingのモデル空間、つまりは現在のアクティブドキュメント(.dwg)のモデル空間を取得しています。プログラムで操作する対象がアクティブドキュメントに対してのみである場合は基本的にこの方法でModelSpaceを定義します。(※ThisDrawingはDocumentオブジェクト)
②はVBAの最上位オブジェクトであるApplicationオブジェクトのActiveDocumentプロパティで取得したドキュメントのモデル空間を取得しています。ActiveDocumentプロパティはThisDrawingと同じなのでやっていることは①と同じです。AutoCAD VBAでApplicationを表す際は「Application」と表記しても良いですが、他のアプリケーション(Excel等)のVBAにも同名のオブジェクトが存在するので、AutoCADのApplicationと指定するために「AcadApplication」とすることも可能です。
③は現在開かれている全てのドキュメントの中で最もはじめに開かれたドキュメントのモデル空間を取得しています。Item()に入る番号をインデックスと呼び、このインデックスはドキュメントが開かれた順に付与されていきます。つまりItem(0)の部分の数字を変えることで2番目、3番目に開かれたドキュメントのモデル空間を取得することができます。(※Itemは「0」始まりのため注意)
PaperSpaceコレクション
ペーパー空間に生成される要素は「PaperSpaceコレクション」というオブジェクトの中に作成されていきます。オブジェクトの親子関係としては下図の通り「Application>(Documents)>Document>PaperSpace」となっておりドキュメント(Drawing)直下のオブジェクトです。
PaperSpaceコレクションはModelSpaceコレクションと同じくDocumentオブジェクト直下に属しているので、DocumentオブジェクトのPaperSpaceプロパティを使うことで取得が可能です。
Dim pprSpace As AcadPaperSpace
Set pprSpace = ThisDrawing.PaperSpace ‘①
Set pprSpace = AcadApplication.ActiveDocument.PaperSpace ‘②
Set pprSpace = AcadApplication.Documents.Item(0).PaperSpace ‘③
取得(定義)方法の考え方は上記の通りModelSpaceコレクションと同じです。
メソッド
ModelSpace/PaperSpaceコレクションのメソッドは下記の通りです。PaperSpaceコレクションのみAddPViewportメソッドが存在しており、それ以外のメソッドは全て共通のものが用意されています。
主に2D/3D形状や注釈、幾何公差、寸法線などの要素を作成/取得するためのメソッドが用意されており、同じ要素でも定義方法の違う要素の場合は別のメソッドとして用意されているものも存在します。
メソッド名 | 内容 |
Add3DFace | 3D面(3DFACE)オブジェクトを作成する |
Add3DMesh | 3Dメッシュ(3DMESH)オブジェクトを作成する |
Add3DPoly | 3Dポリライン(3DPOLY)オブジェクトを作成する |
AddArc | 円弧(ARC)オブジェクトを作成する |
AddAttribute | 属性定義(ATTDEF)オブジェクトを作成する |
AddBox | 3Dソリッド直方体(BOX)オブジェクトを作成する |
AddCircle | 円(CIRCLE)オブジェクトを作成する |
AddCone | 3Dソリッド円錐(CONE)オブジェクトを作成する |
AddCustomObject | カスタムオブジェクトを作成する |
AddCylinder | 3Dソリッド円柱(CYLINDER)オブジェクトを作成する |
AddDim3PointAngular | 角度寸法(DIMANGULAR)オブジェクトを作成する |
AddDimAligned | 平行寸法(DIMALIGNED)オブジェクトを作成する |
AddDimAngular | 角度寸法(DIMANGULAR)オブジェクトを作成する |
AddDimArc | 弧長寸法(DIMARC)オブジェクトを作成する |
AddDimDiametric | 直径寸法(DIMDIAMETER)オブジェクトを作成する |
AddDimOrdinate | 座標寸法(DIMORDINATE)オブジェクトを作成する |
AddDimRadial | 半径寸法(DIMRADIUS)オブジェクトを作成する |
AddDimRadialLarge | 折り曲げ半径寸法(DIMJOGGED)オブジェクトを作成する |
AddDimRotated | 回転寸法(DIMROTATED)オブジェクトを作成する |
AddEllipse | 楕円(ELLIPSE)オブジェクトを作成する |
AddEllipticalCone | 3Dソリッド楕円錐(CONE)オブジェクトを作成する |
AddEllipticalCylinder | 3Dソリッド楕円柱(CYLINDER)オブジェクトを作成する |
AddExtrudedSolid | 押し出しソリッド(EXTRUDE)オブジェクトを作成する |
AddExtrudedSolidALongPath | 押し出しソリッド(EXTRUDE)オブジェクトを作成する |
AddHatch | ハッチング(HATCH)オブジェクトを作成する |
AddLeader | 引出線(MLEADER)オブジェクトを作成する |
AddLightWeightPolyline | ライトウェイトポリラインオブジェクトを作成する |
AddLine | 線分(LINE)オブジェクトを作成する |
AddMInsertBlock | ブロック一括挿入(MINSERT)を実行する |
AddMLeader | 引出線(MLEADER)オブジェクトを作成する |
AddMLine | マルチライン(MLINE)オブジェクトを作成する |
AddMText | マルチテキスト(MTEXT)オブジェクトを作成する |
AddPoint | 点(POINT)オブジェクトを作成する |
AddPolyfaceMesh | ポリメッシュ(PFACE)オブジェクトを作成する |
AddPolyline | ポリライン(POLYLINE)オブジェクトを作成する |
AddPViewport | ペーパー空間ビューポートを追加する ※PaperSpaceのみ |
AddRaster | イメージ(-IMAGE)オブジェクトを作成する |
AddRay | 放射線(RAY)オブジェクトを作成する |
AddRegion | リージョン(REGION)オブジェクトを作成する |
AddRevolvedSolid | 回転ソリッド(REVOLVE)オブジェクトを作成する |
AddSection | 断面を作成する |
AddShape | シェイプ挿入[SHAPE]を実行する |
AddSolid | 2D塗り潰しポリゴン(SOLID)オブジェクトを作成する |
AddSphere | 3Dソリッド球(SPHERE)オブジェクトを作成する |
AddSpline | スプライン(SPLINE)オブジェクトを作成する |
AddTable | 表(TABLE)オブジェクトを作成する |
AddText | 文字記入(TEXT)オブジェクトを作成する |
AddTolerance | 幾何公差(TOLERANCE)オブジェクトを作成する |
AddTorus | 3Dソリッドトーラス(TORUS)オブジェクトを作成する |
AddTrace | 太線オブジェクトを作成する |
AddWedge | 3Dソリッドくさび(WEDGE)オブジェクトを作成する |
AddXLine | 構築線(XLINE)オブジェクトを作成する |
AttachExternalReference | 外部参照を図面にアタッチする |
GetExtensionDictionary | 関連付けられた拡張ディクショナリを取得する |
GetXdata | 拡張オブジェクトデータ(XDATA)を取得する |
InsertBlock | ブロック挿入(-INSERT)を実行する |
Item | モデル空間/ペーパー空間に存在するオブジェクトを取得する |
SetXdata | 拡張オブジェクトデータ(XDATA)を設定する |
プロパティ
ModelSpace/PaperSpaceコレクションのプロパティは下記の通りです。ModelSpaceコレクションのみComments/Origin/Unitsプロパティが存在しており、それ以外のプロパティは全て共通のものが用意されています。ModelSpace/PaperSpaceコレクションは内部的にはBlockオブジェクトと一部共通のものであるため、Blockオブジェクト用に用意されているプロパティも含まれています。
プロパティ名 | 内容 |
Application | Applicationオブジェクトを取得する |
Comments | 図面のコメント(説明)を取得/設定する ※ModelSpaceのみ |
Count | 空間内の要素の数を取得する |
Document | 親のDocumentオブジェクトを取得する |
Handle | ハンドルを取得する |
HasExtensionDictionary | 関連付けられた拡張ディクショナリを所持しているかを判定する |
Layout | 関連付けられたLayoutオブジェクトを取得/設定する |
Name | 空間の名称を取得する |
ObjectID | オブジェクトIDを取得する |
ObjectName | 空間のAutoCADクラス名を取得する |
Origin | 原点座標を取得する ※ModelSpaceのみ |
OwnerID | オーナーオブジェクトのオブジェクトIDを取得する |
Units | 計測単位を取得/設定する ※ModelSpaceのみ |
※ハンドルとオブジェクトIDは指定のオブジェクトを参照するための一意の値
まとめ
今回の内容をまとめると以下のとおりです。
ModelSpaceコレクションを使うことでモデル空間内の要素の操作が可能
PaperSpaceコレクションを使うことでペーパー空間内の要素の操作が可能
ModelSpaceコレクションとPaperSpaceコレクションはほぼ同じオブジェクト
PaperSpaceコレクションにはビューポート(PViewportオブジェクト)が存在する
ModelSpaceコレクションとPaperSpaceコレクションはAutoCAD VBAの中でも非常に重要なオブジェクトです。モデル空間/ペーパー空間内に何らかの要素を作成したい場合はもちろん、既存の要素を編集したい場合にも利用されるため最頻出のオブジェクトの1つです。
重要なオブジェクトなこともあり、プロパティ/メソッドがかなりの量ありますがすべてを理解しておく必要はありません。実際に何らかの要素を作成したいと思ったときに、「ModelSpace/PaperSpaceコレクションのメソッドが用意されているのではないか?」ということさえ理解しておけば十分です。