PR: distributed geom and smesh scripts: first step

This commit is contained in:
prascle 2013-02-07 14:42:52 +00:00
parent 79f0b7244b
commit 1b57300c82
5 changed files with 141 additions and 24 deletions

View File

@ -52,8 +52,8 @@ salomeinclude_HEADERS = \
SMESH.hxx
# Scripts to be installed.
dist_salomescript_DATA= \
smeshpy.py
#dist_salomescript_DATA= \
# smeshpy.py
# Libraries targets

View File

@ -22,8 +22,8 @@
# Python API for the standard meshing plug-in module.
from smesh_algorithm import Mesh_Algorithm
from smesh import AssureGeomPublished, IsEqual, ParseParameters
from smesh import GetName, TreatHypoStatus
from smeshDC import AssureGeomPublished, IsEqual, ParseParameters
from smeshDC import GetName, TreatHypoStatus
from smeshDC import Mesh
import StdMeshers

View File

@ -33,15 +33,16 @@ import salome
from salome import *
import geompy
import SMESH, SALOMEDS
import smeshDC
from smeshDC import *
#from smeshDC import *
# retrieve SMESH engine in try/except block
# to avoid problems in some cases, e.g. when generating documentation
try:
# get instance of class smeshDC
smesh = salome.lcc.FindOrLoadComponent( "FactoryServer", "SMESH" )
smesh.init_smesh( salome.myStudy, geompy.geom )
engineSmesh = salome.lcc.FindOrLoadComponent( "FactoryServer", "SMESH" )
smesh = smeshDC.smeshInstance(salome.myStudy, engineSmesh)
except:
smesh = None
pass
@ -81,3 +82,30 @@ if smesh:
globals()[k] = getattr( smesh, k )
del k
pass
print """
===============================================================================
WARNING: |
Usage of smesh.py is deprecated in SALOME V7.2! |
smesh.py will be removed in a future version! |
TODO: |
The following changes in your scripts are required to avoid this message: |
|
replace |
------- |
|
import smesh, SMESH, SALOMEDS |
smesh.SetCurrentStudy(theStudy) |
|
with |
---- |
|
import smeshDC, SMESH, SALOMEDS |
smesh = smeshDC.smeshInstance(theStudy) |
|
you also need to modify some lines where smeshDC is used instead of smesh: |
|
algo=smesh.xxxx ==> algo.smeshDC.xxxx |
|
===============================================================================
"""

View File

