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/Predicates1D.h')
-rw-r--r--source/blender/freestyle/intern/stroke/Predicates1D.h866
1 files changed, 430 insertions, 436 deletions
diff --git a/source/blender/freestyle/intern/stroke/Predicates1D.h b/source/blender/freestyle/intern/stroke/Predicates1D.h
index 0501e33bcf0..be70907b51b 100644
--- a/source/blender/freestyle/intern/stroke/Predicates1D.h
+++ b/source/blender/freestyle/intern/stroke/Predicates1D.h
@@ -32,7 +32,7 @@
#include "../view_map/Functions1D.h"
#ifdef WITH_CXX_GUARDEDALLOC
-#include "MEM_guardedalloc.h"
+# include "MEM_guardedalloc.h"
#endif
namespace Freestyle {
@@ -48,40 +48,40 @@ namespace Freestyle {
* The UnaryPredicate1D is used by calling its () operator.
* Any inherited class must overload the () operator.
*/
-class UnaryPredicate1D
-{
-public:
- bool result;
- void *py_up1D;
-
- /*! Default constructor. */
- UnaryPredicate1D()
- {
- py_up1D = NULL;
- }
-
- /*! Destructor. */
- virtual ~UnaryPredicate1D() {}
-
- /*! Returns the string of the name of the UnaryPredicate1D. */
- virtual string getName() const
- {
- return "UnaryPredicate1D";
- }
-
- /*! The () operator. Must be overload by inherited classes.
- * \param inter:
- * The Interface1D on which we wish to evaluate the predicate.
- * \return true if the condition is satisfied, false otherwise.
- */
- virtual int operator()(Interface1D& inter);
+class UnaryPredicate1D {
+ public:
+ bool result;
+ void *py_up1D;
+
+ /*! Default constructor. */
+ UnaryPredicate1D()
+ {
+ py_up1D = NULL;
+ }
+
+ /*! Destructor. */
+ virtual ~UnaryPredicate1D()
+ {
+ }
+
+ /*! Returns the string of the name of the UnaryPredicate1D. */
+ virtual string getName() const
+ {
+ return "UnaryPredicate1D";
+ }
+
+ /*! The () operator. Must be overload by inherited classes.
+ * \param inter:
+ * The Interface1D on which we wish to evaluate the predicate.
+ * \return true if the condition is satisfied, false otherwise.
+ */
+ virtual int operator()(Interface1D &inter);
#ifdef WITH_CXX_GUARDEDALLOC
- MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:UnaryPredicate1D")
+ MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:UnaryPredicate1D")
#endif
};
-
//
// BinaryPredicate1D (base class for predicates in 1D)
//
@@ -92,43 +92,43 @@ public:
* It evaluates a relation between 2 Interface1D and returns true or false.
* It is used by calling the () operator.
*/
-class BinaryPredicate1D
-{
-public:
- bool result;
- void *py_bp1D;
-
- /*! Default constructor. */
- BinaryPredicate1D()
- {
- py_bp1D = NULL;
- }
-
- /*! Destructor. */
- virtual ~BinaryPredicate1D() {}
-
- /*! Returns the string of the name of the binary predicate. */
- virtual string getName() const
- {
- return "BinaryPredicate1D";
- }
-
- /*! The () operator. Must be overload by inherited classes.
- * It evaluates a relation between 2 Interface1D.
- * \param inter1:
- * The first Interface1D.
- * \param inter2:
- * The second Interface1D.
- * \return true or false.
- */
- virtual int operator()(Interface1D& inter1, Interface1D& inter2);
+class BinaryPredicate1D {
+ public:
+ bool result;
+ void *py_bp1D;
+
+ /*! Default constructor. */
+ BinaryPredicate1D()
+ {
+ py_bp1D = NULL;
+ }
+
+ /*! Destructor. */
+ virtual ~BinaryPredicate1D()
+ {
+ }
+
+ /*! Returns the string of the name of the binary predicate. */
+ virtual string getName() const
+ {
+ return "BinaryPredicate1D";
+ }
+
+ /*! The () operator. Must be overload by inherited classes.
+ * It evaluates a relation between 2 Interface1D.
+ * \param inter1:
+ * The first Interface1D.
+ * \param inter2:
+ * The second Interface1D.
+ * \return true or false.
+ */
+ virtual int operator()(Interface1D &inter1, Interface1D &inter2);
#ifdef WITH_CXX_GUARDEDALLOC
- MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:BinaryPredicate1D")
+ MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:BinaryPredicate1D")
#endif
};
-
//
// Predicates definitions
//
@@ -138,313 +138,311 @@ namespace Predicates1D {
// TrueUP1D
/*! Returns true */
-class TrueUP1D : public UnaryPredicate1D
-{
-public:
- /*! Constructor */
- TrueUP1D() {}
-
- /*! Returns the string "TrueUP1D"*/
- string getName() const
- {
- return "TrueUP1D";
- }
-
- /*! the () operator */
- int operator()(Interface1D&)
- {
- result = true;
- return 0;
- }
+class TrueUP1D : public UnaryPredicate1D {
+ public:
+ /*! Constructor */
+ TrueUP1D()
+ {
+ }
+
+ /*! Returns the string "TrueUP1D"*/
+ string getName() const
+ {
+ return "TrueUP1D";
+ }
+
+ /*! the () operator */
+ int operator()(Interface1D &)
+ {
+ result = true;
+ return 0;
+ }
};
// FalseUP1D
/*! Returns false */
-class FalseUP1D : public UnaryPredicate1D
-{
-public:
- /*! Constructor */
- FalseUP1D() {}
-
- /*! Returns the string "FalseUP1D"*/
- string getName() const
- {
- return "FalseUP1D";
- }
-
- /*! the () operator */
- int operator()(Interface1D&)
- {
- result = false;
- return 0;
- }
+class FalseUP1D : public UnaryPredicate1D {
+ public:
+ /*! Constructor */
+ FalseUP1D()
+ {
+ }
+
+ /*! Returns the string "FalseUP1D"*/
+ string getName() const
+ {
+ return "FalseUP1D";
+ }
+
+ /*! the () operator */
+ int operator()(Interface1D &)
+ {
+ result = false;
+ return 0;
+ }
};
// QuantitativeInvisibilityUP1D
/*! Returns true if the Quantitative Invisibility evaluated at an Interface1D, using the QuantitativeInvisibilityF1D
* functor, equals a certain user-defined value.
*/
-class QuantitativeInvisibilityUP1D : public UnaryPredicate1D
-{
-public:
- /*! Builds the Predicate.
- * \param qi:
- * The Quantitative Invisibility you want the Interface1D to have
- */
- QuantitativeInvisibilityUP1D(unsigned qi = 0) : _qi(qi) {}
-
- /*! Returns the string "QuantitativeInvisibilityUP1D" */
- string getName() const
- {
- return "QuantitativeInvisibilityUP1D";
- }
-
- /*! the () operator */
- int operator()(Interface1D& inter)
- {
- Functions1D::QuantitativeInvisibilityF1D func;
- if (func(inter) < 0)
- return -1;
- result = (func.result == _qi);
- return 0;
- }
-
-private:
- unsigned _qi;
+class QuantitativeInvisibilityUP1D : public UnaryPredicate1D {
+ public:
+ /*! Builds the Predicate.
+ * \param qi:
+ * The Quantitative Invisibility you want the Interface1D to have
+ */
+ QuantitativeInvisibilityUP1D(unsigned qi = 0) : _qi(qi)
+ {
+ }
+
+ /*! Returns the string "QuantitativeInvisibilityUP1D" */
+ string getName() const
+ {
+ return "QuantitativeInvisibilityUP1D";
+ }
+
+ /*! the () operator */
+ int operator()(Interface1D &inter)
+ {
+ Functions1D::QuantitativeInvisibilityF1D func;
+ if (func(inter) < 0)
+ return -1;
+ result = (func.result == _qi);
+ return 0;
+ }
+
+ private:
+ unsigned _qi;
};
// ContourUP1D
/*! Returns true if the Interface1D is a contour.
* An Interface1D is a contour if it is borded by a different shape on each of its sides.
*/
-class ContourUP1D : public UnaryPredicate1D
-{
-private:
- Functions1D::CurveNatureF1D _getNature;
-
-public:
- /*! Returns the string "ContourUP1D"*/
- string getName() const
- {
- return "ContourUP1D";
- }
-
- /*! The () operator. */
- int operator()(Interface1D& inter)
- {
- if (_getNature(inter) < 0)
- return -1;
- if ((_getNature.result & Nature::SILHOUETTE) || (_getNature.result & Nature::BORDER)) {
- Interface0DIterator it = inter.verticesBegin();
- for (; !it.isEnd(); ++it) {
- if (Functions0D::getOccludeeF0D(it) != Functions0D::getShapeF0D(it)) {
- result = true;
- return 0;
- }
- }
- }
- result = false;
- return 0;
- }
+class ContourUP1D : public UnaryPredicate1D {
+ private:
+ Functions1D::CurveNatureF1D _getNature;
+
+ public:
+ /*! Returns the string "ContourUP1D"*/
+ string getName() const
+ {
+ return "ContourUP1D";
+ }
+
+ /*! The () operator. */
+ int operator()(Interface1D &inter)
+ {
+ if (_getNature(inter) < 0)
+ return -1;
+ if ((_getNature.result & Nature::SILHOUETTE) || (_getNature.result & Nature::BORDER)) {
+ Interface0DIterator it = inter.verticesBegin();
+ for (; !it.isEnd(); ++it) {
+ if (Functions0D::getOccludeeF0D(it) != Functions0D::getShapeF0D(it)) {
+ result = true;
+ return 0;
+ }
+ }
+ }
+ result = false;
+ return 0;
+ }
};
// ExternalContourUP1D
/*! Returns true if the Interface1D is an external contour.
* An Interface1D is an external contour if it is borded by no shape on one of its sides.
*/
-class ExternalContourUP1D : public UnaryPredicate1D
-{
-private:
- Functions1D::CurveNatureF1D _getNature;
-
-public:
- /*! Returns the string "ExternalContourUP1D" */
- string getName() const
- {
- return "ExternalContourUP1D";
- }
-
- /*! The () operator. */
- int operator()(Interface1D& inter)
- {
- if (_getNature(inter) < 0)
- return -1;
- if ((_getNature.result & Nature::SILHOUETTE) || (_getNature.result & Nature::BORDER)) {
- set<ViewShape*> occluded;
- Functions1D::getOccludeeF1D(inter, occluded);
- for (set<ViewShape*>::iterator os = occluded.begin(), osend = occluded.end(); os != osend; ++os) {
- if ((*os) == 0) {
- result = true;
- return 0;
- }
- }
- }
- result = false;
- return 0;
- }
+class ExternalContourUP1D : public UnaryPredicate1D {
+ private:
+ Functions1D::CurveNatureF1D _getNature;
+
+ public:
+ /*! Returns the string "ExternalContourUP1D" */
+ string getName() const
+ {
+ return "ExternalContourUP1D";
+ }
+
+ /*! The () operator. */
+ int operator()(Interface1D &inter)
+ {
+ if (_getNature(inter) < 0)
+ return -1;
+ if ((_getNature.result & Nature::SILHOUETTE) || (_getNature.result & Nature::BORDER)) {
+ set<ViewShape *> occluded;
+ Functions1D::getOccludeeF1D(inter, occluded);
+ for (set<ViewShape *>::iterator os = occluded.begin(), osend = occluded.end(); os != osend;
+ ++os) {
+ if ((*os) == 0) {
+ result = true;
+ return 0;
+ }
+ }
+ }
+ result = false;
+ return 0;
+ }
};
// EqualToTimeStampUP1D
/*! Returns true if the Interface1D's time stamp is equal to a certain user-defined value. */
-class EqualToTimeStampUP1D : public UnaryPredicate1D
-{
-protected:
- unsigned _timeStamp;
-
-public:
- EqualToTimeStampUP1D(unsigned ts) : UnaryPredicate1D()
- {
- _timeStamp = ts;
- }
-
- /*! Returns the string "EqualToTimeStampUP1D"*/
- string getName() const
- {
- return "EqualToTimeStampUP1D";
- }
-
- /*! The () operator. */
- int operator()(Interface1D& inter)
- {
- result = (inter.getTimeStamp() == _timeStamp);
- return 0;
- }
+class EqualToTimeStampUP1D : public UnaryPredicate1D {
+ protected:
+ unsigned _timeStamp;
+
+ public:
+ EqualToTimeStampUP1D(unsigned ts) : UnaryPredicate1D()
+ {
+ _timeStamp = ts;
+ }
+
+ /*! Returns the string "EqualToTimeStampUP1D"*/
+ string getName() const
+ {
+ return "EqualToTimeStampUP1D";
+ }
+
+ /*! The () operator. */
+ int operator()(Interface1D &inter)
+ {
+ result = (inter.getTimeStamp() == _timeStamp);
+ return 0;
+ }
};
// EqualToChainingTimeStampUP1D
/*! Returns true if the Interface1D's time stamp is equal to a certain user-defined value. */
-class EqualToChainingTimeStampUP1D : public UnaryPredicate1D
-{
-protected:
- unsigned _timeStamp;
-
-public:
- EqualToChainingTimeStampUP1D(unsigned ts) : UnaryPredicate1D()
- {
- _timeStamp = ts;
- }
-
- /*! Returns the string "EqualToChainingTimeStampUP1D"*/
- string getName() const
- {
- return "EqualToChainingTimeStampUP1D";
- }
-
- /*! The () operator. */
- int operator()(Interface1D& inter)
- {
- ViewEdge *edge = dynamic_cast<ViewEdge*>(&inter);
- if (!edge) {
- result = false;
- return 0;
- }
- result = (edge->getChainingTimeStamp() >= _timeStamp);
- return 0;
- }
+class EqualToChainingTimeStampUP1D : public UnaryPredicate1D {
+ protected:
+ unsigned _timeStamp;
+
+ public:
+ EqualToChainingTimeStampUP1D(unsigned ts) : UnaryPredicate1D()
+ {
+ _timeStamp = ts;
+ }
+
+ /*! Returns the string "EqualToChainingTimeStampUP1D"*/
+ string getName() const
+ {
+ return "EqualToChainingTimeStampUP1D";
+ }
+
+ /*! The () operator. */
+ int operator()(Interface1D &inter)
+ {
+ ViewEdge *edge = dynamic_cast<ViewEdge *>(&inter);
+ if (!edge) {
+ result = false;
+ return 0;
+ }
+ result = (edge->getChainingTimeStamp() >= _timeStamp);
+ return 0;
+ }
};
// ShapeUP1D
/*! Returns true if the shape to which the Interface1D belongs to has the same Id as the one specified by the user. */
-class ShapeUP1D: public UnaryPredicate1D
-{
-private:
- Id _id;
-
-public:
- /*! Builds the Predicate.
- * \param idFirst:
- * The first Id component.
- * \param idSecond:
- * The second Id component.
- */
- ShapeUP1D(unsigned idFirst, unsigned idSecond = 0) : UnaryPredicate1D()
- {
- _id = Id(idFirst, idSecond);
- }
-
- /*! Returns the string "ShapeUP1D"*/
- string getName() const
- {
- return "ShapeUP1D";
- }
-
- /*! The () operator. */
- int operator()(Interface1D& inter)
- {
- set<ViewShape*> shapes;
- Functions1D::getShapeF1D(inter, shapes);
- for (set<ViewShape*>::iterator s = shapes.begin(), send = shapes.end(); s != send; ++s) {
- if ((*s)->getId() == _id) {
- result = true;
- return 0;
- }
- }
- result = false;
- return 0;
- }
+class ShapeUP1D : public UnaryPredicate1D {
+ private:
+ Id _id;
+
+ public:
+ /*! Builds the Predicate.
+ * \param idFirst:
+ * The first Id component.
+ * \param idSecond:
+ * The second Id component.
+ */
+ ShapeUP1D(unsigned idFirst, unsigned idSecond = 0) : UnaryPredicate1D()
+ {
+ _id = Id(idFirst, idSecond);
+ }
+
+ /*! Returns the string "ShapeUP1D"*/
+ string getName() const
+ {
+ return "ShapeUP1D";
+ }
+
+ /*! The () operator. */
+ int operator()(Interface1D &inter)
+ {
+ set<ViewShape *> shapes;
+ Functions1D::getShapeF1D(inter, shapes);
+ for (set<ViewShape *>::iterator s = shapes.begin(), send = shapes.end(); s != send; ++s) {
+ if ((*s)->getId() == _id) {
+ result = true;
+ return 0;
+ }
+ }
+ result = false;
+ return 0;
+ }
};
// WithinImageBoundaryUP1D
/*! Returns true if the Interface1D is (partly) within the image boundary. */
-class WithinImageBoundaryUP1D: public UnaryPredicate1D
-{
-private:
- real _xmin, _ymin, _xmax, _ymax;
-
-public:
- /*! Builds the Predicate.
- * \param xmin:
- * The X lower bound of the image boundary.
- * \param ymin:
- * The Y lower bound of the image boundary.
- * \param xmax:
- * The X upper bound of the image boundary.
- * \param ymax:
- * The Y upper bound of the image boundary.
- */
- WithinImageBoundaryUP1D(const real xmin, const real ymin, const real xmax, const real ymax)
- : _xmin(xmin), _ymin(ymin), _xmax(xmax), _ymax(ymax)
- {
- }
-
- /*! Returns the string "WithinImageBoundaryUP1D" */
- string getName() const
- {
- return "WithinImageBoundaryUP1D";
- }
-
- /*! The () operator. */
- int operator()(Interface1D& inter)
- {
- // 1st pass: check if a point is within the image boundary.
- Interface0DIterator it = inter.verticesBegin(), itend = inter.verticesEnd();
- for (; it != itend; ++it) {
- real x = (*it).getProjectedX();
- real y = (*it).getProjectedY();
- if (_xmin <= x && x <= _xmax && _ymin <= y && y <= _ymax) {
- result = true;
- return 0;
- }
- }
- // 2nd pass: check if a line segment intersects with the image boundary.
- it = inter.verticesBegin();
- if (it != itend) {
- Vec2r pmin(_xmin, _ymin);
- Vec2r pmax(_xmax, _ymax);
- Vec2r prev((*it).getPoint2D());
- ++it;
- for (; it != itend; ++it) {
- Vec2r p((*it).getPoint2D());
- if (GeomUtils::intersect2dSeg2dArea (pmin, pmax, prev, p)) {
- result = true;
- return 0;
- }
- prev = p;
- }
- }
- result = false;
- return 0;
- }
+class WithinImageBoundaryUP1D : public UnaryPredicate1D {
+ private:
+ real _xmin, _ymin, _xmax, _ymax;
+
+ public:
+ /*! Builds the Predicate.
+ * \param xmin:
+ * The X lower bound of the image boundary.
+ * \param ymin:
+ * The Y lower bound of the image boundary.
+ * \param xmax:
+ * The X upper bound of the image boundary.
+ * \param ymax:
+ * The Y upper bound of the image boundary.
+ */
+ WithinImageBoundaryUP1D(const real xmin, const real ymin, const real xmax, const real ymax)
+ : _xmin(xmin), _ymin(ymin), _xmax(xmax), _ymax(ymax)
+ {
+ }
+
+ /*! Returns the string "WithinImageBoundaryUP1D" */
+ string getName() const
+ {
+ return "WithinImageBoundaryUP1D";
+ }
+
+ /*! The () operator. */
+ int operator()(Interface1D &inter)
+ {
+ // 1st pass: check if a point is within the image boundary.
+ Interface0DIterator it = inter.verticesBegin(), itend = inter.verticesEnd();
+ for (; it != itend; ++it) {
+ real x = (*it).getProjectedX();
+ real y = (*it).getProjectedY();
+ if (_xmin <= x && x <= _xmax && _ymin <= y && y <= _ymax) {
+ result = true;
+ return 0;
+ }
+ }
+ // 2nd pass: check if a line segment intersects with the image boundary.
+ it = inter.verticesBegin();
+ if (it != itend) {
+ Vec2r pmin(_xmin, _ymin);
+ Vec2r pmax(_xmax, _ymax);
+ Vec2r prev((*it).getPoint2D());
+ ++it;
+ for (; it != itend; ++it) {
+ Vec2r p((*it).getPoint2D());
+ if (GeomUtils::intersect2dSeg2dArea(pmin, pmax, prev, p)) {
+ result = true;
+ return 0;
+ }
+ prev = p;
+ }
+ }
+ result = false;
+ return 0;
+ }
};
//
@@ -454,129 +452,125 @@ public:
// TrueBP1D
/*! Returns true. */
-class TrueBP1D : public BinaryPredicate1D
-{
-public:
- /*! Returns the string "TrueBP1D" */
- string getName() const
- {
- return "TrueBP1D";
- }
-
- /*! The () operator. */
- int operator()(Interface1D& /*i1*/, Interface1D& /*i2*/)
- {
- result = true;
- return 0;
- }
+class TrueBP1D : public BinaryPredicate1D {
+ public:
+ /*! Returns the string "TrueBP1D" */
+ string getName() const
+ {
+ return "TrueBP1D";
+ }
+
+ /*! The () operator. */
+ int operator()(Interface1D & /*i1*/, Interface1D & /*i2*/)
+ {
+ result = true;
+ return 0;
+ }
};
// FalseBP1D
/*! Returns false. */
-class FalseBP1D : public BinaryPredicate1D
-{
-public:
- /*! Returns the string "FalseBP1D" */
- string getName() const
- {
- return "FalseBP1D";
- }
-
- /*! The () operator. */
- int operator()(Interface1D& /*i1*/, Interface1D& /*i2*/)
- {
- result = false;
- return 0;
- }
+class FalseBP1D : public BinaryPredicate1D {
+ public:
+ /*! Returns the string "FalseBP1D" */
+ string getName() const
+ {
+ return "FalseBP1D";
+ }
+
+ /*! The () operator. */
+ int operator()(Interface1D & /*i1*/, Interface1D & /*i2*/)
+ {
+ result = false;
+ return 0;
+ }
};
// Length2DBP1D
/*! Returns true if the 2D length of the Interface1D i1 is less than the 2D length of the Interface1D i2. */
-class Length2DBP1D : public BinaryPredicate1D
-{
-public:
- /*! Returns the string "Length2DBP1D" */
- string getName() const
- {
- return "Length2DBP1D";
- }
-
- /*! The () operator. */
- int operator()(Interface1D& i1, Interface1D& i2)
- {
- result = (i1.getLength2D() > i2.getLength2D());
- return 0;
- }
+class Length2DBP1D : public BinaryPredicate1D {
+ public:
+ /*! Returns the string "Length2DBP1D" */
+ string getName() const
+ {
+ return "Length2DBP1D";
+ }
+
+ /*! The () operator. */
+ int operator()(Interface1D &i1, Interface1D &i2)
+ {
+ result = (i1.getLength2D() > i2.getLength2D());
+ return 0;
+ }
};
// SameShapeIdBP1D
/*! Returns true if the Interface1D i1 and i2 belong to the same shape. */
-class SameShapeIdBP1D : public BinaryPredicate1D
-{
-public:
- /*! Returns the string "SameShapeIdBP1D" */
- string getName() const
- {
- return "SameShapeIdBP1D";
- }
-
- /*! The () operator. */
- int operator()(Interface1D& i1, Interface1D& i2)
- {
- set<ViewShape*> shapes1;
- Functions1D::getShapeF1D(i1, shapes1);
- set<ViewShape*> shapes2;
- Functions1D::getShapeF1D(i2, shapes2);
- // FIXME:// n2 algo, can do better...
- for (set<ViewShape*>::iterator s = shapes1.begin(), send = shapes1.end(); s != send; ++s) {
- Id current = (*s)->getId();
- for (set<ViewShape*>::iterator s2 = shapes2.begin(), s2end = shapes2.end(); s2 != s2end; ++s2) {
- if ((*s2)->getId() == current) {
- result = true;
- return 0;
- }
- }
- }
- result = false;
- return 0;
- }
+class SameShapeIdBP1D : public BinaryPredicate1D {
+ public:
+ /*! Returns the string "SameShapeIdBP1D" */
+ string getName() const
+ {
+ return "SameShapeIdBP1D";
+ }
+
+ /*! The () operator. */
+ int operator()(Interface1D &i1, Interface1D &i2)
+ {
+ set<ViewShape *> shapes1;
+ Functions1D::getShapeF1D(i1, shapes1);
+ set<ViewShape *> shapes2;
+ Functions1D::getShapeF1D(i2, shapes2);
+ // FIXME:// n2 algo, can do better...
+ for (set<ViewShape *>::iterator s = shapes1.begin(), send = shapes1.end(); s != send; ++s) {
+ Id current = (*s)->getId();
+ for (set<ViewShape *>::iterator s2 = shapes2.begin(), s2end = shapes2.end(); s2 != s2end;
+ ++s2) {
+ if ((*s2)->getId() == current) {
+ result = true;
+ return 0;
+ }
+ }
+ }
+ result = false;
+ return 0;
+ }
};
// ViewMapGradientNormBP1D
/*! Returns true if the evaluation of the Gradient norm Function is higher for Interface1D i1 than for i2. */
-class ViewMapGradientNormBP1D : public BinaryPredicate1D
-{
-private:
- Functions1D::GetViewMapGradientNormF1D _func;
-
-public:
- ViewMapGradientNormBP1D(int level, IntegrationType iType = MEAN, float sampling = 2.0)
- : BinaryPredicate1D(), _func(level, iType, sampling)
- {
- }
-
- /*! Returns the string "ViewMapGradientNormBP1D" */
- string getName() const
- {
- return "ViewMapGradientNormBP1D";
- }
-
- /*! The () operator. */
- int operator()(Interface1D& i1, Interface1D& i2)
- {
- if (_func(i1) < 0)
- return -1;
- real n1 = _func.result;
- if (_func(i2) < 0)
- return -1;
- real n2 = _func.result;
- result = (n1 > n2);
- return 0;
- }
+class ViewMapGradientNormBP1D : public BinaryPredicate1D {
+ private:
+ Functions1D::GetViewMapGradientNormF1D _func;
+
+ public:
+ ViewMapGradientNormBP1D(int level, IntegrationType iType = MEAN, float sampling = 2.0)
+ : BinaryPredicate1D(), _func(level, iType, sampling)
+ {
+ }
+
+ /*! Returns the string "ViewMapGradientNormBP1D" */
+ string getName() const
+ {
+ return "ViewMapGradientNormBP1D";
+ }
+
+ /*! The () operator. */
+ int operator()(Interface1D &i1, Interface1D &i2)
+ {
+ if (_func(i1) < 0)
+ return -1;
+ real n1 = _func.result;
+ if (_func(i2) < 0)
+ return -1;
+ real n2 = _func.result;
+ result = (n1 > n2);
+ return 0;
+ }
};
-} // end of namespace Predicates1D
+} // end of namespace Predicates1D
} /* namespace Freestyle */
-#endif // __FREESTYLE_PREDICATES_1D_H__
+#endif // __FREESTYLE_PREDICATES_1D_H__