【入門編】【初心者向け】AutoCAD VBAで図面上の点群データ(Point Cloud)を読み込み・表示する基本 – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは!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点群活用の自動化を体感してください。それでは、次のステップでお会いしましょう!

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