AutoCAD VBAの「精度」を制する:数値から「図面上のテキスト」への昇華術
こんにちは。現場で日々、複雑な図面自動化と格闘している皆さん。
AutoCAD VBAで計算結果をテキストとして出力する際、こんな経験はありませんか?
「計算値は `123.456789` なのに、図面には `123.456789` と表示されてしまい、見た目がひどく汚い……」
プロの図面において、数値の「表記」は設計者の意図そのものです。CADの世界には図面単位設定(LUPREC)という厳格なルールが存在します。今回は、VBAの `Utility.RealToString` メソッドを使いこなし、計算値を「設計意図通りの文字列」に変換するプロの作法を伝授します。
—
なぜ `RealToString` を使う必要があるのか?
多くの初学者は、数値を文字列に変換する際に `CStr()` や `Str()` を使おうとします。しかし、これらは「ただの数値の文字化」に過ぎません。
一方、`Utility.RealToString` は、AutoCAD内部の図面単位設定と同期して数値を変換できる唯一のメソッドです。これを使えば、図面の精度設定が変わった瞬間に、出力される文字列も自動的に追従させることが可能になります。
構文の核となる「精度(Precision)」パラメータ
Result = ThisDrawing.Utility.RealToString(Value, Unit, Precision)
- Value: 変換したい数値
- Unit: 単位形式(`acDecimal` など)
- Precision: ここが最重要。小数点以下の桁数を指定します。
—
プロが実践する「Precision」の使い分け戦略
「精度」を固定値(例えば `2` とか `3`)でハードコーディングしていませんか? それは将来の設計変更で必ず「修正地獄」を招きます。
現場で推奨されるのは、「現在の図面設定から精度を読み取り、それを変換に適用する」というアプローチです。
実践コード:図面設定を継承したスマートな変換
このコードをそのままモジュールに貼り付けてみてください。
Sub OutputFormattedText()
Dim dValue As Double
Dim sResult As String
Dim iPrecision As Integer
‘ 1. 計算値を用意
dValue = 123.456789
‘ 2. 現在の図面の精度設定(LUPREC)をシステム変数から取得
‘ これにより、図面側で設定を変えればコードを触らずに追従する
iPrecision = ThisDrawing.GetVariable(“LUPREC”)
‘ 3. 実践:図面設定に基づいた文字列変換
‘ acDecimal: 小数形式
sResult = ThisDrawing.Utility.RealToString(dValue, acDecimal, iPrecision)
‘ テキストとして図面に書き出す(例:モデル空間へ)
ThisDrawing.ModelSpace.AddText sResult, ThisPoint, 2.5
MsgBox “図面設定(LUPREC=” & iPrecision & “)に合わせました: ” & sResult
End Sub
—
陥りやすい罠と解決策
1. 精度設定の不一致(「0」をどう扱うか)
`LUPREC` が `0` の場合、`RealToString` は整数値のみを返します。もし「小数点以下は必ず2桁表示したい」という厳格なルールがある場合は、`LUPREC` を取得するのではなく、定数として管理するか、`Format()` 関数を併用する必要があります。
2. `Utility` オブジェクトへのアクセス
`Utility` は `AcadDocument` オブジェクトの配下にあるため、必ず `ThisDrawing.Utility` と記述してください。もし `AcadApplication` から `Document` を開いている場合は、対象のドキュメント変数を正しく指定しないと「オブジェクトが設定されていません」というエラーになります。
—
まとめ:ここをクリアすれば、もう「初心者」ではない
今回学んだのは単なるメソッドの使い分けではありません。「AutoCADのグローバル設定(システム変数)と、自分のプログラムをどう同期させるか」という設計思想そのものです。
- `LUPREC` を活用する: 手動で桁数を決め打ちしない。
- `Utility.RealToString` を使う: CAD標準の変換ロジックを信頼する。
この2点を徹底するだけで、あなたの作るツールは、現場のベテラン設計者が使うツールと同じ「標準化された品質」を持つようになります。
さあ、次はあなたのコードでこの処理を組み込んでみてください。図面に書き出される数値の美しさに、きっと驚くはずですよ。
もし分からないことがあれば、いつでも聞いてください。あなたの自動化の旅を、全力でサポートします!
