diff --git a/src/Mod/Mesh/.gitattributes b/src/Mod/Mesh/.gitattributes deleted file mode 100644 index b53efa0b73..0000000000 --- a/src/Mod/Mesh/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -GTSAlgos.cpp export-ignore -GTSAlgos.h export-ignore diff --git a/src/Mod/Mesh/App/MeshPy.xml b/src/Mod/Mesh/App/MeshPy.xml index 1c955f5079..f565f11ab8 100644 --- a/src/Mod/Mesh/App/MeshPy.xml +++ b/src/Mod/Mesh/App/MeshPy.xml @@ -98,11 +98,6 @@ lines = mesh.section(mesh2, [ConnectLines=True, MinDist=0.0001]) - - - Coarse the mesh - - Apply a translation to the mesh diff --git a/src/Mod/Mesh/App/MeshPyImp.cpp b/src/Mod/Mesh/App/MeshPyImp.cpp index 1f4422e008..0045de4c49 100644 --- a/src/Mod/Mesh/App/MeshPyImp.cpp +++ b/src/Mod/Mesh/App/MeshPyImp.cpp @@ -593,15 +593,6 @@ PyObject* MeshPy::section(PyObject* args, PyObject* kwds) return Py::new_reference_to(outer); } -PyObject* MeshPy::coarsen(PyObject* args) -{ - if (!PyArg_ParseTuple(args, "")) { - return nullptr; - } - PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented"); - return nullptr; -} - PyObject* MeshPy::translate(PyObject* args) { float x {}; diff --git a/src/Mod/Mesh/App/PreCompiled.h b/src/Mod/Mesh/App/PreCompiled.h index b8f33e88c2..4d4317c9d0 100644 --- a/src/Mod/Mesh/App/PreCompiled.h +++ b/src/Mod/Mesh/App/PreCompiled.h @@ -46,9 +46,6 @@ #include #include -#ifdef FC_USE_GTS -#include -#endif // STL #include #include diff --git a/src/Mod/Mesh/Gui/PreCompiled.h b/src/Mod/Mesh/Gui/PreCompiled.h index 6c31c3511c..57b27a3171 100644 --- a/src/Mod/Mesh/Gui/PreCompiled.h +++ b/src/Mod/Mesh/Gui/PreCompiled.h @@ -37,11 +37,6 @@ #ifdef _PreComp_ -// Gts -#ifdef FC_USE_GTS -#include -#endif - // standard #include #include diff --git a/src/Mod/MeshPart/App/CurveProjector.h b/src/Mod/MeshPart/App/CurveProjector.h index e7d99100ed..f2c84e4c2b 100644 --- a/src/Mod/MeshPart/App/CurveProjector.h +++ b/src/Mod/MeshPart/App/CurveProjector.h @@ -23,10 +23,6 @@ #ifndef _CurveProjector_h_ #define _CurveProjector_h_ -#ifdef FC_USE_GTS -#include -#endif - #include #include diff --git a/src/Mod/MeshPart/App/MeshAlgos.cpp b/src/Mod/MeshPart/App/MeshAlgos.cpp index 3309481dbf..96c5169d5e 100644 --- a/src/Mod/MeshPart/App/MeshAlgos.cpp +++ b/src/Mod/MeshPart/App/MeshAlgos.cpp @@ -144,250 +144,6 @@ void MeshAlgos::offsetSpecial(MeshCore::MeshKernel* Mesh, float fSize, float zma } } - -void MeshAlgos::coarsen(MeshCore::MeshKernel* /*Mesh*/, float /*f*/) -{ -#ifdef FC_USE_GTS - GtsSurface* surface; - - // create a GTS surface - surface = MeshAlgos::createGTSSurface(Mesh); - - Mesh->Clear(); - - guint stop_number = 100000; - gdouble fold = 3.1415 / 180.; - - gts_surface_coarsen(surface, - NULL, - NULL, - NULL, - NULL, - (GtsStopFunc)gts_coarsen_stop_number, - &stop_number, - fold); - - // get the standard mesh - fillMeshFromGTSSurface(Mesh, surface); -#endif -} - - -MeshCore::MeshKernel* MeshAlgos::boolean(MeshCore::MeshKernel* pMesh1, - MeshCore::MeshKernel* /*pMesh2*/, - MeshCore::MeshKernel* /*pResult*/, - int /*Type*/) -{ -#ifdef FC_USE_GTS - GtsSurface *s1, *s2, *s3; - GtsSurfaceInter* si; - GNode *tree1, *tree2; - gboolean check_self_intersection = false; - gboolean closed = true, is_open1, is_open2; - - - // create a GTS surface - s1 = MeshAlgos::createGTSSurface(pMesh1); - s2 = MeshAlgos::createGTSSurface(pMesh2); - - /* check that the surfaces are orientable manifolds */ - if (!gts_surface_is_orientable(s1)) { - gts_object_destroy(GTS_OBJECT(s1)); - gts_object_destroy(GTS_OBJECT(s2)); - throw std::runtime_error("surface 1 is not an orientable manifold\n"); - } - if (!gts_surface_is_orientable(s2)) { - gts_object_destroy(GTS_OBJECT(s1)); - gts_object_destroy(GTS_OBJECT(s2)); - throw std::runtime_error("surface 2 is not an orientable manifold\n"); - } - - /* check that the surfaces are not self-intersecting */ - if (check_self_intersection) { - GtsSurface* self_intersects; - - self_intersects = gts_surface_is_self_intersecting(s1); - if (self_intersects != NULL) { - gts_object_destroy(GTS_OBJECT(self_intersects)); - gts_object_destroy(GTS_OBJECT(s1)); - gts_object_destroy(GTS_OBJECT(s2)); - throw std::runtime_error("surface is self-intersecting\n"); - } - self_intersects = gts_surface_is_self_intersecting(s2); - if (self_intersects != NULL) { - gts_object_destroy(GTS_OBJECT(self_intersects)); - gts_object_destroy(GTS_OBJECT(s1)); - gts_object_destroy(GTS_OBJECT(s2)); - throw std::runtime_error("surface is self-intersecting\n"); - } - } - - /* build bounding box tree for first surface */ - tree1 = gts_bb_tree_surface(s1); - is_open1 = gts_surface_volume(s1) < 0. ? true : false; - - /* build bounding box tree for second surface */ - tree2 = gts_bb_tree_surface(s2); - is_open2 = gts_surface_volume(s2) < 0. ? true : false; - - si = gts_surface_inter_new(gts_surface_inter_class(), s1, s2, tree1, tree2, is_open1, is_open2); - g_assert(gts_surface_inter_check(si, &closed)); - if (!closed) { - gts_object_destroy(GTS_OBJECT(s1)); - gts_object_destroy(GTS_OBJECT(s2)); - gts_bb_tree_destroy(tree1, true); - gts_bb_tree_destroy(tree2, true); - throw "the intersection of 1 and 2 is not a closed curve\n"; - } - - s3 = gts_surface_new(gts_surface_class(), - gts_face_class(), - gts_edge_class(), - gts_vertex_class()); - if (Type == 0) { // union - gts_surface_inter_boolean(si, s3, GTS_1_OUT_2); - gts_surface_inter_boolean(si, s3, GTS_2_OUT_1); - } - else if (Type == 1) { // inter - gts_surface_inter_boolean(si, s3, GTS_1_IN_2); - gts_surface_inter_boolean(si, s3, GTS_2_IN_1); - } - else if (Type == 2) { // diff - gts_surface_inter_boolean(si, s3, GTS_1_OUT_2); - gts_surface_inter_boolean(si, s3, GTS_2_IN_1); - gts_surface_foreach_face(si->s2, (GtsFunc)gts_triangle_revert, NULL); - gts_surface_foreach_face(s2, (GtsFunc)gts_triangle_revert, NULL); - } - else if (Type == 3) { // cut inner - gts_surface_inter_boolean(si, s3, GTS_1_IN_2); - } - else if (Type == 4) { // cut outer - gts_surface_inter_boolean(si, s3, GTS_1_OUT_2); - } - - // check that the resulting surface is not self-intersecting - if (check_self_intersection) { - GtsSurface* self_intersects; - - self_intersects = gts_surface_is_self_intersecting(s3); - if (self_intersects != NULL) { - gts_object_destroy(GTS_OBJECT(self_intersects)); - gts_object_destroy(GTS_OBJECT(s1)); - gts_object_destroy(GTS_OBJECT(s2)); - gts_object_destroy(GTS_OBJECT(s3)); - gts_object_destroy(GTS_OBJECT(si)); - gts_bb_tree_destroy(tree1, true); - gts_bb_tree_destroy(tree2, true); - throw std::runtime_error("the resulting surface is self-intersecting\n"); - } - } - // display summary information about the resulting surface - // if (verbose) - // gts_surface_print_stats (s3, stderr); - // write resulting surface to standard output - - // get the standard mesh - fillMeshFromGTSSurface(pResult, s3); - - - // destroy surfaces - gts_object_destroy(GTS_OBJECT(s1)); - gts_object_destroy(GTS_OBJECT(s2)); - -#endif - return pMesh1; -} - - -#ifdef FC_USE_GTS - - -/// helper function - construct a Edge out of two Vertexes if not already there -static GtsEdge* new_edge(GtsVertex* v1, GtsVertex* v2) -{ - GtsSegment* s = gts_vertices_are_connected(v1, v2); - if (s == NULL) { - return gts_edge_new(gts_edge_class(), v1, v2); - } - else { - return GTS_EDGE(s); - } -} - - -GtsSurface* MeshAlgos::createGTSSurface(MeshCore::MeshKernel* Mesh) -{ - GtsSurface* Surf = gts_surface_new(gts_surface_class(), - gts_face_class(), - gts_edge_class(), - gts_vertex_class()); - - unsigned long p1, p2, p3; - Base::Vector3f Vertex; - - - // Getting all the points - GtsVertex** aVertex = (GtsVertex**)malloc(Mesh->CountPoints() * sizeof(GtsVertex*)); - for (unsigned int PIter = 0; PIter < Mesh->CountPoints(); PIter++) { - Vertex = Mesh->GetPoint(PIter); - aVertex[PIter] = gts_vertex_new(gts_vertex_class(), Vertex.x, Vertex.y, Vertex.z); - } - - // cycling through the facets - for (unsigned int pFIter = 0; pFIter < Mesh->CountFacets(); pFIter++) { - // getting the three points of the facet - Mesh->GetFacetPoints(pFIter, p1, p2, p3); - - // creating the edges and add the face to the surface - gts_surface_add_face(Surf, - gts_face_new(Surf->face_class, - new_edge(aVertex[p1], aVertex[p2]), - new_edge(aVertex[p2], aVertex[p3]), - new_edge(aVertex[p3], aVertex[p1]))); - } - - Base::Console().Log("GTS [%d faces, %d Points, %d Edges,%s ,%s]\n", - gts_surface_face_number(Surf), - gts_surface_vertex_number(Surf), - gts_surface_edge_number(Surf), - gts_surface_is_orientable(Surf) ? "orientable" : "not orientable", - gts_surface_is_self_intersecting(Surf) ? "self-intersections" - : "no self-intersection"); - - return Surf; -} - -/// helper function for the face (triangle iteration -static void onFaces(GtsTriangle* t, std::vector* VAry) -{ - GtsVertex *mv0, *mv1, *mv2; - - gts_triangle_vertices(t, &mv0, &mv1, &mv2); - - VAry->push_back(MeshGeomFacet(Base::Vector3f(mv0->p.x, mv0->p.y, mv0->p.z), - Base::Vector3f(mv1->p.x, mv1->p.y, mv1->p.z), - Base::Vector3f(mv2->p.x, mv2->p.y, mv2->p.z))); -} - - -void MeshAlgos::fillMeshFromGTSSurface(MeshCore::MeshKernel* pMesh, GtsSurface* pSurface) -{ - std::vector VAry; - - // remove old mesh - pMesh->Clear(); - - gts_surface_foreach_face(pSurface, (GtsFunc)onFaces, &VAry); - - // destroy surfaces - gts_object_destroy(GTS_OBJECT(pSurface)); - - // put the facets the simple way in the mesh, totp is recalculated! - (*pMesh) = VAry; -} - -#endif - #include #include #include diff --git a/src/Mod/MeshPart/App/MeshAlgos.h b/src/Mod/MeshPart/App/MeshAlgos.h index 5a0412be20..cca7065c9a 100644 --- a/src/Mod/MeshPart/App/MeshAlgos.h +++ b/src/Mod/MeshPart/App/MeshAlgos.h @@ -23,10 +23,6 @@ #ifndef _MeshAlgos_h_ #define _MeshAlgos_h_ -#ifdef FC_USE_GTS -#include -#endif - #include #include "CurveProjector.h" @@ -56,10 +52,6 @@ public: static void offsetSpecial2(MeshCore::MeshKernel* Mesh, float fSize); static void offsetSpecial(MeshCore::MeshKernel* Mesh, float fSize, float zmax, float zmin); - /** Coarsen the mesh - */ - static void coarsen(MeshCore::MeshKernel* Mesh, float f); - /** makes a boolean add * The int Type stears the boolean oberation: 0=add;1=intersection;2=diff */ @@ -68,18 +60,6 @@ public: MeshCore::MeshKernel* pResult, int Type = 0); -#ifdef FC_USE_GTS - - /** Creates a GTS Surface from a MeshKernel - */ - static GtsSurface* createGTSSurface(MeshCore::MeshKernel* Mesh); - - /** Creates a GTS Surface from a MeshKernel - */ - - static void fillMeshFromGTSSurface(MeshCore::MeshKernel* pMesh, GtsSurface* pSurface); -#endif - static void cutByShape(const TopoDS_Shape& aShape, const MeshCore::MeshKernel* pMesh, MeshCore::MeshKernel* pToolMesh);