指定した名前の部品の体積を取得するというシンプルな機能ですが、部品グループではグループ化されたすべての部品の合計を取得できます。また2次元では面積でありスクリプトの汎用的な記載には分岐が必要となります。このスクリプトでは指定された名称が部品グループであるか部品であるかを探索した上で、2次元か3次元かを確認しモデルに応じて値を取得します。
前提条件
- モデルが1つ以上作成済みであること
このスクリプト例では、プロジェクトツリー上でアクティブなモデルに対して実行している - 取得する対象の部品名または部品グループ名が既知であること
スクリプトにおける実行内容
- 取得される面積、または体積の表示のために、モデルに設定されている長さの単位を取得
- モデルの次元を取得し、2次元なら面積、3次元なら体積の取得に分岐する
- 指定された名前”Magnet”がまず部品グループ名に存在するか確認する。
なお、存在しない場合にエラーメッセージが残るが、想定できるエラーであるため直後にクリアしている。 - 部品グループが存在すれば部品グループで、存在しなければ部品で探索し、該当したものの値を取得する。
- 取得する値は、3次元モデルであれば体積、2次元モデルであれば面積である。2次元モデルから体積、3次元モデルから面積を取得すると0で返される。
# Copyright (c) 2026 JSOL CORPORATION
#
# 本スクリプトはMITライセンスのもとで公開しています。
# ライセンス全文は以下を参照してください。
# https://www.jmag-international.com/jp/scriptlibrary/jmag_script_library_mit/
app = designer.GetApplication()
def hasNamedPartsGroup(groupList, name):
"""指定された名前の部品グループの存在確認"""
ret = False
group = groupList.GetGroup(name)
# 指定された名前の部品グループが存在する場合には、groupオブジェクトはその部品グループの有効データを保持している
if group.IsValid():
ret = True
else:
app.ClearError() # エラーは想定済みのためJMAGからのエラーメッセージをクリアする
return ret
def getNamedPartsAreaFor2D(targetModel, name):
"""2Dモデルで、指定された名前の部品または部品グループの面積を取得する"""
area = 0.0
groupList = targetModel.GetGroupList()
if hasNamedPartsGroup(groupList, name):
group = groupList.GetGroup(name)
area = group.Area()
else:
part = targetModel.GetPart(name)
if part.IsValid():
area = part.Area()
else:
print(u"The part with the specified name doesn't exist")
return area
def getNamedPartsVolumeFor3D(targetModel, name):
"""3Dモデルで、指定された名前の部品または部品グループの体積を取得する"""
volume = 0.0
groupList = targetModel.GetGroupList()
if hasNamedPartsGroup(groupList, name):
group = groupList.GetGroup(name)
volume = group.Volume()
else:
part = targetModel.GetPart(name)
if part.IsValid():
volume = part.Volume()
else:
print(u"The part with the specified name doesn't exist")
return volume
def getVolumeOrArea(targetModel):
"""モデルの次元をチェックして切り替えるための関数"""
dim = targetModel.GetDimension()
unitString = targetModel.GetCurrentUnit(u"Length")
vol = 0.0
targetPartName = u"Magnet"
preDescriptionString = u""
if dim == 2:
vol = getNamedPartsAreaFor2D(targetModel, targetPartName)
preDescriptionString = u"The area of"
unitString += u"^2"
elif dim == 3:
vol = getNamedPartsVolumeFor3D(targetModel, targetPartName)
preDescriptionString = u"The volume of"
unitString += u"^3"
print(preDescriptionString, targetPartName, u"is", vol, unitString)
model = app.GetCurrentModel()
getVolumeOrArea(model)


