ILMAB. Add GEOM_TestField.py

This commit is contained in:
eap 2013-10-04 14:49:12 +00:00
parent 437cd1debd
commit 4d84d697e5
3 changed files with 149 additions and 0 deletions

View File

@ -33,6 +33,7 @@ SET(_other_SCRIPTS
GEOM_example7.py
GEOM_moteur.py
GEOM_TestAll.py
GEOM_TestField.py
GEOM_TestOthers.py
GEOM_TestHealing.py
GEOM_TestMeasures.py

View File

@ -0,0 +1,146 @@
# Python API for field on geometry manipulations:
# field = geompy.CreateField(shape, name, type, dimension, componentNames)
# geompy.RemoveField(field)
# shape = field.getShape()
# name = field.getName()
# field.setName(name)
# typ = field.getType()
# dim = field.getDimension()
# componentNames = field.getComponents()
# n = geompy.CountFields(shape)
# fields = geompy.GetFields(shape)
# field = geompy.GetField(shape, name)
#
# field.addStep(step, stamp, values)
# field.removeStep(step)
# n = field.countSteps()
# steps = field.getSteps() # donne la liste des numeros de pas du champ
# stamp = field.getStamp(step)
# field.setStamp(step, stamp)
# values = field.getValues(step)
# field.setValues(step, values)
MustFail = -1
geompy = None
def CheckFieldCreation(shape, name, ftype, dimension, componentNames, nbFiOrMustFail=-1):
# WARNING: assure name uniquness to check geompy.GetField( shape, name )
try:
field = geompy.CreateField(shape, name, ftype, dimension, componentNames)
except Exception, e:
if nbFiOrMustFail == MustFail:
print "Ok, expected exception caught: %s"%e
return
raise e
if nbFiOrMustFail == MustFail:
raise RuntimeError, "Expected exception NOT thrown"
assert field.getShape()
assert field.getShape().IsSame( shape )
assert field.getName() == name
if isinstance( ftype, int ):
assert field.getType() == ftype
else:
assert field.getTypeEnum() == ftype
assert field.getDimension() == dimension
assert field.getComponents() == componentNames
assert geompy.CountFields( shape ) == nbFiOrMustFail
assert geompy.GetField( shape, name )
assert geompy.GetField( shape, name ).IsSame( field )
def CheckStepManips(field, step, stamp, values, nbStepsOrMustFail, toRemove=False):
try:
stp = field.addStep(step, stamp, values)
except Exception, e:
if nbStepsOrMustFail == MustFail:
print "Ok, expected exception caught: %s"%e
return
raise e
if nbStepsOrMustFail == MustFail:
raise RuntimeError, "Expected exception NOT thrown"
assert field.countSteps() == nbStepsOrMustFail
assert len( field.getSteps() ) == nbStepsOrMustFail
assert step in field.getSteps()
assert field.getStamp(step) == stamp
field.setStamp(step, stamp*2)
assert field.getStamp(step) == stamp*2
assert field.getValues(step) == values
values[-1] = values[0]
field.setValues(step, values)
assert field.getValues(step) == values
if toRemove:
field.removeStep(step)
assert field.countSteps() == nbStepsOrMustFail-1
assert len( field.getSteps() ) == nbStepsOrMustFail-1
assert step not in field.getSteps()
pass
return
def TestField (geomBuilder, math):
global geompy
geompy = geomBuilder
oldAutoPublish = geompy.myMaxNbSubShapesAllowed
geompy.addToStudyAuto()
shape = geompy.MakeBoxDXDYDZ(1,1,1)
# Field operations
import GEOM
CheckFieldCreation(shape,"fBool1",GEOM.FDT_Bool, 0, ['b1'], 1)
CheckFieldCreation(shape,"fInt1", GEOM.FDT_Int, 1, ['i1','i2'], 2)
CheckFieldCreation(shape,"fDbl1", 2, 3, ['d3'], 3)
CheckFieldCreation(shape,"fStr1", 3, -1, ['s4'], 4)
# assert exception in case of invalid parameters
CheckFieldCreation(None,"bad",GEOM.FDT_Bool, 0, ['b1'], MustFail) # no shape
CheckFieldCreation(shape,"",GEOM.FDT_Bool, 0, ['b1'], MustFail) # no name
CheckFieldCreation(shape,"bad",-1, ['b1'], MustFail) # too low data type
CheckFieldCreation(shape,"bad",4, ['b1'], MustFail) # too high data type
CheckFieldCreation(shape,"bad",GEOM.FDT_Bool, -2, ['b1'], MustFail) # too low dim
CheckFieldCreation(shape,"bad",GEOM.FDT_Bool, 4, ['b1'], MustFail) # too high dim
CheckFieldCreation(shape,"bad",GEOM.FDT_Bool, 0, [], MustFail) # no components
# Field step operations
toRemove = True
# string field on the whole shape
sfield = geompy.CreateField(shape, "strWhole", GEOM.FDT_String, -1, ["day","year"])
CheckStepManips( sfield, -1, -10, ["25 Sep","2013"], 1 )
CheckStepManips( sfield, 2, 10, ["26 Sep","2014"], 2, toRemove )
CheckStepManips( sfield, 10,1000, ["27 Sep","2015"], 2 )
# bool field on 8 vertices
bfield = geompy.CreateField(shape, "boolV", GEOM.FDT_Bool, 0, ["ok"])
CheckStepManips( bfield, 1, -1, [0,1]*4, 1, toRemove )
CheckStepManips( bfield, 2, -2, [1,0]*4, 1 )
# int field on 6 faces
ifield = geompy.CreateField(shape, "intF", GEOM.FDT_Int, 2, ["id","domain"])
CheckStepManips( ifield, -1, -10, range(12), 1 )
CheckStepManips( ifield, -2, -20, range(6)*2, 2 )
# double field on a solid
dfield = geompy.CreateField(shape, "dblS", GEOM.FDT_Double, 3, ["a","b","c"])
CheckStepManips( dfield, -1, -10, [-1.1, 2.3, 4000], 1 )
CheckStepManips( dfield, -2, -20, range(3), 2 )
# assert exception in case of invalid parameters
CheckStepManips( sfield, -1, -10, ["25 Sep","2013"], MustFail ) # step already exists
CheckStepManips( sfield, 20, -10, ["25 Sep"], MustFail ) # wrong data size
CheckStepManips( sfield, 30, -10, [1, 2], MustFail ) # wrong data type
geompy.addToStudyAuto(oldAutoPublish)
# Check Python dump
import tempfile, os
dumpFile = tempfile.NamedTemporaryFile().name
pyFile = dumpFile+".py"
# dump the study
import salome
assert( salome.myStudy.DumpStudy(os.path.dirname(dumpFile), os.path.basename(dumpFile), 1, 0))
execfile( pyFile )
os.remove( pyFile )
print "Field manipulations work OK"

View File

@ -36,7 +36,9 @@ import GEOM_TestAll
import GEOM_TestOthers
import GEOM_TestHealing
import GEOM_TestMeasures
import GEOM_TestField
GEOM_TestField.TestField(geompy, math) # it goes 1st as it checks Python Dump
GEOM_TestMeasures.TestMeasureOperations(geompy, math)
GEOM_TestHealing.TestHealingOperations(geompy, math)
GEOM_TestOthers.TestOtherOperations(geompy, math)