【入門編】【プロフェッショナル設計】Class Moduleを用いたSolidWorksフィーチャ生成ロジックの「オブジェクト指向カプセル化」設計 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBAを掌握する:クラスモジュールによる「フィーチャ生成」の極意

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

「マクロの記録」から卒業し、本格的な開発に足を踏み入れようとしているあなたへ。多くの初心者が陥る罠は、`Sub`の中に処理をすべて詰め込み、気づけば修正不可能な「スパゲッティコード」を量産してしまうことです。

今回は、プロフェッショナルが実践する「オブジェクト指向によるフィーチャ生成の設計術」を伝授します。これさえ理解すれば、あなたのマクロは単なる「作業の自動化」から「堅牢なシステム」へと進化します。

1. なぜ「クラスモジュール」が必要なのか?

手続き型(`Sub`のみ)のコードは、行き当たりばったりです。一方、クラスモジュールは「設計図」です。

  • カプセル化: 複雑なSolidWorks APIの呼び出しを隠蔽し、使いやすいインターフェースを提供します。
  • 再利用性: 一度作った「直方体作成クラス」は、別のプロジェクトでもそのまま持ち込めます。
  • 保守性: もしAPIの仕様変更があっても、修正するのはクラスの中だけ。メインのコードを汚す必要はありません。

2. 実践:直方体を生成する「BoxBuilder」クラスを作る

まずは、VBAプロジェクトで「クラスモジュール」を挿入し、名前を`clsBoxBuilder`に変更してください。

【クラス定義】 `clsBoxBuilder`

‘ クラスモジュール: clsBoxBuilder
Option Explicit

Private swApp As SldWorks.SldWorks
Private swModel As SldWorks.ModelDoc2

‘ 初期化処理:SolidWorksの接続を保持
Public Sub Initialize(app As SldWorks.SldWorks, model As SldWorks.ModelDoc2)
Set swApp = app
Set swModel = model
End Sub

‘ 直方体を作成するメソッド(カプセル化)
Public Function CreateBox(width As Double, depth As Double, height As Double) As Boolean
If swModel Is Nothing Then Exit Function

‘ プロフェッショナルは戻り値で成否を管理する
On Error GoTo ErrorHandler

‘ スケッチ作成と押出という「複雑な手順」を隠蔽
swModel.SketchManager.InsertSketch True
swModel.SketchManager.CreateCornerRectangle 0, 0, 0, width / 1000, depth / 1000, 0
swModel.FeatureManager.FeatureExtrusion2 True, False, False, 0, 0, height / 1000, height / 1000, False, False, False, False, 0, 0, False, False, False, False, True, True, True, 0, 0, False

CreateBox = True
Exit Function

ErrorHandler:
Debug.Print “エラー発生: ” & Err.Description
CreateBox = False
End Function

3. メインモジュールでの呼び出し:驚くほどシンプルに

次に、標準モジュールでこのクラスをどう使うかを見てみましょう。コードが非常にスッキリしていることに注目してください。

【標準モジュール】 `Main`

Sub RunAutomation()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim myBox As clsBoxBuilder

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

‘ クラスのインスタンス化
Set myBox = New clsBoxBuilder

‘ 初期化と実行
myBox.Initialize swApp, swModel

If myBox.CreateBox(100, 50, 20) Then
MsgBox “パーツ生成に成功しました!”
Else
MsgBox “エラーが発生しました。”
End If
End Sub

4. プロの視点:陥りやすいエラーとその回避策

① 単位(Units)の罠

SolidWorksのAPIは、内部的にメートル(m)で処理されます。初心者の多くが、ミリメートル単位で値を渡してモデルが崩壊するミスを犯します。

  • 解決策: クラス内で`width / 1000`のように単位変換を隠蔽(カプセル化)してしまいましょう。呼び出し側は「ミリで指定すればいい」というルールを守るだけで良くなります。

② モデルが空(Nothing)の時の暴走

`swModel`が取得できていない状態でAPIを叩くと、SolidWorksは無慈悲にクラッシュします。

  • 解決策: クラスの`Initialize`メソッド内で、オブジェクトが正しくセットされているか必ずチェック(`If swModel Is Nothing Then…`)する癖をつけてください。

終わりに:ここをクリアすれば、あなたはエンジニアです

今回紹介した「クラスを使ったカプセル化」は、一見遠回りに見えるかもしれません。しかし、プロジェクトが大きくなればなるほど、この設計があなたを救う盾となります。

「マクロを書く」のではなく「SolidWorksを操作するツールを設計する」。この視点を持つだけで、あなたの書くコードの質は劇的に向上します。

もし、さらに高度な「フィーチャの更新」や「コンフィギュレーション制御」について知りたければ、いつでも聞いてください。次は、より複雑なアセンブリ操作の深淵へご案内しましょう。

さあ、あなたの設計を、最高のコードで自動化してください!

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