【実務・中級編】【実務中級】AcadDocument.Utility.RealToStringの「精度(Precision)」パラメータを使い分け、図面表記に合わせた小数点以下の丸め処理を行う – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAの「数値表記」を制する:Utility.RealToStringで図面品質を自動化する

AutoCADで自動化ツールを組む際、多くのエンジニアが陥る罠がある。それは、「計算結果をそのまま `CStr` や `Format` 関数で文字列化する」という安易なアプローチだ。

図面には「図面単位(LUPREC)」という絶対的なルールが存在する。0.001mmまで管理すべき設計図において、単なる浮動小数点の丸め処理で生成された「12.5」という表記は、品質管理上の瑕疵となり得る。

今日は、AutoCADの `Utility.RealToString` メソッドを極め、図面設定と同期した「プロフェッショナルな表記」を実装する方法を伝授する。

なぜ Format 関数を使ってはいけないのか

VBA標準の `Format(Value, “0.00”)` は、汎用的な文字列フォーマットには適しているが、AutoCADの図面管理においては無力だ。

  • 図面単位との乖離: AutoCADのシステム変数 `LUPREC`(精度)や `LUNITS`(単位形式)と連動しない。設計者が図面設定を変更した際、ツール側の出力値が取り残される。
  • 単位系への対応不足: AutoCADは建築(分数表記)や測量(角度)など特殊な単位系を持つ。`Utility.RealToString` は、これらAutoCAD特有のロジックをネイティブに処理できる唯一のインターフェースだ。

堅牢な実装:Utility.RealToString の神髄

`Utility.RealToString` は、単なる数値変換関数ではない。AutoCADのデータベース設定を汲み取るための橋渡し役である。

プロダクションコード例

このコードは、現在アクティブな図面の単位設定を自動で取得し、指定された精度で数値を出力する関数だ。

‘ @brief 数値を現在の図面設定に基づき文字列化する
‘ @param Value 変換対象の数値
‘ @param Precision 小数点以下の精度(-1を指定するとLUPRECに従う)
‘ @return 成形された文字列
Public Function FormatDrawingValue(ByVal Value As Double, Optional ByVal Precision As Integer = -1) As String
Dim acadUtil As AcadUtility
Set acadUtil = ThisDrawing.Utility

‘ LUPREC(精度のシステム変数)を動的に取得する場合
If Precision = -1 Then
Precision = ThisDrawing.GetVariable(“LUPREC”)
End If

‘ acDecimal (2): 十進表記
‘ Precision: 精度
‘ 戻り値: 成形された文字列
On Error Resume Next
FormatDrawingValue = acadUtil.RealToString(Value, acDecimal, Precision)

‘ エラーハンドリング:予期せぬ数値入力への対策
If Err.Number <> 0 Then
FormatDrawingValue = “Error”
End If
On Error GoTo 0
End Function

実務で意識すべき3つの設計原則

1. 「ハードコーディング」を排除する

「小数点以下2桁」と決め打ちしてはいけない。図面が変わればルールが変わるのがAutoCADの世界だ。必ず `ThisDrawing.GetVariable(“LUPREC”)` を活用し、図面設定をソース・オブ・トゥルース(信頼できる唯一の情報源)とせよ。

2. データベース連携時の落とし穴

Excelへのデータ出力やCSV連携を行う場合、この「表記」のまま出力すると、後続の計算処理で誤差を生む可能性がある。

  • 表示用: `RealToString` で成形された文字列を書き出す。
  • 計算用: 生の `Double` 値を保持する。

この二重管理を徹底すること。表記上の「0.00」と、内部の「0.004」を混同してはならない。

3. オブジェクトのライフサイクルとパフォーマンス

`ThisDrawing.Utility` へのアクセスは、ループ処理内で頻繁に行うとパフォーマンスを劣化させる。大量の寸法値や座標を処理する場合は、一度 `AcadUtility` オブジェクトを変数に格納(キャッシュ)してから処理を行うのが鉄則だ。

チーフアーキテクトからの助言

AutoCAD開発において、「見た目の統一」は単なる見栄えの問題ではない。それは、「図面とプログラムが同じ言語を話している」という信頼の証明だ。

`RealToString` を使いこなすことは、AutoCADの設計思想を理解する第一歩である。このコードをあなたのツールに組み込むことで、手動修正による人為的ミスを排除し、設計者が本来の設計業務に集中できる環境を構築してほしい。

次は、この数値を「寸法線」や「属性ブロック」に自動反映させる際の、トランザクション管理について掘り下げていこう。エンジニア諸君、コードに魂を込めろ。

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