筐体設計の自動化:ShellとRibを制する者がSolidWorks APIを制す
筐体設計において、シェル(肉抜き)とリブ(補強)の生成は、自動化の恩恵を最も受けやすい領域の一つだ。しかし、多くのエンジニアが陥る罠がある。それは「フィーチャをただ順に実行すれば良い」という安易な設計だ。
SolidWorks APIにおいて、フィーチャ生成は単なるコマンドの羅列ではない。「モデルの再構築(Rebuild)のライフサイクル」と「選択セットの整合性」を制御できないコードは、実務の複雑な形状を前にして必ずエラーを吐く。
今回は、プロダクション環境で耐えうる「堅牢な肉薄化・補強自動化エンジン」の設計思想と実装コードを伝授する。
—
1. 堅牢な自動化のための「3つの鉄則」
コードを書く前に、以下の原則を胸に刻んでほしい。
1. 選択の明示化(Selection Managerの徹底): `SelectByID2`に頼り切るな。フィーチャの生成前には必ず`ClearSelection`を行い、意図しないエッジや面が掴まれていない状態を担保すること。
2. フィーチャ定義の先行検証: `ShellFeatureData`や`RibFeatureData`は、生成前にパラメータの妥当性を計算できる。境界条件や厚み設定がジオメトリ的に破綻していないか、コード内でチェックするロジックを挟むべきだ。
3. エラーハンドリングと再構築: `swModel.ForceRebuild3`を闇雲に呼ぶな。処理のボトルネックは再構築にある。フィーチャ生成ごとに再構築するのではなく、一連の処理が終わったタイミングで適切にトリガーすること。
—
2. 実装:シェルとリブの自動生成エンジン
以下に、パーツに対して動的にシェルを適用し、指定したスケッチからリブを生成する実用的なコードを示す。
Option Explicit
‘ 筐体自動化クラス(抜粋)
Public Sub GenerateCasing(swModel As SldWorks.ModelDoc2, faceName As String, shellThickness As Double, ribSketchName As String)
Dim swPart As SldWorks.PartDoc
Set swPart = swModel
‘ 1. シェルの適用
If Not ApplyShell(swModel, faceName, shellThickness) Then
Err.Raise vbObjectError + 1, “Shell”, “シェルの生成に失敗しました。”
End If
‘ 2. リブの適用
If Not ApplyRib(swModel, ribSketchName, 2.0, True) Then
Err.Raise vbObjectError + 2, “Rib”, “リブの生成に失敗しました。”
End If
End Sub
Private Function ApplyShell(swModel As SldWorks.ModelDoc2, faceName As String, thickness As Double) As Boolean
Dim swFeature As SldWorks.Feature
‘ フェイスの選択をクリア
swModel.ClearSelection2 True
‘ 指定の面を選択(実務では名前指定よりもIDや属性で取得するのが安全)
swModel.Extension.SelectByID2 faceName, “FACE”, 0, 0, 0, False, 0, Nothing, 0
‘ シェルフィーチャの生成
Set swFeature = swModel.FeatureManager.InsertShellFeature(thickness, False)
ApplyShell = Not (swFeature Is Nothing)
End Function
Private Function ApplyRib(swModel As SldWorks.ModelDoc2, sketchName As String, thickness As Double, flipSide As Boolean) As Boolean
‘ スケッチを選択してリブ作成
swModel.Extension.SelectByID2 sketchName, “SKETCH”, 0, 0, 0, False, 0, Nothing, 0
‘ リブ生成(厚み、左右方向、抜き勾配などはここに定義)
‘ 引数:Thickness, Direction(0:両側, 1:片側), FlipSide(向き反転)
Dim swFeat As SldWorks.Feature
Set swFeat = swModel.FeatureManager.InsertRib(thickness, 0, flipSide, True, False, 0, 0, 0)
ApplyRib = Not (swFeat Is Nothing)
End Function
—
3. 実務で「詰まない」ための設計ポイント
データベース連携の注意点
設計パラメータ(厚みやリブのピッチ)をExcelや外部DBから読み込む際、「単位系」には細心の注意を払え。SolidWorks APIは内部的にメートル(m)単位で動作する。GUIのmm単位をそのまま渡すと、1000倍の誤差が生じる。必ずAPI専用の単位変換ユーティリティを挟むこと。
保守性を高める「名前付け」戦略
コード内で `FeatureManager.Insert…` を使うと、生成されるフィーチャ名は `Shell1`, `Shell2` と連番で自動付与される。これに依存した設計は、モデルの変更で即座に崩壊する。
フィーチャ生成直後に `swFeature.Name = “MySpecificShell”` のようにプログラム側で命名を行うか、`GetFirstFeature` から巡回して属性(Attribute)を付与する手法を推奨する。
なぜこれが「伝説的なエンジニア」の書き方なのか
初心者は「動くこと」を目標にする。しかし、プロは「モデルが壊れる(再構築エラーを吐く)タイミングを予測し、その前に対処すること」を目標にする。
例えば、リブ生成時に「抜き勾配」がジオメトリと干渉して失敗する場合、APIはエラーを返すが、その理由はUIに隠蔽されることが多い。これを回避するには、`RibFeatureData`オブジェクトを取得し、生成前に `RibFeatureData.DraftAngle` や `RibFeatureData.Thickness` の値を、現在のモデル寸法と比較してバリデーションするロジックが不可欠だ。
結びに
シェルとリブの自動化は、単なる省力化ツールではない。設計の標準化(Design Standardization)そのものだ。誰がやっても同じ品質の筐体が、ワンクリックで生成される。この仕組みを構築できれば、君の業務は「作業」から「設計」へと昇華されるはずだ。
次は、生成されたフィーチャの面に対して自動で「抜き勾配」を適用する高度なスクリプトについて語ろう。準備はいいか?
