#---------------------------------------------------------------------
#Name: d0010_conductor_to_coil.py
#Menu-en: Switch all FEM conductors to FEM coils
#Menu-ja: FEMコンダクタをFEMコイルに変換
#Type: Python
#Create: May 31, 2016 JSOL Corporation
#Comment-en: This script replace all FEM conductors with FEM coils in the current study. Requires Version 15.1 or later
#Comment-ja: 現在のスタディに設定されたFEMコンダクタをFEMコイルに置き換える。バージョン15.1以降が必要です。
#Copyright: (c) JSOL Corporation. All Rights Reserved.
#---------------------------------------------------------------------
import designer
TARGET_COND_TYPE = "FEMConductor"
SWITCH_TO_COND_TYPE = "FEMCoil"
SWITCH_TO_COMP_TYPE = "Coil"
SWITCH_TO_COND_SUB_TYPE = "FEMCoilData"
DIRECTION_TYPE_KEY = "DirectionType"
DIRECTION_TYPE_2D_KEY = "Direction2D"
COIL_FLOWINFACE_VALUE = 0
CONDUCTOR_PARTSINFLOW_VALUE = 1
TURN_VAL_NAME = "Turn"
RESISTANCE_VAL_NAME = "Resistance"
LEAKAGE_INDUCTANCE_VAL_NAME = "LeakageInductance"
EDDY_CURRENT_FLAG = "EddyCurrentCalculation"
app = designer.GetApplication()
def main():
targetStudy = app.GetCurrentStudy()
if check_HasResult(app, targetStudy) == True:
return
if initial_notice() != 0:
return
targetModel = app.GetCurrentModel()
paramInputDlg = app.CreateDialogBox()
setup_param_input_dialog(app, paramInputDlg)
switch_main(targetModel, targetStudy, paramInputDlg)
def setup_param_input_dialog(app, dialog):
title_jp = "FEMコイル素子の設定値"
turnlbl_jp = "巻き数"
resistancelbl_jp = "抵抗一定値"
leakageinductancelbl_jp = "漏れインダクタンス"
title = "Setting value of FEM Coil Component"
turnlbl = "Turn"
resistancelbl = "Resistance"
leakageinductancelbl = "Leakage Inductance"
dialog.SetTranslation(title, title_jp)
dialog.SetTranslation(turnlbl, turnlbl_jp)
dialog.SetTranslation(resistancelbl, resistancelbl_jp)
dialog.SetTranslation(leakageinductancelbl, leakageinductancelbl_jp)
dialog.SetTitle(title)
dialog.AddReal(TURN_VAL_NAME, turnlbl, 1.0)
dialog.AddReal(RESISTANCE_VAL_NAME, resistancelbl, 1.0)
dialog.AddReal(LEAKAGE_INDUCTANCE_VAL_NAME, leakageinductancelbl, 0.0)
dialog.SetCancelButtonVisible(False)
def switch_main(targetModel, targetStudy, inputDlg):
targetCondIndices=[]
dimension = targetModel.GetDimension()
hitCount = 0
numCond = targetStudy.NumConditions()
for i in range(0, numCond):
currentCond = targetStudy.GetCondition(i)
condTypeName = currentCond.GetScriptTypeName()
if condTypeName == TARGET_COND_TYPE:
hitCount = hitCount + 1
if hitCount == 1:
inputDlg.Show()
targetCondIndices.append(hitCount)
targetCondIndices[-1] = i
if dimension == 2:
create_switch_cond_2D(targetStudy, currentCond, inputDlg)
elif dimension == 3:
create_switch_cond_3D(targetStudy, currentCond, inputDlg)
if hitCount > 0:
i = hitCount
while i > 0:
targetStudy.DeleteCondition(targetCondIndices[i-1])
i = i - 1
def create_switch_cond_3D(targetStudy, orgCond, inputDlg):
numOrgSubCond = orgCond.NumSubConditions()
newCond = targetStudy.CreateCondition(SWITCH_TO_COND_TYPE, orgCond.GetName())
for i in range(0, numOrgSubCond):
orgSubCond = orgCond.GetSubCondition(i)
newSubCond = newCond.CreateSubCondition(SWITCH_TO_COND_SUB_TYPE, orgSubCond.GetName())
newSubCond.SetValue(DIRECTION_TYPE_KEY, COIL_FLOWINFACE_VALUE)
newSubCond.AddSecondarySelected(orgSubCond.GetSelectionByGroup(0))
dirType = orgSubCond.GetValue(DIRECTION_TYPE_KEY)
if dirType == CONDUCTOR_PARTSINFLOW_VALUE:
partSel = orgSubCond.GetSelectionByGroup(2)
newSubCond.AddSelected(partSel)
numParts = partSel.NumParts()
for j in range (0, numParts):
targetStudy.GetMaterial(partSel.PartID(j)).SetValue(EDDY_CURRENT_FLAG, 0)
numNewSubCond = newCond.NumSubConditions()
if numNewSubCond > numOrgSubCond:
for i in range(0, numNewSubCond - numOrgSubCond):
newCond.RemoveSubCondition(i)
replace_circuit_instance(targetStudy, orgCond, newCond, inputDlg)
def create_switch_cond_2D(targetStudy, orgCond, inputDlg):
numOrgSubCond = orgCond.NumSubConditions()
newCond = targetStudy.CreateCondition(SWITCH_TO_COND_TYPE, orgCond.GetName())
for i in range(0, numOrgSubCond):
orgSubCond = orgCond.GetSubCondition(i)
newSubCond = newCond.CreateSubCondition(SWITCH_TO_COND_SUB_TYPE, orgSubCond.GetName())
sel = orgSubCond.GetSelection()
newSubCond.AddSelected(sel)
numParts = sel.NumParts()
for j in range (0, numParts):
targetStudy.GetMaterial(sel.PartID(j)).SetValue(EDDY_CURRENT_FLAG, 0)
newSubCond.SetValue(DIRECTION_TYPE_2D_KEY, orgSubCond.GetValue(DIRECTION_TYPE_2D_KEY))
numNewSubCond = newCond.NumSubConditions()
if numNewSubCond > numOrgSubCond:
for i in range(0, numNewSubCond - numOrgSubCond):
newCond.RemoveSubCondition(i)
replace_circuit_instance(targetStudy, orgCond, newCond, inputDlg)
def replace_circuit_instance(targetStudy, orgCond, newCond, inputDlg):
if targetStudy.HasCircuit() == False:
return
currentCircuit = targetStudy.GetCircuit()
linkCompName = orgCond.GetLink()
targetComp = currentCircuit.GetComponent(linkCompName)
targetCompInst = currentCircuit.GetInstance(linkCompName, 0)
if app.HasError() == True:
app.ClearError()
return
orgCompName = targetComp.GetName()
newCompName = "Switch_From_" + orgCompName
orgPos = targetCompInst.GetPosition()
orgAngle = targetCompInst.GetAngle()
newComp = currentCircuit.CreateComponent(SWITCH_TO_COMP_TYPE, newCompName)
newComp.SetValue(TURN_VAL_NAME, inputDlg.GetValue(TURN_VAL_NAME))
newComp.SetValue(RESISTANCE_VAL_NAME, inputDlg.GetValue(RESISTANCE_VAL_NAME))
newComp.SetValue(LEAKAGE_INDUCTANCE_VAL_NAME, inputDlg.GetValue(LEAKAGE_INDUCTANCE_VAL_NAME))
newCompInst = currentCircuit.CreateInstance(newCompName, int(orgPos.GetX()), int(orgPos.GetY()))
newCompInst.RotateTo(orgAngle)
newCond.SetLink(newCompName)
currentCircuit.DeleteComponent(linkCompName)
def initial_notice():
confirmDlg = app.CreateDialogBox()
title = "Convert FEM Conductors to FEM Coils"
message = "This script will replace all FEM conductors with FEM coils
"
message = message + "
" + "-Note that FEM Conductors inside macro circuits will not be replaced."
message = message + "
" + "-For FEM Conductors that are set using a inflow and outflow face in a 3D study, the FEM coil will only have the inflow face set."
message = message + "
" + "-Also, conductor groups will be removed."
message_jp = "
" + "
" + "Do you want to run?"
title_jp = "FEMコンダクタのFEMコイルへの置換"
message_jp = "現在のスタディのFEMコンダクタをFEMコイルに置き換えます。
"
message_jp = message_jp + "
" + "-マクロ素子内のFEMコンダクタに関連付けられている場合、関連付けがされません。"
message_jp = message_jp + "
" + "-3次元で通電タイプが流入面+流出面の場合、流入面のみ設定されます。"
message_jp = message_jp + "
" + "-グループ化は解除されます。"
message_jp = message_jp + "
" + "
" + "実行しますか?"
confirmDlg.SetTranslation(title, title_jp)
confirmDlg.SetTranslation(message, message_jp)
confirmDlg.SetTitle(title)
confirmDlg.AddLabel(message)
confirmDlg.Show()
return confirmDlg.WasCancelled()
def check_HasResult(app, targetStudy):
hasResult = False
if targetStudy.AnyCaseHasResult() == True:
hasResult = True
errorDlg = app.CreateDialogBox()
title_jp = "エラー"
message_jp = "結果を持つケースがあります。"
title = "Error"
message = "There are some cases those have result in this study."
errorDlg.SetTranslation(title, title_jp)
errorDlg.SetTranslation(message, message_jp)
errorDlg.SetCancelButtonVisible(False)
errorDlg.SetTitle(title)
errorDlg.AddLabel(message)
errorDlg.Show()
return hasResult
main()