【入門編】【初心者向け】図面ビューごとの表示スタイル(ワイヤーフレーム/シェード)を個別制御するVBA – SolidWorks VBA解析バイブル

スポンサーリンク
スポンサーリンク

マクロ記録の先へ:SolidWorks図面ビューの表示スタイルを自在に操る「オブジェクト指向」への第一歩

こんにちは。設計自動化の世界へようこそ。

SolidWorksを使っていて、「図面作成のたびに、等角投影図はシェーディング(着色)、正面図は隠線除去、詳細図はワイヤーフレームに切り替える……この作業、自動化できないかな?」と思ったことはありませんか?

多くの初学者は、まず「マクロの記録」ボタンを押します。そして、手動で表示スタイルを変えて、記録されたコードを見つめます。しかし、そこに出てくるのは `SelectByID2` という、特定の名前のオブジェクトを無理やり掴み取る「力技」のコードばかり。これでは、図面のビュー名が変わった瞬間にマクロは動かなくなってしまいます。

今日は、そんな「マクロ記録の限界」を突破し、「どのビューに対しても、その性質を見抜いて適切なスタイルを適用する」という、プロフェッショナルな設計自動化の入り口を案内しましょう。ここをクリアすれば、あなたのVBAスキルは格段にレベルアップしますよ。

1. 核心を理解する:SolidWorksの「階層構造」

APIを扱う上で最も大切なのは、SolidWorksがデータをどのように持っているか、その「家系図(オブジェクトモデル)」を理解することです。

図面ファイルにおいて、ビューを操作したい場合、いきなり「ビュー!」と命令してもSolidWorksは困惑してしまいます。正しいルートは以下の通りです。

1. SldWorks(アプリケーション本体)
2. ModelDoc2(開いているファイル)
3. DrawingDoc(図面としての機能を持つオブジェクト)
4. Sheet(現在表示しているシート)
5. View(シート上に配置された個々のビュー)

プロのエンジニアは、特定の名前を指名するのではなく、「シートにあるビューを順番に全部チェックしていく」というアプローチを取ります。これが「汎用性の高いコード」の正体です。

2. 実践:ビューの表示スタイルを自動制御するコード

それでは、実際に使えるコードを見てみましょう。
このマクロは、「シート上の全てのビューを巡回し、等角投影図(Isometric)ならシェーディングに、それ以外(正面図など)なら隠線除去にする」という高度な処理を行います。

Option Explicit

' ==============================================================================
' テーマ:図面ビューの表示スタイル個別制御マクロ
' 内容:等角投影図はシェーディング、それ以外は隠線除去に自動設定する
' ==============================================================================

Sub Main()
    ' 1. 変数の宣言(型を明示するのがプロの作法です)
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swDraw As SldWorks.DrawingDoc
    Dim swSheet As SldWorks.Sheet
    Dim swView As SldWorks.View
    
    ' 2. SolidWorksへの接続
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    ' エラーチェック:ドキュメントが開かれているか?
    If swModel Is Nothing Then
        MsgBox "図面ファイルを開いてから実行してください。", vbCritical
        Exit Sub
    End If
    
    ' 3. 図面オブジェクトへのキャスト(型変換)
    ' ModelDoc2をDrawingDocとして扱うことで、図面特有の命令が使えるようになります
    If swModel.GetType <> swDocDRAWING Then
        MsgBox "図面ファイルではないため、実行できません。", vbCritical
        Exit Sub
    End If
    Set swDraw = swModel
    
    ' 4. 現在のシートを取得
    Set swSheet = swDraw.GetCurrentSheet
    
    ' 5. ビューの走査(ここがプロのテクニック!)
    ' GetFirstViewは「シートそのもの」を指すため、その次のViewからが実際の配置ビューです
    Set swView = swDraw.GetFirstView ' シート自体を取得
    Set swView = swView.GetNextView  ' 最初の配置ビューへ移動
    
    ' ビューがなくなるまでループを回す
    Do While Not swView Is Nothing
        
        ' ビューの種類(Type)を確認
        ' swIsometricView = 3 (等角投影図)
        ' swDrawingViewType_e の列挙型を使用するのがベストです
        
        If swView.Type = swIsometricView Then
            ' --- 等角投影図の場合:シェーディング(色付き)に設定 ---
            ' SetDisplayModeの引数: 1=シェーディング, 2=エッジ付きシェーディング, 3=隠線除去, 4=ワイヤーフレーム
            swView.SetDisplayMode 2 ' シェーディング+エッジ
            Debug.Print "View [" & swView.Name & "] をシェーディングに設定しました。"
            
        Else
            ' --- それ以外のビュー(正面図・側面図など)の場合:隠線除去に設定 ---
            swView.SetDisplayMode 3 ' 隠線除去
            Debug.Print "View [" & swView.Name & "] を隠線除去に設定しました。"
            
        End If
        
        ' 次のビューへ進む
        Set swView = swView.GetNextView
    Loop
    
    ' 6. 再描画して結果を反映
    swModel.ForceRebuild3 True
    
    MsgBox "ビューのスタイル制御が完了しました!", vbInformation
End Sub

3. コードの解説:ここが「極限の知見」

このコードを単なるコピペで終わらせないために、重要なポイントを3つ解説します。

① `GetFirstView` と `GetNextView` の罠

マクロの記録では `SelectByID2 “ビュー1″` のように名前を指定しますが、上記のコードでは `swView.GetNextView` を使って、「次のビューを順番に探す」という動きをしています。これなら、ビューの名前が「ビュー1」でも「詳細図A」でも、プログラムは迷うことなく処理できます。

② `SetDisplayMode` の魔法の数字

`swView.SetDisplayMode` メソッドは、整数(Integer)を受け取ります。

  • `1`: シェーディング
  • `2`: シェーディング+エッジ(見栄えが良くなるのでおすすめ!)
  • `3`: 隠線除去 (Hidden Lines Removed)
  • `4`: ワイヤーフレーム

この数字を使い分けるだけで、図面の見た目は劇的に変わります。

③ 型の「キャスト(Cast)」

コード内に `Set swDraw = swModel` という部分があります。これは、汎用的な「ファイル(ModelDoc2)」を、図面専用の「図面(DrawingDoc)」として扱い直す作業です。これを行わないと、図面特有の命令(シートの取得など)が使えないため、非常に重要なステップです。

4. 陥りやすいエラーと回避策

「Nothing」エラーに注意!

もしコードが途中で止まってしまうなら、多くの場合 `swView` が `Nothing`(空っぽ)の状態なのに、そのプロパティを触ろうとしていることが原因です。
必ず `Do While Not swView Is Nothing` のように、「オブジェクトが存在することを確認してから操作する」という癖をつけましょう。

再描画を忘れない

プログラムで値を書き換えても、画面上は古いままのことがあります。最後に `swModel.ForceRebuild3 True` を入れることで、SolidWorksに「見た目を最新の状態に更新して!」と強制的に命令できます。

最後に

いかがでしたか?
「マクロの記録」は、いわば「決まった道を歩く」ためのツールです。対して、今回学んだ「オブジェクトを辿る」方法は、「道がどこに続いていても、自分で地図を読み解いて進む」ための技術です。

この考え方が身につけば、あなたはもう「記録係」ではなく、設計を自動化する「エンジニア」です。次は、複数のシートをまたいで処理したり、特定のレイヤー(色)を自動変更したりすることに挑戦してみてください。

一歩ずつ、着実に。あなたの自動化への旅路を応援しています!

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