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の定義(取得)方法はいくつかありますが基本的には下記のいずれかになるため状況に応じて使い分けをします。

  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プロパティを使うことで取得が可能です。

  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コレクションのメソッドが用意されているのではないか?」ということさえ理解しておけば十分です。
   

メインページへ戻る
 

 関連書籍

icon-share-square Autodesk公式リンク

参考:ModelSpace コレクション(ActiveX)
   PaperSpace コレクション(ActiveX)

AutoCAD, VBA

Posted by Lic