# Copyright (c) 2026 JSOL CORPORATION
#
# 本スクリプトはMITライセンスのもとで公開しています。
# ライセンス全文は以下を参照してください。
# https://www.jmag-international.com/jp/scriptlibrary/jmag_script_library_mit/

app = designer.GetApplication()

def createCut(model, param):
    """カット面を作成する"""
    cutList = model.GetCutList()
    cutType = param[u"cutType"]
    # 平面カット
    if cutType == u"plane":
        cutDefinition = cutList.CreateCutPlane(param[u"title"])
    # 円筒カット
    elif cutType == u"cylinder":
        cutDefinition = cutList.CreateCutCylinder(param[u"title"])
        cutDefinition.SetRadius(param[u"radius"])
    nX, nY, nZ = param[u"normalXYZ"]
    cutDefinition.SetNormalXYZ( nX, nY, nZ)
    oX, oY, oZ = param[u"originXYZ"]
    cutDefinition.SetOriginXYZ( oX, oY, oZ)
    cutDefinition.SetDisplayType(param[u"displayType"])
    return cutDefinition

def createContourWithCut(study, param):
    """作成したカット面を使用したコンタープロットを作成する"""
    contour = study.CreateContour(param[u"title"])
    contour.SetResultType(param[u"resultType"])
    # The 1st argument of SetResultCoordinate
    # 名称かインデックス
    # プリセット座標系の名称は言語設定に従って固定
    # インデックスはプロジェクト-モデル-座標系の下にある座標系定義から０ベースで指定
    contour.SetResultCoordinate(param[u"resultCoordinate"])
    # contour.SetResultCoordinate(u"直交座標系(全体)")
    contour.SetDisplayAllParts(param[u"displayAllParts"])
    cutDefNames = param[u"cutDefNames"]
    for cutDefName in cutDefNames:
        contour.AddCutPlane(cutDefName)

model = app.GetCurrentModel()
cutPlaneParam = {
    u"cutType" : u"plane",
    u"title" : u"DiagonalCut",
    u"normalXYZ" : [5, -5, 0],
    u"originXYZ" : [28, 28, 0],
    u"displayType" : u"ShowBehind"
}
cutPlaneDef = createCut(model, cutPlaneParam)
cutCylinderParam = {
    u"cutType" : u"cylinder",
    u"title" : u"CylinderCut",
    u"normalXYZ" : [0, 0, 1],
    u"originXYZ" : [0, 0, 0],
    u"radius" : 13,
    u"displayType" : u"ShowOutside"
}
cutCylinderDef = createCut(model, cutCylinderParam)

study = app.GetCurrentStudy()
contourParam = {
    u"title" : u"MagFluxDensContour",
    u"resultType" : u"MagneticFluxDensity",
    u"resultCoordinate" : 0,
    u"displayAllParts" : True,
    u"cutDefNames" : [ cutPlaneDef.GetName(), cutCylinderDef.GetName() ]
}
createContourWithCut(study, contourParam)
# 結果のコンター表示をON
app.View().SetContourView(True)
