興味があろうがなかろうが。

なるべく役に立つ、とがった内容を記していきたいと思います。

【FreeCADプログラミング】重心位置の取得

本日のお題は『重心位置の取得』です。

設計用途ではなかなか使用することはなく、解析系のプログラミングで使われることのほうが多い気がしますが、紹介しておきたいと思います。

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)

値は取れているようですね。

取得された重心位置は、下図の赤ポチあたりになります。

f:id:appli-get:20200517061100p:plain

ソリッドの重心位置

f:id:appli-get:20200517061119p:plain

フェースの重心位置

f:id:appli-get:20200517061109p:plain

エッジの重心位置

5. まとめ

  • 構成要素の重心位置はCenterOfMassプロパティから取得可能
  • 重心位置はソリッドだけでなく、フェース・エッジからも取得可能

6. 最後に

あまり使用頻度は高くないですが、こんなこともできることは覚えておいてくださいね。

案外、急に必要になることもあります(笑)。

更なる情報をお探しの方は!

下記のリンクから、FreeCADプログラミングのトップページに飛びます。

よろしければご参照くださいませ。

www.interested-or-not.com