AutoCAD VBAの深淵へ:ポリラインを「自在に操る」ための極意
AutoCADの「マクロの記録」ボタンを押して満足していませんか? それはまだ、広大な大海原の入り口に立ったに過ぎません。
AutoCAD VBAをマスターするということは、「CADの中に住む小さな自分」をプログラミングするということです。今日は、図面作成の要である「ポリライン(Polyline)」を、コードで自由自在に操るための本質を伝授します。
—
1. ポリラインの正体を知る
AutoCADにおけるポリラインは、単なる線の集まりではありません。頂点(Vertex)というデータの配列を持ち、幅(Width)や閉合(Closed)といったプロパティを内包した「賢いオブジェクト」です。
VBAでこれを扱うには、`AddLightWeightPolyline` メソッドを使います。
基本のコード:ポリラインを描く
まずは、3点の頂点を持つポリラインを生成してみましょう。
Sub CreateSimplePolyline()
Dim polyObj As AcadLWPolyline
Dim points(0 To 5) As Double ‘ 3点分(X, Y)なので要素数は6
‘ 頂点の座標を定義 (0,0), (10,0), (10,10)
points(0) = 0: points(1) = 0
points(2) = 10: points(3) = 0
points(4) = 10: points(5) = 10
‘ モデル空間にポリラインを作成
Set polyObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
‘ 閉じた図形にする(必要に応じて)
polyObj.Closed = True
‘ 更新を反映させる
polyObj.Update
End Sub
—
2. ポリラインを「編集」する:幅と頂点の魔術
ポリラインの醍醐味は、作成後にその形を変化させることにあります。
幅(Width)を変える
ポリラインには「始点幅」と「終点幅」が存在します。これらを変更することで、矢印のような図形も一瞬で描画可能です。
‘ 作成済みのpolyObjに対して適用
polyObj.ConstantWidth = 2.0 ‘ 線幅を2.0に設定
頂点を「追加・移動」する
ここが初心者が最もつまずくポイントです。`AddVertex` メソッドを使うのですが、「何番目の頂点の後に挿入するか」というインデックス(0から始まる番号)の管理が重要です。
Sub ModifyPolyline()
‘ (略:ポリラインの取得処理)
‘ 頂点を追加 (インデックス1の後に挿入)
Dim newPoint(0 To 1) As Double
newPoint(0) = 5: newPoint(1) = 5
polyObj.AddVertex 1, newPoint
‘ 頂点を移動 (0番目の頂点を移動)
Dim movePoint(0 To 1) As Double
movePoint(0) = -5: movePoint(1) = 0
polyObj.SetCoordinate 0, movePoint
polyObj.Update
End Sub
—
3. 初心者が必ずハマる「罠」と対策
プロフェッショナルへの道は、エラーとの対話です。以下の2点だけは覚えて帰ってください。
- 罠1:「座標配列」の渡し方
VBAの `AddLightWeightPolyline` は「バリアント型(配列)」を要求します。上記のように `Double` 型の配列を作って渡すのが鉄則です。要素数を間違えると、容赦なく「型が一致しません」と怒られます。
- 罠2:`.Update` を忘れる
コードを書いても図面が変化しない? それは更新メソッドを呼び忘れているからです。オブジェクトを操作した後は、必ず `polyObj.Update` を実行し、AutoCADの画面に再描画を命じましょう。
—
4. 最後に:なぜ「コード」で書くのか
「手動で描いたほうが早いのでは?」という疑問はもっともです。しかし、考えてみてください。
もし、1000枚の図面に対し、特定の条件でポリラインを修正しなければならないとしたら?
手作業なら数日かかる仕事も、VBAならわずか数秒です。これこそが、エンジニアが自動化ツールを作る最大の価値です。
今日学んだ `AddLightWeightPolyline` と `SetCoordinate` を使えば、複雑な図形生成のルーチンワークはすべてあなたの支配下に置けます。まずはこのコードをコピーして、ご自身の環境で「線が動く感動」を体感してください。
ここをクリアしたあなたなら、次は「ブロック属性の抽出」や「画層ごとの自動選別」など、さらなる高みへ到達できるはずです。応援しています!
