def test_Box2DQuad(self): """ Test a quadrilateral mesh of a simple box. """ box = BRepPrimAPI_MakeBox(10, 10, 10).Solid() gen = SMESH_Gen() mesh = gen.CreateMesh(0, True) hyp = NETGENPlugin_SimpleHypothesis_2D(0, 0, gen) hyp.SetAllowQuadrangles(True) hyp.SetLocalLength(1.0) NETGENPlugin_NETGEN_2D(1, 0, gen) mesh.ShapeToMesh(box) mesh.AddHypothesis(box, 0) mesh.AddHypothesis(box, 1) success = gen.Compute(mesh, box) self.assertTrue(success) self.assertEqual(mesh.NbTriangles(), 0) self.assertEqual(mesh.NbQuadrangles(), 600) self.assertEqual(mesh.NbNodes(), 602)
def test_LocalEdgeLength(self): """ Test a mesh on a box with a local edge length enforced on one edge. """ box = BRepPrimAPI_MakeBox(10, 10, 10).Solid() edge = TopExp_Explorer(box, TopAbs_EDGE).Current() gen = SMESH_Gen() mesh = gen.CreateMesh(0, True) hyp3d = NETGENPlugin_SimpleHypothesis_3D(0, 0, gen) hyp3d.SetLocalLength(1.0) NETGENPlugin_NETGEN_2D3D(1, 0, gen) hyp1d = StdMeshers_LocalLength(2, 0, gen) hyp1d.SetLength(0.1) StdMeshers_Regular_1D(3, 0, gen) mesh.ShapeToMesh(box) mesh.AddHypothesis(box, 0) mesh.AddHypothesis(box, 1) mesh.AddHypothesis(edge, 2) mesh.AddHypothesis(edge, 3) success = gen.Compute(mesh, box) self.assertTrue(success) self.assertEqual(mesh.NbTetras(), 31547) self.assertEqual(mesh.NbNodes(), 6205)
def test_Box3D(): """ Test a tetrahedral mesh of a simple solid box """ from OCCT.BRepPrimAPI import BRepPrimAPI_MakeBox from OCCT.NETGENPlugin import (NETGENPlugin_SimpleHypothesis_3D, NETGENPlugin_NETGEN_2D3D) from OCCT.SMESH import SMESH_Gen box = BRepPrimAPI_MakeBox(10, 10, 10).Solid() gen = SMESH_Gen() mesh = gen.CreateMesh(0, True) hyp = NETGENPlugin_SimpleHypothesis_3D(0, 0, gen) hyp.SetLocalLength(1.0) NETGENPlugin_NETGEN_2D3D(1, 0, gen) mesh.ShapeToMesh(box) mesh.AddHypothesis(box, 0) mesh.AddHypothesis(box, 1) success = gen.Compute(mesh, box) assert success assert mesh.NbTetras() == 4767 assert mesh.NbNodes() == 1189
def test_Box3D(self): """ Test a tetrahedral mesh of a simple solid box. """ box = BRepPrimAPI_MakeBox(10, 10, 10).Solid() gen = SMESH_Gen() mesh = gen.CreateMesh(0, True) hyp = NETGENPlugin_SimpleHypothesis_3D(0, 0, gen) hyp.SetLocalLength(1.0) NETGENPlugin_NETGEN_2D3D(1, 0, gen) mesh.ShapeToMesh(box) mesh.AddHypothesis(box, 0) mesh.AddHypothesis(box, 1) success = gen.Compute(mesh, box) self.assertTrue(success) self.assertEqual(mesh.NbTetras(), 4741) self.assertEqual(mesh.NbNodes(), 1185)
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA from OCCT.NETGENPlugin import (NETGENPlugin_SimpleHypothesis_3D, NETGENPlugin_NETGEN_2D3D) from OCCT.SMESH import SMESH_Gen from OCCT.Exchange import ExchangeBasic from OCCT.Visualization.WxViewer import ViewerWx fn = './models/shape_names.step' shape = ExchangeBasic.read_step(fn) v = ViewerWx() v.add(shape) v.start() gen = SMESH_Gen() mesh = gen.CreateMesh(0, True) hyp = NETGENPlugin_SimpleHypothesis_3D(0, 0, gen) hyp.SetLocalLength(5) alg = NETGENPlugin_NETGEN_2D3D(1, 0, gen) mesh.ShapeToMesh(shape) mesh.AddHypothesis(shape, 0) mesh.AddHypothesis(shape, 1) print('Computing mesh...') done = gen.Compute(mesh, mesh.GetShapeToMesh()) print('done.')
def __init__(self): self._gen = SMESH_Gen()
class MeshGen(object): """ This class is the primary meshing database for a given instance. """ def __init__(self): self._gen = SMESH_Gen() @property def object(self): """ :return: The underlying mesh object. :rtype: OCCT.SMESH.SMESH_Gen """ return self._gen @classmethod def wrap(cls, gen): """ Create a new instance using an existing SMESH_Gen instance. :param OCCT.SMESH.SMESH_Gen gen: A SMESH_Gen instance. :return: The new instance. :rtype: afem.smesh.entities.MeshGen """ new_gen = cls.__new__(cls) new_gen._gen = gen return new_gen def new_id(self): """ Generate a new unique ID within this generator. :return: A new unique ID. :rtype: int """ return self._gen.GetANewId() def create_mesh(self, shape=None, is_embedded=False): """ Create a mesh. :param afem.topology.entities.Shape shape: The shape to mesh. :param bool is_embedded: Option for embedding mesh. :return: The mesh. :rtype: afem.smesh.entities.Mesh """ the_mesh = Mesh(self, is_embedded) if shape is not None: the_mesh.shape_to_mesh(shape) return the_mesh def check_algo_state(self, mesh, shape): """ Check if computation would fail because of some bad algorithm state. :param afem.smesh.entities.Mesh mesh: A mesh. :param afem.topology.entities.Shape shape: A shape. :return: *True* if ok, *False* if not. :rtype: bool """ return self._gen.CheckAlgoState(mesh.object, shape.object) def compute(self, mesh, shape=None): """ Compute a mesh on a shape. :param afem.smesh.entities.Mesh mesh: A mesh. :param afem.topology.entities.Shape shape: The shape to compute mesh on. If not provided then the shape associated to the mesh is used. :return: *True* if computed, *False* if not. :rtype: bool :raise ValueError: If no shape is available to apply the hypothesis to. """ if shape is None: if mesh.has_shape: shape = mesh.shape else: raise ValueError('No shape could be found.') return self._gen.Compute(mesh.object, shape.object)
##GNU Lesser General Public License for more details. ## ##You should have received a copy of the GNU Lesser General Public License ##along with pythonOCC. If not, see <http://www.gnu.org/licenses/>. from OCCT.BRepPrimAPI import BRepPrimAPI_MakeBox from OCCT.SMESH import SMESH_Gen from OCCT.StdMeshers import (StdMeshers_Arithmetic1D, StdMeshers_Regular_1D, StdMeshers_TrianglePreference, StdMeshers_MEFISTO_2D, StdMeshers_QuadranglePreference, StdMeshers_Quadrangle_2D) #Create the shape to mesh aShape = BRepPrimAPI_MakeBox(10, 20, 40).Shape() aMeshGen = SMESH_Gen() aMesh = aMeshGen.CreateMesh(0, True) def ComputeMesh(MEFISTO2=False): an1DHypothesis = StdMeshers_Arithmetic1D(0,0,aMeshGen) #print dir(an1DHypothesis) #print an1DHypothesis.SaveTo() an1DHypothesis.SetLength(1.,False) an1DHypothesis.SetLength(2.,True) an1DAlgo = StdMeshers_Regular_1D(1,0,aMeshGen) if MEFISTO2: #2D a2dHypothseis = StdMeshers_TrianglePreference(2,0,aMeshGen) #define the boundary a2dAlgo = StdMeshers_MEFISTO_2D(3,0,aMeshGen)
MeshVS_DMF_NodalColorDataPrs) from OCCT.SMDSAbs import SMDSAbs_Face from OCC.Display.SimpleGui import init_display display, start_display, add_menu, add_function_to_menu = init_display() # First create a 'complex' shape (actually a boolean op between a box and a cylinder) print('Creating geometry ...', end='') box = BRepPrimAPI_MakeBox(200, 30, 30).Shape() sphere = BRepPrimAPI_MakeSphere(gp_Pnt(150, 20, 20), 80).Shape() aShape = BRepAlgoAPI_Cut(box, sphere).Shape() print('Done.') # Create the Mesh print('Creating mesh ...', end='') aMeshGen = SMESH_Gen() aMesh = aMeshGen.CreateMesh(0, True) print('Done.') print('Adding hypothesis and algorithms ...', end='') # 1D an1DHypothesis = StdMeshers_Arithmetic1D(0, 0, aMeshGen) #discretization of the wire an1DHypothesis.SetLength(5., False) #the smallest distance between 2 points an1DHypothesis.SetLength(10., True) # the longest distance between 2 points an1DAlgo = StdMeshers_Regular_1D(1, 0, aMeshGen) # interpolation # 2D a2dHypothseis = StdMeshers_QuadranglePreference(2, 0, aMeshGen) #define the boundary a2dAlgo = StdMeshers_Quadrangle_2D(3, 0, aMeshGen) # the 2D mesh