マクロ記録の先へ: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に「見た目を最新の状態に更新して!」と強制的に命令できます。
最後に
いかがでしたか?
「マクロの記録」は、いわば「決まった道を歩く」ためのツールです。対して、今回学んだ「オブジェクトを辿る」方法は、「道がどこに続いていても、自分で地図を読み解いて進む」ための技術です。
この考え方が身につけば、あなたはもう「記録係」ではなく、設計を自動化する「エンジニア」です。次は、複数のシートをまたいで処理したり、特定のレイヤー(色)を自動変更したりすることに挑戦してみてください。
一歩ずつ、着実に。あなたの自動化への旅路を応援しています!
