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 'source/blender/freestyle/intern/stroke/Operators.cpp')
-rw-r--r--source/blender/freestyle/intern/stroke/Operators.cpp183
1 files changed, 122 insertions, 61 deletions
diff --git a/source/blender/freestyle/intern/stroke/Operators.cpp b/source/blender/freestyle/intern/stroke/Operators.cpp
index 0374e605ff2..329b5440fed 100644
--- a/source/blender/freestyle/intern/stroke/Operators.cpp
+++ b/source/blender/freestyle/intern/stroke/Operators.cpp
@@ -39,10 +39,12 @@ Operators::StrokesContainer Operators::_current_strokes_set;
int Operators::select(UnaryPredicate1D &pred)
{
- if (!_current_set)
+ if (!_current_set) {
return 0;
- if (_current_set->empty())
+ }
+ if (_current_set->empty()) {
return 0;
+ }
I1DContainer new_set;
I1DContainer rejected;
Functions1D::ChainingTimeStampF1D cts;
@@ -67,8 +69,9 @@ int Operators::select(UnaryPredicate1D &pred)
++it;
}
if ((*itbegin)->getExactTypeName() != "ViewEdge") {
- for (it = rejected.begin(); it != rejected.end(); ++it)
+ for (it = rejected.begin(); it != rejected.end(); ++it) {
delete *it;
+ }
}
rejected.clear();
_current_set->clear();
@@ -80,8 +83,9 @@ int Operators::chain(ViewEdgeInternal::ViewEdgeIterator &it,
UnaryPredicate1D &pred,
UnaryFunction1D_void &modifier)
{
- if (_current_view_edges_set.empty())
+ if (_current_view_edges_set.empty()) {
return 0;
+ }
unsigned id = 0;
ViewEdge *edge;
@@ -90,10 +94,12 @@ int Operators::chain(ViewEdgeInternal::ViewEdgeIterator &it,
for (I1DContainer::iterator it_edge = _current_view_edges_set.begin();
it_edge != _current_view_edges_set.end();
++it_edge) {
- if (pred(**it_edge) < 0)
+ if (pred(**it_edge) < 0) {
goto error;
- if (pred.result)
+ }
+ if (pred.result) {
continue;
+ }
edge = dynamic_cast<ViewEdge *>(*it_edge);
it.setBegin(edge);
@@ -108,14 +114,16 @@ int Operators::chain(ViewEdgeInternal::ViewEdgeIterator &it,
goto error;
}
++it;
- if (it.isEnd())
+ if (it.isEnd()) {
break;
+ }
if (pred(**it) < 0) {
delete new_chain;
goto error;
}
- if (pred.result)
+ if (pred.result) {
break;
+ }
}
new_chains_set.push_back(new_chain);
}
@@ -139,8 +147,9 @@ error:
int Operators::chain(ViewEdgeInternal::ViewEdgeIterator &it, UnaryPredicate1D &pred)
{
- if (_current_view_edges_set.empty())
+ if (_current_view_edges_set.empty()) {
return 0;
+ }
unsigned id = 0;
Functions1D::IncrementChainingTimeStampF1D ts;
@@ -151,14 +160,18 @@ int Operators::chain(ViewEdgeInternal::ViewEdgeIterator &it, UnaryPredicate1D &p
for (I1DContainer::iterator it_edge = _current_view_edges_set.begin();
it_edge != _current_view_edges_set.end();
++it_edge) {
- if (pred(**it_edge) < 0)
+ if (pred(**it_edge) < 0) {
goto error;
- if (pred.result)
+ }
+ if (pred.result) {
continue;
- if (pred_ts(**it_edge) < 0)
+ }
+ if (pred_ts(**it_edge) < 0) {
goto error;
- if (pred_ts.result)
+ }
+ if (pred_ts.result) {
continue;
+ }
edge = dynamic_cast<ViewEdge *>(*it_edge);
it.setBegin(edge);
@@ -170,20 +183,23 @@ int Operators::chain(ViewEdgeInternal::ViewEdgeIterator &it, UnaryPredicate1D &p
new_chain->push_viewedge_back(*it, it.getOrientation());
ts(**it);
++it;
- if (it.isEnd())
+ if (it.isEnd()) {
break;
+ }
if (pred(**it) < 0) {
delete new_chain;
goto error;
}
- if (pred.result)
+ if (pred.result) {
break;
+ }
if (pred_ts(**it) < 0) {
delete new_chain;
goto error;
}
- if (pred_ts.result)
+ if (pred_ts.result) {
break;
+ }
}
new_chains_set.push_back(new_chain);
}
@@ -306,8 +322,9 @@ void Operators::bidirectionalChain(ViewEdgeIterator &it, UnaryPredicate1D &pred)
int Operators::bidirectionalChain(ChainingIterator &it, UnaryPredicate1D &pred)
{
- if (_current_view_edges_set.empty())
+ if (_current_view_edges_set.empty()) {
return 0;
+ }
unsigned id = 0;
Functions1D::IncrementChainingTimeStampF1D ts;
@@ -318,22 +335,27 @@ int Operators::bidirectionalChain(ChainingIterator &it, UnaryPredicate1D &pred)
for (I1DContainer::iterator it_edge = _current_view_edges_set.begin();
it_edge != _current_view_edges_set.end();
++it_edge) {
- if (pred(**it_edge) < 0)
+ if (pred(**it_edge) < 0) {
goto error;
- if (pred.result)
+ }
+ if (pred.result) {
continue;
- if (pred_ts(**it_edge) < 0)
+ }
+ if (pred_ts(**it_edge) < 0) {
goto error;
- if (pred_ts.result)
+ }
+ if (pred_ts.result) {
continue;
+ }
edge = dynamic_cast<ViewEdge *>(*it_edge);
// re-init iterator
it.setBegin(edge);
it.setCurrentEdge(edge);
it.setOrientation(true);
- if (it.init() < 0)
+ if (it.init() < 0) {
goto error;
+ }
Chain *new_chain = new Chain(id);
++id;
@@ -348,14 +370,16 @@ int Operators::bidirectionalChain(ChainingIterator &it, UnaryPredicate1D &pred)
delete new_chain;
goto error;
}
- if (it.isEnd())
+ if (it.isEnd()) {
break;
+ }
if (pred(**it) < 0) {
delete new_chain;
goto error;
}
- if (pred.result)
+ if (pred.result) {
break;
+ }
}
it.setBegin(edge);
it.setCurrentEdge(edge);
@@ -369,8 +393,9 @@ int Operators::bidirectionalChain(ChainingIterator &it, UnaryPredicate1D &pred)
delete new_chain;
goto error;
}
- if (pred.result)
+ if (pred.result) {
break;
+ }
new_chain->push_viewedge_front(*it, it.getOrientation());
ts(**it);
if (it.decrement() < 0) {
@@ -400,8 +425,9 @@ error:
int Operators::bidirectionalChain(ChainingIterator &it)
{
- if (_current_view_edges_set.empty())
+ if (_current_view_edges_set.empty()) {
return 0;
+ }
unsigned id = 0;
Functions1D::IncrementChainingTimeStampF1D ts;
@@ -412,18 +438,21 @@ int Operators::bidirectionalChain(ChainingIterator &it)
for (I1DContainer::iterator it_edge = _current_view_edges_set.begin();
it_edge != _current_view_edges_set.end();
++it_edge) {
- if (pred_ts(**it_edge) < 0)
+ if (pred_ts(**it_edge) < 0) {
goto error;
- if (pred_ts.result)
+ }
+ if (pred_ts.result) {
continue;
+ }
edge = dynamic_cast<ViewEdge *>(*it_edge);
// re-init iterator
it.setBegin(edge);
it.setCurrentEdge(edge);
it.setOrientation(true);
- if (it.init() < 0)
+ if (it.init() < 0) {
goto error;
+ }
Chain *new_chain = new Chain(id);
++id;
@@ -541,8 +570,9 @@ int Operators::sequentialSplit(UnaryPredicate0D &pred, float sampling)
#endif
splitted_chains.clear();
- if (!_current_chains_set.empty())
+ if (!_current_chains_set.empty()) {
_current_set = &_current_chains_set;
+ }
return 0;
error:
@@ -592,8 +622,9 @@ int Operators::sequentialSplit(UnaryPredicate0D &startingPred,
point = dynamic_cast<CurvePoint *>(&(*itStop));
new_curve->push_vertex_back(point);
++itStop;
- if (itStop == end)
+ if (itStop == end) {
break;
+ }
if (stoppingPred(itStop) < 0) {
delete new_curve;
goto error;
@@ -612,10 +643,12 @@ int Operators::sequentialSplit(UnaryPredicate0D &startingPred,
// find next start
do {
++itStart;
- if (itStart == end)
+ if (itStart == end) {
break;
- if (startingPred(itStart) < 0)
+ }
+ if (startingPred(itStart) < 0) {
goto error;
+ }
} while (!startingPred.result);
} while ((itStart != end) && (itStart != last));
}
@@ -639,8 +672,9 @@ int Operators::sequentialSplit(UnaryPredicate0D &startingPred,
#endif
splitted_chains.clear();
- if (!_current_chains_set.empty())
+ if (!_current_chains_set.empty()) {
_current_set = &_current_chains_set;
+ }
return 0;
error:
@@ -681,8 +715,9 @@ static int __recursiveSplit(Chain *_curve,
bool bsplit = false;
for (; ((it != end) && (next != end)); ++it, ++next) {
it0d = it.castToInterface0DIterator();
- if (func(it0d) < 0)
+ if (func(it0d) < 0) {
return -1;
+ }
if (func.result < _min) {
_min = func.result;
split = it;
@@ -734,8 +769,9 @@ static int __recursiveSplit(Chain *_curve,
new_curve_a->push_vertex_back(&(*split));
new_curve_b->push_vertex_back(&(*split));
- for (vit = vnext; vit != vitend; ++vit)
+ for (vit = vnext; vit != vitend; ++vit) {
new_curve_b->push_vertex_back(&(*vit));
+ }
// let's check whether one or two of the two new curves satisfy the stopping condition or not.
// (if one of them satisfies it, we don't split)
@@ -774,11 +810,13 @@ int Operators::recursiveSplit(UnaryFunction0D<double> &func,
I1DContainer::iterator cit = _current_chains_set.begin(), citend = _current_chains_set.end();
for (; cit != citend; ++cit) {
currentChain = dynamic_cast<Chain *>(*cit);
- if (!currentChain)
+ if (!currentChain) {
continue;
+ }
// let's check the first one:
- if (pred(*currentChain) < 0)
+ if (pred(*currentChain) < 0) {
return -1;
+ }
if (!pred.result) {
__recursiveSplit(currentChain, func, pred, sampling, newChains, splitted_chains);
}
@@ -808,8 +846,9 @@ int Operators::recursiveSplit(UnaryFunction0D<double> &func,
#endif
newChains.clear();
- if (!_current_chains_set.empty())
+ if (!_current_chains_set.empty()) {
_current_set = &_current_chains_set;
+ }
return 0;
}
@@ -850,12 +889,15 @@ static int __recursiveSplit(Chain *_curve,
for (; ((it != end) && (next != end)); ++it, ++next) {
++count;
it0d = it.castToInterface0DIterator();
- if (pred0d(it0d) < 0)
+ if (pred0d(it0d) < 0) {
return -1;
- if (!pred0d.result)
+ }
+ if (!pred0d.result) {
continue;
- if (func(it0d) < 0)
+ }
+ if (func(it0d) < 0) {
return -1;
+ }
mean += func.result;
if (func.result < _min) {
_min = func.result;
@@ -910,8 +952,9 @@ static int __recursiveSplit(Chain *_curve,
new_curve_a->push_vertex_back(&(*split));
new_curve_b->push_vertex_back(&(*split));
- for (vit = vnext; vit != vitend; ++vit)
+ for (vit = vnext; vit != vitend; ++vit) {
new_curve_b->push_vertex_back(&(*vit));
+ }
// let's check whether one or two of the two new curves satisfy the stopping condition or not.
// (if one of them satisfies it, we don't split)
@@ -951,11 +994,13 @@ int Operators::recursiveSplit(UnaryFunction0D<double> &func,
I1DContainer::iterator cit = _current_chains_set.begin(), citend = _current_chains_set.end();
for (; cit != citend; ++cit) {
currentChain = dynamic_cast<Chain *>(*cit);
- if (!currentChain)
+ if (!currentChain) {
continue;
+ }
// let's check the first one:
- if (pred(*currentChain) < 0)
+ if (pred(*currentChain) < 0) {
return -1;
+ }
if (!pred.result) {
__recursiveSplit(currentChain, func, pred0d, pred, sampling, newChains, splitted_chains);
}
@@ -985,8 +1030,9 @@ int Operators::recursiveSplit(UnaryFunction0D<double> &func,
#endif
newChains.clear();
- if (!_current_chains_set.empty())
+ if (!_current_chains_set.empty()) {
_current_set = &_current_chains_set;
+ }
return 0;
}
@@ -1000,10 +1046,12 @@ class PredicateWrapper {
inline bool operator()(Interface1D *i1, Interface1D *i2)
{
- if (i1 == i2)
+ if (i1 == i2) {
return false;
- if ((*_pred)(*i1, *i2) < 0)
+ }
+ if ((*_pred)(*i1, *i2) < 0) {
throw std::runtime_error("comparison failed");
+ }
return _pred->result;
}
@@ -1013,8 +1061,9 @@ class PredicateWrapper {
int Operators::sort(BinaryPredicate1D &pred)
{
- if (!_current_set)
+ if (!_current_set) {
return 0;
+ }
PredicateWrapper wrapper(pred);
try {
std::sort(_current_set->begin(), _current_set->end(), wrapper);
@@ -1059,8 +1108,9 @@ static Stroke *createStroke(Interface1D &inter)
current = stroke_vertex->getPoint2D();
Vec2r vec_tmp(current - previous);
real dist = vec_tmp.norm();
- if (dist < 1.0e-6)
+ if (dist < 1.0e-6) {
hasSingularity = true;
+ }
currentCurvilignAbscissa += dist;
stroke_vertex->setCurvilinearAbscissa(currentCurvilignAbscissa);
stroke->push_back(stroke_vertex);
@@ -1073,10 +1123,12 @@ static Stroke *createStroke(Interface1D &inter)
cp = dynamic_cast<CurvePoint *>(&(*it));
if (!cp) {
sv = dynamic_cast<SVertex *>(&(*it));
- if (!sv)
+ if (!sv) {
cerr << "Warning: unexpected Vertex type" << endl;
- else
+ }
+ else {
stroke_vertex = new StrokeVertex(sv);
+ }
}
else {
stroke_vertex = new StrokeVertex(cp);
@@ -1084,8 +1136,9 @@ static Stroke *createStroke(Interface1D &inter)
current = stroke_vertex->getPoint2D();
Vec2r vec_tmp(current - previous);
real dist = vec_tmp.norm();
- if (dist < 1.0e-6)
+ if (dist < 1.0e-6) {
hasSingularity = true;
+ }
currentCurvilignAbscissa += dist;
stroke_vertex->setCurvilinearAbscissa(currentCurvilignAbscissa);
stroke->push_back(stroke_vertex);
@@ -1108,8 +1161,9 @@ static Stroke *createStroke(Interface1D &inter)
next = (*vnext).getPoint();
if ((next - current).norm() < 1.0e-6) {
StrokeInternal::StrokeVertexIterator vprevious = v;
- if (!vprevious.isBegin())
+ if (!vprevious.isBegin()) {
--vprevious;
+ }
// collect a set of overlapping vertices
std::vector<StrokeVertex *> overlapping_vertices;
@@ -1119,8 +1173,9 @@ static Stroke *createStroke(Interface1D &inter)
current = next;
++v;
++vnext;
- if (vnext.isEnd())
+ if (vnext.isEnd()) {
break;
+ }
next = (*vnext).getPoint();
} while ((next - current).norm() < 1.0e-6);
@@ -1167,8 +1222,9 @@ static Stroke *createStroke(Interface1D &inter)
}
}
- if (vnext.isEnd())
+ if (vnext.isEnd()) {
break;
+ }
}
++v;
++vnext;
@@ -1218,10 +1274,12 @@ int Operators::create(UnaryPredicate1D &pred, vector<StrokeShader *> shaders)
StrokesContainer new_strokes_set;
for (Operators::I1DContainer::iterator it = _current_set->begin(); it != _current_set->end();
++it) {
- if (pred(**it) < 0)
+ if (pred(**it) < 0) {
goto error;
- if (!pred.result)
+ }
+ if (!pred.result) {
continue;
+ }
Stroke *stroke = createStroke(**it);
if (stroke) {
@@ -1259,20 +1317,23 @@ void Operators::reset(bool removeStrokes)
}
_current_view_edges_set.clear();
for (I1DContainer::iterator it = _current_chains_set.begin(); it != _current_chains_set.end();
- ++it)
+ ++it) {
delete *it;
+ }
_current_chains_set.clear();
ViewMap::viewedges_container &vedges = vm->ViewEdges();
ViewMap::viewedges_container::iterator ve = vedges.begin(), veend = vedges.end();
for (; ve != veend; ++ve) {
- if ((*ve)->getLength2D() < M_EPSILON)
+ if ((*ve)->getLength2D() < M_EPSILON) {
continue;
+ }
_current_view_edges_set.push_back(*ve);
}
_current_set = &_current_view_edges_set;
- if (removeStrokes)
+ if (removeStrokes) {
_current_strokes_set.clear();
+ }
}
} /* namespace Freestyle */