comac_desk_app/GenerateReport/Resources/pyScripts/Mesher.py

200 lines
5.9 KiB
Python

#-------关联C++库---------------
import ctypes
import platform
import os
from ctypes import *
system = platform.system()
if system == "Windows":
pre = "./"
suff = ".dll"
else:
pre = "./lib"
suff = ".so"
libfile = ctypes.cdll.LoadLibrary
filename = pre+"MeshModule"+suff
meshModule = libfile(filename)
filename = pre+"ConfigOption"+suff
configOp = libfile(filename)
#---------------------------------
#--------------New_script_FilterClip---------
def setValue(index, name, stype, svalue):
name = bytes(name,encoding='utf-8')
stype=bytes(stype,encoding='utf-8')
svalue=bytes(svalue,encoding='utf-8')
configOp.setValue(index, name, stype, svalue)
pass
def exportMesh(filename,suffix,modelID):
str = bytes(filename,encoding='utf-8')
suf = bytes(suffix,encoding='utf-8')
meshModule.exportMesh(str,suf,modelID)
pass
class MeshPara:
def __init__(self):
self.solidList = dict()
self.surfaceList = dict()
self.pointsSizeList = list()
self.fieldsList = list()
self.fluidfield = list()
self.dimensionList = list()
self.method2d = -1
self.method3d = -1
self.dim = -1
self.isAuto = -1
self.meshSize = -1
self.autoMeshPara = 0
self.autoLocalSetting = 0
self.fastAlgorithm = 0
self.threadNumber = 8
def appendSurface(self, geoset, index):
self.surfaceList.setdefault(geoset, set()).add(index)
def appendSolid(self, geoset, index):
self.solidList.setdefault(geoset, set()).add(index)
def setElementType(self, etype):
self.elementType = etype
def setThreadNumber(self, number):
self.threadNumber = number
def setElementOrder(self,order):
self.elementOrder = order
def set2DMethod(self,m2):
self.method2d = m2
def set3DMethod(self,m3):
self.method3d = m3
def setMinSize(self, min):
self.minSize = min
def setMaxSize(self, max):
self.maxSize = max
def setIsAuto(self, au):
self.isAuto = au
def setAutoMeshPara(self, samp):
self.autoMeshPara = samp
def setAutoLocalSetting(self, sals):
self.autoLocalSetting = sals
def setFastAlgorithm(self, fa):
self.fastAlgorithm = fa
def appendSizeFiled(self,px,py,pz,pv):
pointsList = [px,py,pz,pv]
self.pointsSizeList.append(pointsList)
def appendBoxFields(self,thick,vin,vout,x,y,z,length,width,height,bg):
boxlist = [1,thick,vin,vout,x,y,z,length,width,height,bg]
self.fieldsList.append(boxlist)
def appendBallFields(self,radius,thick,vin,vout,x,y,z,bg):
balllist = [2,radius,thick,vin,vout,x,y,z,bg]
self.fieldsList.append(balllist)
def appendCylinderFields(self,radius,length,x,y,z,xaxis,yaxis,zaxis,vin,vout,bg):
cylinderlist = [3,radius,length,x,y,z,xaxis,yaxis,zaxis,vin,vout,bg]
self.fieldsList.append(cylinderlist)
def appendSolidsFields(self,vi,vo,tn,setid,index,bg):
solidsList = [4,vi,vo,tn,setid,index,bg]
self.fieldsList.append(solidsList)
def appendFrustumFields(self,rin1,rout1,rin2,rout2,length,x,y,z,xaxis,yaxis,zaxis,vin,vout,bg):
frustumlist = [5,rin1,rout1,rin2,rout2,length,x,y,z,xaxis,yaxis,zaxis,vin,vout,bg]
self.fieldsList.append(frustumlist)
def appendCurveFileds(self,bodyid,curveid,value):
curvelist = [6,bodyid,curveid,value]
self.fieldsList.append(curvelist)
def appendSurfaceFileds(self,bodyid,surfaceid,value):
surfacelist = [7,bodyid,surfaceid,value]
self.fieldsList.append(surfacelist)
def setDim(self,dim):
self.dim = dim
def setMeshID(self,id):
self.meshID = id
def appendToDimension(self,dim):
self.dimensionList.append(dim)
def saveMeshPara(self):
eletypestr = bytes(self.elementType,encoding='utf-8')
pointsize = ""
for pointlist in self.pointsSizeList:
pointstr = ""
for point in pointlist:
pointstr = pointstr + str(point) + ","
pointstr = pointstr[:-1]
pointsize = pointsize + pointstr + ";"
pointsize = pointsize[:-1]
pointsizestr = bytes(pointsize, encoding='utf-8')
fields = ""
for fieldlist in self.fieldsList:
fieldstr = ""
for field in fieldlist:
fieldstr = fieldstr + str(field) + ","
fieldstr = fieldstr[:-1]
fields = fields + fieldstr + ";"
fields = fields[:-1]
fieldsStr = bytes(fields, encoding = 'utf-8')
if self.dim == 2:
keyList = self.surfaceList.keys()
strcom = ""
for key in keyList:
setstr = ""
values = self.surfaceList.get(key)
for v in values:
setstr = setstr + str(v) + ","
setstr = str(key) + ":" + setstr[:-1]
strcom = strcom + setstr + ";"
strcom = strcom[:-1]
surfacestr = bytes(strcom, encoding='utf-8')
meshModule.setMeshPara(c_int(self.dim), surfacestr, eletypestr, c_int(self.elementOrder), c_int(self.method2d), \
c_int(self.method3d), c_double(self.minSize), c_double(self.maxSize), \
c_bool(self.isAuto), c_int(self.autoMeshPara), c_bool(self.autoLocalSetting), c_bool(self.fastAlgorithm), \
pointsizestr, fieldsStr, c_int(self.threadNumber))
elif self.dim == 3:
keyList = self.solidList.keys()
strcom = ""
for key in keyList:
setstr = ""
values = self.solidList.get(key)
for v in values:
setstr = setstr + str(v) + ","
setstr = str(key) + ":" + setstr[:-1]
strcom = strcom + setstr + ";"
strcom = strcom[:-1]
objstr = bytes(strcom, encoding='utf-8')
meshModule.setMeshPara(c_int(self.dim), objstr, eletypestr, c_int(self.elementOrder), c_int(self.method2d), \
c_int(self.method3d), c_double(self.minSize), c_double(self.maxSize), \
c_bool(self.isAuto), c_int(self.autoMeshPara), c_bool(self.autoLocalSetting), c_bool(self.fastAlgorithm), \
pointsizestr, fieldsStr, c_int(self.threadNumber))
del self