def PsimGetElementList(self, SchematicObj, flag):
if not self.IsValid():
print("PSIM object was not loaded.")
return None;
schHandle = 0
if isinstance(SchematicObj, PSIM_schematic):
schHandle = SchematicObj.value
else:
return None
elmList = []
PsimReloadElements = getattr(self.psimHandle, "PsimReloadElementList2")
if not PsimReloadElements:
raise AttributeError(self.VersionErrorMessage)
PsimReloadElements.restype = ctypes.c_int
nElmCount = PsimReloadElements(schHandle, flag);
if nElmCount == 0 :
print("Unable to load element list.")
return None;
PsimGetElement = getattr(self.psimHandle, "PsimGetElement")
if not PsimGetElement:
raise AttributeError(self.VersionErrorMessage)
PsimGetElement.restype = ctypes.c_int
PsimGetElement.argtypes = [ctypes.c_int, ctypes.c_int, ctypes.POINTER(ctypes.POINTER(ctypes.c_wchar)), ctypes.POINTER(ctypes.POINTER(ctypes.c_wchar)), ctypes.POINTER(ctypes.c_int)]
PsimGetElmParam = getattr(self.psimHandle, "PsimGetElmParam")
if not PsimGetElmParam:
raise AttributeError(self.VersionErrorMessage)
PsimGetElmParam.restype = ctypes.c_int
PsimGetElmParam.argtypes = [ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.POINTER(ctypes.POINTER(ctypes.c_wchar)), ctypes.POINTER(ctypes.POINTER(ctypes.c_wchar)), ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int)]
nIndexElm = 0
while nIndexElm < nElmCount:
szElmType1 = (ctypes.c_wchar * 100)()
szElmType = ctypes.cast(szElmType1, ctypes.POINTER(ctypes.c_wchar))
szElmName1 = (ctypes.c_wchar * 100)()
szElmName = ctypes.cast(szElmName1, ctypes.POINTER(ctypes.c_wchar))
pnParamCount = ctypes.c_int(0)
m = PsimGetElement(schHandle, nIndexElm, ctypes.byref(szElmType), ctypes.byref(szElmName), ctypes.byref(pnParamCount))
szElmType3 = ctypes.cast(szElmType, ctypes.POINTER(ctypes.c_wchar * 100))
szElmName3 = ctypes.cast(szElmName, ctypes.POINTER(ctypes.c_wchar * 100))
elm = PSIM_Element(szElmType3.contents.value, szElmName3.contents.value, nIndexElm)
nParamCount = pnParamCount.value
nIndexParam = 0
while nIndexParam < nParamCount:
szVarName1 = (ctypes.c_wchar * 101)()
szVarName = ctypes.cast(szVarName1, ctypes.POINTER(ctypes.c_wchar))
szVarValue1 = ctypes.create_unicode_buffer(101)
szVarValue = ctypes.cast(szVarValue1, ctypes.POINTER(ctypes.c_wchar))
pnValueLen = ctypes.c_int(100)
pnOptions = ctypes.c_int(0)
n = PsimGetElmParam(schHandle, nIndexElm, 0, nIndexParam, ctypes.byref(szVarName), ctypes.byref(szVarValue), ctypes.byref(pnValueLen), ctypes.byref(pnOptions))
if(n == 2):
nValueLen = pnValueLen.value
szVarValue2 = ctypes.create_unicode_buffer(nValueLen+11)
szVarValue = ctypes.cast(szVarValue2, ctypes.POINTER(ctypes.c_wchar))
nValueLen = nValueLen+10
pnValueLen = ctypes.c_int(nValueLen)
n = PsimGetElmParam(schHandle, nIndexElm, 0, nIndexParam, ctypes.byref(szVarName), ctypes.byref(szVarValue), ctypes.byref(pnValueLen), ctypes.byref(pnOptions))
nValueLen = pnValueLen.value
nOptions = pnOptions.value
szVarName3 = ctypes.cast(szVarName, ctypes.POINTER(ctypes.c_wchar * 100))
szVarValue3 = ctypes.cast(szVarValue, ctypes.POINTER(ctypes.c_wchar * nValueLen))
if(n == 1):
elm.Params.append(PSIM_param(szVarName3.contents.value, szVarValue3.contents.value, nOptions))
nIndexParam +=1
if(elm.Type == "Simulation Control"):
elmList.insert(0, elm)
else:
elmList.append(elm)
nIndexElm += 1
return elmList