File size: 3,216 Bytes
985c397
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// SPDX-License-Identifier: LGPL-2.1-or-later

#include <gtest/gtest.h>
#include <BRepPrimAPI_MakeBox.hxx>
#include <TopoDS_Solid.hxx>
#include <TopExp_Explorer.hxx>
#include <TopAbs_ShapeEnum.hxx>
#include <QObject>

#include <src/App/InitApplication.h>


QT_WARNING_PUSH
QT_WARNING_DISABLE_CLANG("-Wextra-semi")
QT_WARNING_DISABLE_CLANG("-Woverloaded-virtual")
#include <SMESH_Version.h>
#include <SMESH_Gen.hxx>
#include <SMESH_Mesh.hxx>
#include <StdMeshers_LocalLength.hxx>
#include <StdMeshers_Regular_1D.hxx>
#include <StdMeshers_MEFISTO_2D.hxx>
#include <StdMeshers_QuadranglePreference.hxx>
QT_WARNING_POP

class SMesh: public ::testing::Test
{
protected:
    static void SetUpTestSuite()
    {
        tests::initApplication();
    }
};
// NOLINTBEGIN
TEST_F(SMesh, testMefisto)
{
    TopoDS_Solid box = BRepPrimAPI_MakeBox(10.0, 10.0, 10.0).Solid();

    SMESH_Gen* gen = new SMESH_Gen();
#if SMESH_VERSION_MAJOR >= 9
    SMESH_Mesh* mesh = gen->CreateMesh(true);

    StdMeshers_LocalLength* hyp1d = new StdMeshers_LocalLength(0, gen);
    hyp1d->SetLength(1.0);
    StdMeshers_Regular_1D* algo1d = new StdMeshers_Regular_1D(1, gen);

    StdMeshers_QuadranglePreference* hyp2d = new StdMeshers_QuadranglePreference(2, gen);
    StdMeshers_MEFISTO_2D* algo2d = new StdMeshers_MEFISTO_2D(3, gen);
#else
    SMESH_Mesh* mesh = gen->CreateMesh(0, true);

    StdMeshers_LocalLength* hyp1d = new StdMeshers_LocalLength(0, 0, gen);
    hyp1d->SetLength(1.0);
    StdMeshers_Regular_1D* algo1d = new StdMeshers_Regular_1D(1, 0, gen);

    StdMeshers_QuadranglePreference* hyp2d = new StdMeshers_QuadranglePreference(2, 0, gen);
    StdMeshers_MEFISTO_2D* algo2d = new StdMeshers_MEFISTO_2D(3, 0, gen);
#endif

    mesh->ShapeToMesh(box);
    mesh->AddHypothesis(box, 0);
    mesh->AddHypothesis(box, 1);
    mesh->AddHypothesis(box, 2);
    mesh->AddHypothesis(box, 3);

    bool success = gen->Compute(*mesh, box);
    EXPECT_EQ(success, true);

    EXPECT_EQ(mesh->NbNodes(), 1244);
    EXPECT_EQ(mesh->NbTriangles(), 2484);
    EXPECT_EQ(mesh->NbQuadrangles(), 0);

    delete hyp1d;
    delete algo1d;
    delete hyp2d;
    delete algo2d;
    delete mesh;
    delete gen;
}

TEST_F(SMesh, testStdMeshers)
{
    TopoDS_Solid box = BRepPrimAPI_MakeBox(10.0, 10.0, 10.0).Solid();

    TopExp_Explorer exp = TopExp_Explorer(box, TopAbs_EDGE);
    const TopoDS_Shape& edge = exp.Current();

    SMESH_Gen* gen = new SMESH_Gen();
#if SMESH_VERSION_MAJOR >= 9
    SMESH_Mesh* mesh = gen->CreateMesh(true);

    StdMeshers_LocalLength* hyp1d = new StdMeshers_LocalLength(0, gen);
    hyp1d->SetLength(0.1);
    StdMeshers_Regular_1D* algo1d = new StdMeshers_Regular_1D(1, gen);
#else
    SMESH_Mesh* mesh = gen->CreateMesh(0, true);

    StdMeshers_LocalLength* hyp1d = new StdMeshers_LocalLength(0, 0, gen);
    hyp1d->SetLength(0.1);
    StdMeshers_Regular_1D* algo1d = new StdMeshers_Regular_1D(1, 0, gen);
#endif

    mesh->ShapeToMesh(box);
    mesh->AddHypothesis(edge, 0);
    mesh->AddHypothesis(edge, 1);

    bool success = gen->Compute(*mesh, box);
    EXPECT_EQ(success, true);

    EXPECT_EQ(mesh->NbNodes(), 107);

    delete hyp1d;
    delete algo1d;
    delete mesh;
    delete gen;
}
// NOLINTEND