[Bf-blender-cvs] [31d679b] master: Update Carve to latest update

Sergey Sharybin noreply at git.blender.org
Mon Jan 27 12:04:32 CET 2014


Commit: 31d679b667cd121a9bcbe32fedc8ab768611b963
Author: Sergey Sharybin
Date:   Mon Jan 27 17:00:05 2014 +0600
https://developer.blender.org/rB31d679b667cd121a9bcbe32fedc8ab768611b963

Update Carve to latest update

Fixes some issues with NaN vertices in special cases.
Also adds edge interpolation routines which are currently
unused but which are requires to implement edge CD interpolation.

===================================================================

M	extern/carve/include/carve/geom3d.hpp
M	extern/carve/include/carve/kd_node.hpp
M	extern/carve/include/carve/mesh_impl.hpp
M	extern/carve/include/carve/pointset_impl.hpp
M	extern/carve/include/carve/polyline_impl.hpp
M	extern/carve/include/carve/polyline_iter.hpp
M	extern/carve/lib/csg_collector.cpp
M	extern/carve/lib/face.cpp
M	extern/carve/lib/geom2d.cpp
M	extern/carve/lib/intersect.cpp
M	extern/carve/lib/intersect_face_division.cpp
M	extern/carve/lib/math.cpp
M	extern/carve/lib/triangulator.cpp
M	extern/carve/patches/series
A	extern/carve/patches/strict_flags.patch

===================================================================

