Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/carve/lib/intersect_classify_group.cpp')
-rw-r--r--extern/carve/lib/intersect_classify_group.cpp220
1 files changed, 0 insertions, 220 deletions
diff --git a/extern/carve/lib/intersect_classify_group.cpp b/extern/carve/lib/intersect_classify_group.cpp
deleted file mode 100644
index b1b19a2eb15..00000000000
--- a/extern/carve/lib/intersect_classify_group.cpp
+++ /dev/null
@@ -1,220 +0,0 @@
-// Begin License:
-// Copyright (C) 2006-2014 Tobias Sargeant (tobias.sargeant@gmail.com).
-// All rights reserved.
-//
-// This file is part of the Carve CSG Library (http://carve-csg.com/)
-//
-// This file may be used under the terms of either the GNU General
-// Public License version 2 or 3 (at your option) as published by the
-// Free Software Foundation and appearing in the files LICENSE.GPL2
-// and LICENSE.GPL3 included in the packaging of this file.
-//
-// This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
-// INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE.
-// End:
-
-
-#if defined(HAVE_CONFIG_H)
-# include <carve_config.h>
-#endif
-
-#include <carve/csg.hpp>
-#include <carve/debug_hooks.hpp>
-
-#include <list>
-#include <set>
-#include <iostream>
-
-#include <algorithm>
-
-#include "intersect_common.hpp"
-#include "intersect_classify_common.hpp"
-#include "intersect_classify_common_impl.hpp"
-
-
-namespace carve {
- namespace csg {
-
- namespace {
-
-#if defined(_MSC_VER) && _MSC_VER < 1300
- // VC++ 6.0 gets an internal compiler when compiling
- // the FaceMaker template. Not sure why but for now we just bypass
- // the template
- class FaceMaker0 {
- public:
- CSG::Collector &collector;
- CSG::Hooks &hooks;
-
- FaceMaker0(CSG::Collector &c, CSG::Hooks &h) : collector(c), hooks(h) {
- }
- bool pointOn(VertexClassification &vclass, FaceLoop *f, size_t index) const {
- return vclass[f->vertices[index]].cls[1] == POINT_ON;
- }
- void explain(FaceLoop *f, size_t index, PointClass pc) const {
-#if defined(CARVE_DEBUG)
- std::cerr << "face loop " << f << " from poly " << "ab"[0] << " is easy because vertex " << index << " (" << *f->vertices[index] << ") is " << ENUM(pc) << std::endl;
-#endif
- }
- };
- class FaceMaker1 {
- public:
- CSG::Collector &collector;
- CSG::Hooks &hooks;
-
- FaceMaker1(CSG::Collector &c, CSG::Hooks &h) : collector(c), hooks(h) {
- }
- bool pointOn(VertexClassification &vclass, FaceLoop *f, size_t index) const {
- return vclass[f->vertices[index]].cls[0] == POINT_ON;
- }
- void explain(FaceLoop *f, size_t index, PointClass pc) const {
-#if defined(CARVE_DEBUG)
- std::cerr << "face loop " << f << " from poly " << "ab"[1] << " is easy because vertex " << index << " (" << *f->vertices[index] << ") is " << ENUM(pc) << std::endl;
-#endif
- }
- };
-#else
- template <int poly_num>
- class FaceMaker {
- FaceMaker &operator=(const FaceMaker &);
-
- public:
- CSG::Collector &collector;
- CSG::Hooks &hooks;
-
- FaceMaker(CSG::Collector &c, CSG::Hooks &h) : collector(c), hooks(h) {
- }
-
- bool pointOn(VertexClassification &vclass, FaceLoop *f, size_t index) const {
- return vclass[f->vertices[index]].cls[1 - poly_num] == POINT_ON;
- }
-
- void explain(FaceLoop *f, size_t index, PointClass pc) const {
-#if defined(CARVE_DEBUG)
- std::cerr << "face loop " << f << " from poly " << "ab"[poly_num] << " is easy because vertex " << index << " (" << f->vertices[index]->v << ") is " << ENUM(pc) << std::endl;
-#endif
- }
- };
- typedef FaceMaker<0> FaceMaker0;
- typedef FaceMaker<1> FaceMaker1;
-#endif
- class ClassifyFaceGroups {
- ClassifyFaceGroups &operator=(const ClassifyFaceGroups &);
-
- public:
- CSG::Collector &collector;
- CSG::Hooks &hooks;
-
- ClassifyFaceGroups(CSG::Collector &c, CSG::Hooks &h) : collector(c), hooks(h) {
- }
-
- void classifySimple(FLGroupList &a_loops_grouped,
- FLGroupList &b_loops_grouped,
- VertexClassification & /* vclass */,
- carve::mesh::MeshSet<3> *poly_a,
- carve::mesh::MeshSet<3> *poly_b) const {
- if (a_loops_grouped.size() < b_loops_grouped.size()) {
- performClassifySimpleOnFaceGroups(a_loops_grouped, b_loops_grouped, poly_a, poly_b, collector, hooks);
- } else {
- performClassifySimpleOnFaceGroups(b_loops_grouped, a_loops_grouped, poly_b, poly_a, collector, hooks);
- }
-#if defined(CARVE_DEBUG)
- std::cerr << "after removal of simple on groups: " << a_loops_grouped.size() << " a groups" << std::endl;
- std::cerr << "after removal of simple on groups: " << b_loops_grouped.size() << " b groups" << std::endl;
-#endif
- }
-
- void classifyEasy(FLGroupList &a_loops_grouped,
- FLGroupList &b_loops_grouped,
- VertexClassification &vclass,
- carve::mesh::MeshSet<3> *poly_a,
- const carve::geom::RTreeNode<3, carve::mesh::Face<3> *> *poly_a_rtree,
- carve::mesh::MeshSet<3> *poly_b,
- const carve::geom::RTreeNode<3, carve::mesh::Face<3> *> *poly_b_rtree) const {
- performClassifyEasyFaceGroups(a_loops_grouped, poly_b, poly_b_rtree, vclass, FaceMaker0(collector, hooks), collector, hooks);
- performClassifyEasyFaceGroups(b_loops_grouped, poly_a, poly_a_rtree, vclass, FaceMaker1(collector, hooks), collector, hooks);
-#if defined(CARVE_DEBUG)
- std::cerr << "after removal of easy groups: " << a_loops_grouped.size() << " a groups" << std::endl;
- std::cerr << "after removal of easy groups: " << b_loops_grouped.size() << " b groups" << std::endl;
-#endif
- }
-
- void classifyHard(FLGroupList &a_loops_grouped,
- FLGroupList &b_loops_grouped,
- VertexClassification & /* vclass */,
- carve::mesh::MeshSet<3> *poly_a,
- const carve::geom::RTreeNode<3, carve::mesh::Face<3> *> *poly_a_rtree,
- carve::mesh::MeshSet<3> *poly_b,
- const carve::geom::RTreeNode<3, carve::mesh::Face<3> *> *poly_b_rtree) const {
- performClassifyHardFaceGroups(a_loops_grouped, poly_b, poly_b_rtree, FaceMaker0(collector, hooks), collector, hooks);
- performClassifyHardFaceGroups(b_loops_grouped, poly_a, poly_a_rtree, FaceMaker1(collector, hooks), collector, hooks);
-#if defined(CARVE_DEBUG)
- std::cerr << "after removal of hard groups: " << a_loops_grouped.size() << " a groups" << std::endl;
- std::cerr << "after removal of hard groups: " << b_loops_grouped.size() << " b groups" << std::endl;
-#endif
- }
-
- void faceLoopWork(FLGroupList &a_loops_grouped,
- FLGroupList &b_loops_grouped,
- VertexClassification & /* vclass */,
- carve::mesh::MeshSet<3> *poly_a,
- const carve::geom::RTreeNode<3, carve::mesh::Face<3> *> *poly_a_rtree,
- carve::mesh::MeshSet<3> *poly_b,
- const carve::geom::RTreeNode<3, carve::mesh::Face<3> *> *poly_b_rtree) const {
- performFaceLoopWork(poly_b, poly_b_rtree, a_loops_grouped, *this, collector, hooks);
- performFaceLoopWork(poly_a, poly_a_rtree, b_loops_grouped, *this, collector, hooks);
- }
-
- void postRemovalCheck(FLGroupList &a_loops_grouped,
- FLGroupList &b_loops_grouped) const {
-#if defined(CARVE_DEBUG)
- std::cerr << "after removal of on groups: " << a_loops_grouped.size() << " a groups" << std::endl;
- std::cerr << "after removal of on groups: " << b_loops_grouped.size() << " b groups" << std::endl;
-#endif
- }
-
- bool faceLoopSanityChecker(FaceLoopGroup &i) const {
- return i.face_loops.size() != 1;
- }
-
- void finish(FLGroupList &a_loops_grouped,FLGroupList &b_loops_grouped) const {
-#if defined(CARVE_DEBUG)
- if (a_loops_grouped.size() || b_loops_grouped.size())
- std::cerr << "UNCLASSIFIED! a=" << a_loops_grouped.size() << ", b=" << b_loops_grouped.size() << std::endl;
-#endif
- }
- };
- }
-
- void CSG::classifyFaceGroups(const V2Set & /* shared_edges */,
- VertexClassification &vclass,
- carve::mesh::MeshSet<3> *poly_a,
- const carve::geom::RTreeNode<3, carve::mesh::Face<3> *> *poly_a_rtree,
- FLGroupList &a_loops_grouped,
- const detail::LoopEdges & /* a_edge_map */,
- carve::mesh::MeshSet<3> *poly_b,
- const carve::geom::RTreeNode<3, carve::mesh::Face<3> *> *poly_b_rtree,
- FLGroupList &b_loops_grouped,
- const detail::LoopEdges & /* b_edge_map */,
- CSG::Collector &collector) {
- ClassifyFaceGroups classifier(collector, hooks);
-#if defined(CARVE_DEBUG)
- std::cerr << "initial groups: " << a_loops_grouped.size() << " a groups" << std::endl;
- std::cerr << "initial groups: " << b_loops_grouped.size() << " b groups" << std::endl;
-#endif
- performClassifyFaceGroups(
- a_loops_grouped,
- b_loops_grouped,
- vclass,
- poly_a,
- poly_a_rtree,
- poly_b,
- poly_b_rtree,
- classifier,
- collector,
- hooks);
- }
-
- }
-}