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

app = designer.GetApplication()

def settingCompositeResultDefinition(study, fluxLine, contour, vector):
    """結果プロットの同時表示を設定する"""
    compoResult = study.CreateCompositeResult(u"flux_cont_vec_compo_res")
    compoResult.ClearResults()
    compoResult.SetFluxLineDefinition(fluxLine)
    compoResult.SetContourDefinition(contour)
    compoResult.SetVectorDefinition(vector)

def createFluxLine(study, typeName):
    """フラックスラインを作成"""
    fluxLine = study.CreateFluxLine("mag_flux_dens")
    fluxLine.SetResultType(typeName, u"")
    fluxLine.SetFluxLineType(u"plane")
    fluxLine.SetColor(u"blue")
    fluxLine.SetOrigin(28, 28, 15)
    fluxLine.SetNormal(0, 0, 1)
    fluxLine.SetThickness(u"5")
    # 表示タイプ
    # 0:シェーディング
    # 1:隠線なし
    # 2:ワイヤフレーム
    fluxLine.SetDisplayType(0)
    return fluxLine

def createContour(study, typeName, partIdList):
    """コンタープロットを作成"""
    contour = study.CreateContour(u"contour")
    contour.SetResultType(typeName, u"")
    # The Arguments of SetResultCoordinate
    # 名称かインデックス
    # プリセット座標系の名称は言語設定に従って固定
    # インデックスはプロジェクト-モデル-座標系の下にある座標系定義から０ベースで指定
    contour.SetResultCoordinate(0)
    #contour.SetResultCoordinate(u"直交座標系(全体)")
    contour.SetDisplayAllParts(False)
    contour.RemoveAllParts()
    for partId in partIdList:
        contour.AddPart(partId)
    return contour

def createVector(study, typeName):
    """ベクトルプロットを作成"""
    vector = study.CreateVector(u"vector")
    vector.SetResultType(typeName, u"")
    vector.SetStyle(u"Cone")
    vector.SetGradient(u"CMR", u"21", True)
    vector.SetNumVectors(u"0")
    # 表示タイプ
    # 0:シェーディング
    # 1:隠線なし
    # 2:ワイヤフレーム
    vector.SetDisplayType(0)
    return vector

study = app.GetCurrentStudy()

typeName = u"MagneticFluxDensity"
fluxLine = createFluxLine(study, typeName)

typeName = u"CurrentDensity"
model = app.GetCurrentModel()
partGroup = model.GetGroupList().GetGroup(u"Coil")
partIdList = partGroup.GetPartIDs()
contour = createContour(study, typeName, partIdList)

typeName = u"MagneticFieldStrength"
vector = createVector(study, typeName)

settingCompositeResultDefinition(study, fluxLine, contour, vector)
app.View().SetCompositeView(True)  # 解析結果がない場合はエラー
