예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
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
예제 #4
0
    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)
예제 #5
0
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.')

v = ViewerWx()
v.add(mesh)
v.start()
예제 #6
0
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)
a3dHypothesis = StdMeshers_Prism_3D(4, 0, aMeshGen)  #OK

#Calculate mesh
aMesh.ShapeToMesh(aShape)

#Assign hyptothesis to mesh
aMesh.AddHypothesis(aShape, 0)
aMesh.AddHypothesis(aShape, 1)
aMesh.AddHypothesis(aShape, 2)
aMesh.AddHypothesis(aShape, 3)
aMesh.AddHypothesis(aShape, 4)
print('Done.')

#Compute the data
print('Computing mesh ...', end='')
aMeshGen.Compute(aMesh, aMesh.GetShapeToMesh())
print('Done.')
print(aMesh.NbNodes())
# Display the data
aDS = SMESH_MeshVSLink(aMesh)
aMeshVS = MeshVS_Mesh(True)
DMF = 1  # to wrap!
MeshVS_BP_Mesh = 5  # To wrap!

aPrsBuilder = MeshVS_MeshPrsBuilder(aMeshVS, DMF, aDS, 0, MeshVS_BP_Mesh)
aMeshVS.SetDataSource(aDS)
aMeshVS.AddBuilder(aPrsBuilder, True)
context = display.Context
context.Display(aMeshVS)
context.Deactivate(aMeshVS)
display.FitAll()