【入門編】【初心者向け】AutoCAD VBAで図面上の円弧(Arc)オブジェクトの始点・終点・中心座標を取得・利用する – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは!AutoCAD VBAの世界へようこそ。
マクロの記録ボタンを押すだけのステージから抜け出し、自分の手でCADを自在に操る「エンジニア」への第一歩を踏み出そうとしているあなたを、心から歓迎します。

今回は、AutoCAD VBAの基礎でありながら、実務の自動化で最も頻繁に遭遇する「円弧(Arc)オブジェクトの座標取得と利用」をテーマに解説します。

「円弧の中心ってどうやって取るんだっけ?」「始点と終点の違いにハマった…」
そんな初心者が必ず通る壁を、最高峰の知見と優しい解説で一刀両断します。ここをクリアすれば、AutoCAD VBAのオブジェクトモデルの基本はバッチリですよ。それでは、一緒に見ていきましょう!

1. なぜ「円弧」の座標取得がVBAの登竜門なのか?

AutoCADの図面には、線分(Line)、円(Circle)、そして円弧(Arc)など、さまざまな図形(オブジェクト)が存在します。

線分なら「始点と終点」、円なら「中心と半径」だけで話が終わりますが、円弧は「中心」「半径」「始点」「終点」「開始角度」「終了角度」という、複数の要素が複雑に絡み合うハイブリッドな図形です。

実務では、「円弧の始点に別の部品を配置したい」「中心から放射線を引きたい」という場面が多々あります。これを人の手でやっていたらミスも起きるし時間もかかりますよね。VBAを使えば、一瞬で、しかも誤差なく座標を計算・取得できるようになります。

2. 座標を捉える!AcadArcオブジェクトのプロパティ

AutoCAD VBAにおいて、図面上の円弧は `AcadArc` というオブジェクトとして扱われます。
私たちがコードからアクセスして最もよく使うプロパティは以下の3つです。

1. Center(中心座標)
2. StartPoint(始点座標)
3. EndPoint(終点座標)

ここで、AutoCAD VBAにおける最大の「罠(仕様)」を伝えておきます。
それは、「座標はすべて『配列(Array)』として返ってくる」ということです。

X座標、Y座標、Z座標がセットになった `Variant(Double型の配列)` として返されるため、取得した変数(例えば `varCenter` としましょう)に対して、そのまま `MsgBox varCenter` のように出力することはできません。必ず `varCenter(0)`(X座標)、`varCenter(1)`(Y座標)のようにインデックスを指定して取り出す必要があります。これ、初心者が100回引っかかるポイントなので覚えておいてくださいね!

3. 実践!円弧の座標を取得してイミディエイトウィンドウに出力するコード

それでは、実際に動くコードを見てみましょう。
このコードは、現在開いている図面の中から「最初に見つかった円弧」をターゲットにし、その中心・始点・終点の座標を取得してVBE(Visual Basic Editor)のイミディエイトウィンドウに表示する実用的なマクロです。

Sub GetArcCoordinates()
‘ 宣言とオブジェクトのバインド
Dim acadDoc As AcadDocument
Set acadDoc = ThisDrawing.ActiveDocument

Dim ent As AcadEntity
Dim arcObj As AcadArc
Dim foundArc As Boolean

foundArc = False

‘ モデル空間内のオブジェクトを総当たりでチェック
For Each ent In acadDoc.ModelSpace
‘ オブジェクトの型が「Arc(円弧)」であるか判定
If TypeOf ent Is AcadArc Then
Set arcObj = ent
foundArc = True
Exit For ‘ 最初に見つかった円弧でループを抜ける
End If
Next ent

‘ 円弧が見つからなかった場合のガード処理
If Not foundArc Then
MsgBox “図面内に円弧(Arc)が見つかりませんでした。”, vbExclamation, “処理終了”
Exit Sub
End If

‘ 座標を格納するバリアント型変数
Dim cPt As Variant
Dim sPt As Variant
Dim ePt As Variant

‘ 各種座標の取得(※戻り値はすべて3要素の配列)
cPt = arcObj.Center
sPt = arcObj.StartPoint
ePt = arcObj.EndPoint

