Slightly generalized the crash fix in revision 54111.
authorTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>
Sat, 26 Jan 2013 22:28:04 +0000 (22:28 +0000)
committerTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>
Sat, 26 Jan 2013 22:28:04 +0000 (22:28 +0000)
Also added a warning message to anticipate potential issues due to
the implication of the problem addressed here.

source/blender/freestyle/intern/view_map/FEdgeXDetector.cpp
source/blender/freestyle/intern/winged_edge/Curvature.cpp

index 9631c93cd7e6f9aea23a2087065f60acaca7bb5e..2ded242e9ea217cabfdad51aa45269ac20858557 100644 (file)
@@ -40,6 +40,8 @@
 #include "../geometry/GeomUtils.h"
 #include "../geometry/normal_cycle.h"
 
+#include "BKE_global.h"
+
 void FEdgeXDetector::processShapes(WingedEdge& we)
 {
        bool progressBarDisplay = false;
@@ -171,6 +173,16 @@ void FEdgeXDetector::preProcessFace(WXFace *iFace)
 
 void FEdgeXDetector::computeCurvatures(WXVertex *vertex)
 {
+       // TODO: for some reason, the 'vertex' may have no associated edges
+       // (i.e., WVertex::_EdgeList is empty), which causes a crash due to
+       // a subsequent call of WVertex::_EdgeList.front().
+       if (vertex->GetEdges().empty()) {
+               if (G.debug & G_DEBUG_FREESTYLE) {
+                       printf("Warning: WVertex %d has no associated edges.\n", vertex->GetId());
+               }
+               return;
+       }
+
        // CURVATURE LAYER
        // store all the curvature datas for each vertex
 
index 65ebdeac3a8cf957cef1c498c068762fe4685ddf..64b897c5596062c0bc9ffa7224f9c2875db0e68b 100644 (file)
@@ -586,12 +586,6 @@ static bool sphere_clip_vector(const Vec3r& O, real r, const Vec3r& P, Vec3r& V)
 // use marking ? (measure *timings* ...)
 void compute_curvature_tensor(WVertex *start, real radius, NormalCycle& nc)
 {
-       // TODO: for some reason, the WVertex 'start' may have no associated edges
-       // (i.e., WVertex::_EdgeList is empty), which causes a crash due to a call
-       // of WVertex::_EdgeList.front().
-       if (start->GetEdges().empty())
-               return;
-
        // in case we have a non-manifold vertex, skip it...
        if (start->isBoundary())
                return;