diff --git a/extern/carve/include/carve/geom3d.hpp b/extern/carve/include/carve/geom3d.hpp
index fda43cc..c384dbd 100644
--- a/extern/carve/include/carve/geom3d.hpp
+++ b/extern/carve/include/carve/geom3d.hpp
@@ -89,7 +89,7 @@ namespace carve {
 #if defined(CARVE_DEBUG)
       if (p.size() > 3) {
         std::cerr << "N-gon with " << p.size() << " vertices: fitted distance:";
-        for (size_t i = 0; i < N; ++i) {
+        for (size_t i = 0; i < p.size(); ++i) {
           std::cerr << " {" << p[i] << "} " << distance(plane, p[i]);
         }
         std::cerr << std::endl;
diff --git a/extern/carve/include/carve/kd_node.hpp b/extern/carve/include/carve/kd_node.hpp
index 45e0ac8..cd7c27f 100644
--- a/extern/carve/include/carve/kd_node.hpp
+++ b/extern/carve/include/carve/kd_node.hpp
@@ -156,7 +156,7 @@ namespace carve {
             // choose the axis with the second greatest AABB extent.
             double e = -1.0;
             int a = -1;
-            for (unsigned i = 0; i < ndim; ++i) {
+            for (int i = 0; i < ndim; ++i) {
               if (i == splitpos.axis) continue;
               if (e < aabb.extent[i]) { a = i; e = aabb.extent[i]; }
             }
diff --git a/extern/carve/include/carve/mesh_impl.hpp b/extern/carve/include/carve/mesh_impl.hpp
index 0748f39..0fc82c3 100644
--- a/extern/carve/include/carve/mesh_impl.hpp
+++ b/extern/carve/include/carve/mesh_impl.hpp
@@ -1045,12 +1045,12 @@ namespace carve {
 
       for (size_t i = 0; i != N; ++i) {
         vout.push_back(*vptr[i]);
-        vmap[vptr[i] - &vertex_storage[0]] = &vout[i];
+        vmap[(size_t)(vptr[i] - &vertex_storage[0])] = &vout[i];
       }
 
       for (face_iter i = faceBegin(); i != faceEnd(); ++i) {
         for (typename face_t::edge_iter_t j = (*i)->begin(); j != (*i)->end(); ++j) {
-          (*j).vert = vmap[(*j).vert - &vertex_storage[0]];
+          (*j).vert = vmap[(size_t)((*j).vert - &vertex_storage[0])];
         }
         (*i)->canonicalize();
       }
diff --git a/extern/carve/include/carve/pointset_impl.hpp b/extern/carve/include/carve/pointset_impl.hpp
index 71b5f28..618fd23 100644
--- a/extern/carve/include/carve/pointset_impl.hpp
+++ b/extern/carve/include/carve/pointset_impl.hpp
@@ -29,7 +29,7 @@ namespace carve {
   namespace point {
 
     inline size_t PointSet::vertexToIndex_fast(const Vertex *v) const {
-      return v - &vertices[0];
+      return (size_t)(v - &vertices[0]);
     }
 
   }
diff --git a/extern/carve/include/carve/polyline_impl.hpp b/extern/carve/include/carve/polyline_impl.hpp
index 067701a..1cbeaa5 100644
--- a/extern/carve/include/carve/polyline_impl.hpp
+++ b/extern/carve/include/carve/polyline_impl.hpp
@@ -154,7 +154,7 @@ namespace carve {
     }
 
     inline size_t PolylineSet::vertexToIndex_fast(const Vertex *v) const {
-      return v - &vertices[0];
+      return (size_t)(v - &vertices[0]);
     }
   }
 }
diff --git a/extern/carve/include/carve/polyline_iter.hpp b/extern/carve/include/carve/polyline_iter.hpp
index 8501e62..8c8f9a9 100644
--- a/extern/carve/include/carve/polyline_iter.hpp
+++ b/extern/carve/include/carve/polyline_iter.hpp
@@ -29,12 +29,12 @@ namespace carve {
 
     struct polyline_vertex_iter : public std::iterator<std::random_access_iterator_tag, Vertex *> {
       Polyline *base;
-      size_t idx;
+      ssize_t idx;
 
       polyline_vertex_iter(Polyline *_base) : base(_base), idx(0) {
       }
 
-      polyline_vertex_iter(Polyline *_base, size_t _idx) : base(_base), idx(_idx) {
+      polyline_vertex_iter(Polyline *_base, ssize_t _idx) : base(_base), idx(_idx) {
       }
 
       polyline_vertex_iter operator++(int) { return polyline_vertex_iter(base, idx++); }
@@ -46,14 +46,15 @@ namespace carve {
       polyline_vertex_iter &operator-=(int v) { idx -= v; return *this; }
 
       Vertex *operator*() const {
-        return base->vertex(idx);
+        CARVE_ASSERT(idx >= 0 && idx < base->vertexCount());
+        return base->vertex((size_t)idx);
       }
     };
 
 
 
-    static inline ptrdiff_t operator-(const polyline_vertex_iter &a, const polyline_vertex_iter &b) { return a.idx - b.idx; }
-                
+    static inline ssize_t operator-(const polyline_vertex_iter &a, const polyline_vertex_iter &b) { return a.idx - b.idx; }
+
     static inline bool operator==(const polyline_vertex_iter&a, const polyline_vertex_iter &b) { return a.idx == b.idx; }
     static inline bool operator!=(const polyline_vertex_iter&a, const polyline_vertex_iter &b) { return a.idx != b.idx; }
     static inline bool operator<(const polyline_vertex_iter&a, const polyline_vertex_iter &b) { return a.idx < b.idx; }
@@ -65,12 +66,12 @@ namespace carve {
 
     struct polyline_vertex_const_iter : public std::iterator<std::random_access_iterator_tag, Vertex *> {
       const Polyline *base;
-      size_t idx;
+      ssize_t idx;
 
       polyline_vertex_const_iter(const Polyline *_base) : base(_base), idx(0) {
       }
 
-      polyline_vertex_const_iter(const Polyline *_base, size_t _idx) : base(_base), idx(_idx) {
+      polyline_vertex_const_iter(const Polyline *_base, ssize_t _idx) : base(_base), idx(_idx) {
       }
 
       polyline_vertex_const_iter operator++(int) { return polyline_vertex_const_iter(base, idx++); }
@@ -82,13 +83,14 @@ namespace carve {
       polyline_vertex_const_iter &operator-=(int v) { idx -= v; return *this; }
 
       const Vertex *operator*() const {
-        return base->vertex(idx);
+        CARVE_ASSERT(idx >= 0 && idx < base->vertexCount());
+        return base->vertex((size_t)idx);
       }
     };
 
 
 
-    static inline ptrdiff_t operator-(const polyline_vertex_const_iter &a, const polyline_vertex_const_iter &b) { return a.idx - b.idx; }
+    static inline ssize_t operator-(const polyline_vertex_const_iter &a, const polyline_vertex_const_iter &b) { return a.idx - b.idx; }
                 
     static inline bool operator==(const polyline_vertex_const_iter&a, const polyline_vertex_const_iter &b) { return a.idx == b.idx; }
     static inline bool operator!=(const polyline_vertex_const_iter&a, const polyline_vertex_const_iter &b) { return a.idx != b.idx; }
@@ -101,25 +103,25 @@ namespace carve {
       return polyline_vertex_const_iter(this, 0);
     }
     inline polyline_vertex_const_iter Polyline::vend() const { 
-      return polyline_vertex_const_iter(this, vertexCount());
+      return polyline_vertex_const_iter(this, (ssize_t)vertexCount());
     }
     inline polyline_vertex_iter Polyline::vbegin() { 
       return polyline_vertex_iter(this, 0);
     }
     inline polyline_vertex_iter Polyline::vend() { 
-      return polyline_vertex_iter(this, vertexCount());
+      return polyline_vertex_iter(this, (ssize_t)vertexCount());
     }
 
 
 
     struct polyline_edge_iter : public std::iterator<std::random_access_iterator_tag, PolylineEdge *> {
       Polyline *base;
-      size_t idx;
+      ssize_t idx;
 
       polyline_edge_iter(Polyline *_base) : base(_base), idx(0) {
       }
 
-      polyline_edge_iter(Polyline *_base, size_t _idx) : base(_base), idx(_idx) {
+      polyline_edge_iter(Polyline *_base, ssize_t _idx) : base(_base), idx(_idx) {
       }
 
       polyline_edge_iter operator++(int) { return polyline_edge_iter(base, idx++); }
@@ -131,13 +133,14 @@ namespace carve {
       polyline_edge_iter &operator-=(int v) { idx -= v; return *this; }
 
       PolylineEdge *operator*() const {
-        return base->edge(idx);
+        CARVE_ASSERT(idx >= 0 && idx < base->edgeCount());
+        return base->edge((size_t)idx);
       }
     };
 
 
 
-    static inline int operator-(const polyline_edge_iter&a, const polyline_edge_iter &b) { return a.idx - b.idx; }
+    static inline ssize_t operator-(const polyline_edge_iter&a, const polyline_edge_iter &b) { return a.idx - b.idx; }
                 
     static inline bool operator==(const polyline_edge_iter&a, const polyline_edge_iter &b) { return a.idx == b.idx; }
     static inline bool operator!=(const polyline_edge_iter&a, const polyline_edge_iter &b) { return a.idx != b.idx; }
@@ -150,12 +153,12 @@ namespace carve {
 
     struct polyline_edge_const_iter : public std::iterator<std::random_access_iterator_tag, PolylineEdge *> {
       const Polyline *base;
-      size_t idx;
+      ssize_t idx;
 
       polyline_edge_const_iter(const Polyline *_base) : base(_base), idx(0) {
       }
 
-      polyline_edge_const_iter(const Polyline *_base, size_t _idx) : base(_base), idx(_idx) {
+      polyline_edge_const_iter(const Polyline *_base, ssize_t _idx) : base(_base), idx(_idx) {
       }
 
       polyline_edge_const_iter operator++(int) { return polyline_edge_const_iter(base, idx++); }
@@ -167,13 +170,14 @@ namespace carve {
       polyline_edge_const_iter &operator-=(int v) { idx -= v; return *this; }
 
       const PolylineEdge *operator*() const {
-        return base->edge(idx);
+        CARVE_ASSERT(idx >= 0 && idx < base->edgeCount());
+        return base->edge((size_t)idx);
       }
     };
 
 
 
-    static inline int operator-(const polyline_edge_const_iter&a, const polyline_edge_const_iter &b) { return a.idx - b.idx; }
+    static inline ssize_t operator-(const polyline_edge_const_iter&a, const polyline_edge_const_iter &b) { return a.idx - b.idx; }
                 
     static inline bool operator==(const polyline_edge_const_iter&a, const polyline_edge_const_iter &b) { return a.idx == b.idx; }
     static inline bool operator!=(const polyline_edge_const_iter&a, const polyline_edge_const_iter &b) { return a.idx != b.idx; }
@@ -186,13 +190,13 @@ namespace carve {
       return polyline_edge_const_iter(this, 0);
     }
     inline polyline_edge_const_iter Polyline::eend() const { 
-      return polyline_edge_const_iter(this, edgeCount());
+      return polyline_edge_const_iter(this, (ssize_t)edgeCount());
     }
     inline polyline_edge_iter Polyline::ebegin() { 
       return polyline_edge_iter(this, 0);
     }
     inline polyline_edge_iter Polyline::eend() { 
-      return polyline_edge_iter(this, edgeCount());
+      return polyline_edge_iter(this, (ssize_t)edgeCount());
     }
 
   }
diff --git a/extern/carve/lib/csg_collector.cpp b/extern/carve/lib/csg_collector.cpp
index 6e86b12..c38b3e5 1006

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list