# Copyright (c) 2026 JSOL CORPORATION # # This script is released under the MIT License. # See the full license text at: # https://www.jmag-international.com/scriptlibrary/jmag_script_library_mit/ app = designer.GetApplication() def hasExternalTerminal(circuit): """Check if there are external terminals in the circuit.""" for i in range(circuit.NumInstances()): instance = circuit.GetComponentInstance(i) typeName = instance.GetScriptTypeName() if typeName in (u"LeftExternalTerminal", u"RightExternalTerminal"): return True return False def getComponentNames(circuit): """Retrieve names of all circuit components.""" componentNames = [] for i in range(circuit.NumComponents()): component = circuit.GetComponent(i) componentNames.append(component.GetName()) return componentNames def createMacro(circuit, componentNames, param): """Create a macro component from specified circuit component names.""" macro = circuit.CreateMacro(param[u"title"]) for componentName in componentNames: macro.AddInstance(componentName) macro.SetDescription(param[u"description"]) macro.SetFolder(u"SubCircuit") macro.Create() def main(): study = app.GetCurrentStudy() circuit = study.GetCircuit() if not hasExternalTerminal(circuit): print(u"Include at least one left or right external terminal to create a macro component.") return componentNames = getComponentNames(circuit) macroParam = { u"title" : u"MacroElem", u"description" : u"Macro element T1Set" } createMacro(circuit, componentNames, macroParam) main()