‘ 結果をイミディエイトウィンドウに出力
Debug.Print “=== 円弧の座標情報 ===”
Debug.Print “中心座標 (Center) : X = ” & Format(cPt(0), “0.00”) & “, Y = ” & Format(cPt(1), “0.00”)
Debug.Print “始点座標 (StartPoint) : X = ” & Format(sPt(0), “0.00”) & “, Y = ” & Format(sPt(1), “0.00”)
Debug.Print “終点座標 (EndPoint) : X = ” & Format(ePt(0), “0.00”) & “, Y = ” & Format(ePt(1), “0.00”)

‘ ついでに半径も取得してみる
Debug.Print “半径 (Radius) : ” & Format(arcObj.Radius, “0.00”)

MsgBox “円弧の座標情報をイミディエイトウィンドウに出力しました。”, vbInformation, “成功”
End Sub

コードの解説(ここがエンジニアの急所)

  • `TypeOf ent Is AcadArc`: モデル空間には線分や文字など色々な図形が混ざっています。`TypeOf` 演算子を使うことで、目的の図形(今回は円弧)だけを安全にフィルタリングできます。
  • `Format(cPt(0), “0.00”)`: 座標値は内部で膨大な小数点以下の数値を持つため、ログ出力時に見やすくフォーマットしています。実務ではこういう細かな配慮がデバッグ効率を劇的に上げます。

4. 取得した座標を「利用」して新しい図形を描いてみる

座標を取るだけでは面白くありませんよね。プログラミングの醍醐味は「取得した情報をもとに、新しいアクションを起こすこと」です。

ここでは、先ほど取得した円弧の「中心座標」から「始点座標」に向かって、補助線(Line)を自動で作図するコードを追加してみましょう。機械図面などで中心から端点へ線を引く作業を、一瞬で自動化します。

先ほどのコードの `Debug.Print` の下あたりに、以下のコードを差し込んでみてください。

‘ — 取得した座標を利用して新しく「線分」を作図する —
Dim lineObj As AcadLine

‘ AddLineの引数には、始点配列と終点配列をそのまま渡せる!
Set lineObj = acadDoc.ModelSpace.AddLine(cPt, sPt)

‘ ついでに線の色を赤色(ColorIndex = 1)に変更してみる
lineObj.Color = acRed

‘ 図面を再描画して変更を反映
acadDoc.Regen acAllViewports

【感動ポイント】
AutoCAD VBAの強力なところは、`AddLine` などのメソッドに、そのまま配列(`cPt` や `sPt`)を渡せる点ですわざわざ `cPt(0)` や `sPt(0)` をバラして渡す必要がありません。オブジェクトモデルが美しく設計されている証拠ですね。

5. 初心者が陥りがちなエラーと回避の極意

最後に、現場でよくあるトラブルシューティングをいくつか共有します。

① 「型が一致しません」エラーが出る

  • 原因: 座標変数(`cPt` など)を `Dim cPt As Double` のように単一の数値として宣言していませんか?
  • 対策: AutoCADの座標プロパティは必ず配列で返るため、`Dim cPt As Variant`(または `Dim cPt() As Double`)として宣言しなければなりません。

② 2次元図面なのにZ座標でバグる

  • 原因: `cPt(2)`(Z座標)の値が、完全な 0 ではなく `0.00000000001` のような微小な浮動小数点誤差を持っている場合があります。
  • 対策: 2次元の平面図を扱うと割り切っている場合は、処理にZ座標を含めない、あるいは比較の際に丸め処理(`Round`関数など)を入れるのがエンジニアの知恵です。

まとめ

今回は、AutoCAD VBAにおける円弧(Arc)オブジェクトの座標取得と利用方法について解説しました。

  • 円弧は `AcadArc` オブジェクトとして扱う。
  • 座標(Center, StartPoint, EndPoint)はすべて配列(Variant)で返ってくる
  • 取得した座標は、そのまま別の図形(Lineなど)の作成メソッドに渡すことができる。

この基本パターンさえ押さえておけば、複雑な図形加工や自動検図プログラムの構築も夢ではありません。ぜひ手元のAutoCADでコードを動かして、その圧倒的なスピードを体感してみてください。

それでは、次のステップでお会いしましょう!あなたのAutoCADライフがよりスマートになりますように。

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