204 lines
7.3 KiB
Python
204 lines
7.3 KiB
Python
#-------关联C++库---------------
|
|
import ctypes
|
|
import platform
|
|
from ctypes import *
|
|
system = platform.system()
|
|
if system == "Windows":
|
|
pre = "./"
|
|
suff = ".dll"
|
|
else:
|
|
pre = "./lib"
|
|
suff = ".so"
|
|
|
|
libfile = ctypes.cdll.LoadLibrary
|
|
filename = pre+"CommandManager"+suff
|
|
cmdManager = libfile(filename)
|
|
#---------------------------------
|
|
|
|
|
|
#-------定义函数------------------
|
|
|
|
def undo():
|
|
cmdManager.undo()
|
|
pass
|
|
|
|
def redo():
|
|
cmdManager.redo()
|
|
pass
|
|
|
|
def geometryRename(geometryIDs, newName):
|
|
sgeometryIDs = bytes(geometryIDs,encoding='utf-8')
|
|
snewName = bytes(newName,encoding='utf-8')
|
|
cmdManager.geometryRename(sgeometryIDs,snewName)
|
|
pass
|
|
|
|
def setGeoTransparency(geometryIDs, alpha):
|
|
sgeometryIDs = bytes(geometryIDs,encoding='utf-8')
|
|
cmdManager.setGeoTransparency(sgeometryIDs,alpha)
|
|
pass
|
|
|
|
def setGeoColor(geometryIDs, r, g, b):
|
|
sgeometryIDs = bytes(geometryIDs,encoding='utf-8')
|
|
cmdManager.setGeoColor(sgeometryIDs,c_int(r),c_int(g),c_int(b))
|
|
pass
|
|
|
|
def setMaterialByName(geometry_id, material_name):
|
|
cmdManager.setMaterialByName(c_int(geometry_id),bytes(material_name,encoding='utf-8'))
|
|
pass
|
|
|
|
def setMeshGroupFrontMaterialByName(meshID,groupIDs,materialName):
|
|
cmdManager.setMeshGroupFrontMaterialByName(c_int(meshID),bytes(groupIDs,encoding='utf-8'),bytes(materialName,encoding='utf-8'))
|
|
pass
|
|
|
|
def setMeshGroupBackMaterialByName(meshID,groupIDs,materialName):
|
|
cmdManager.setMeshGroupBackMaterialByName(c_int(meshID),bytes(groupIDs,encoding='utf-8'),bytes(materialName,encoding='utf-8'))
|
|
pass
|
|
|
|
def setMeshGroupSurfaceType(meshID,groupIDs,surfaceType):
|
|
cmdManager.setMeshGroupSurfaceType(c_int(meshID),bytes(groupIDs,encoding='utf-8'),c_int(surfaceType))
|
|
pass
|
|
|
|
def createRelativeCoordinateSystem(id,basicID,name,csType,basicPointX,basicPointY,basicPointZ,rotateAxis,angle,isReverse):
|
|
sname = bytes(name,encoding='utf-8')
|
|
sRotateAxis = bytes(rotateAxis,encoding='utf-8')
|
|
cmdManager.createRelativeCoordinateSystem(c_int(id),c_int(basicID),sname,c_int(csType),c_double(basicPointX),c_double(basicPointY),c_double(basicPointZ),sRotateAxis,c_double(angle),c_bool(isReverse))
|
|
pass
|
|
|
|
def editRelativeCoordinateSystem(editID,basicID,name,csType,basicPointX,basicPointY,basicPointZ,rotateAxis,angle,isReverse):
|
|
sname = bytes(name,encoding='utf-8')
|
|
sRotateAxis = bytes(rotateAxis,encoding='utf-8')
|
|
cmdManager.editRelativeCoordinateSystem(c_int(editID),c_int(basicID),sname,c_int(csType),c_double(basicPointX),c_double(basicPointY),c_double(basicPointZ),sRotateAxis,c_double(angle),c_bool(isReverse))
|
|
pass
|
|
|
|
def deleteRelativeCoordinateSystem(deleteCoorSysIDs):
|
|
sdeleteCoorSysIDs = bytes(deleteCoorSysIDs,encoding='utf-8')
|
|
cmdManager.deleteRelativeCoordinateSystem(sdeleteCoorSysIDs)
|
|
pass
|
|
|
|
def translateRelativeCoordinateSystem(translateCoorSysID):
|
|
cmdManager.translateRelativeCoordinateSystem(c_int(translateCoorSysID))
|
|
pass
|
|
|
|
def modifyNameRelativeCoordinateSystem(coorSysID, newName):
|
|
snewName = bytes(newName,encoding='utf-8')
|
|
cmdManager.modifyNameRelativeCoordinateSystem(c_int(coorSysID),snewName)
|
|
pass
|
|
|
|
def setMeshTransparency(kernalIDs,transparency):
|
|
cmdManager.setMeshTransparency(bytes(kernalIDs,encoding='utf-8'),c_int(transparency))
|
|
|
|
class SolvingContent:
|
|
def __init__(self):
|
|
#待求解项
|
|
self.m_monostaticRCSFlag = 0
|
|
self.m_bistaticRCSFlag = 0
|
|
self.m_gainFlag = 0
|
|
self.m_jSufFlag = 0
|
|
self.m_sparameterFlag = 0
|
|
self.m_RadiationEfficiency = 0
|
|
self.m_ElectricField = 0
|
|
self.m_MagneticField = 0
|
|
#远场坐标相关
|
|
self.m_isUpdateFarField = False #是否更新远场坐标
|
|
self.m_phiStart = 0.0
|
|
self.m_phiEnd = 0.0
|
|
self.m_phiStep = 0.0
|
|
self.m_thetaStart = 0.0
|
|
self.m_thetaEnd = 0.0
|
|
self.m_thetaStep = 0.0
|
|
#近场坐标相关
|
|
self.m_isUpdateNearField = False #是否更新近场坐标
|
|
self.m_startX = 0.0
|
|
self.m_startY = 0.0
|
|
self.m_startZ = 0.0
|
|
self.m_endX = 0.0
|
|
self.m_endY = 0.0
|
|
self.m_endZ = 0.0
|
|
self.m_stepX = 0.0
|
|
self.m_stepY = 0.0
|
|
self.m_stepZ = 0.0
|
|
|
|
#------------------------- 待求解项 -----------------------------
|
|
#设置求解单站RCS是否开启
|
|
def setRCSFlag(self,rcsFlag):
|
|
self.m_monostaticRCSFlag = rcsFlag
|
|
|
|
#设置求解双站RCS是否开启
|
|
def setBistaticRCS(self,rcsFlag):
|
|
self.m_bistaticRCSFlag = rcsFlag
|
|
|
|
def setGainFlag(self,gainFlag):
|
|
self.m_gainFlag = gainFlag
|
|
|
|
def setJSufFlag(self,jSufFlag):
|
|
self.m_jSufFlag = jSufFlag
|
|
|
|
#设置网络参数是否开启
|
|
def setSparameterFlag(self,sparameterFlag):
|
|
self.m_sparameterFlag = sparameterFlag
|
|
|
|
#设置天线效率求解是否开启
|
|
def setRadiationEfficiency(self,radiationEfficiency):
|
|
self.m_RadiationEfficiency = radiationEfficiency
|
|
|
|
#设置电场求解是否开启
|
|
def setElectricField(self,electricField):
|
|
self.m_ElectricField = electricField
|
|
|
|
#设置磁场求解是否开启
|
|
def setMagneticField(self,magneticField):
|
|
self.m_MagneticField = magneticField
|
|
|
|
#------------------------- 远场坐标 -----------------------------
|
|
def setPhiStart(self,phiStart):
|
|
self.m_phiStart = phiStart
|
|
self.m_isUpdateFarField = True
|
|
|
|
def setPhiEnd(self,phiEnd):
|
|
self.m_phiEnd = phiEnd
|
|
self.m_isUpdateFarField = True
|
|
|
|
def setPhiStep(self,phiStep):
|
|
self.m_phiStep = phiStep
|
|
self.m_isUpdateFarField = True
|
|
|
|
def setThetaStart(self,thetaStart):
|
|
self.m_thetaStart = thetaStart
|
|
self.m_isUpdateFarField = True
|
|
|
|
def setThetaEnd(self,thetaEnd):
|
|
self.m_thetaEnd = thetaEnd
|
|
self.m_isUpdateFarField = True
|
|
|
|
def setThetaStep(self,thetaStep):
|
|
self.m_thetaStep = thetaStep
|
|
self.m_isUpdateFarField = True
|
|
|
|
#------------------------- 近场坐标 -----------------------------
|
|
def setStart(self,x,y,z):
|
|
self.m_startX = x
|
|
self.m_startY = y
|
|
self.m_startZ = z
|
|
self.m_isUpdateNearField = True
|
|
|
|
def setEnd(self,x,y,z):
|
|
self.m_endX = x
|
|
self.m_endY = y
|
|
self.m_endZ = z
|
|
self.m_isUpdateNearField = True
|
|
|
|
def setStep(self,x,y,z):
|
|
self.m_stepX = x
|
|
self.m_stepY = y
|
|
self.m_stepZ = z
|
|
self.m_isUpdateNearField = True
|
|
|
|
def save(self):
|
|
cmdManager.initSolvingContentData()
|
|
if self.m_isUpdateFarField:
|
|
cmdManager.setSimulationMOMFarFieldCoordinateData(c_double(self.m_thetaStart),c_double(self.m_thetaEnd),c_double(self.m_thetaStep),c_double(self.m_phiStart),c_double(self.m_phiEnd),c_double(self.m_phiStep))
|
|
if self.m_isUpdateNearField:
|
|
cmdManager.setSimulationMOMNearFieldCoordinateData(c_double(self.m_startX),c_double(self.m_startY),c_double(self.m_startZ),c_double(self.m_endX),c_double(self.m_endY),c_double(self.m_endZ),c_double(self.m_stepX),c_double(self.m_stepY),c_double(self.m_stepZ))
|
|
cmdManager.setMOMSolvingContent(c_int(self.m_monostaticRCSFlag),c_int(self.m_bistaticRCSFlag),c_int(self.m_gainFlag),c_int(self.m_jSufFlag),c_int(self.m_sparameterFlag),c_int(self.m_RadiationEfficiency),c_int(self.m_ElectricField),c_int(self.m_MagneticField))
|
|
del self
|