参照ジオメトリの重心

フィーチャーがある時は、参照ジオメトリに「重心」と「合致参照」が増えます。背の高い製品を設計する時は重心を表示します。

フィーチャーが無いと「使えない」色になっているなら「重心」の存在を意識できるが、「平面」から「点」」までしか存在しません。Solidworksさん「重心」使えない色にして常に表示してください。

重心の位置をスケッチで使う場合、「重心参照点」をフィーチャーツリーに追加します。「重心参照点」はフィーチャーですからこれを使ってスケッチする場合は参照ジオメトリの平面を作ります。スケッチで「重心参照点」と直線の端を一致させることができます。つまり、拘束も使える。

赤い矢印が「重心参照点」フィーチャーです。

話は変わって、重心位置に点を表示するマクロです。参照ジオメトリの原点があれば十分でしょう。CharGPTならすぐできるだろうとやってみたが、部品表はすぐできたが、調子に乗っていろいろ要求したので結構時間がかかった。部品表のマクロの時は、Solidworksマクロってマイナーすぎてどうせできないだろって思って、コマメにコードを書いてもらってからまとめるという方法だったかあな。質問は10回程度だった。いい時代です。プログラムってちょっとしたことを確認するだけで時間がかかるし、コードを書く時間も。書く手間が省けるだけですごいが、コピペで使える。

平面に平行な参照ジオメトリの平面を作って、そこに点をスケッチする。評価の質量特性で重心が一時的に表示されるので正しくスケッチされているか確認して下さい。

Option Explicit

Dim swApp As Object
Dim Part As Object
Dim MassProp As MassProperty
Dim MassCenter(2) As Double
Dim RefPlaneFeature As Object
Dim SketchMgr As Object
Dim SketchPoint As Object

Sub main()

    ' SolidWorksアプリケーションへの接続
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    If Part Is Nothing Then
        MsgBox "モデルが開いていません"
        Exit Sub
    End If
    
    ' 質量プロパティオブジェクトを取得
    Set MassProp = Part.Extension.CreateMassProperty
    If MassProp Is Nothing Then
        MsgBox "質量プロパティを取得できませんでした。"
        Exit Sub
    End If
    
    ' 重心の位置を取得
    MassCenter(0) = MassProp.CenterOfMass(0) ' X座標
    MassCenter(1) = MassProp.CenterOfMass(1) ' Y座標
    MassCenter(2) = MassProp.CenterOfMass(2) ' Z座標
    
    '正面を選択
    Dim boolstatus As Boolean
    boolstatus = Part.Extension.SelectByID2("正面", "PLANE", 0, 0, 0, True, 0, Nothing, 0)

    ' 平面を挿入
    Set RefPlaneFeature = Part.FeatureManager.InsertRefPlane(swRefPlaneReferenceConstraint_Distance, MassCenter(2), 0, 0, 0, 0)

    If RefPlaneFeature Is Nothing Then
        MsgBox "参照平面の作成に失敗しました。"
        Exit Sub
    End If
    
    ' スケッチマネージャーを取得
    Set SketchMgr = Part.SketchManager
    
    ' 作成した参照平面を選択
    RefPlaneFeature.Select False
    
    ' 新しいスケッチを開始
    SketchMgr.InsertSketch True
    
    ' 重心の位置に点を作成
    Set SketchPoint = SketchMgr.CreatePoint(MassCenter(0), MassCenter(1), MassCenter(2))
    
    ' スケッチを閉じる
    SketchMgr.InsertSketch True
    
    MsgBox "重心の位置を通過する参照ジオメトリ平面上に点がスケッチされました。"

End Sub