こんにちは!SolidWorksの自動化の世界へようこそ。
今回は、マクロの記録ボタンをポチポチ押すだけのステージから一歩抜け出し、「パラメータ駆動型の高度なジオメトリ生成」をマスターするためのセッションをお届けします。
テーマは【ミラー・パターン】`FeatureLinearPattern3`を用いた「方向2の非等配オフセット」を含む高度な配列制御です。
「ただの直線パターンならマクロの記録で十分だよ」と思いましたか?
いえいえ、実務の現場では、冷却フィンのピッチを徐々に変えたり、方向1と方向2を複雑に組み合わせたりする「非等配(バリエーションのある)パターン」をプログラムから一瞬で制御したいという強い要望があります。
ここをクリアすれば、あなたも立派なSolidWorks VBAエンジニアの仲間入りです。優しく、そして深く、その極意を伝授しましょう!
—
1. 为什么我们要用 `FeatureLinearPattern3` なのか?
マクロの記録を使うと、`FeatureLinearPattern` のような古いメソッドが出力されがちです。しかし、近年のSolidWorks APIにおいて、高度な配列制御を安定して行うためには、`FeatureLinearPattern3` を使いこなす必要があります。
特に、方向2における「非等配オフセット(各インスタンスの間隔を個別に指定するような高度な制御)」や「インスタンスのスキップ(特定の位置だけ穴あけや形状を抜く)」をコードから操るには、APIの構造をしっかりと理解しなければなりません。
オブジェクトのライフサイクルとパフォーマンスの心構え
ここでプロとして一つ大切な知見をシェアしておきます。
フィーチャを生成・配列する際、「親となるフィーチャ(種となる形状)」がどの面やスケッチに依存しているかが非常に重要です。無駄な再構築(Rebuild)を走らせないために、VBAコード内では `SetUserPreferenceToggle` や画面更新の抑制を適切に行うのが、高速なマクロを書く極意です。
—
2. 全体像を把握する:今回のゴール
今回のスクリプトを実行すると、次のような処理が自動で行われます。
1. 新規パーツファイルを開く(またはアクティブにする)。
2. ベースとなるボス(押し出し)を作成する。
3. そのボスを対象として、「方向1:等ピッチ」「方向2:非等配/拡張パラメータ」を含む高度な直線パターンを適用する。
それでは、実際のコードを見ていきましょう。開発現場でそのままコピペして検証できるように、丁寧にコメントを入れています。
—
3. 実践!高度な直線パターン生成マクロ
以下のコードをSolidWorksのVBAエディタ([Alt] + [F11])に貼り付けて実行してみてください。
Option Explicit
‘ =====================================================================================
‘ テーマ: FeatureLinearPattern3を用いた方向2の高度な配列制御
‘ 概要: ベースフィーチャを作成し、方向1と方向2のパラメータを指定して直線パターンを生成する
‘ =====================================================================================
Sub Main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatureMgr As SldWorks.FeatureManager
Dim swFeature As SldWorks.Feature
Dim boolstatus As Boolean
‘ 1. アプリケーションとドキュメントの取得
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox “アクティブなパーツドキュメントがありません。パーツを開いてから実行してください。”, vbCritical, “エラー”
Exit Sub
End If
‘ パーツドキュメントであることの確認
If swModel.GetType <> swDocPART Then
MsgBox “このマクロはパーツファイルでのみ実行可能です。”, vbExclamation, “確認”
Exit Sub
End If
‘ 画面更新の抑制(パフォーマンス向上のためのプロの技!)
swModel.Extension.SetUserPreferenceToggle swUserPreferenceToggle_e.swViewDisplayUpdateDuringConfiguration, False
‘ 2. プレースホルダーとしてのベースフィーチャ選択(ここでは既存の「押し出し1」を対象と仮定)
‘ ※実際の運用では、スケッチ作成から押し出しまでをコードで行うか、既存フィーチャ名義を指定します。
boolstatus = swModel.Extension.SelectByID2(“押し出し1”, “BODYFEATURE”, 0, 0, 0, False, 4, Nothing, 0)
If Not boolstatus Then
MsgBox “対象となるベースフィーチャ「押し出し1」が見つかりません。モデルを確認してください。”, vbCritical, “エラー”
GoTo CleanUp
End If
‘ 3. FeatureLinearPattern3 のパラメータ設定
‘ 引数の意味をしっかりと押さえましょう:
‘
‘ Num1 : 方向1のインスタンス数
‘ Spacing1 : 方向1の間隔
‘ Num2 : 方向2のインスタンス数
‘ Spacing2 : 方向2の間隔
‘ FlipDir1 : 方向1の反転 (True/False)
‘ FlipDir2 : 方向2の反転 (True/False)
‘ DName1 : 方向1の寸法文字列(必要に応じて)
‘ DName2 : 方向2の寸法文字列(必要に応じて)
‘ Geometry : ジオメトリパターンを使用するかどうか (True/False)
‘ VarySketch : スケッチ変化を伴うか (True/False)
‘ Dgnetric : 同等間隔などのオプション
Dim Num1 As Long: Num1 = 5 ‘ 方向1の数
Dim Spacing1 As Double: Spacing1 = 0.02 ‘ 方向1の間隔 (20mm)
Dim Num2 As Long: Num2 = 3 ‘ 方向2の数
Dim Spacing2 As Double: Spacing2 = 0.015 ‘ 方向2の間隔 (15mm)
Dim FlipDir1 As Boolean: FlipDir1 = False
Dim FlipDir2 As Boolean: FlipDir2 = False
Dim DName1 As String: DName1 = “”
Dim DName2 As String: DName2 = “”
Dim GeometryPattern As Boolean: GeometryPattern = False
Dim VarySketch As Boolean: VarySketch = False
‘ 参照方向のエンティティ(エッジなど)を取得して選択しておく必要がありますが、
‘ ここでは簡略化のため、デフォルトの軸方向を使用するケースの構成を示します。
‘ 実務では “Line1” などの参照エッジを事前に選択状態にするか、APIで参照を渡します。
Set swFeatureMgr = swModel.FeatureManager
‘ FeatureLinearPattern3 の実行
‘ ※引数の構成はSolidWorksのバージョン(APIヘルプ)により厳密な型が求められます
Set swFeature = swFeatureMgr.FeatureLinearPattern3( _
Num1, Spacing1, _
Num2, Spacing2, _
FlipDir1, FlipDir2, _
DName1, DName2, _
GeometryPattern, VarySketch, _
False, False, _
“”, “”, _
False, False, False)
If Not swFeature Is Nothing Then
MsgBox “直線パターンの生成に成功しました!”, vbInformation, “完了”
Else
MsgBox “パターンの生成に失敗しました。選択状態やパラメータを確認してください。”, vbCritical, “エラー”
End If
CleanUp:
‘ 画面更新の復元
swModel.Extension.SetUserPreferenceToggle swUserPreferenceToggle_e.swViewDisplayUpdateDuringConfiguration, True
swModel.ForceRebuild3 False
End Sub
—
4. 陥りやすいエラーと、エンジニアが教える「回避の極意」
初学者の皆さんがこのテーマに挑むとき、必ずと言っていいほど以下の壁にぶつかります。ここを知っていればもう怖くありません。
エラー①:「選択セットが不正です」と言われる
- 原因: `FeatureLinearPattern3` を実行する前に、「何を配列するのか(フィーチャ)」と「どの方向に並べるのか(エッジや軸)」が正しく選択されていない状態です。
- 回避策: コード内で `SelectByID2` を使う際は、追加選択のフラグ(Append = True/False)やマーク値(Mark)を正しく指定する必要があります。フィーチャ選択にはマーク `4`、参照エッジにはマーク `1` や `2` が割り当てられることが多い点に注目してください。
エラー②:方向2の非等配オフセットが反映されない
- 原因: 標準の `FeatureLinearPattern3` だけでは、個別のインスタンスごとの細かい距離変更(非等配)を直接引数だけで網羅しきれない場合があります。
- 回避策: 高度な非等配制御を行う場合は、パターン生成後に、生成されたディメンション(寸法)オブジェクトをAPI経由で取得し、`Dimension.SetValue3` を使って個別に書き換えるアプローチをとります。「作ってから微調整する」という発想が、複雑な自動化を成功させるカギです。
—
5. まとめ:ここをクリアすれば、基本はバッチリ!
今回は `FeatureLinearPattern3` を軸にした高度な配列制御の扉を開きました。
- 画面更新を抑制してパフォーマンスを最適化すること
- 狙ったフィーチャと参照エッジを正確に選択・指定すること
- パラメータを動的に変化させて柔軟なモデル構築を行うこと
ここをクリアできれば、単なるマクロの記録の域を完全に脱却し、「自分の思い通りの形状を、論理的にすばやく生成するプログラミング」の楽しさを実感できるはずです。
もし分からない部分があれば、いつでも先輩エンジニアに質問してくださいね。あなたのSolidWorks自動化ライフが素晴らしいものになるよう応援しています!
