本日のお題は『重心位置の取得』です。
設計用途ではなかなか使用することはなく、解析系のプログラミングで使われることのほうが多い気がしますが、紹介しておきたいと思います。
1. 環境
- FreeCAD 0.18
2. 重心位置の取得方法
特に計算をする必要はなく、CenterOfMassプロパティから取得することができます。
3. プログラムを書いてみよう
今回のプログラムでは、選択した履歴から、ソリッド・とあるフェース・とあるエッジの重心位置を取得していきます。
# -*- coding: utf-8 -*- #import ptvsd #print("Waiting for debugger attach") # 5678 is the default attach port in the VS Code debug configurations #ptvsd.enable_attach(address=('localhost', 5678), redirect_output=True) #ptvsd.wait_for_attach() import FreeCAD import FreeCADGui sel = FreeCADGui.Selection.getSelection() if(len(sel) != 0): # ソリッドのAABBを取得 solid = sel[0].Shape FreeCAD.Console.PrintMessage("ソリッドの重心位置: " + str(solid.CenterOfMass) + "\n") # 1枚目のフェースのAABBを取得 face = solid.Faces[0] FreeCAD.Console.PrintMessage("とあるフェースの重心位置: " + str(face.CenterOfMass) + "\n") # 1本目のエッジのAABBを取得 edge = solid.Edges[0] FreeCAD.Console.PrintMessage("とあるエッジの重心位置: " + str(edge.CenterOfMass) + "\n")
ソリッドの重心位置: Vector (20.0, 5.0, 5.0) とあるフェースの重心位置: Vector (15.0, 5.0, 5.0) とあるエッジの重心位置: Vector (15.0, 0.0, 5.0)
値は取れているようですね。
取得された重心位置は、下図の赤ポチあたりになります。
5. まとめ
- 構成要素の重心位置はCenterOfMassプロパティから取得可能
- 重心位置はソリッドだけでなく、フェース・エッジからも取得可能
6. 最後に
あまり使用頻度は高くないですが、こんなこともできることは覚えておいてくださいね。
案外、急に必要になることもあります(笑)。
更なる情報をお探しの方は!
下記のリンクから、FreeCADプログラミングのトップページに飛びます。
よろしければご参照くださいませ。