# 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/ SAT_FILEPATH = u"D:/Temp/ipm_motor.SAT" # Full path to the CAD file PERIODIC_ANGLE = 90.0 # Periodic angle of the circumferential periodicity of the model app = designer.GetApplication() geomApp = app.CreateGeometryEditor() geomDoc = geomApp.GetDocument() def getAllParts(assembly): """Get all parts on the assembly""" numAssmItems = assembly.NumItems() allParts = [] for i in range(numAssmItems): item = assembly.GetItem(i) if item.GetScriptTypeName() == u"Part": allParts.append(item) return allParts def getAllPartsReferece(assembly): """Create reference objects for all parts on the assembly""" allParts = getAllParts(assembly) allPartsRef = [] for part in allParts: allPartsRef.append(geomDoc.CreateReferenceFromItem(part)) return allPartsRef def createAssemblyCircularPatternOnZAxis(assembly, allPartsRef, allFeatureRef, periodicAngle, numInstances): """Create a circular pattern of all parts and features on the assembly, centered on the Z-axis""" assmCircularPattern = assembly.CreateAssemblyCircularPattern() assmCircularPattern.SetProperty(u"AxisType", u"DefaultZ") # The rotation axis of the circular pattern is the Z-axis assmCircularPattern.SetAngle(periodicAngle) assmCircularPattern.SetInstance(numInstances) for partRef in allPartsRef: assmCircularPattern.AddPropertyByReference(u"Target", partRef) for featureRef in allFeatureRef: assmCircularPattern.AddPropertyByReference(u"Feature", featureRef) return assmCircularPattern def createMirrorOnXYPlane(assembly, allPartsRef, allFeatureRef): """Create a mirror copy of all parts and features on the assembly using the XY plane as the mirrr face""" assmMirrorCopy = assembly.CreateAssemblyMirrorCopy() assmMirrorCopy.SetProperty(u"SymmetryType", u"DefaultXY") # The mirror face of the copy is XY plane for partRef in allPartsRef: assmMirrorCopy.AddPropertyByReference(u"Target", partRef) for featureRef in allFeatureRef: assmMirrorCopy.AddPropertyByReference(u"Feature", featureRef) return assmMirrorCopy def createFullModel(assembly): """Create a full model from a partial model using assembly circular pattern and mirror copy""" allFeatureRef = [] allPartsRef = getAllPartsReferece(assembly) featureCreated = createAssemblyCircularPatternOnZAxis(assembly, allPartsRef, allFeatureRef, PERIODIC_ANGLE, 360 / PERIODIC_ANGLE) allFeatureRef.append(geomDoc.CreateReferenceFromItem(featureCreated)) createMirrorOnXYPlane(assembly, allPartsRef, allFeatureRef) geomApp.Load3DCad(SAT_FILEPATH) assm = geomDoc.GetAssembly() createFullModel(assm)