こんにちは!AutoCAD VBAの世界へようこそ。
マクロの記録ボタンを押すだけのステージから抜け出し、自分自身のコードで図面を意のままに操りたいと思っているあなたへ。
今回は、現代の設計・施工現場で欠かせない「点群データ(Point Cloud)」の読み込みと表示をテーマに解説します。3Dレーザースキャナーで取得した膨大な点群データを、AutoCAD VBAを使ってスマートに図面へ呼び込む方法を学びましょう。
ここをクリアすれば、AutoCADオブジェクトモデルの扱い方や、外部ファイルとの連携における基本がグッと身につきますよ。さあ、一緒に扉を開けましょう!
—
1. なぜVBAで点群データを扱うのか?
実務でLASやE57といった点群データを扱う際、毎回手動で「点群アタッチ」のコマンドを叩いて、ファイルを選んで……というのは地味に手間がかかります。
これをVBAで自動化できれば:
- 決まったフォルダにある点群を、ワンクリックで一括読み込みできる
- 座標系や表示スケールの設定ミスを防げる
- 他の図面要素(3Dモデルや2D図面)との位置合わせをプログラムで制御できる
といった強力なメリットが生まれます。
【重要】AutoCAD VBAにおける点群の正体
AutoCADの内部(オブジェクトモデル)において、点群データは `AcadPointCloud` という特殊なエンティティ(図形オブジェクト)として扱われます。
通常の線(Line)や円(Circle)とは異なり、背後に膨大な外部データを抱えているため、「ファイルを指定してアタッチ(添付)する」というアプローチを取ります。
—
2. 実装の全体像とVBAコード
それでは早速、実際に動くコードを見てみましょう。
今回のサンプルコードは、指定したフォルダにある点群ファイル(例: `sample_data.las`)を、現在アクティブな図面の原点 `(0, 0, 0)` に読み込むマクロです。
Sub ImportPointCloudSample()
‘ — エラーハンドリングの準備 —
On Error GoTo ErrorHandler
Dim acadApp As AcadApplication
Dim acadDoc As AcadDocument
Dim pointCloudObj As AcadPointCloud
‘ ファイルパスとファイル名の定義(環境に合わせて書き換えてください)
Dim filePath As String
Dim fileName As String
Dim insertionPoint(0 To 2) As Double
Dim scaleFactor As Double
Dim rotationAngle As Double
‘ パスの設定(例: C:\PointClouds\sample.las)
filePath = “C:\PointClouds\”
fileName = “sample.las”
‘ 挿入基点の設定 (X=0, Y=0, Z=0)
insertionPoint(0) = 0#
insertionPoint(1) = 0#
insertionPoint(2) = 0#
scaleFactor = 1.0 ‘ スケール倍率
rotationAngle = 0.0 ‘ 回転角度(ラジアン)
‘ AutoCADのアプリケーションおよびアクティブドキュメントを取得
Set acadApp = ThisDrawing.Application
Set acadDoc = ThisDrawing
‘ 【核心】ModelSpaceに対して点群アタッチメントを追加する
‘ AddPointCloud メソッドを使用します
Set pointCloudObj = acadDoc.ModelSpace.AddPointCloud( _
filePath & fileName, _
insertionPoint, _
scaleFactor, _
rotationAngle)
‘ 画面を再描画して点群を表示
acadApp.Update
MsgBox “点群データの読み込みが完了しました!”, vbInformation, “成功”
Exit Sub
ErrorHandler:
‘ エラーが発生した場合の処理
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “エラー”
End Sub
—
3. コードの解説:ここがポイント!
初心者の方に向けて、コードの重要な部分を噛み砕いて説明します。
① 挿入基点(`insertionPoint`)の配列
VBAで座標を扱う場合、多くのメソッドで「3要素の倍精度浮動小数点型配列(`Double`型の0〜2)」が要求されます。
Dim insertionPoint(0 To 2) As Double
insertionPoint(0) = 0# ‘ X座標
insertionPoint(1) = 0# ‘ Y座標
insertionPoint(2) = 0# ‘ Z座標
これはAutoCADの3D空間のルールです。「X, Y, Zのセットを渡すんだな」と覚えておけばバッチリです。
② `AddPointCloud` メソッド
今回の主役です。`ModelSpace`(モデル空間)に対して、「このファイルを、この場所・この大きさで読み込んでくれ!」と指示を出しています。
Set pointCloudObj = acadDoc.ModelSpace.AddPointCloud(…)
引数には、「ファイルへのフルパス」「挿入基点」「尺度」「回転角」を順番に渡します。
—
4. 現場でありがち!陥りやすいエラーと対策
点群データを扱うマクロを書く際、初学者が必ずと言っていいほどハマる罠があります。ここを知っておくだけで、無駄なデバッグ時間を何時間も節約できますよ。
罠1:ファイルパスやファイル名が存在しない(またはスペルミス)
- 症状: 「実行時エラー:オートメーションエラーです」や、ファイルが見つからない旨のメッセージが出る。
- 対策: `filePath & fileName` で結合した文字列が、エクスプローラーで実際に開けるパスと完全に一致しているか確認しましょう。特にVBAでは円マーク(`\`)の書き方に注意が必要です。
罠2:対応していないファイル形式を指定している
- 症状: コードは正しいのに読み込みに失敗する。
- 対策: AutoCADが標準でサポートしている点群形式(LASやE57など)であることを確認してください。古いバージョンや独自拡張子の場合は、事前にReCap等でインポート可能な形式に変換しておく必要があります。
罠3:ファイルが重すぎてAutoCADがフリーズしたように見える
- 症状: 巨大な数GBの点群を読み込んだ瞬間、画面が固まる。
- 対策: VBAのコード自体の問題というより、点群データのサイズに起因します。まずは軽量なサンプルデータ(数MB程度)を使ってコードの動作確認を行うのがエンジニアの鉄則です。
—
まとめ
今回は、AutoCAD VBAを使った点群データの読み込み・表示の基本を解説しました。
- 点群は `AcadPointCloud` というオブジェクトとして `ModelSpace` に追加する。
- 座標は `(0 to 2) As Double` の配列で指定する。
- パスやファイル名の指定ミスに気をつける。
ここをクリアできれば、あなたはもう単なる「マクロの記録ユーザー」ではありません。図面データと外部の重い3Dリソースをプログラムで自在に繋ぐ、立派なAutoCAD自動化エンジニアの第一歩を踏み出しています。
ぜひご自身の環境でも試して、3D点群活用の自動化を体感してください。それでは、次のステップでお会いしましょう!
