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/view_map/Interface1D.h')
-rw-r--r--source/blender/freestyle/intern/view_map/Interface1D.h382
1 files changed, 193 insertions, 189 deletions
diff --git a/source/blender/freestyle/intern/view_map/Interface1D.h b/source/blender/freestyle/intern/view_map/Interface1D.h
index 60cc0ebcb7e..440c6f275b8 100644
--- a/source/blender/freestyle/intern/view_map/Interface1D.h
+++ b/source/blender/freestyle/intern/view_map/Interface1D.h
@@ -1,125 +1,126 @@
-//
-// Filename : Interface1D.h
-// Author(s) : Emmanuel Turquin
-// Purpose : Interface to 1D elts
-// Date of creation : 01/07/2003
-//
-///////////////////////////////////////////////////////////////////////////////
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2010 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef __FREESTYLE_INTERFACE_1D_H__
+#define __FREESTYLE_INTERFACE_1D_H__
-//
-// Copyright (C) : Please refer to the COPYRIGHT file distributed
-// with this source distribution.
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-//
-///////////////////////////////////////////////////////////////////////////////
+/** \file blender/freestyle/intern/view_map/Interface1D.h
+ * \ingroup freestyle
+ * \brief Interface 1D and related tools definitions
+ * \author Emmanuel Turquin
+ * \date 01/07/2003
+ */
+
+#include <float.h>
+#include <iostream>
+#include <Python.h>
+#include <string>
-#ifndef INTERFACE1D_H
-# define INTERFACE1D_H
+#include "Functions0D.h"
-# include <Python.h>
-# include <string>
-# include <iostream>
-# include <float.h>
-# include "../system/Id.h"
-# include "../system/Precision.h"
-# include "../winged_edge/Nature.h"
-# include "Functions0D.h"
+#include "../system/Id.h"
+#include "../system/Precision.h"
+
+#include "../winged_edge/Nature.h"
using namespace std;
-/*! \file Interface1D.h
- * Interface1D and related tools definitions
- */
+
// Integration method
-/*! The different integration
- * methods that can be invoked
- * to integrate into a single value the set of values obtained
+/*! The different integration methods that can be invoked to integrate into a single value the set of values obtained
* from each 0D element of a 1D element.
*/
typedef enum {
- MEAN,/*!< The value computed for the 1D element is the mean of the values obtained for the 0D elements.*/
- MIN,/*!< The value computed for the 1D element is the minimum of the values obtained for the 0D elements.*/
- MAX,/*!< The value computed for the 1D element is the maximum of the values obtained for the 0D elements.*/
- FIRST,/*!< The value computed for the 1D element is the first of the values obtained for the 0D elements.*/
- LAST/*!< The value computed for the 1D element is the last of the values obtained for the 0D elements.*/
+ MEAN, /*!< The value computed for the 1D element is the mean of the values obtained for the 0D elements.*/
+ MIN, /*!< The value computed for the 1D element is the minimum of the values obtained for the 0D elements.*/
+ MAX, /*!< The value computed for the 1D element is the maximum of the values obtained for the 0D elements.*/
+ FIRST, /*!< The value computed for the 1D element is the first of the values obtained for the 0D elements.*/
+ LAST /*!< The value computed for the 1D element is the last of the values obtained for the 0D elements.*/
} IntegrationType;
-/*! Returns a single
- * value from a set of values evaluated at each 0D element
- * of this 1D element.
+/*! Returns a single value from a set of values evaluated at each 0D element of this 1D element.
* \param fun
* The UnaryFunction0D used to compute a value at each Interface0D.
* \param it
- * The Interface0DIterator used to iterate over the 0D elements of
- * this 1D element. The integration will occur over the 0D elements
- * starting from the one pointed by it.
+ * The Interface0DIterator used to iterate over the 0D elements of this 1D element. The integration will occur
+ * over the 0D elements starting from the one pointed by it.
* \param it_end
- * The Interface0DIterator pointing the end of the 0D elements of the
- * 1D element.
+ * The Interface0DIterator pointing the end of the 0D elements of the 1D element.
* \param integration_type
- * The integration method used to compute a single value from
- * a set of values.
+ * The integration method used to compute a single value from a set of values.
* \return the single value obtained for the 1D element.
*/
template <class T>
-T integrate(UnaryFunction0D<T>& fun,
- Interface0DIterator it,
- Interface0DIterator it_end,
- IntegrationType integration_type = MEAN) {
- T res;
- unsigned size;
- switch (integration_type) {
- case MIN:
- fun(it);
- res = fun.result;++it;
- for (; !it.isEnd(); ++it) {
- fun(it);
- if (fun.result < res)
- res = fun.result;
- }
- break;
- case MAX:
- fun(it);
- res = fun.result;++it;
- for (; !it.isEnd(); ++it) {
- fun(it);
- if (fun.result > res)
- res = fun.result;
- }
- break;
- case FIRST:
- fun(it);
- res = fun.result;
- break;
- case LAST:
- fun(--it_end);
- res = fun.result;
- break;
- case MEAN:
- default:
- fun(it);
- res = fun.result;++it;
- for (size = 1; !it.isEnd(); ++it, ++size) {
- fun(it);
- res += fun.result;
+T integrate(UnaryFunction0D<T>& fun, Interface0DIterator it, Interface0DIterator it_end,
+ IntegrationType integration_type = MEAN)
+{
+ T res;
+ unsigned size;
+ switch (integration_type) {
+ case MIN:
+ fun(it);
+ res = fun.result;
+ ++it;
+ for (; !it.isEnd(); ++it) {
+ fun(it);
+ if (fun.result < res)
+ res = fun.result;
+ }
+ break;
+ case MAX:
+ fun(it);
+ res = fun.result;
+ ++it;
+ for (; !it.isEnd(); ++it) {
+ fun(it);
+ if (fun.result > res)
+ res = fun.result;
+ }
+ break;
+ case FIRST:
+ fun(it);
+ res = fun.result;
+ break;
+ case LAST:
+ fun(--it_end);
+ res = fun.result;
+ break;
+ case MEAN:
+ default:
+ fun(it);
+ res = fun.result;
+ ++it;
+ for (size = 1; !it.isEnd(); ++it, ++size) {
+ fun(it);
+ res += fun.result;
+ }
+ res /= (size ? size : 1);
+ break;
}
- res /= (size ? size : 1);
- break;
- }
- return res;
+ return res;
}
//
@@ -131,96 +132,99 @@ T integrate(UnaryFunction0D<T>& fun,
class Interface1D
{
public:
+ /*! Default constructor */
+ Interface1D()
+ {
+ _timeStamp = 0;
+ }
+
+ virtual ~Interface1D() {}; //soc
+
+ /*! Returns the string "Interface1D". */
+ virtual string getExactTypeName() const
+ {
+ return "Interface1D";
+ }
+
+ // Iterator access
- /*! Default constructor */
- Interface1D() {_timeStamp=0;}
- virtual ~Interface1D() {}; //soc
-
- /*! Returns the string "Interface1D" .*/
- virtual string getExactTypeName() const {
- return "Interface1D";
- }
-
- // Iterator access
-
- /*! Returns an iterator over the Interface1D vertices,
- * pointing to the first vertex.
- */
- virtual Interface0DIterator verticesBegin() {
- PyErr_SetString(PyExc_TypeError, "method verticesBegin() not properly overridden");
- return Interface0DIterator();
- }
-
- /*! Returns an iterator over the Interface1D vertices,
- * pointing after the last vertex.
- */
- virtual Interface0DIterator verticesEnd(){
- PyErr_SetString(PyExc_TypeError, "method verticesEnd() not properly overridden");
- return Interface0DIterator();
- }
-
- /*! Returns an iterator over the Interface1D points,
- * pointing to the first point. The difference with
- * verticesBegin() is that here we can iterate over
- * points of the 1D element at a any given sampling.
- * Indeed, for each iteration, a virtual point is created.
- * \param t
- * The sampling with which we want to iterate over points of
- * this 1D element.
- */
- virtual Interface0DIterator pointsBegin(float t=0.f) {
- PyErr_SetString(PyExc_TypeError, "method pointsBegin() not properly overridden");
- return Interface0DIterator();
- }
-
- /*! Returns an iterator over the Interface1D points,
- * pointing after the last point. The difference with
- * verticesEnd() is that here we can iterate over
- * points of the 1D element at a any given sampling.
- * Indeed, for each iteration, a virtual point is created.
- * \param t
- * The sampling with which we want to iterate over points of
- * this 1D element.
- */
- virtual Interface0DIterator pointsEnd(float t=0.f) {
- PyErr_SetString(PyExc_TypeError, "method pointsEnd() not properly overridden");
- return Interface0DIterator();
- }
-
- // Data access methods
-
- /*! Returns the 2D length of the 1D element. */
- virtual real getLength2D() const {
- PyErr_SetString(PyExc_TypeError, "method getLength2D() not properly overridden");
- return 0;
- }
-
- /*! Returns the Id of the 1D element .*/
- virtual Id getId() const {
- PyErr_SetString(PyExc_TypeError, "method getId() not properly overridden");
- return Id(0, 0);
- }
-
-
- // FIXME: ce truc n'a rien a faire la...(c une requete complexe qui doit etre ds les Function1D)
- /*! Returns the nature of the 1D element. */
- virtual Nature::EdgeNature getNature() const {
- PyErr_SetString(PyExc_TypeError, "method getNature() not properly overridden");
- return Nature::NO_FEATURE;
- }
-
- /*! Returns the time stamp of the 1D element. Mainly used for selection. */
- virtual unsigned getTimeStamp() const {
- return _timeStamp;
- }
-
- /*! Sets the time stamp for the 1D element. */
- inline void setTimeStamp(unsigned iTimeStamp){
- _timeStamp = iTimeStamp;
- }
+ /*! Returns an iterator over the Interface1D vertices, pointing to the first vertex. */
+ virtual Interface0DIterator verticesBegin()
+ {
+ PyErr_SetString(PyExc_TypeError, "method verticesBegin() not properly overridden");
+ return Interface0DIterator();
+ }
+
+ /*! Returns an iterator over the Interface1D vertices, pointing after the last vertex. */
+ virtual Interface0DIterator verticesEnd()
+ {
+ PyErr_SetString(PyExc_TypeError, "method verticesEnd() not properly overridden");
+ return Interface0DIterator();
+ }
+
+ /*! Returns an iterator over the Interface1D points, pointing to the first point. The difference with
+ * verticesBegin() is that here we can iterate over points of the 1D element at a any given sampling.
+ * Indeed, for each iteration, a virtual point is created.
+ * \param t
+ * The sampling with which we want to iterate over points of this 1D element.
+ */
+ virtual Interface0DIterator pointsBegin(float t = 0.0f)
+ {
+ PyErr_SetString(PyExc_TypeError, "method pointsBegin() not properly overridden");
+ return Interface0DIterator();
+ }
+
+ /*! Returns an iterator over the Interface1D points, pointing after the last point. The difference with
+ * verticesEnd() is that here we can iterate over points of the 1D element at a any given sampling.
+ * Indeed, for each iteration, a virtual point is created.
+ * \param t
+ * The sampling with which we want to iterate over points of this 1D element.
+ */
+ virtual Interface0DIterator pointsEnd(float t = 0.0f)
+ {
+ PyErr_SetString(PyExc_TypeError, "method pointsEnd() not properly overridden");
+ return Interface0DIterator();
+ }
+
+ // Data access methods
+
+ /*! Returns the 2D length of the 1D element. */
+ virtual real getLength2D() const
+ {
+ PyErr_SetString(PyExc_TypeError, "method getLength2D() not properly overridden");
+ return 0;
+ }
+
+ /*! Returns the Id of the 1D element. */
+ virtual Id getId() const
+ {
+ PyErr_SetString(PyExc_TypeError, "method getId() not properly overridden");
+ return Id(0, 0);
+ }
+
+
+ // FIXME: ce truc n'a rien a faire la...(c une requete complexe qui doit etre ds les Function1D)
+ /*! Returns the nature of the 1D element. */
+ virtual Nature::EdgeNature getNature() const
+ {
+ PyErr_SetString(PyExc_TypeError, "method getNature() not properly overridden");
+ return Nature::NO_FEATURE;
+ }
+
+ /*! Returns the time stamp of the 1D element. Mainly used for selection. */
+ virtual unsigned getTimeStamp() const
+ {
+ return _timeStamp;
+ }
+
+ /*! Sets the time stamp for the 1D element. */
+ inline void setTimeStamp(unsigned iTimeStamp)
+ {
+ _timeStamp = iTimeStamp;
+ }
protected:
- unsigned _timeStamp;
+ unsigned _timeStamp;
};
-#endif // INTERFACE1D_H
+#endif // __FREESTYLE_INTERFACE_1D_H__