【実務・中級編】【初心者向け】新規アセンブリ作成時に標準ビュー(等角投影など)や原点表示状態をVBAで一括強制する表示設定自動化 – SolidWorks VBA解析バイブル

スポンサーリンク

【SolidWorks VBA極限活用】新規アセンブリの初期表示を完全統制する「環境イコライザー」の作り方

開発現場で、こんなストレスを感じたことはないだろうか。

「新人や協力会社から上がってきたアセンブリを開くたびに、表示向きがバラバラで等角投影(Isometric)になっていない」
「原点や平面(プレーン)が散らかり放題で、どこがアセンブリの基準なのか一目で分からない」
「ビューポートの陰影表示や、リアルビューグラフィックス(RealView)の設定が人によって違うため、レビューのたびに画面を整える無駄な工数が発生している」

図面化やアセンブリのレビュー、そして何よりPDMへの登録前において、「ドキュメントの初期表示状態が統一されていない」という問題は、地味ながら確実に設計効率を蝕むガンだ。

今回は、SolidWorks VBAのAPIを駆使し、新規アセンブリが生成された瞬間(あるいはマクロ実行時)に、標準ビュー、表示スタイル、参照ジオメトリの可視性を一撃で強制統一する「表示設定自動化(イコライザー)マクロ」の設計思想と実装コードを伝授する。

—

なぜ「デフォルト」に頼ってはいけないのか?

SolidWorksのシステムオプションには、ドキュメントテンプレート(`.asmdot`)という素晴らしい仕組みがある。しかし、テンプレート頼みには致命的な弱点がある。

1. 既存テンプレートの改修漏れ: 全社共通テンプレートを更新しても、個人のローカルPCや過去のプロジェクトから流用された古いテンプレートが使われ続ける。
2. 外部データのインポート: STEPやIGESなどの他形式からアセンブリとしてインポートされた瞬間、テンプレートの設定は無視され、SolidWorksのハードコーディングされたデフォルト値にフォールバックする。

だからこそ、「プログラムの力でドキュメントの状態を物理的にねじ伏せる」アプローチが必要なのだ。APIを用いた明示的な状態定義こそが、バラバラな設計環境を統制する唯一の解となる。

—

堅牢なアセンブリ制御のアーキテクチャ

今回のマクロで制御する要素は以下の通りだ。実務で「これだけはやっておくべき」という項目を厳選した。

1. 表示向きの強制: 等角投影(Isometric View)への切り替え。
2. 表示スタイルの強制: 「edges with shaded(シェーディング無しエッジ表示)」または「shaded(陰影表示)」の適用。
3. 参照ジオメトリの非表示化: 原点、標準平面、軸などの不要なノイズを強制的に非表示にし、視認性をクリアにする。
4. リアルビューの最適化: 描画負荷を考慮した環境設定。

現場で陥る「VBAの罠」と対策

アセンブリの表示操作をVBAで行う際、最も犯しやすいミスが「ビューポートの更新タイミング(Rebuild/GraphicsRefresh)の欠落」だ。APIでコマンドを発行しても、画面描画が追いつかずに設定が適用されない、あるいは不正なCOMオブジェクト参照を引き起こすケースがある。

これを防ぐため、明示的なビューの再描画メソッド(`GraphicsRedraw2`)と、アクティブドキュメントの安全な取得フローをコードに組み込む必要がある。

—

プロダクションコード例(コピペ即利用可能)

以下のコードは、エラーハンドリングを徹底し、実務の現場でそのまま組み込める堅牢性を持たせたVBAモジュールだ。

Option Explicit

‘ =========================================================================
‘ 模範コード: アセンブリ初期表示・環境一括統制マクロ
‘ Architecture: SolidWorks API Expert Team
‘ =========================================================================

Public Sub InitializeAssemblyEnvironment()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelView As SldWorks.ModelView
Dim docType As Long

‘ 1. アプリケーションインスタンスの安全な取得
Set swApp = Application.SldWorks
If swApp Is Nothing Then
MsgBox “SolidWorksが起動していません。”, vbCritical, “致命的エラー”
Exit Sub
End If

‘ 2. アクティブドキュメントの取得
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox “現在、アクティブなドキュメントが存在しません。”, vbExclamation, “警告”
Exit Sub
End If

‘ 3. ドキュメント種別の判定 (アセンブリ: swDocASSEMBLY = 2)
docType = swModel.GetType
If docType <> swDocASSEMBLY Then
MsgBox “このマクロはアセンブリドキュメントでのみ実行可能です。”, vbExclamation, “実行スキップ”
Exit Sub
End If

‘ 4. エラーハンドリングの有効化
On Error GoTo ErrorHandler

