Freestyle: fix wrong arg order, and cleanup confusing loop (both reported by coverity).
authorBastien Montagne <montagne29@wanadoo.fr>
Thu, 18 Aug 2016 10:53:33 +0000 (12:53 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Thu, 18 Aug 2016 12:37:48 +0000 (14:37 +0200)
Error: `origin` and `edge` args were swapped in final `FindOccludee()` call of `ViewMapBuilder::ComputeRayCastingVisibility()`

Cleanup: main for loop in `Strip::createStrip()` was really confusing (though correct),
generated a false positive in coverity scan, now should be cleaner how it loops over its vprev/v/v2
triplet of consecutive items.

source/blender/freestyle/intern/stroke/StrokeRep.cpp
source/blender/freestyle/intern/view_map/ViewMapBuilder.cpp

index ab06e207331eaef6859dcf8ba36dcd45c9e8ad19..028127897ff87f2e960ba5f2e266d565b78c1ec9 100644 (file)
@@ -135,11 +135,11 @@ void Strip::createStrip (const vector<StrokeVertex*>& iStrokeVertices)
        int orientationErrors = 0;
 
        //special case of first vertex
-       v = iStrokeVertices.begin();
+       v2 = v = iStrokeVertices.begin();
+       ++v2;
        sv = *v;
        vPrev = v; //in case the stroke has only 2 vertices;
-       ++v;
-       sv2 = *v;
+       sv2 = *v2;
        Vec2r dir(sv2->getPoint() - sv->getPoint());
        Vec2r orthDir(-dir[1], dir[0]);
        if (orthDir.norm() > ZERO)
@@ -189,11 +189,7 @@ void Strip::createStrip (const vector<StrokeVertex*>& iStrokeVertices)
 
        int i = 2; // 2 because we have already processed the first vertex
 
-       for (vend = iStrokeVertices.end(); v != vend; ++v) {
-               v2 = v;
-               ++v2;
-               if (v2 == vend)
-                       break;
+       for (vend = iStrokeVertices.end(), ++v, ++v2; v2 != vend; vPrev = v++, ++v2) {
                sv = (*v);
                sv2 = (*v2);
                svPrev = (*vPrev);
@@ -289,8 +285,6 @@ void Strip::createStrip (const vector<StrokeVertex*>& iStrokeVertices)
                {
                        _vertices[i - 1]->setPoint2d(p - thickness[0] * stripDir);
                }
-
-               vPrev = v;
        } // end of for
 
        //special case of last vertex
index 77beb1d97d91659c49c47c5248c5dcc8b04cc92d..380bb0dd3caff18ac74755f66a9b3f7092e6fd96 100644 (file)
@@ -2099,7 +2099,7 @@ int ViewMapBuilder::ComputeRayCastingVisibility(FEdge *fe, Grid *iGrid, real eps
        }
 
        // Find occludee
-       FindOccludee(fe, iGrid, epsilon, oaPolygon, timestamp, u, center, edge, origin, faceVertices);
+       FindOccludee(fe, iGrid, epsilon, oaPolygon, timestamp, u, center, origin, edge, faceVertices);
 
        return qi;
 }