シミュレーションでは計算コストを抑制するため、周期性や対称性がある場合は部分モデルで解析を行うことが推奨されます。
しかし、同じモデルを対象としていても、解析目的によってフルモデルの解析が必要となることがあります。
このスクリプトでは部分モデルで用意されたCADファイルを読み、アセンブリパターンフィーチャを用いてフルモデルを作成します。
前提条件
- 部分モデルで作成済みのCADファイルを準備する
このスクリプト例では、SAT形式のCADファイルをロードしている - 用意した部分モデルの周期性、対称性が分かっていること
このスクリプト例では、Z軸を回転軸として90degの周方向周期性と、XY平面を対称面として鏡面対称性があるとしている
スクリプトにおける設定内容
- 部分モデルのCADファイルを形状エディタにロードする
- 全てのパートを取得し、参照オブジェクトを作成する
- Z軸を回転軸として、全てのパートを対象にアセンブリ円形パターンを作成する
このスクリプトでは90degを周期角としている - XY平面を対称面とし、全てのパートと作成したアセンブリ円形パターンを対象にアセンブリ鏡面コピーを作成する
# Copyright (c) 2026 JSOL CORPORATION
#
# 本スクリプトはMITライセンスのもとで公開しています。
# ライセンス全文は以下を参照してください。
# https://www.jmag-international.com/jp/scriptlibrary/jmag_script_library_mit/
SAT_FILEPATH = u"D:/Temp/ipm_motor.SAT" # CADファイルのフルパス
PERIODIC_ANGLE = 90.0 # 周方向部分モデルの周期角度
app = designer.GetApplication()
geomApp = app.CreateGeometryEditor()
geomDoc = geomApp.GetDocument()
def getAllParts(assembly):
"""アセンブリ上のすべてのパートを取得する"""
numAssmItems = assembly.NumItems()
allParts = []
for i in range(numAssmItems):
item = assembly.GetItem(i)
if item.GetScriptTypeName() == u"Part":
allParts.append(item)
return allParts
def getAllPartsReferece(assembly):
"""アセンブリ上のすべてのパートの参照オブジェクトを作成する"""
allParts = getAllParts(assembly)
allPartsRef = []
for part in allParts:
allPartsRef.append(geomDoc.CreateReferenceFromItem(part))
return allPartsRef
def createAssemblyCircularPatternOnZAxis(assembly, allPartsRef, allFeatureRef, periodicAngle, numInstances):
"""Z軸を中心としてアセンブリ上のすべてのパートとフィーチャの円形パターンを作成する"""
assmCircularPattern = assembly.CreateAssemblyCircularPattern()
assmCircularPattern.SetProperty(u"AxisType", u"DefaultZ") # 円形パターン回転軸をZ軸とする
assmCircularPattern.SetAngle(periodicAngle)
assmCircularPattern.SetInstance(numInstances)
for partRef in allPartsRef:
assmCircularPattern.AddPropertyByReference(u"Target", partRef)
for featureRef in allFeatureRef:
assmCircularPattern.AddPropertyByReference(u"Feature", featureRef)
return assmCircularPattern
def createMirrorOnXYPlane(assembly, allPartsRef, allFeatureRef):
"""XY平面を対称面としてアセンブリ上のすべてのパートとフィーチャの鏡面コピーを作成する"""
assmMirrorCopy = assembly.CreateAssemblyMirrorCopy()
assmMirrorCopy.SetProperty(u"SymmetryType", u"DefaultXY") # 鏡面コピー対称面をXY平面とする
for partRef in allPartsRef:
assmMirrorCopy.AddPropertyByReference(u"Target", partRef)
for featureRef in allFeatureRef:
assmMirrorCopy.AddPropertyByReference(u"Feature", featureRef)
return assmMirrorCopy
def createFullModel(assembly):
"""円形パターンと鏡面コピーを定義し部分モデルからフルモデルを作成する"""
allFeatureRef = []
allPartsRef = getAllPartsReferece(assembly)
featureCreated = createAssemblyCircularPatternOnZAxis(assembly, allPartsRef, allFeatureRef, PERIODIC_ANGLE, 360 / PERIODIC_ANGLE)
allFeatureRef.append(geomDoc.CreateReferenceFromItem(featureCreated))
createMirrorOnXYPlane(assembly, allPartsRef, allFeatureRef)
geomApp.Load3DCad(SAT_FILEPATH)
assm = geomDoc.GetAssembly()
createFullModel(assm)