@ -16,11 +16,11 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# File : smesh.py
# File : smeshDC.py
# Author : Francis KLOSS, OCC
# Module : SMESH
## @package smesh
## @package smeshDC
# Python API for SALOME %Mesh module
## @defgroup l1_auxiliary Auxiliary methods and structures
@ -91,6 +91,7 @@ from smesh_algorithm import Mesh_Algorithm
import SALOME
import SALOMEDS
import os
## @addtogroup l1_auxiliary
## @{
@ -271,17 +272,16 @@ def AssureGeomPublished(mesh, geom, name=''):
mesh.geompyD.addToStudyInFather( mesh.geom, geom, name )
return
## Return the first vertex of a geomertical edge by ignoring orienation
## Return the first vertex of a geometrical edge by ignoring orientation
def FirstVertexOnCurve(edge):
from geompy import SubShapeAll, ShapeType, KindOfShape, PointCoordinates
vv = SubShapeAll( edge, ShapeType["VERTEX"])
vv = geompyDC.SubShapeAll( edge, geompyDC.ShapeType["VERTEX"])
if not vv:
raise TypeError, "Given object has no vertices"
if len( vv ) == 1: return vv[0]
info = KindOfShape(edge)
info = geompyDC.KindOfShape(edge)
xyz = info[1:4] # coords of the first vertex
xyz1 = PointCoordinates( vv[0] )
xyz2 = PointCoordinates( vv[1] )
xyz1 = geompyDC.PointCoordinates( vv[0] )
xyz2 = geompyDC.PointCoordinates( vv[1] )
dist1, dist2 = 0,0
for i in range(3):
dist1 += abs( xyz[i] - xyz1[i] )
@ -294,8 +294,53 @@ def FirstVertexOnCurve(edge):
# end of l1_auxiliary
## @}
# All methods of this class are accessible directly from the smesh.py package.
class smeshDC(SMESH._objref_SMESH_Gen):
# Warning: smeshInst is a singleton
smeshInst = None
engine = None
doLcc = False
class smeshDC(object, SMESH._objref_SMESH_Gen):
def __new__(cls):
global engine
global smeshInst
global doLcc
print "__new__", engine, smeshInst, doLcc
if smeshInst is None:
# smesh engine is either retrieved from engine, or created
smeshInst = engine
# Following test avoids a recursive loop
if doLcc:
if smeshInst is not None:
# smesh engine not created: existing engine found
doLcc = False
if doLcc:
doLcc = False
# FindOrLoadComponent called:
# 1. CORBA resolution of server
# 2. the __new__ method is called again
print "smeshInst = lcc.FindOrLoadComponent ", engine, smeshInst, doLcc
smeshInst = salome.lcc.FindOrLoadComponent( "FactoryServer", "SMESH" )
else:
# FindOrLoadComponent not called
if smeshInst is None:
# smeshDC instance is created from lcc.FindOrLoadComponent
print "smeshInst = super(smeshDC,cls).__new__(cls) ", engine, smeshInst, doLcc
smeshInst = super(smeshDC,cls).__new__(cls)
else:
# smesh engine not created: existing engine found
print "existing ", engine, smeshInst, doLcc
pass
return smeshInst
return smeshInst
def __init__(self):
print "__init__"
SMESH._objref_SMESH_Gen.__init__(self)
## Dump component to the Python script
# This method overrides IDL function to allow default values for the parameters.
@ -314,7 +359,8 @@ class smeshDC(SMESH._objref_SMESH_Gen):
## Sets the current study and Geometry component
# @ingroup l1_auxiliary
def init_smesh(self,theStudy,geompyD):
def init_smesh(self,theStudy,geompyD = None):
print "init_smesh"
self.SetCurrentStudy(theStudy,geompyD)
## Creates an empty Mesh. This mesh can have an underlying geometry.
@ -436,8 +482,8 @@ class smeshDC(SMESH._objref_SMESH_Gen):
def SetCurrentStudy( self, theStudy, geompyD = None ):
#self.SetCurrentStudy(theStudy)
if not geompyD:
import geompy
geompyD = geompy.geom
import geompyDC
geompyD = geompyDC.geom
pass
self.geompyD=geompyD
self.SetGeomEngine(geompyD)
@ -950,6 +996,19 @@ import omniORB
omniORB.registerObjref(SMESH._objref_SMESH_Gen._NP_RepositoryId, smeshDC)
def smeshInstance( study, instance=None):
global engine
global smeshInst
global doLcc
engine = instance
if engine is None:
doLcc = True
smeshInst = smeshDC()
assert isinstance(smeshInst,smeshDC), "Smesh engine class is %s but should be smeshDC.smeshDC. Import smeshmapi before creating the instance."%smeshInst.__class__
smeshInst.init_smesh(study)
return smeshInst
# Public class: Mesh
# ==================
@ -1015,6 +1074,7 @@ class Mesh:
for attrName in dir(self):
attr = getattr( self, attrName )
if isinstance( attr, algoCreator ):
print "algoCreator ", attrName
setattr( self, attrName, attr.copy( self ))
## Initializes the Mesh object from an instance of SMESH_Mesh interface
@ -4264,3 +4324,32 @@ class hypMethodWrapper:
raise ValueError, detail # wrong variable name
return result
for pluginName in os.environ[ "SMESH_MeshersList" ].split( ":" ):
#
print "pluginName: ", pluginName
pluginName += "DC"
try:
exec( "from %s import *" % pluginName )
except Exception, e:
print "Exception while loading %s: %s" % ( pluginName, e )
continue
exec( "import %s" % pluginName )
plugin = eval( pluginName )
print " plugin:" , str(plugin)
# add methods creating algorithms to Mesh
for k in dir( plugin ):
if k[0] == '_': continue
algo = getattr( plugin, k )
print " algo:", str(algo)
if type( algo ).__name__ == 'classobj' and hasattr( algo, "meshMethod" ):
print " meshMethod:" , str(algo.meshMethod)
if not hasattr( Mesh, algo.meshMethod ):
setattr( Mesh, algo.meshMethod, algoCreator() )
pass
getattr( Mesh, algo.meshMethod ).add( algo )
pass
pass
pass
del pluginName

View File

@ -166,7 +166,7 @@ class Mesh_Algorithm:
## Gets the name of the algorithm
def GetName(self):
from smesh import GetName
from smeshDC import GetName
return GetName(self.algo)
## Sets the name to the algorithm
@ -190,7 +190,7 @@ class Mesh_Algorithm:
## Private method
def Assign(self, algo, mesh, geom):
from smesh import AssureGeomPublished, TreatHypoStatus, GetName
from smeshDC import AssureGeomPublished, TreatHypoStatus, GetName
if geom is None:
raise RuntimeError, "Attemp to create " + algo + " algoritm on None shape"
self.mesh = mesh
@ -221,7 +221,7 @@ class Mesh_Algorithm:
## Private method
def Hypothesis (self, hyp, args=[], so="libStdMeshersEngine.so",
UseExisting=0, CompareMethod=""):
from smesh import TreatHypoStatus, GetName
from smeshDC import TreatHypoStatus, GetName
hypo = None
if UseExisting:
if CompareMethod == "": CompareMethod = self.CompareHyp
@ -310,7 +310,7 @@ class Mesh_Algorithm:
# into a list acceptable to SetReversedEdges() of some 1D hypotheses
# @ingroup l3_hypos_1dhyps
def ReversedEdgeIndices(self, reverseList):
from smesh import FirstVertexOnCurve
from smeshDC import FirstVertexOnCurve
resList = []
geompy = self.mesh.geompyD
for i in reverseList: