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:
authorSergey Sharybin <sergey.vfx@gmail.com>2014-03-13 13:40:55 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2014-03-13 13:40:55 +0400
commit94379277dd25a3300e54f89b8c7ef52b9a63f82f (patch)
tree913ea97d1bdbb5714bea3f68c014081577baccf2 /extern/carve
parent217dbfeba52ff7a3628290a6fcb9623aa9ff01cf (diff)
Fix T39151: Boolean modifier freeze
This re-applied patch from 25cbd13 which was lost at some point since missing patchset in series. This revision is to be back-ported to the final release.
Diffstat (limited to 'extern/carve')
-rw-r--r--extern/carve/lib/intersect_face_division.cpp4
-rw-r--r--extern/carve/patches/face_hole_merge_workaround.patch14
-rw-r--r--extern/carve/patches/series1
3 files changed, 19 insertions, 0 deletions
diff --git a/extern/carve/lib/intersect_face_division.cpp b/extern/carve/lib/intersect_face_division.cpp
index e826948128c..0016724e16c 100644
--- a/extern/carve/lib/intersect_face_division.cpp
+++ b/extern/carve/lib/intersect_face_division.cpp
@@ -719,6 +719,10 @@ namespace {
unassigned--;
}
}
+
+ if (!removed.size())
+ throw carve::exception("Failed to merge holes");
+
for (std::set<int>::iterator f = removed.begin(); f != removed.end(); ++f) {
for (unsigned i = 0; i < containing_faces.size(); ++i) {
containing_faces[i].erase(std::remove(containing_faces[i].begin(),
diff --git a/extern/carve/patches/face_hole_merge_workaround.patch b/extern/carve/patches/face_hole_merge_workaround.patch
new file mode 100644
index 00000000000..834e03a4b12
--- /dev/null
+++ b/extern/carve/patches/face_hole_merge_workaround.patch
@@ -0,0 +1,14 @@
+diff -r e82d852e4fb0 lib/intersect_face_division.cpp
+--- a/lib/intersect_face_division.cpp Wed Jan 15 13:16:14 2014 +1100
++++ b/lib/intersect_face_division.cpp Thu Mar 13 15:39:26 2014 +0600
+@@ -719,6 +719,10 @@
+ unassigned--;
+ }
+ }
++
++ if (!removed.size())
++ throw carve::exception("Failed to merge holes");
++
+ for (std::set<int>::iterator f = removed.begin(); f != removed.end(); ++f) {
+ for (unsigned i = 0; i < containing_faces.size(); ++i) {
+ containing_faces[i].erase(std::remove(containing_faces[i].begin(),
diff --git a/extern/carve/patches/series b/extern/carve/patches/series
index 62a24d9d730..286d594bbef 100644
--- a/extern/carve/patches/series
+++ b/extern/carve/patches/series
@@ -9,3 +9,4 @@ interpolator_reorder.patch
mesh_simplify_dissolve_edges.patch
memory_leak_fix.patch
mavc_fix.patch
+face_hole_merge_workaround.patch