SolidWorks APIの真髄:図面記号を「自動配置」し、製図の呪縛から解放される極意
こんにちは。SolidWorksという巨大な機械の内部構造を解き明かす、自動化エンジニアの世界へようこそ。
「マクロの記録」ボタンを押して、生成された無機質なコードを眺めて溜息をついたことはありませんか? 記録されたコードは、いわば「動きをなぞっただけのビデオ」に過ぎません。私たちが目指すのは、SolidWorksの心臓部(API)を直接操作し、製図という反復作業を「瞬殺」する真のエンジニアリングです。
今回は、図面自動化の最難関かつ最重要テーマである「ブロック記号(Sketched Symbol)の自動配置」を攻略します。
—
1. なぜ「SketchSymbol」なのか?
図面上に溶接記号や表面性状記号を配置する際、手作業では「位置合わせ」と「角度調整」に神経を使いますよね。APIを使えば、これらは単なる`X, Y`座標と`ラジアン値`の数学の問題に変換できます。
ここで重要なのが、`ISketchSymbolDefinition`というオブジェクトです。これは図面内の「ブロックの定義」を指します。
- 定義 (Definition): 記号の「ひな形」。
- インスタンス (Instance): 図面上に実際に配置された「記号」。
私たちは、この「定義」から「インスタンス」を生成し、座標空間へ放り込むプロセスを制御します。
—
2. 現場で使える「自動配置」のロジック
まずは、図面上の特定座標にブロックを挿入する基本コードを見ていきましょう。
‘ SolidWorks API を活用したブロック記号配置の極意
Sub InsertSymbolAtPoint()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swView As SldWorks.View
Dim swSymbol As SldWorks.SketchSymbol
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ 図面以外なら即座に終了(堅牢なコードの第一歩)
If swModel.GetType <> swDocDRAWING Then Exit Sub
Set swDraw = swModel
‘ アクティブな図面ビューを取得(ここが重要!)
Set swView = swDraw.ActiveDrawingView
‘ 記号の挿入
‘ 引数:記号名, シート名, 座標X, 座標Y, 角度(ラジアン)
‘ ※記号名は事前にライブラリ内に定義されている必要があります
Set swSymbol = swView.InsertSketchSymbol(“溶接記号_標準”)
If Not swSymbol Is Nothing Then
‘ 配置位置を調整 (単位はメートル系であることに注意!)
swSymbol.Position = Array(0.05, 0.05)
swSymbol.Angle = 1.5708 ‘ 90度をラジアンで指定
‘ 変更を反映するために再構築
swModel.GraphicsRedraw2
End If
End Sub
このコードの「ここが肝」
1. `swDraw.ActiveDrawingView`: 記号を「シート」に置くか「ビュー」に置くかで、座標系の扱いが全く変わります。ビューに紐付けないと、図面を移動したときに記号が取り残される悲劇が起きます。必ずビューを明示してください。
2. 単位の罠: APIは内部で「メートル(m)」を使用します。50mmなら `0.05` です。ここを間違えると、記号が遥か彼方の宇宙に消えてしまいます。
—
3. 初学者が必ずハマる「3つの落とし穴」
多くのエンジニアがここで挫折します。これをクリアすれば、あなたはもう中級者です。
- 落とし穴1:ブロック定義が存在しない
- コードを実行する前に、その図面ファイルに「ブロックの定義」が読み込まれているか確認してください。ない場合は `LoadSketchBlock` メソッドで外部から読み込む必要があります。
- 落とし穴2:再構築(Redraw)を忘れる
- APIで値を書き換えても、画面上の表示が更新されないことがあります。`swModel.GraphicsRedraw2` は必ずセットで覚えましょう。
- 落とし穴3:選択解除を怠る
- プログラムが終了した後も記号が「選択状態」で残ると、後続の操作がエラーになります。処理の最後には必ず `swModel.ClearSelection2 True` を実行する癖をつけてください。
—
4. 最後に:エンジニアとしてのステップアップ
今のコードは、あくまで「決まった場所に置く」初歩です。
次のステップとしては、「エッジを選択し、その法線ベクトルから角度を自動計算して記号を配置する」という高度な自動化に挑戦してみてください。
`swModel.SelectByID2` でエッジを取得し、`GetFeature` から数学的な計算を行う……。この領域に踏み込むと、SolidWorksは単なるCADソフトではなく、貴方の「設計の分身」へと進化します。
「面倒くさい」と感じる製図作業は、すべてコードに任せましょう。その分、貴方はもっと創造的な設計の本質に時間を割くべきです。
何か不明な点や、さらに深いAPIの深淵を覗きたい場合は、いつでも聞いてください。貴方の自動化ライフを、心から応援しています。