‘ トランザクション処理の開始(パフォーマンス向上と一括処理)
swModel.Extension.UseLockedViewUpdates = True

‘ ———————————————————————
‘ [A] 表示スタイルの設定 (シェーディング(エッジ表示))
‘ ———————————————————————
swModel.EditDisplaySettings2 swDisplayAxes, False, swVisible, swRoot
‘ swInactiveHiddenVisible, swWireframeVB 等を用途に合わせて変更可能
swModel.ViewDisplayShadedWithEdges

‘ ———————————————————————
‘ [B] 標準ビュー(等角投影: Isometric)の強制適用
‘ ———————————————————————
Set swModelView = swModel.ActiveView
If Not swModelView Is Nothing Then
‘ swStandardViewTypes_e.swIsometricView = 7
swModelView.SetStandardViews swIsometricView
End If

‘ ———————————————————————
‘ [C] 参照ジオメトリ(原点・平面・軸)の非表示化による画面クレンジング
‘ ———————————————————————
Dim swViewConfig As Boolean
‘ 原点の非表示
swModel.Extension.GetUserPreferenceToggle swUserPreferenceToggle_e.swViewOrigin, swUserPreferenceOption_e.swDetailingNoOptionCurrentSheet
‘ 平面・軸の全体表示フラグの切替(必要に応じて false に設定)
‘ ※全アセンブリ共通でスッキリさせたい場合は非表示を推奨
Call SetReferenceGeometryVisibility(swModel, False)

‘ ———————————————————————
‘ [D] ズームの全体表示フィット(Zoom to Fit)
‘ ———————————————————————
swModel.ViewZoomtoFit2

‘ トランザクションの終了と画面更新
swModel.Extension.UseLockedViewUpdates = False
swModel.GraphicsRedraw2

‘ 正常終了ログ
Debug.Print “Success: アセンブリの表示環境を正常に初期化しました。”
Exit Sub

ErrorHandler:
‘ 異常時のクリーンアップ
swModel.Extension.UseLockedViewUpdates = False
MsgBox “予期せぬエラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“エラー内容: ” & Err.Description, vbCritical, “異常終了”
End Sub

‘ ————————————————————————-
‘ 補助ルーチン: 参照ジオメトリの表示/非表示の一括制御
‘ ————————————————————————-
Private Sub SetReferenceGeometryVisibility(ByRef model As SldWorks.ModelDoc2, ByVal isVisible As Boolean)
Dim swModelDocExt As SldWorks.ModelDocExtension
Set swModelDocExt = model.Extension

‘ 平面 (Planes)
swModelDocExt.SetUserPreferenceToggle swUserPreferenceToggle_e.swViewPlanes, isVisible
‘ 軸 (Axes)
swModelDocExt.SetUserPreferenceToggle swUserPreferenceToggle_e.swViewAxes, isVisible
‘ 座標系 (Coordinate Systems)
swModelDocExt.SetUserPreferenceToggle swUserPreferenceToggle_e.swViewCoordinateSystems, isVisible
End Sub

—

チーフアーキテクトが教える、実務適用の極意

このコードをただコピペしてマクロボタンに割り当てるだけでも効果はあるが、真の自動化エンジニアを目指すなら、以下の「インテグレーションの視点」を持っておいてほしい。

1. アセンブリ新規作成イベント(`PartDocNotify` / `AssemblyDocNotify`)との統合

手動でこのマクロを実行させるのではなく、SolidWorksのイベントハンドラ(`SldWorks_AssemblyDocEvents`)を使い、「新規アセンブリが作成された瞬間(`OnNewDocument2`)」にバックグラウンドでこの処理を走らせるのが究極の姿だ。
これにより、設計者がマクロの存在を意識することなく、システム側で強制的に標準化が担保される。

2. データベースやPDMとの連携

企業標準として、製品カテゴリ(筐体、機構、配管など)ごとに「どの標準ビューが最適か」「リアルビューを有効にするべきか」が異なる場合がある。
このマクロを拡張し、社内のPDMや簡易的な設定ファイル(JSON/XML)を読み込ませることで、「製品種別に応じた動的なビュー初期化エンジン」へと進化させることが可能だ。

—

まとめ

表示設定の不統一という「小さな非効率」は、積もり積もれば膨大な設計ロスや図面ミスの温床となる。
今回紹介したVBAコードをベースに、自社の設計フローに合わせた「イコライザー」を構築してほしい。

規律ある美しいデータ構造と初期状態の担保こそが、スマートでバグのない設計プロセスの第一歩である。あなたの現場でも、今日からこのコードを導入し、開発環境のクオリティをワンランク引き上げてみてほしい。

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