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

import tkinter as tk
from tkinter import messagebox

def getMeasurementVariableSetting(designTable, measurementVariableName):
    """指定した名前の形状測定変数のパラメーターを表示する"""
    numMv = designTable.NumMeasurementVariables()
    flagValid = False
    for IdxMv in range(numMv):
        measurementVariable = designTable.GetMeasurementVariable(IdxMv)
        if measurementVariable.GetName() == measurementVariableName:
            flagValid = True
            break
    if not flagValid:
        messagebox.showerror("Error", f"The measurement variable '{measurementVariableName}' does not exist.")
        return
    # 名前を指定して取得することも可能
    # measurementVariable = designTable.GetMeasurementVariable(measurementVariableName)
    
    # 指定点を持つタイプ
    # EntityAndPointShortest : エンティティと指定点との最短距離
    # EntityAndPointPerpendicular : エンティティと指定点との垂直距離
    # TwoPointsAndCenterAngle : 2点と指定中心点の確度
    HAS_SPECIFIED_POINT_TYPES = ["EntityAndPointShortest", "EntityAndPointPerpendicular", "TwoPointsAndCenterAngle"]
    # 中心点を持つタイプ
    # ThreePointAngle : 3点の角度
    HAS_CENTERD_POINT_TYPES = ["ThreePointAngle"]
    
    measurementVariableNameRetrieved = measurementVariable.GetName()
    measurementVariableType = measurementVariable.GetType()
    print(f"Name: {measurementVariableNameRetrieved}")
    print(f"Type: {measurementVariableType}")

    if measurementVariableType in HAS_SPECIFIED_POINT_TYPES:
        point = measurementVariable.GetPoint()
        print(f"\tX: {point.GetX()}")
        print(f"\tY: {point.GetY()}")
        print(f"\tZ: {point.GetZ()}")
    elif measurementVariableType in HAS_CENTERD_POINT_TYPES:
        selectedCenter = measurementVariable.GetCenter()
        if selectedCenter.NumVertices() == 1:
            print(f"Center point vertex ID: {selectedCenter.VertexID(0)}")
        else:
            print(f"Center point vertex: None")

    if measurementVariable.NumParts() <= 0:
        print("Selected entities: None")
    else:
        print("Selected entities ID:")

    selection = measurementVariable.GetSelection()
    NumVtc = selection.NumVertices()
    NumEdg = selection.NumEdges()
    NumFc = selection.NumFaces()
    NumPrt = selection.NumParts()
    
    for IdxVtc in range(NumVtc):
        Id = selection.VertexID(IdxVtc)
        print(f"\tVertex: {Id}")
    for IdxEdg in range(NumEdg):
        Id = selection.EdgeID(IdxEdg)
        print(f"\tEdge: {Id}")
    for IdxFc in range(NumFc):
        Id = selection.FaceID(IdxFc)
        print(f"\tFace: {Id}")
    for IdxPrt in range(NumPrt):
        Id = selection.PartID(IdxPrt)
        print(f"\tPart: {Id}")
    print("")


mvName = u"PointArc"
app = designer.GetApplication()
study = app.GetCurrentStudy()
dt = study.GetDesignTable()
getMeasurementVariableSetting(dt, mvName)
