Skip to main content

PsimGetElementList

Usage

psim.PsimGetElementList();

Python Help

py.help(psim.PsimGetElementList)

Python def

def PsimGetElementList(self, SchematicObj, flag):
# class PSIM_param:
# def __init__(self, name, value, options):
# self.Name = name
# self.Value = value
# self.Options = options


# class PSIM_Element:
# def __init__(self, type, name, i)
# self.Type = type
# self.Name = name
# self.Params = [] #array of PSIM_param objects
# self.Index = i

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
#int EXPORT PsimReloadElementList2(int nID, unsigned int nFlags)
nElmCount = PsimReloadElements(schHandle, flag); #returns 0 on error
if nElmCount == 0 :
print("Unable to load element list.")
return None;

PsimGetElement = getattr(self.psimHandle, "PsimGetElement")
if not PsimGetElement:
raise AttributeError(self.VersionErrorMessage)
# int PsimGetElement(int nID, int nIndexElm, wchar_t** szElmType, wchar_t** szElmName, int *pnParamCount)
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)
# int PsimGetElmParam(int nID, int nIndexElm, int nLevel, int nIndexParam, wchar_t** szVarName, wchar_t** szVarValue, int *pnValueLen)
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):
#more buffer needed for Value
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