【入門編】【図面寸法の一括操作】DisplayDimensionsで図面の寸法線を自動整列・レイアウト最適化する – SolidWorks VBA解析バイブル

スポンサーリンク

【SolidWorks API】図面寸法が重なるイライラを解消!DisplayDimension一括整列術

こんにちは。現場で「図面化の自動化」に挑む皆さんのための、SolidWorks API・魂の設計指南へようこそ。

「自動で図面を出したはいいけれど、寸法が重なり合って、結局手作業でドラッグし直している……」
そんな経験はありませんか?

マクロの記録機能で満足しているうちは、その「手戻り」から一生抜け出せません。今日は、SolidWorks APIの核心である`DisplayDimension`オブジェクトを操り、図面内の寸法を整列させる「プロの自動化術」を伝授します。

1. なぜ「手作業」が生まれるのか? APIの本質を理解する

SolidWorks APIにおいて、図面上の寸法は単なる「線」ではありません。`DisplayDimension`というオブジェクトが、モデルのフィーチャーと図面ビューの幾何学的空間を橋渡ししています。

初心者が陥りやすいミスは、「座標だけで配置しようとする」こと。しかし、寸法線はモデルの変化に追従する「知能」を持っています。APIで操作する際は、その知能を尊重しつつ、`ISketchDimension`や`IAnnotation`のインターフェースを適切に叩く必要があります。

2. 現場で即戦力!「寸法整列」の極意

それでは、図面内の全寸法を取得し、一括で整列させるためのコードを紹介します。まずはこのテンプレートを叩き込んでください。

実装コード:DisplayDimension一括操作の雛形

‘ SolidWorks APIの基本セット(参照設定済みを想定)
Sub OptimizeDimensionLayout()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swView As SldWorks.View
Dim swDispDim As SldWorks.DisplayDimension
Dim swAnn As SldWorks.Annotation

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ 図面ドキュメントであることを確認(基本中の基本!)
If swModel.GetType <> swDocDRAWING Then Exit Sub
Set swDraw = swModel

‘ 全ビューをループ
Set swView = swDraw.GetFirstView
Do While Not swView Is Nothing
‘ そのビューに含まれる寸法を取得
Set swDispDim = swView.GetFirstDisplayDimension

Do While Not swDispDim Is Nothing
‘ 1. アノテーションオブジェクトへのアクセス
Set swAnn = swDispDim.GetAnnotation

‘ 2. ここで整列ロジックを適用
‘ 例:全ての寸法を少しずつオフセットさせて重なりを回避する
‘ ※実際の運用ではここをカスタマイズする
Call AlignDimension(swAnn)

Set swDispDim = swDispDim.GetNextDisplayDimension
Loop

Set swView = swView.GetNextView
Loop

swModel.ForceRebuild3 True
MsgBox “寸法整列完了!手戻り作業はゼロへ。”
End Sub

Private Sub AlignDimension(ByRef swAnn As SldWorks.Annotation)
‘ 座標取得:GetPositionで現在の位置を取得可能
Dim vPos As Variant
vPos = swAnn.GetPosition

‘ ここで計算を行い、SetPositionで再配置する
‘ 複雑な衝突判定はここで行うのがプロのやり方です
End Sub

3. コードの解説:ここが「プロの境目」

このコードのポイントは、「階層構造を意識したループ処理」です。

1. `swDraw.GetFirstView`: 図面シートも一つの「ビュー」として扱われます。これを忘れると、特定のシートしか処理できない脆いコードになります。
2. `GetAnnotation`: `DisplayDimension`から`Annotation`へキャストするこのステップこそが、位置制御の鍵です。`Annotation`オブジェクトに到達して初めて、`GetPosition`や`SetPosition`といった「物理的な配置」が可能になります。
3. `ForceRebuild3`: APIで配置を変えた後、SolidWorksの画面表示が更新されないことがあります。このメソッドで図面を強制再構築させるのが、バグを未然に防ぐコツです。

4. 陥りやすい罠と対策

  • 罠1:読み取り専用ビュー: 断面図や詳細図などの計算済みビューに無理に寸法を配置しようとするとエラーが出ます。`swView.IsLocked`などのチェックを入れるのが安全です。
  • 罠2:単位の不一致: APIが返す座標は、常に「メートル法(単位はメートル)」です。ミリ単位で計算すると1000倍のズレが生じます。`swModel.LengthUnit`を確認する癖をつけましょう。

先輩からのアドバイス

「マクロの記録」は便利ですが、あれは単なる「操作のなぞり書き」です。今日学んだ`DisplayDimension`の操作は、あなたがエンジニアとして「SolidWorksを意のままに操る」ための第一歩です。

まずはこのコードをコピーして、自分の図面で動かしてみてください。うまく整列した時の快感こそが、自動化エンジニアへの入り口です。

何かわからないことがあれば、またいつでも聞きに来てくださいね。あなたの自動化ライフを全力で応援しています!

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