【入門編】【実務中級】AcadDocument.Database.Groupsを活用した「関連図形のパッケージ化」:誤操作による一部削除を防ぐ論理グループの自動生成 – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは。AutoCADの自動化という荒野を切り拓く皆さんのために、今日は「グループ化」という強力な武器を授けましょう。

「せっかく綺麗に配置した図面を、一部だけ動かしてしまって大惨事に……」
そんな経験、一度はありますよね。AutoCADのグループ機能は、単に図形を束ねるだけではありません。オブジェクトのライフサイクルを制御し、図面の整合性を守るための「論理的防壁」です。

今回は、VBAを使ってこの防壁を自動生成する極意を伝授します。

1. なぜ「グループ」なのか?:オブジェクトモデルの深層

AutoCADのオブジェクトモデルにおいて、`Groups`は`Database`直下に存在します。
`AcadDocument.Database.Groups`は、図面内の「名前付きグループ」を管理するコレクションです。

ここでのポイントは、「グループは物理的なブロックとは違う」ということ。
ブロックは「定義」を共有しますが、グループは「個々の図形の集合を、一つの単位としてOSM(Object Selection Mechanism)に認識させるタグ」のようなものです。破壊的な編集を防ぐには、これ以上ないほど軽量で強力な手段なのです。

2. 実践:グループを自動生成するVBAコード

では、選択した図形をプログラムでグループ化するコードを見ていきましょう。ただ動くコードではなく、「エラーを吐かない堅牢なコード」を書くのがプロの流儀です。

Sub CreateLogicalGroup()
Dim acadObj As AcadObject
Dim pickPt As Variant
Dim groupObj As AcadGroup
Dim groupName As String
Dim objArray() As AcadEntity
Dim i As Integer

‘ 1. 名前の一意性を確保(ここが躓きポイント!)
groupName = “GRP_” & Format(Now, “hhmmss”)

‘ 2. ユーザーにオブジェクトを選択させる
On Error Resume Next ‘ 選択キャンセル時のエラーを回避
ThisDrawing.Utility.GetEntity acadObj, pickPt, “グループ化したい図形をクリックしてください”

If Err <> 0 Then
MsgBox “選択がキャンセルされました。”
Exit Sub
End If
On Error GoTo 0

‘ 3. グループの作成(Database直下のGroupsコレクションにAdd)
Set groupObj = ThisDrawing.Database.Groups.Add(groupName)

‘ 4. グループに図形を追加(配列として渡すのがルール)
ReDim objArray(0 To 0)
Set objArray(0) = acadObj
groupObj.AppendItems objArray

‘ 5. フィードバック
MsgBox “グループ [” & groupName & “] を作成しました。これで誤操作は防げます!”, vbInformation
End Sub

コードの解説:ここが「プロのこだわり」

  • 名前の一意性: 同じ名前のグループが既に存在すると`Add`メソッドはエラーを返します。今回は現在時刻を付与しましたが、実務では「連番管理」をするか、エラーハンドリングを厳密に行うのが鉄則です。
  • 配列の扱い: `AppendItems`メソッドは、単一オブジェクトではなく「配列」を引数に取ります。初学者が最も躓くのがここです。`ReDim`で動的に配列を確保する作法を身につけてください。

3. 陥りやすい「罠」と対策

その1:グループ名の重複

`Groups.Add`は非常に気難しいメソッドです。既存の名前と被ると即座にプログラムが止まります。
解決策: ループで`Groups`コレクションを回し、同名がないかチェックする「名前の自動生成ロジック」を関数化しておきましょう。

その2:グループ内オブジェクトの生存確認

グループ化した図形が後から削除されると、グループの参照は「宙に浮いた状態(Dangling Reference)」になります。
対策: 大規模なツールを作る際は、グループを操作する前に`groupObj.Count`を確認し、中身が空になっていないかチェックするルーチンを挟むのがエンジニアの矜持です。

4. さあ、次のステージへ

この「グループ化の自動化」ができるようになると、次は「選択した領域内の全オブジェクトを一括でグループ化する」といった高度な自動化へ進めます。

AutoCAD VBAは、単なる「操作の記録」ではありません。あなたの意図をコードに込め、図面という「設計の結晶」を守るための守護神です。

今回のコードをコピペして、まずは一つの図形をグループ化するところから始めてみてください。それが、手作業の地獄から抜け出し、設計の本質に向き合うための第一歩になります。

何か分からないことがあれば、いつでも聞いてください。あなたのコードが、現場を救う力になることを信じています。

タイトルとURLをコピーしました