--- /dev/null
+#!/usr/bin/env python
+
+import sys
+import salome
+
+salome.salome_init()
+
+###
+### GEOM component
+###
+
+import GEOM
+from salome.geom import geomBuilder
+import math
+import SALOMEDS
+
+
+geompy = geomBuilder.New()
+
+## Creates a polygon given its centre, external radius and number of sides
+def makePolygon(p_centre, radius, nb_sides, theName=""):
+ points = []
+ x, y, z = geompy.PointCoordinates(p_centre)
+ for i in range(nb_sides):
+ angle = i*2*math.pi/nb_sides
+ p = geompy.MakeVertex(x+radius*math.cos(angle), y+radius*math.sin(angle), 0)
+ points.append(p)
+ wire = geompy.MakePolyline(points, True)
+ face = geompy.MakeFace(wire, 1)
+ if theName:
+ geompy.addToStudy(face, theName)
+ return face
+
+## Creates a solid by adding a vertex on its top
+def makeSummitSolid(face, height, theName=""):
+ p_cdg = geompy.MakeCDG(face)
+ p_top = geompy.MakeTranslation(p_cdg, 0, 0, height)
+ edges = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"])
+ faces = [face]
+ for edge in edges:
+ p1, p2 = geompy.SubShapeAll(edge, geompy.ShapeType["VERTEX"])
+ wire = geompy.MakePolyline([p1, p2, p_top], True)
+ face = geompy.MakeFace(wire, 1)
+ faces.append(face)
+ shell = geompy.MakeShell(faces)
+ solid = geompy.MakeSolid(shell)
+ if theName:
+ geompy.addToStudy(solid, theName)
+ return solid
+
+O = geompy.MakeVertex(0, 0, 0)
+OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
+OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
+OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
+geompy.addToStudy( O, 'O' )
+geompy.addToStudy( OX, 'OX' )
+geompy.addToStudy( OY, 'OY' )
+geompy.addToStudy( OZ, 'OZ' )
+
+height = 0.5
+
+triangle = makePolygon(O, 1, 3, "triangle")
+
+P1 = geompy.MakeVertex(2, 0, 0)
+quadrangle = makePolygon(P1, 1, 4, "quadrangle")
+
+P2 = geompy.MakeVertex(4, 0, 0)
+pentagon = makePolygon(P2, 1, 5, "pentagon")
+
+P3 = geompy.MakeVertex(6, 0, 0)
+hexagon = makePolygon(P3, 1, 6, "hexagon")
+
+P4 = geompy.MakeVertex(8, 0, 0)
+heptagon = makePolygon(P4, 1, 7, "heptagon")
+
+P5 = geompy.MakeVertex(10, 0, 0)
+octagon = makePolygon(P5, 1, 7, "octagon")
+
+polygons = [triangle, quadrangle, pentagon, hexagon, heptagon, octagon]
+polyhedrons = []
+for polygon in polygons:
+ name = polygon.GetName()
+ polygon_extruded = geompy.MakePrismVecH(polygon, OZ, height, theName="%s_prism"%name)
+ polygon_summit = makeSummitSolid(polygon, -height, theName="%s_summit"%name)
+ polyhedrons += [polygon_extruded, polygon_summit]
+
+solids = geompy.MakeCompound(polyhedrons, theName="solids")
+
+
+###
+### SMESH component
+###
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+
+Mesh_1 = smesh.Mesh(solids)
+Regular_1D = Mesh_1.Segment()
+Number_of_Segments_1 = Regular_1D.NumberOfSegments(1)
+PolygonPerFace_2D = Mesh_1.Polygon()
+PolyhedronPerSolid_3D = Mesh_1.Polyhedron()
+
+ok = Mesh_1.Compute()
+
+if not ok:
+ raise Exception("Error when computing Mesh")
+
+# check volumes
+vol_geom = geompy.BasicProperties(solids)[2]
+vol_mesh = Mesh_1.GetVolume()
+
+assert abs(vol_geom - vol_mesh) < 1e-12
+
+assert Mesh_1.NbVolumes() == 12
+
+# check type of elements
+assert Mesh_1.NbTetras() == 1
+assert Mesh_1.NbHexas() == 1
+assert Mesh_1.NbPyramids() == 1
+assert Mesh_1.NbPrisms() == 1
+assert Mesh_1.NbHexagonalPrisms() == 1
+assert Mesh_1.NbPolyhedrons() == 7
+
+
+if salome.sg.hasDesktop():
+ salome.sg.updateObjBrowser()
if faces and isinstance( faces[0], geomBuilder.GEOM._objref_GEOM_Object ):
faceIDs = []
for shape in faces:
- try:
- ff = self.mesh.geompyD.SubShapeAll( shape, self.mesh.geompyD.ShapeType["FACE"] )
- for f in ff:
+ ff = self.mesh.geompyD.SubShapeAll( shape, self.mesh.geompyD.ShapeType["FACE"] )
+ for f in ff:
faceIDs.append( self.mesh.geompyD.GetSubShapeID(self.mesh.geom, f))
- except:
- # try to get the SHAPERSTUDY engine directly, because GetGen does not work because of
- # simplification of access in geomBuilder: omniORB.registerObjref
- from SHAPERSTUDY_utils import getEngine
- gen = getEngine()
- if gen:
- aShapeOp = gen.GetIShapesOperations()
- ff = aShapeOp.ExtractSubShapes( shape, self.mesh.geompyD.ShapeType["FACE"], False)
- for f in ff:
- faceIDs.append( aShapeOp.GetSubShapeIndex( self.mesh.geom, f ))
faces = faceIDs
hyp = self.Hypothesis("ViscousLayers",
[thickness, numberOfLayers, stretchFactor, faces, isFacesToIgnore],
if edges and isinstance( edges[0], geomBuilder.GEOM._objref_GEOM_Object ):
edgeIDs = []
for shape in edges:
- try:
ee = self.mesh.geompyD.SubShapeAll( shape, self.mesh.geompyD.ShapeType["EDGE"])
for e in ee:
edgeIDs.append( self.mesh.geompyD.GetSubShapeID( self.mesh.geom, e ))
- except:
- # try to get the SHAPERSTUDY engine directly, because GetGen does not work because of
- # simplification of access in geomBuilder: omniORB.registerObjref
- from SHAPERSTUDY_utils import getEngine
- gen = getEngine()
- if gen:
- aShapeOp = gen.GetIShapesOperations()
- ee = aShapeOp.ExtractSubShapes( shape, self.mesh.geompyD.ShapeType["EDGE"], False)
- for e in ee:
- edgeIDs.append( aShapeOp.GetSubShapeIndex( self.mesh.geom, e ))
edges = edgeIDs
hyp = self.Hypothesis("ViscousLayers2D",
[thickness, numberOfLayers, stretchFactor, edges, isEdgesToIgnore],
for i in reverseList:
if isinstance( i, int ):
s = geompy.GetSubShape(self.mesh.geom, [i])
-
- #bos #20082 begin:
- if s is None and type(self.geom) != geomBuilder.GEOM._objref_GEOM_Object:
- # try to get the SHAPERSTUDY engine directly, as GetGen does not work because of
- # simplification of access in geomBuilder: omniORB.registerObjref
- from SHAPERSTUDY_utils import getEngine
- gen = getEngine()
- if gen:
- aShapeOp = gen.GetIShapesOperations()
- s = aShapeOp.GetSubShape(self.mesh.geom, i)
- #bos #20082 end
-
if s.GetShapeType() != geomBuilder.GEOM.EDGE:
raise TypeError("Not EDGE index given")
resList.append( i )