200 lines
5.9 KiB
Python
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
|
|||
|
|
|
|||
|
|
|