SolidWorks APIの深淵:シェルとリブの自動化がもたらす「設計工数の破壊的削減」
設計の現場において、プラスチック筐体の設計は最も反復的で、かつ「人間がやるべきではない」作業の筆頭だ。シェル厚の調整、リブの配置、ドラフトの付与。これらをマウス操作で繰り返すのは、エンジニアの創造性をドブに捨てるに等しい。
今日は、SolidWorks APIの神髄である`IShellFeatureData`と`IRibFeatureData`を叩き、設計プロセスをコードの力で「再構築」する手法について語る。
—
1. オブジェクトライフサイクルの管理:VBAの「死」を避けるために
多くのエンジニアが犯す最大の過ちは、`SldWorks`や`ModelDoc2`のインスタンスを不用意にグローバル変数に放置することだ。COM(Component Object Model)の世界では、参照カウントが解決されないままのオブジェクトはメモリリークを招き、SolidWorksの動作を徐々に重くし、最終的には「落ちる」原因となる。
鉄則:
- ローカルスコープで完結させ、使い終わったら`Set obj = Nothing`で明示的に解放せよ。
- `ActiveDoc`に頼るな。常に`Set swModel = swApp.ActiveDoc`をルーチンの入り口で呼び出し、ハンドルを確実に掴む。
—
2. 筐体自動化の核心:ShellFeatureDataの操作
シェル生成で最も重要なのは「どの面を除去するか」という`Entity`の指定だ。単純な定数指定は通用しない。`SelectByID2`ではなく、`IFace2`を直接ハンドリングする設計にしなければ、設計変更に耐えうるコードは書けない。
‘ シェルフィーチャの生成とパラメータ制御
Public Sub CreateShellFeature(swModel As SldWorks.ModelDoc2, thickness As Double, faceToShell As SldWorks.Face2)
Dim swFeatMgr As SldWorks.FeatureManager
Dim swShellData As SldWorks.ShellFeatureData
Set swFeatMgr = swModel.FeatureManager
‘ シェルデータの初期化
Set swShellData = swFeatMgr.CreateDefinition(swShellFeature)
swShellData.Thickness = thickness
swShellData.MultiThickness = False
‘ 面の選択(あらかじめ取得したFaceオブジェクトを渡す)
Dim bRet As Boolean
bRet = faceToShell.Select2(False, Nothing)
‘ フィーチャの挿入
swFeatMgr.CreateFeature(swShellData)
‘ メモリ解放
Set swShellData = Nothing
Set swFeatMgr = Nothing
End Sub
—
3. 補強リブの動的生成:RibFeatureDataの制御
リブの生成で最も厄介なのは「押し出し方向」と「厚みの方向」の制御だ。`IRibFeatureData`は、単に線を引くのではなく、スケッチの幾何拘束とフィーチャのパラメータを同期させる必要がある。
特に、レガシーな環境で「設計変更のたびにリブが消える」現象に悩まされているなら、それはフィーチャの参照パスが壊れているからだ。リブの親となるスケッチは、必ずベースとなるジオメトリに対して「外部参照」ではなく「エッジ変換」を用いて堅牢な関係を維持せよ。
‘ リブ生成のテンプレート
Public Sub CreateReinforcementRib(swModel As SldWorks.ModelDoc2, thickness As Double)
Dim swRibData As SldWorks.RibFeatureData
Dim swFeatMgr As SldWorks.FeatureManager
Set swFeatMgr = swModel.FeatureManager
Set swRibData = swFeatMgr.CreateDefinition(swRibFeature)
‘ リブパラメータの設定
swRibData.Thickness = thickness
swRibData.ThicknessType = swRibThicknessType_BothSides ‘ 両側肉厚
swRibData.FlipSide = False ‘ 方向反転の制御
swRibData.DraftAngle = 0.5 (3.14159 / 180) ‘ 0.5度の抜き勾配
‘ フィーチャ確定
swFeatMgr.CreateFeature(swRibData)
‘ オブジェクト解放
Set swRibData = Nothing
End Sub
—
4. チーフアーキテクトからの助言:システム間連携と保守
このスクリプトを単なる「個人の時短ツール」で終わらせてはならない。
1. Windows APIの活用:
GUIが不要なら、バックグラウンド(`swApp.Visible = False`)で回せ。ただし、`DoEvents`を適切に配置しないと、WindowsはSolidWorksを「応答なし」と判断してフリーズさせる。
2. エラーハンドリングの徹底:
`On Error Resume Next`は悪魔の誘惑だ。必ず`Err.Number`を監視し、どのフィーチャ生成で失敗したかをログに吐き出す構造にせよ。
3. 設計意図の継承:
フィーチャには必ず`Name`プロパティを設定せよ。プログラムから後追いで修正する際、デフォルトの「Shell1」「Rib1」に依存するコードは、設計者が名前を変えた瞬間に死ぬ。
結論
SolidWorks APIを掌握するということは、SolidWorksという巨大なブラックボックスの「思考回路」を理解するということだ。シェルやリブといった基本的なフィーチャであっても、VBAから制御する際は、その背後にある「パラメトリックな依存関係」を常に意識せよ。
設計者がすべきことは、フィーチャを並べることではない。フィーチャが正しく生成される「ルール」をコード化することだ。それができれば、あなたの設計工数は、今この瞬間から限りなくゼロに近づく。
健闘を祈る。
