【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を意のままに操る」ための第一歩です。
まずはこのコードをコピーして、自分の図面で動かしてみてください。うまく整列した時の快感こそが、自動化エンジニアへの入り口です。
何かわからないことがあれば、またいつでも聞きに来てくださいね。あなたの自動化ライフを全力で応援しています!
