From db40157b0f8ba0cd2b0e53e891f6270e899762dd Mon Sep 17 00:00:00 2001 From: Bart Janssens Date: Wed, 20 Jul 2016 00:46:48 +0200 Subject: [PATCH 1/2] Install missing headers --- CMakeLists.txt | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 44d785c..bbec8a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,22 +79,22 @@ if(CARVE_SYSTEM_BOOST) set(CARVE_SYSTEM_BOOST OFF) endif(Boost_FOUND) endif(CARVE_SYSTEM_BOOST) - + if(CARVE_BOOST_COLLECTIONS) set(HAVE_BOOST_UNORDERED_COLLECTIONS TRUE) else(CARVE_BOOST_COLLECTIONS) # attempt to work out which unordered collection implementation we can use try_compile(_HAVE_STD_UNORDERED_COLLECTIONS - ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR} "${carve_SOURCE_DIR}/cmake/test_std_unordered.cpp" OUTPUT_VARIABLE OUTPUT) try_compile(_HAVE_TR1_UNORDERED_COLLECTIONS - ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR} "${carve_SOURCE_DIR}/cmake/test_tr1_unordered.cpp" OUTPUT_VARIABLE OUTPUT) try_compile(_HAVE_LIBSTDCPP_UNORDERED_COLLECTIONS - ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR} "${carve_SOURCE_DIR}/cmake/test_libstdcpp_unordered.cpp" OUTPUT_VARIABLE OUTPUT) @@ -134,20 +134,20 @@ if(CARVE_WITH_GUI) if(WIN32) add_definitions(-DGLEW_STATIC) endif(WIN32) - add_subdirectory(external/GLEW) + add_subdirectory(external/GLEW) endif(GLEW_FOUND) if(WIN32) add_definitions(-DGLUI_NO_LIB_PRAGMA) add_definitions(-DGLUI_USE_STATIC_LIB) endif(WIN32) - add_subdirectory(external/GLUI) + add_subdirectory(external/GLUI) endif(NOT OPENGL_FOUND) endif(CARVE_WITH_GUI) -add_subdirectory(external/GLOOP) +add_subdirectory(external/GLOOP) if (CARVE_GTEST_TESTS) add_subdirectory(external/gtest-1.5.0) @@ -161,13 +161,22 @@ add_definitions(-DCMAKE_BUILD) include_directories(${carve_BINARY_DIR}/include) -add_subdirectory(lib) -add_subdirectory(include) -add_subdirectory(common) -add_subdirectory(src) -add_subdirectory(examples) -add_subdirectory(tests) - +add_subdirectory(lib) +add_subdirectory(include) +add_subdirectory(common) +add_subdirectory(src) +add_subdirectory(examples) +add_subdirectory(tests) + +install( + FILES + ${carve_BINARY_DIR}/include/carve/config.h + ${carve_SOURCE_DIR}/include/carve/gnu_cxx.h + DESTINATION + include/carve + COMPONENT + Devel +) include(CTest) From 1fa2d9ea879d981ac3b110d5d29adfa8f85da6b3 Mon Sep 17 00:00:00 2001 From: Bart Janssens Date: Tue, 26 Jul 2016 22:52:11 +0200 Subject: [PATCH 2/2] Fix C++11 std::unordered_map use --- .../carve/collection/unordered/std_impl.hpp | 16 ++ include/carve/exact.hpp | 7 +- include/carve/geom2d.hpp | 36 +-- include/carve/intersection.hpp | 70 +++--- include/carve/mesh_impl.hpp | 3 +- include/carve/mesh_simplify.hpp | 16 +- include/carve/vector.hpp | 3 +- lib/intersect.cpp | 234 +++++++++--------- 8 files changed, 211 insertions(+), 174 deletions(-) diff --git a/include/carve/collection/unordered/std_impl.hpp b/include/carve/collection/unordered/std_impl.hpp index e69e522..caac6e9 100644 --- a/include/carve/collection/unordered/std_impl.hpp +++ b/include/carve/collection/unordered/std_impl.hpp @@ -29,3 +29,19 @@ #include #undef UNORDERED_COLLECTIONS_SUPPORT_RESIZE + +namespace std { + + template + struct hash > : public std::unary_function, size_t> { + size_t operator()(const std::pair &v) const { + std::size_t seed = 0; + + seed ^= hash()(v.first); + seed ^= hash()(v.second) + (seed<<6) + (seed>>2); + + return seed; + } + }; + +} diff --git a/include/carve/exact.hpp b/include/carve/exact.hpp index 26f107c..1ad7d21 100644 --- a/include/carve/exact.hpp +++ b/include/carve/exact.hpp @@ -27,6 +27,7 @@ #include +#include #include #include @@ -154,7 +155,7 @@ namespace carve { double half; double check, lastcheck; int every_other; - + every_other = 1; half = 0.5; epsilon = 1.0; @@ -174,7 +175,7 @@ namespace carve { check = 1.0 + epsilon; } while ((check != 1.0) && (check != lastcheck)); splitter += 1.0; - + /* Error bounds for orientation and incircle tests. */ resulterrbound = (3.0 + 8.0 * epsilon) * epsilon; ccwerrboundA = (3.0 + 16.0 * epsilon) * epsilon; @@ -704,7 +705,7 @@ namespace carve { sum_zeroelim(cdet, ddet, cddet); sum_zeroelim(abdet, cddet, det); - + return det[det.size() - 1]; } diff --git a/include/carve/geom2d.hpp b/include/carve/geom2d.hpp index c945699..376bf14 100644 --- a/include/carve/geom2d.hpp +++ b/include/carve/geom2d.hpp @@ -32,6 +32,8 @@ #include +#include +#include #include #include @@ -62,15 +64,15 @@ namespace carve { typedef std::vector P2Vector; - /** + /** * \brief Return the orientation of c with respect to the ray defined by a->b. * * (Can be implemented exactly) - * - * @param[in] a - * @param[in] b - * @param[in] c - * + * + * @param[in] a + * @param[in] b + * @param[in] c + * * @return positive, if c to the left of a->b. * zero, if c is colinear with a->b. * negative, if c to the right of a->b. @@ -89,15 +91,15 @@ namespace carve { } #endif - /** + /** * \brief Determine whether p is internal to the anticlockwise * angle abc, where b is the apex of the angle. * - * @param[in] a - * @param[in] b - * @param[in] c - * @param[in] p - * + * @param[in] a + * @param[in] b + * @param[in] c + * @param[in] p + * * @return true, if p is contained in the anticlockwise angle from * b->a to b->c. Reflex angles contain p if p lies * on b->a or on b->c. Acute angles do not contain p @@ -118,14 +120,14 @@ namespace carve { } } - /** + /** * \brief Determine whether p is internal to the anticlockwise * angle ac, with apex at (0,0). * - * @param[in] a - * @param[in] c - * @param[in] p - * + * @param[in] a + * @param[in] c + * @param[in] p + * * @return true, if p is contained in a0c. */ inline bool internalToAngle(const P2 &a, diff --git a/include/carve/intersection.hpp b/include/carve/intersection.hpp index aae7169..fcb5d19 100644 --- a/include/carve/intersection.hpp +++ b/include/carve/intersection.hpp @@ -32,10 +32,10 @@ namespace carve { namespace csg { - /** + /** * \class Intersections * \brief Storage for computed intersections between vertices, edges and faces. - * + * */ struct Intersections : public std::unordered_map { typedef carve::mesh::MeshSet<3>::vertex_t vertex_t; @@ -47,9 +47,9 @@ namespace carve { ~Intersections() { } - /** + /** * \brief Record the position of intersection between a pair of intersection objects. - * + * * @param a The first intersecting object. * @param b The second intersecting object. * @param p The point of intersection. @@ -60,19 +60,19 @@ namespace carve { (*this)[b][a] = p; } - /** + /** * \brief Test whether vertex \a v intersects face \a f. - * + * * @param v The vertex to test. * @param f The face to test. - * + * * @return true, if \a v intersects \a f. */ bool intersectsFace(vertex_t *v, face_t *f) const; - /** + /** * \brief Collect sets of vertices, edges and faces that intersect \a obj - * + * * @param[in] obj The intersection object to search for intersections. * @param[out] collect_v A vector of vertices intersecting \a obj. * @param[out] collect_e A vector of edges intersecting \a obj. @@ -84,12 +84,12 @@ namespace carve { std::vector *collect_f) const; - /** + /** * \brief Determine whether two intersection objects intersect. - * + * * @param a The first intersection object. * @param b The second intersection object. - * + * * @return true, if \a a and \a b intersect. */ bool intersectsExactly(const IObj &a, const IObj &b) { @@ -98,12 +98,12 @@ namespace carve { return i->second.find(b) != i->second.end(); } - /** + /** * \brief Determine whether an intersection object intersects a vertex. - * + * * @param a The intersection object. * @param v The vertex. - * + * * @return true, if \a a and \a v intersect. */ bool intersects(const IObj &a, vertex_t *v) { @@ -113,19 +113,23 @@ namespace carve { return false; } - /** + /** * \brief Determine whether an intersection object intersects an edge. - * + * * @param a The intersection object. * @param e The edge. - * + * * @return true, if \a a and \a e intersect (either on the edge, * or at either endpoint). */ bool intersects(const IObj &a, edge_t *e) { Intersections::const_iterator i = find(a); if (i == end()) return false; +#ifdef HAVE_STD_UNORDERED_COLLECTIONS + for (super::mapped_type::const_iterator j = i->second.begin(); j != i->second.end(); ++j) { +#else for (super::data_type::const_iterator j = i->second.begin(); j != i->second.end(); ++j) { +#endif const IObj &obj = j->first; switch (obj.obtype) { case IObj::OBTYPE_VERTEX: @@ -141,12 +145,12 @@ namespace carve { return false; } - /** + /** * \brief Determine whether an intersection object intersects a face. - * + * * @param a The intersection object. * @param f The face. - * + * * @return true, if \a a and \a f intersect (either on the face, * or at any associated edge or vertex). */ @@ -163,12 +167,12 @@ namespace carve { return false; } - /** + /** * \brief Determine whether an edge intersects another edge. - * + * * @param e The edge. * @param f The face. - * + * * @return true, if \a e and \a f intersect. */ bool intersects(edge_t *e1, edge_t *e2) { @@ -176,12 +180,12 @@ namespace carve { return false; } - /** + /** * \brief Determine whether an edge intersects a face. - * + * * @param e The edge. * @param f The face. - * + * * @return true, if \a e and \a f intersect. */ bool intersects(edge_t *e, face_t *f) { @@ -189,9 +193,9 @@ namespace carve { return false; } - /** + /** * \brief Determine the faces intersected by an edge. - * + * * @tparam face_set_t A collection type holding face_t * * @param[in] e The edge. * @param[out] f The resulting set of faces. @@ -213,9 +217,9 @@ namespace carve { f.insert(intersected_faces.begin(), intersected_faces.end()); } - /** + /** * \brief Determine the faces intersected by a vertex. - * + * * @tparam face_set_t A collection type holding face_t * * @param[in] v The vertex. * @param[out] f The resulting set of faces. @@ -237,9 +241,9 @@ namespace carve { f.insert(intersected_faces.begin(), intersected_faces.end()); } - /** + /** * \brief Collect the set of faces that contain all vertices in \a verts. - * + * * @tparam vertex_set_t A collection type holding vertex_t * * @tparam face_set_t A collection type holding face_t * * @param[in] verts A set of vertices. diff --git a/include/carve/mesh_impl.hpp b/include/carve/mesh_impl.hpp index 36c30e6..8dd26db 100644 --- a/include/carve/mesh_impl.hpp +++ b/include/carve/mesh_impl.hpp @@ -30,6 +30,7 @@ #include #include +#include #include namespace carve { @@ -553,7 +554,7 @@ namespace carve { for (size_t i = 0; i < set_size.size(); ++i) { mesh_faces[i].reserve(set_size[i]); } - + for (iter_t i = begin; i != end; ++i) { face_t *face = *i; mesh_faces[index_set[face->id]].push_back(face); diff --git a/include/carve/mesh_simplify.hpp b/include/carve/mesh_simplify.hpp index b914ebb..652a5a9 100644 --- a/include/carve/mesh_simplify.hpp +++ b/include/carve/mesh_simplify.hpp @@ -130,7 +130,7 @@ namespace carve { return e->edge->prev->vert == e->edge->rev->prev->vert; } - bool flippable_DotProd(const EdgeInfo *e) const { + bool flippable_DotProd(const EdgeInfo *e) const { using carve::geom::dot; using carve::geom::cross; @@ -476,7 +476,7 @@ namespace carve { tri_b[0] = fb->edge->vert->v; tri_b[1] = fb->edge->next->vert->v; tri_b[2] = fb->edge->next->next->vert->v; - + if (carve::geom::triangle_intersection_exact(tri_a, tri_b) == carve::geom::TR_TYPE_INT) { ++r; } @@ -765,7 +765,7 @@ namespace carve { vector_t aabb_min, aabb_max; assign_op(aabb_min, v1->v, v2->v, carve::util::min_functor()); assign_op(aabb_max, v1->v, v2->v, carve::util::max_functor()); - + for (size_t i = 0; i < v1_incident.size(); ++i) { assign_op(aabb_min, aabb_min, v1_incident[i]->edge->v1()->v, carve::util::min_functor()); assign_op(aabb_max, aabb_max, v1_incident[i]->edge->v1()->v, carve::util::max_functor()); @@ -1285,7 +1285,11 @@ namespace carve { open.erase(open.begin()); face_set.insert(curr); axes |= axis_influence[curr]; +#ifdef HAVE_STD_UNORDERED_COLLECTIONS + for (interaction_graph_t::mapped_type::iterator i = interacting_faces[curr].begin(), e = interacting_faces[curr].end(); i != e; ++i) { +#else for (interaction_graph_t::data_type::iterator i = interacting_faces[curr].begin(), e = interacting_faces[curr].end(); i != e; ++i) { +#endif face_t *f = *i; if (face_set.find(f) != face_set.end()) continue; open.insert(f); @@ -1323,7 +1327,7 @@ namespace carve { if (grid) { carve::geom::vector<3> v_best = vert->v; double d_best = 0.0; - + for (size_t axes = 0; axes < 8; ++axes) { carve::geom::vector<3> v = vert->v; for (size_t N = 0; N < 3; ++N) { @@ -1398,8 +1402,8 @@ namespace carve { return modifications; } - - + + size_t removeFins(mesh_t *mesh) { size_t n_removed = 0; for (size_t i = 0; i < mesh->faces.size(); ++i) { diff --git a/include/carve/vector.hpp b/include/carve/vector.hpp index 64facf5..df23dd9 100644 --- a/include/carve/vector.hpp +++ b/include/carve/vector.hpp @@ -31,6 +31,7 @@ #include #include +#include #include #include @@ -64,7 +65,7 @@ namespace carve { }; - + struct vec_adapt_pair_first { template const Vector &operator()(const pair_t &v) const { return v.first; } template Vector &operator()(pair_t &v) const { return v.first; } diff --git a/lib/intersect.cpp b/lib/intersect.cpp index 233812e..1717ac9 100644 --- a/lib/intersect.cpp +++ b/lib/intersect.cpp @@ -99,12 +99,12 @@ static carve::mesh::MeshSet<3> *faceLoopsToPolyhedron(const carve::csg::FaceLoop #endif namespace { - /** + /** * \brief Sort a range [\a beg, \a end) of vertices in order of increasing dot product of vertex - \a base on \dir. - * + * * @tparam[in] T a forward iterator type. * @param[in] dir The direction in which to sort vertices. - * @param[in] base + * @param[in] base * @param[in] beg The start of the vertex range to sort. * @param[in] end The end of the vertex range to sort. * @param[out] out The sorted vertex result. @@ -121,14 +121,14 @@ namespace { std::vector::vertex_t *> > ordered_vertices; ordered_vertices.reserve(std::distance(beg, end)); - + for (; beg != end; ++beg) { carve::mesh::MeshSet<3>::vertex_t *v = *beg; ordered_vertices.push_back(std::make_pair(carve::geom::dot(v->v - base, dir), v)); } - + std::sort(ordered_vertices.begin(), ordered_vertices.end()); - + out.clear(); out.reserve(ordered_vertices.size()); for (DVVector::const_iterator @@ -148,7 +148,7 @@ namespace { DVVector ordered_vertices; ordered_vertices.reserve(std::distance(beg, end)); - + for (; beg != end; ++beg) { carve::mesh::MeshSet<3>::vertex_t *v = (*beg).first; double ovec = 0.0; @@ -172,13 +172,13 @@ namespace { - /** - * - * - * @param dir - * @param base - * @param beg - * @param end + /** + * + * + * @param dir + * @param base + * @param beg + * @param end */ template void selectOrderingProjection(iter_t beg, const iter_t end, @@ -302,12 +302,12 @@ namespace { - /** + /** * \brief Populate a collection with the faces adjoining an edge. - * + * * @tparam face_set_t A collection type. * @param e The edge for which to collect adjoining faces. - * @param faces + * @param faces */ template inline void facesForVertex(carve::mesh::MeshSet<3>::vertex_t *v, @@ -315,18 +315,22 @@ namespace { face_set_t &faces) { carve::csg::detail::VEVecMap::const_iterator vi = ve.find(v); if (vi != ve.end()) { +#ifdef HAVE_STD_UNORDERED_COLLECTIONS + for (carve::csg::detail::VEVecMap::mapped_type::const_iterator i = (*vi).second.begin(); i != (*vi).second.end(); ++i) { +#else for (carve::csg::detail::VEVecMap::data_type::const_iterator i = (*vi).second.begin(); i != (*vi).second.end(); ++i) { +#endif faces.insert((*i)->face); } } } - /** + /** * \brief Populate a collection with the faces adjoining an edge. - * + * * @tparam face_set_t A collection type. * @param e The edge for which to collect adjoining faces. - * @param faces + * @param faces */ template inline void facesForEdge(carve::mesh::MeshSet<3>::edge_t *e, @@ -334,12 +338,12 @@ namespace { faces.insert(e->face); } - /** + /** * \brief Populate a collection with the faces adjoining a face. - * + * * @tparam face_set_t A collection type. * @param f The face for which to collect adjoining faces. - * @param faces + * @param faces */ template inline void facesForFace(carve::mesh::MeshSet<3>::face_t *f, @@ -347,12 +351,12 @@ namespace { faces.insert(f); } - /** + /** * \brief Populate a collection with the faces adjoining an intersection object. - * + * * @tparam face_set_t A collection type holding const carve::poly::Polyhedron::face_t *. * @param obj The intersection object for which to collect adjoining faces. - * @param faces + * @param faces */ template void facesForObject(const carve::csg::IObj &obj, @@ -456,7 +460,7 @@ void carve::csg::CSG::Hooks::reset() { carve::csg::CSG::Hooks::Hooks() : hooks() { hooks.resize(HOOK_MAX); } - + carve::csg::CSG::Hooks::~Hooks() { reset(); } @@ -553,7 +557,7 @@ void carve::csg::CSG::groupIntersections() { static carve::TimingName GROUP_INTERSECTONS("groupIntersections()"); carve::TimingBlock block(GROUP_INTERSECTONS); - + std::vector vertices; detail::VVSMap graph; #if defined(CARVE_DEBUG) @@ -565,7 +569,7 @@ void carve::csg::CSG::groupIntersections() { i = vertex_intersections.begin(), e = vertex_intersections.end(); i != e; - ++i) + ++i) { vertices.push_back((*i).first); } @@ -575,10 +579,10 @@ void carve::csg::CSG::groupIntersections() { vertex_intersections_octree.setBounds(aabb); vertex_intersections_octree.addVertices(vertices); - + std::vector out; for (size_t i = 0, l = vertices.size(); i != l; ++i) { - // let's find all the vertices near this one. + // let's find all the vertices near this one. out.clear(); vertex_intersections_octree.findVerticesNearAllowDupes(vertices[i]->v, out); @@ -648,7 +652,11 @@ void carve::csg::CSG::intersectingFacePairs(detail::Data &data) { detail::VFSMap::mapped_type src_face_set; detail::VFSMap::mapped_type tgt_face_set; // for all pairs of intersecting objects at this point +#ifdef HAVE_STD_UNORDERED_COLLECTIONS + for (VertexIntersections::mapped_type::const_iterator j = (*i).second.begin(), je = (*i).second.end(); j != je; ++j) { +#else for (VertexIntersections::data_type::const_iterator j = (*i).second.begin(), je = (*i).second.end(); j != je; ++j) { +#endif const IObj &i_src = ((*j).first); const IObj &i_tgt = ((*j).second); @@ -929,7 +937,7 @@ void carve::csg::CSG::generateIntersectionCandidates(meshset_t *a, if (carve::rangeSeparation(a_rb, b_rb) > carve::EPSILON) continue; if (!facesAreCoplanar(fa, fb)) { - face_pairs[fa].push_back(fb); + face_pairs[fa].push_back(fb); face_pairs[fb].push_back(fa); } } @@ -1023,9 +1031,9 @@ carve::csg::CSG::CSG() { -/** +/** * \brief For each intersected edge, decompose into a set of vertex pairs representing an ordered set of edge fragments. - * + * * @tparam[in,out] data Internal intersection data. data.emap is used to produce data.divided_edges. */ void carve::csg::CSG::divideIntersectedEdges(detail::Data &data) { @@ -1222,10 +1230,10 @@ void carve::csg::CSG::makeFaceEdges(carve::csg::EdgeClassification &eclass, -/** - * - * - * @param fll +/** + * + * + * @param fll */ static void checkFaceLoopIntegrity(carve::csg::FaceLoopList &fll) { static carve::TimingName FUNC_NAME("CSG::checkFaceLoopIntegrity()"); @@ -1256,18 +1264,18 @@ static void checkFaceLoopIntegrity(carve::csg::FaceLoopList &fll) { -/** - * - * - * @param a - * @param b - * @param vclass - * @param eclass - * @param a_face_loops - * @param b_face_loops - * @param a_edge_count - * @param b_edge_count - * @param hooks +/** + * + * + * @param a + * @param b + * @param vclass + * @param eclass + * @param a_face_loops + * @param b_face_loops + * @param a_edge_count + * @param b_edge_count + * @param hooks */ void carve::csg::CSG::calc(meshset_t *a, const face_rtree_t *a_rtree, @@ -1379,14 +1387,14 @@ void carve::csg::CSG::calc(meshset_t *a, -/** - * - * - * @param shared_edges - * @param result_list - * @param shared_edge_ptr +/** + * + * + * @param shared_edges + * @param result_list + * @param shared_edge_ptr */ -void returnSharedEdges(carve::csg::V2Set &shared_edges, +void returnSharedEdges(carve::csg::V2Set &shared_edges, std::list *> &result_list, carve::csg::V2Set *shared_edge_ptr) { // need to convert shared edges to point into result @@ -1402,7 +1410,7 @@ void returnSharedEdges(carve::csg::V2Set &shared_edges, } } } - for (carve::csg::V2Set::iterator it = shared_edges.begin(); + for (carve::csg::V2Set::iterator it = shared_edges.begin(); it != shared_edges.end(); it++) { remap_type::iterator first_it = remap.find(((*it).first)->v); remap_type::iterator second_it = remap.find(((*it).second)->v); @@ -1413,17 +1421,17 @@ void returnSharedEdges(carve::csg::V2Set &shared_edges, -/** - * - * - * @param a - * @param b - * @param collector - * @param hooks - * @param shared_edges_ptr - * @param classify_type - * - * @return +/** + * + * + * @param a + * @param b + * @param collector + * @param hooks + * @param shared_edges_ptr + * @param classify_type + * + * @return */ carve::mesh::MeshSet<3> *carve::csg::CSG::compute(meshset_t *a, meshset_t *b, @@ -1464,7 +1472,7 @@ carve::mesh::MeshSet<3> *carve::csg::CSG::compute(meshset_t *a, makeEdgeMap(b_face_loops, b_edge_count, b_edge_map); } - + { static carve::TimingName FUNC_NAME("CSG::compute - sortFaceLoopLists()"); carve::TimingBlock block(FUNC_NAME); @@ -1473,7 +1481,7 @@ carve::mesh::MeshSet<3> *carve::csg::CSG::compute(meshset_t *a, } V2Set shared_edges; - + { static carve::TimingName FUNC_NAME("CSG::compute - findSharedEdges()"); carve::TimingBlock block(FUNC_NAME); @@ -1554,17 +1562,17 @@ carve::mesh::MeshSet<3> *carve::csg::CSG::compute(meshset_t *a, -/** - * - * - * @param a - * @param b - * @param op - * @param hooks - * @param shared_edges - * @param classify_type - * - * @return +/** + * + * + * @param a + * @param b + * @param op + * @param hooks + * @param shared_edges + * @param classify_type + * + * @return */ carve::mesh::MeshSet<3> *carve::csg::CSG::compute(meshset_t *a, meshset_t *b, @@ -1575,7 +1583,7 @@ carve::mesh::MeshSet<3> *carve::csg::CSG::compute(meshset_t *a, if (!coll) return NULL; meshset_t *result = compute(a, b, *coll, shared_edges, classify_type); - + delete coll; return result; @@ -1583,17 +1591,17 @@ carve::mesh::MeshSet<3> *carve::csg::CSG::compute(meshset_t *a, -/** - * - * - * @param closed - * @param open - * @param FaceClass - * @param result - * @param hooks - * @param shared_edges_ptr - * - * @return +/** + * + * + * @param closed + * @param open + * @param FaceClass + * @param result + * @param hooks + * @param shared_edges_ptr + * + * @return */ bool carve::csg::CSG::sliceAndClassify(meshset_t *closed, meshset_t *open, @@ -1622,11 +1630,11 @@ bool carve::csg::CSG::sliceAndClassify(meshset_t *closed, makeEdgeMap(a_face_loops, a_edge_count, a_edge_map); makeEdgeMap(b_face_loops, b_edge_count, b_edge_map); - + carve::csg::V2Set shared_edges; - + findSharedEdges(a_edge_map, b_edge_map, shared_edges); - + groupFaceLoops(closed, a_face_loops, a_edge_map, shared_edges, a_loops_grouped); groupFaceLoops(open, b_face_loops, b_edge_map, shared_edges, b_loops_grouped); @@ -1654,15 +1662,15 @@ bool carve::csg::CSG::sliceAndClassify(meshset_t *closed, -/** - * - * - * @param a - * @param b - * @param a_sliced - * @param b_sliced - * @param hooks - * @param shared_edges_ptr +/** + * + * + * @param a + * @param b + * @param a_sliced + * @param b_sliced + * @param hooks + * @param shared_edges_ptr */ void carve::csg::CSG::slice(meshset_t *a, meshset_t *b, @@ -1688,14 +1696,14 @@ void carve::csg::CSG::slice(meshset_t *a, detail::LoopEdges a_edge_map; detail::LoopEdges b_edge_map; - + makeEdgeMap(a_face_loops, a_edge_count, a_edge_map); makeEdgeMap(b_face_loops, b_edge_count, b_edge_map); - + carve::csg::V2Set shared_edges; - + findSharedEdges(a_edge_map, b_edge_map, shared_edges); - + groupFaceLoops(a, a_face_loops, a_edge_map, shared_edges, a_loops_grouped); groupFaceLoops(b, b_face_loops, b_edge_map, shared_edges, b_loops_grouped); @@ -1728,9 +1736,9 @@ void carve::csg::CSG::slice(meshset_t *a, -/** - * - * +/** + * + * */ void carve::csg::CSG::init() { intersections.clear();