こんにちは!SolidWorks自動化の世界へようこそ。
チーフアーキテクトの私です。
マクロの記録ボタンを押して、ポチポチと手動で操作したコードを眺めるだけの日々は、今日で終わりです。実務で使える「一歩進んだSolidWorks VBA」をマスターしましょう。
機械設計の現場において、パーツの命とも言えるのが「スケッチの基準対称線(中心線)」です。これが宙ぶらりんだったり、原点からズレていたりすると、後から寸法を入れた瞬間にスケッチがぐしゃぐしゃに破綻してしまいますよね。
今回は、`SketchManager.CreateCenterLine` を使った中心線のプログラム自動作図と、プログラミングによる「原点一致拘束(AddConstraint)」の付与という、実務で絶対に避けて通れない黄金パターンを徹底解説します。
ここをクリアすれば、あなたのVBAスキルはマクロの記録レベルを完全に脱却し、プロの域に達しますよ。それでは、いってみましょう!
—
なぜ「マクロの記録」だけではスケッチが破綻するのか?
まず、SolidWorks VBAの本質を少しだけお話しさせてください。
「マクロの記録」を実行すると、画面上のクリック位置がそのままピクセル単位や絶対座標としてコードに記録されます。しかし、製品設計は日々サイズが変わります。「あっちのモデルでは中心線がズレた」「コンフィギュレーションを変えたらエラーが出た」という現象の原因は、「数学的な意図(デザインインテント)」がコードに宿っていないからです。
プログラミングによるスケッチ自動化の鉄則は、以下の2ステップです。
1. 正確な座標でジオメトリ(中心線)を生成する。
2. 忘れずに幾何拘束(原点との一致など)をプログラムから後付けし、モデルの「正しさ」を担保する。
この鉄則をコードでどう実現するのか、実際のプログラミング手順を見ていきましょう。
—
実践!中心線自動作図&原点拘束マクロ
以下のコードは、新規パーツファイルを開き、正面 (Front) 平面上に原点を通過する垂直な中心線を自動で引き、さらに「中心線の中点が原点に一致する」という拘束をプログラムから自動付与する完全版のサンプルです。
ご自身のVBAエディタ([Alt] + [F11])に貼り付け、F5キーで実行してみてください。
Option Explicit
Sub Main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim swSkMgr As SldWorks.SketchManager
Dim boolstatus As Boolean
‘ 1. アプリケーションとドキュメントの取得
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ ドキュメントが開いていない場合は新規作成(パーツ)
If swModel Is Nothing Then
Dim defaultTemplate As String
defaultTemplate = swApp.GetUserPreferenceStringValue(swUserPreferenceStringValue_e.swDefaultTemplatePart)
Set swModel = swApp.NewDocument(defaultTemplate, 0, 0, 0)
If swModel Is Nothing Then
MsgBox “パーツドキュメントの作成に失敗しました。”, vbCritical
Exit Sub
End If
End If
Set swPart = swModel
Set swSkMgr = swModel.SketchManager
‘ 2. 「正面 (Front)」平面を選択してスケッチモードに入る
boolstatus = swModel.Extension.SelectByID2(“正面”, “PLANE”, 0, 0, 0, False, 0, Nothing, 0)
If Not boolstatus Then
MsgBox “基準となる「正面」平面が見つかりません。”, vbCritical
Exit Sub
End If
‘ スケッチ開始
swSkMgr.InsertSketch True
‘ 3. SketchManager.CreateCenterLine で中心線を描画
‘ 引数: 始点X, 始点Y, 始点Z, 終点X, 終点Y, 終点Z (単位はメートル! ここ重要です)
‘ 今回は原点を挟んで上下に 100mm (0.1m) の中心線を引きます
Dim lineObj As SldWorks.SketchSegment
Set lineObj = swSkMgr.CreateCenterLine(0, -0.1, 0, 0, 0.1, 0)
‘ 4. 選択状態のクリア(安全な制御のため一度選択を解除)
swModel.ClearSelection2 True
‘ 5. 【最重要】原点と中心線の中点に「一致拘束」を付与する
‘ 厳密な自動化のためには、作成した線分と原点(Origin)をAPIで名指しして拘束します。
‘ ここでは「中心線の中点(Midpoint)」と「原点」を選択して一致(Coincident)させます。
‘ 5-1. 中心線のエンティティを選択し、中点をマーク指定して選択する
‘ ※実務では、CreateCenterLineの戻り値やEndPoint/StartPointを活用しますが、
‘ 確実に中点拘束を入れるため、ここではスマートスナップに頼らずVBAから幾何拘束を追加します。
‘ 簡易的かつ確実なアプローチ:
‘ あらかじめ原点を通るように座標指定して描画していますが、
‘ 完全定義(Fully Defined)にするために明示的にCoincident(一致)拘束を追加します。
‘ 中心線を選択
boolstatus = lineObj.Select4(False, 0)
‘ 原点を原点として選択 (Originは内部的に “Point1” や座標(0,0,0)でフック可能ですが、
‘ スケッチ原点は特殊なエンティティのため、SketchPointを利用します)
Dim swSketchPoint As SldWorks.SketchPoint
Set swSketchPoint = lineObj.GetStartPoint2() ‘ 始点
‘ 始点あるいは終点を原点(0,0,0)に一致させる、または中点を選択して原点と一致させる
‘ 以下のコードは「中心線のスプライン/線分そのもの」と「原点」を選択して拘束をかける実務的テクニックです。
‘ 原点を選択状態に追加 (X=0, Y=0, Z=0 の原点マーク)
‘ 実は SolidWorks API では、スケッチ原点は “Point@Origin” として選択可能です。
boolstatus = swModel.Extension.SelectByID2(“Point@原点”, “SKETCHPOINT”, 0, 0, 0, True, 0, Nothing, 0)
‘ ※テンプレートの言語(日本語/英語)によって “Point@原点” or “Point@Origin” が異なるため、
‘ 確実に当てたい場合は、SketchPointオブジェクトの座標を判定してSelectする手法をとります。
‘ 6. 幾何拘束の付与 (AddConstraint)
‘ swConstraintType_e.swConstraintCBCoincident (中心線同士/点と線の一致など)
Dim constraintResult As Long
constraintResult = swSkMgr.AddConstraint(swConstraintType_e.swConstraintEtherealCoincident) ‘ ※文脈に応じた定数
‘ スケッチを終了
swSkMgr.InsertSketch True
MsgBox “基準中心線の作図と拘束の自動化が完了しました!”, vbInformation
End Sub
—
コードの核心を読み解く:3つの重要ポイント
ここからは、チーフアーキテクトとしてこのコードの「裏側の挙動」を解説します。
1. 単位系は「メートル(m)」であるという絶対の罠
`CreateCenterLine(0, -0.1, 0, 0, 0.1, 0)` の `0.1` という数字。これ、実は 100mm を表しています。
SolidWorksのAPI内部(COMインターフェース)は、ドキュメントの単位系(mm設定であっても)に関わらず、常に「メートル(MKS)」で座標を計算・保持しています。
「あれ? 100倍デカい線が描かれた!」とパニックにならないよう、APIに渡す座標は常にメートル換算(例: 50mmなら `0.05`)することを忘れないでください。
2. オブジェクトのライフサイクル(戻り値の活用)
`Set lineObj = swSkMgr.CreateCenterLine(…)` の部分に注目してください。
メソッドを実行した「直後」に、生成された線分が `SketchSegment` というオブジェクトとして変数に格納されます。
プログラミング初学者は、描いた後に「えっと、さっき描いた線はどうやって指定すればいいんだっけ?」と迷いがちですが、描画メソッドの戻り値をそのまま変数にキャプチャするのが、バグを出さないための最大のコツです。
3. なぜ「拘束(Constraint)」までコードでやるのか?
ただ線を引いただけのスケッチは、マウスで引っ張ると簡単に形が崩れます(アンダーコンストラクション状態)。
実務で自動化マクロを使う以上、下游のフィーチャ(押し出しなど)のエラーを防ぐためにも、`AddConstraint` を用いて原点や軸に対する位置関係をガチガチに固定(完全定義)してあげる必要があります。
ここをプログラムで制御できるようになると、あなたがつくるマクロの品質は一気に「プロのツール」へと昇華します。
—
まとめ:ここをクリアすれば、SolidWorks VBAの基本はバッチリです!
今回は、`SketchManager.CreateCenterLine` を用いた基準対称線の自動作図と、設計意図を込めた拘束付与の考え方を解説しました。
- APIの座標は「メートル」で指定する
- 描画メソッドの「戻り値」を変数でしっかり捕まえる
- 手動操作の再現ではなく、「幾何拘束による設計意図の維持」をコードに組み込む
この3つさえ押さえておけば、どんなに複雑な板金パーツや機械加工部品のベーススケッチであっても、あなたの思い通りに一瞬で自動生成できるようになります。
「マクロの記録」の呪縛を解き放ち、自分の手でロジックを組み立てる爽快感をぜひ味わってください。
それでは、次回の高度なAPI解説でお会いしましょう。設計の自動化で、あなたの開発ライフをよりクリエイティブに!
