【実務・中級編】【初心者向け】AutoCAD VBAで図面上のポリライン(Polyline)を作成し、幅や頂点を編集する基本 – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAを掌握せよ:ポリライン操作の「正解」と堅牢な設計指針

AutoCADの自動化において、`Polyline`(LWPOLYLINE)は避けて通れない最重要オブジェクトだ。しかし、多くの初心者が陥る罠がある。「とりあえず動くコード」を量産し、半年後に修正不可能なスパゲッティコードに泣くことだ。

今日は、AutoCAD VBAのアーキテクトとして、単なる「ポリラインの描き方」ではなく、「実務で耐えうる堅牢なポリライン制御術」を伝授する。

1. なぜ「ポリライン」を甘く見てはいけないのか

AutoCADのオブジェクトモデルにおいて、`AddLightWeightPolyline`は極めて強力だが、頂点情報の扱いに癖がある。多くのチュートリアルは「配列を渡して終わり」と教えるが、実務では頂点の追加・削除・座標変更を動的に行う必要がある。

ここで意識すべきは、「メモリ管理」と「オブジェクトの更新(Updateメソッド)」だ。

2. 【プロダクションコード】ポリラインの生成と編集のテンプレート

以下のコードは、単に動くだけでなく、エラーを抑制し、後続の処理に影響を与えないよう設計された「実戦型」のモジュールだ。

Option Explicit

‘ ———————————————————
‘ ポリライン生成および編集のベストプラクティス
‘ ———————————————————
Public Sub CreateAndEditPolyline()
Dim acadDoc As AcadDocument
Dim plineObj As AcadLWPolyline
Dim points(0 To 5) As Double ‘ 3頂点分の座標 (x1, y1, x2, y2, x3, y3)

‘ 初期化
Set acadDoc = ThisDrawing

‘ 1. 座標の定義
points(0) = 0: points(1) = 0
points(2) = 100: points(3) = 0
points(4) = 100: points(5) = 100

‘ 2. オブジェクト生成(ModelSpaceに直書きは厳禁。関数化推奨)
Set plineObj = acadDoc.ModelSpace.AddLightWeightPolyline(points)

‘ 閉じたポリラインにする
plineObj.Closed = True

‘ 3. 幅の設定 (定数で管理し、マジックナンバーを排除する)
Const GlobalWidth As Double = 2.5
plineObj.ConstantWidth = GlobalWidth

‘ 4. 頂点編集(第2頂点を移動させる)
‘ 注意:頂点インデックスは0から始まる
Dim newVertex(0 To 1) As Double
newVertex(0) = 150: newVertex(1) = 50
plineObj.SetPoint 1, newVertex

‘ 5. データベースの更新を明示的に呼ぶ(重要)
plineObj.Update

MsgBox “ポリラインの構築が完了しました。”
End Sub

3. 実務で「バグらせない」ための3つの鉄則

① 配列の次元と型を厳密に管理せよ

AutoCADのAPIは、データ型に非常に敏感だ。`Variant`型で曖昧に渡すと、予期せぬ実行時エラーが発生する。`Double`型の配列を明示的に宣言し、サイズ変更が必要な場合は `ReDim` を活用すること。

② データベース更新は「更新のトリガー」を知る

`plineObj.Update` を呼ばなくても図面は描画されることがある。しかし、複雑な計算を伴うプログラムでは、描画キャッシュとデータベースが不整合を起こす。「オブジェクトを変更した直後はUpdateを呼ぶ」という規律を、チームのコーディングルールに刻め。

③ ファイル・DB連携時の注意点

外部のCSVやExcelから座標を読み込んでポリラインを生成する場合、必ず以下のステップを踏め。
1. 入力データのバリデーション: `NaN`(数値以外)が含まれていないかチェックする。
2. トランザクション的思考: 途中でエラーが起きたら、描画されたオブジェクトを削除(Rollback)する例外処理を `On Error GoTo` で実装すること。これがないツールは、ゴミ図面を量産する「破壊兵器」だ。

4. アーキテクトからの助言:次のステップへ

初心者は「描くこと」に集中するが、真のエンジニアは「どう修正しやすくするか」に集中する。

  • 関数化の徹底: `CreatePolyline(points As Double(), width As Double)` のように、引数で制御可能な関数に分割せよ。
  • クラスモジュールの活用: 将来的にポリラインを「管理オブジェクト」として扱いたくなったら、標準モジュールではなくクラスモジュールへ移行せよ。

AutoCADのAPIは古いが、その堅牢性は今もなお最強だ。コードを書き捨ての消耗品にせず、資産として積み上げる意識を持ってほしい。

君の作るツールが、誰かの残業を1分でも減らすことを願っている。健闘を祈る。

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