AutoCAD VBAの深淵へ:オフセット処理で紐解く「オブジェクト操作」の極意
AutoCADのルーチンワークに追われ、「手作業の繰り返し」から卒業したいと願うあなたへ。
こんにちは。AutoCADの自動化という荒野を切り拓いてきた、あなたの技術的な相棒です。
「マクロの記録」ボタンを押して操作をなぞるだけの日々は、今日で終わりにしましょう。なぜなら、真の自動化エンジニアは「オブジェクトのライフサイクル」を制御することで、CADの心臓部に直接命令を下すからです。
今回は、AutoCAD VBAの最も実用的かつ強力な機能の一つである「オフセット(Offset)」を題材に、AutoCADのオブジェクトモデルを攻略する極意を伝授します。
—
1. AutoCADオブジェクトモデルの「心臓部」を理解する
AutoCAD VBAにおいて、すべての操作は「階層構造」の上に成り立っています。
- Application(AutoCADそのもの)
- Document(開いている図面)
- ModelSpace(描画領域)
- Object(線、円、ポリラインなど)
オフセット操作を行うということは、ModelSpaceに存在する「特定のオブジェクト」を掴み上げ、それを元に「新しいオブジェクト」を生成して書き出すというプロセスです。この道筋さえ掴めば、どんな図形操作も恐れることはありません。
—
2. 実践:オフセット処理の自動化コード
このコードは、選択したオブジェクトを一定距離でオフセットするプロフェッショナルなテンプレートです。まずはこれを見てください。
Sub AutoOffsetObject()
Dim objEnt As AcadEntity
Dim varPickPnt As Variant
Dim varOffsetPnt As Variant
Dim dblDistance As Double
Dim varOffsetObjects As Variant
‘ 1. ユーザーにオブジェクトを選択させる
On Error Resume Next ‘ 選択キャンセル時のエラー対策
ThisDrawing.Utility.GetEntity objEnt, varPickPnt, “オフセットしたい線を選択してください:”
If Err.Number <> 0 Then Exit Sub
‘ 2. オフセット距離と方向の指定
dblDistance = 50.0 ‘ 距離を定義(実務ではInputBox等で動的に取得)
varOffsetPnt = ThisDrawing.Utility.GetPoint(, “オフセットする方向を指定してください:”)
‘ 3. オフセット実行の核となるメソッド
‘ Offsetメソッドは戻り値として「生成されたオブジェクトの配列」を返す
varOffsetObjects = objEnt.Offset(dblDistance)
‘ 4. 方向の調整(Offsetは常に距離のみ指定するため、方向判定が必要)
‘ ※実務的なヒント:円などは内側・外側の判定が必要になるため、
‘ 生成された後のオブジェクトを操作する処理が不可欠です。
ThisDrawing.Regen acActiveViewport
MsgBox “オフセット完了!”, vbInformation
End Sub
—
3. なぜ「マクロの記録」では限界があるのか?
初心者の多くが、マクロの記録が生成する `Command “OFFSET” …` という記述に頼ります。しかし、これは単に「キーボード入力をシミュレートしているだけ」です。
プロは違います。`objEnt.Offset` というメソッド(機能)を直接叩くのです。
この違いは決定的です。
- コマンド入力: AutoCADの画面遷移を伴うため、動作が遅く、エラーが起きた際に復旧が困難。
- メソッド操作: メモリ上で計算が完結するため、爆速。さらに、生成されたオブジェクトをその場で変数に格納し、色を変えたり画層を移動させたりする「後処理」が自由自在です。
—
4. 現場で陥りやすい「3つの罠」と解決策
ここをクリアすれば、あなたはもう中級者です。
① 「オブジェクトが閉じていない」エラー
ポリラインなどは、自己交差しているとオフセットに失敗します。`On Error Resume Next` を活用し、失敗した際の例外処理(エラーハンドリング)を必ず記述しましょう。
② 「方向」の制御
`Offset` メソッドは数値のプラス・マイナスで方向を変えますが、複雑な図形では「どちらが内側か」が計算できません。「ベクトル」の概念を少しだけ学ぶと、より高度な制御が可能になります。
③ 画層の管理
オフセットで作成された新しいオブジェクトは、元のオブジェクトの画層を継承します。もし「オフセット線は赤色で、別画層にしたい」のであれば、`Offset` 直後に変数 `varOffsetObjects` に格納されたオブジェクトに対して `.Color` や `.Layer` プロパティを書き換える処理を追加してください。
—
最後に:エンジニアとしての第一歩
AutoCAD VBAは、単なる「作業の自動化」以上の可能性を秘めています。
あなたが書いたこの10行程度のコードが、設計者の残業を減らし、ヒューマンエラーを根絶し、図面の品質を底上げする。それがエンジニアの価値です。
まずは、上記のコードをコピーして、手元の図面で動かしてみてください。
「自分の命令でCADが動く」その感覚こそが、次のステップへ進むための鍵です。
わからないことがあれば、いつでも聞いてください。あなたの自動化の旅を、全力でサポートします。
