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/carve-util.h')
-rw-r--r--extern/carve/carve-util.h122
1 files changed, 122 insertions, 0 deletions
diff --git a/extern/carve/carve-util.h b/extern/carve/carve-util.h
new file mode 100644
index 00000000000..07743de2d16
--- /dev/null
+++ b/extern/carve/carve-util.h
@@ -0,0 +1,122 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2014 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation,
+ * Sergey Sharybin
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __CARVE_UTIL_H__
+#define __CARVE_UTIL_H__
+
+#include <carve/csg.hpp>
+#include <carve/geom3d.hpp>
+#include <carve/interpolator.hpp>
+#include <carve/mesh.hpp>
+
+#include "carve-capi.h"
+
+void carve_getRescaleMinMax(const carve::mesh::MeshSet<3> *left,
+ const carve::mesh::MeshSet<3> *right,
+ carve::geom3d::Vector *min,
+ carve::geom3d::Vector *max);
+
+void carve_unionIntersections(carve::csg::CSG *csg,
+ carve::mesh::MeshSet<3> **left_r,
+ carve::mesh::MeshSet<3> **right_r);
+
+bool carve_checkPolyPlanarAndGetNormal(const std::vector<carve::geom3d::Vector> &vertices,
+ const int verts_per_poly,
+ const int *verts_of_poly,
+ carve::math::Matrix3 *axis_matrix_r);
+
+int carve_triangulatePoly(struct ImportMeshData *import_data,
+ CarveMeshImporter *mesh_importer,
+ int poly_index,
+ int start_loop_index,
+ const std::vector<carve::geom3d::Vector> &vertices,
+ const int verts_per_poly,
+ const int *verts_of_poly,
+ const carve::math::Matrix3 &axis_matrix,
+ std::vector<int> *face_indices,
+ std::vector<int> *orig_loop_index_map,
+ std::vector<int> *orig_poly_index_map);
+
+namespace carve {
+ namespace interpolate {
+
+ template<typename attr_t>
+ class VertexAttr : public Interpolator {
+ public:
+ typedef const meshset_t::vertex_t *key_t;
+
+ protected:
+ typedef std::unordered_map<key_t, attr_t> attrmap_t;
+
+ attrmap_t attrs;
+
+ virtual void resultFace(const carve::csg::CSG &csg,
+ const meshset_t::face_t *new_face,
+ const meshset_t::face_t *orig_face,
+ bool flipped)
+ {
+ typedef meshset_t::face_t::const_edge_iter_t const_edge_iter_t;
+ for (const_edge_iter_t new_edge_iter = new_face->begin();
+ new_edge_iter != new_face->end();
+ ++new_edge_iter)
+ {
+ typename attrmap_t::const_iterator found =
+ attrs.find(new_edge_iter->vert);
+ if (found == attrs.end()) {
+ for (const_edge_iter_t orig_edge_iter = orig_face->begin();
+ orig_edge_iter != orig_face->end();
+ ++orig_edge_iter)
+ {
+ if ((orig_edge_iter->vert->v - new_edge_iter->vert->v).length2() < 1e-5) {
+ attrs[new_edge_iter->vert] = attrs[orig_edge_iter->vert];
+ }
+ }
+ }
+ }
+ }
+
+ public:
+ bool hasAttribute(const meshset_t::vertex_t *v) {
+ return attrs.find(v) != attrs.end();
+ }
+
+ const attr_t &getAttribute(const meshset_t::vertex_t *v, const attr_t &def = attr_t()) {
+ typename attrmap_t::const_iterator found = attrs.find(v);
+ if (found != attrs.end()) {
+ return found->second;
+ }
+ return def;
+ }
+
+ void setAttribute(const meshset_t::vertex_t *v, const attr_t &attr) {
+ attrs[v] = attr;
+ }
+ };
+
+ } // namespace interpolate
+} // namespace carve
+
+#endif // __CARVE_UTIL_H__