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/ViewMapTesselator.h')
-rw-r--r--source/blender/freestyle/intern/view_map/ViewMapTesselator.h279
1 files changed, 142 insertions, 137 deletions
diff --git a/source/blender/freestyle/intern/view_map/ViewMapTesselator.h b/source/blender/freestyle/intern/view_map/ViewMapTesselator.h
index a24a7cfdf18..2173ea42fab 100644
--- a/source/blender/freestyle/intern/view_map/ViewMapTesselator.h
+++ b/source/blender/freestyle/intern/view_map/ViewMapTesselator.h
@@ -34,7 +34,7 @@
#include "../winged_edge/WEdge.h"
#ifdef WITH_CXX_GUARDEDALLOC
-#include "MEM_guardedalloc.h"
+# include "MEM_guardedalloc.h"
#endif
namespace Freestyle {
@@ -44,100 +44,105 @@ class NodeGroup;
class SShape;
class WShape;
-class ViewMapTesselator
-{
-public:
- inline ViewMapTesselator()
- {
- _nature = Nature::SILHOUETTE | Nature::BORDER | Nature::CREASE;
- _FrsMaterial.setDiffuse(0, 0, 0, 1);
- _overloadFrsMaterial = false;
- }
-
- virtual ~ViewMapTesselator() {}
-
- /*! Builds a set of lines rep contained under a a NodeShape, itself contained under a NodeGroup from a ViewMap */
- NodeGroup *Tesselate(ViewMap *iViewMap);
-
- /*! Builds a set of lines rep contained under a a NodeShape, itself contained under a NodeGroup from a set of
- * view edges
- */
- template<class ViewEdgesIterator>
- NodeGroup *Tesselate(ViewEdgesIterator begin, ViewEdgesIterator end);
-
- /*! Builds a set of lines rep contained among a NodeShape, from a WShape */
- NodeGroup *Tesselate(WShape *iWShape);
-
- inline void setNature(Nature::EdgeNature iNature)
- {
- _nature = iNature;
- }
-
- inline void setFrsMaterial(const FrsMaterial& iMaterial)
- {
- _FrsMaterial = iMaterial;
- _overloadFrsMaterial = true;
- }
-
- inline Nature::EdgeNature nature()
- {
- return _nature;
- }
-
- inline const FrsMaterial& frs_material() const
- {
- return _FrsMaterial;
- }
-
-protected:
- virtual void AddVertexToLine(LineRep *iLine, SVertex *v) = 0;
-
-private:
- Nature::EdgeNature _nature;
- FrsMaterial _FrsMaterial;
- bool _overloadFrsMaterial;
+class ViewMapTesselator {
+ public:
+ inline ViewMapTesselator()
+ {
+ _nature = Nature::SILHOUETTE | Nature::BORDER | Nature::CREASE;
+ _FrsMaterial.setDiffuse(0, 0, 0, 1);
+ _overloadFrsMaterial = false;
+ }
+
+ virtual ~ViewMapTesselator()
+ {
+ }
+
+ /*! Builds a set of lines rep contained under a a NodeShape, itself contained under a NodeGroup from a ViewMap */
+ NodeGroup *Tesselate(ViewMap *iViewMap);
+
+ /*! Builds a set of lines rep contained under a a NodeShape, itself contained under a NodeGroup from a set of
+ * view edges
+ */
+ template<class ViewEdgesIterator>
+ NodeGroup *Tesselate(ViewEdgesIterator begin, ViewEdgesIterator end);
+
+ /*! Builds a set of lines rep contained among a NodeShape, from a WShape */
+ NodeGroup *Tesselate(WShape *iWShape);
+
+ inline void setNature(Nature::EdgeNature iNature)
+ {
+ _nature = iNature;
+ }
+
+ inline void setFrsMaterial(const FrsMaterial &iMaterial)
+ {
+ _FrsMaterial = iMaterial;
+ _overloadFrsMaterial = true;
+ }
+
+ inline Nature::EdgeNature nature()
+ {
+ return _nature;
+ }
+
+ inline const FrsMaterial &frs_material() const
+ {
+ return _FrsMaterial;
+ }
+
+ protected:
+ virtual void AddVertexToLine(LineRep *iLine, SVertex *v) = 0;
+
+ private:
+ Nature::EdgeNature _nature;
+ FrsMaterial _FrsMaterial;
+ bool _overloadFrsMaterial;
#ifdef WITH_CXX_GUARDEDALLOC
- MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:ViewMapTesselator")
+ MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:ViewMapTesselator")
#endif
};
/*! Class to tesselate the 2D projected silhouette */
-class ViewMapTesselator2D : public ViewMapTesselator
-{
-public:
- inline ViewMapTesselator2D() : ViewMapTesselator() {}
- virtual ~ViewMapTesselator2D() {}
-
-protected:
- virtual void AddVertexToLine(LineRep *iLine, SVertex *v)
- {
- iLine->AddVertex(v->point2D());
- }
+class ViewMapTesselator2D : public ViewMapTesselator {
+ public:
+ inline ViewMapTesselator2D() : ViewMapTesselator()
+ {
+ }
+ virtual ~ViewMapTesselator2D()
+ {
+ }
+
+ protected:
+ virtual void AddVertexToLine(LineRep *iLine, SVertex *v)
+ {
+ iLine->AddVertex(v->point2D());
+ }
#ifdef WITH_CXX_GUARDEDALLOC
- MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:ViewMapTesselator2D")
+ MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:ViewMapTesselator2D")
#endif
-
};
/*! Class to tesselate the 3D silhouette */
-class ViewMapTesselator3D : public ViewMapTesselator
-{
-public:
- inline ViewMapTesselator3D() : ViewMapTesselator() {}
- virtual ~ViewMapTesselator3D() {}
-
-protected:
- virtual void AddVertexToLine(LineRep *iLine, SVertex *v)
- {
- iLine->AddVertex(v->point3D());
- }
+class ViewMapTesselator3D : public ViewMapTesselator {
+ public:
+ inline ViewMapTesselator3D() : ViewMapTesselator()
+ {
+ }
+ virtual ~ViewMapTesselator3D()
+ {
+ }
+
+ protected:
+ virtual void AddVertexToLine(LineRep *iLine, SVertex *v)
+ {
+ iLine->AddVertex(v->point3D());
+ }
#ifdef WITH_CXX_GUARDEDALLOC
- MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:ViewMapTesselator3D")
+ MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:ViewMapTesselator3D")
#endif
-
};
//
@@ -148,73 +153,73 @@ protected:
template<class ViewEdgesIterator>
NodeGroup *ViewMapTesselator::Tesselate(ViewEdgesIterator begin, ViewEdgesIterator end)
{
- NodeGroup *group = new NodeGroup;
- NodeShape *tshape = new NodeShape;
- group->AddChild(tshape);
- //tshape->frs_material().setDiffuse(0.0f, 0.0f, 0.0f, 1.0f);
- tshape->setFrsMaterial(_FrsMaterial);
+ NodeGroup *group = new NodeGroup;
+ NodeShape *tshape = new NodeShape;
+ group->AddChild(tshape);
+ //tshape->frs_material().setDiffuse(0.0f, 0.0f, 0.0f, 1.0f);
+ tshape->setFrsMaterial(_FrsMaterial);
- LineRep *line;
+ LineRep *line;
- FEdge *firstEdge;
- FEdge *nextFEdge, *currentEdge;
+ FEdge *firstEdge;
+ FEdge *nextFEdge, *currentEdge;
- int id = 0;
- //for (vector<ViewEdge*>::const_iterator c = viewedges.begin(), cend = viewedges.end(); c != cend; c++)
- for (ViewEdgesIterator c = begin, cend = end; c != cend; c++) {
+ int id = 0;
+ //for (vector<ViewEdge*>::const_iterator c = viewedges.begin(), cend = viewedges.end(); c != cend; c++)
+ for (ViewEdgesIterator c = begin, cend = end; c != cend; c++) {
#if 0
- if ((*c)->qi() > 0) {
- continue;
- }
- if (!((*c)->nature() & (_nature))) {
- continue;
- }
+ if ((*c)->qi() > 0) {
+ continue;
+ }
+ if (!((*c)->nature() & (_nature))) {
+ continue;
+ }
#endif
- firstEdge = (*c)->fedgeA();
+ firstEdge = (*c)->fedgeA();
#if 0
- if (firstEdge->invisibility() > 0)
- continue;
+ if (firstEdge->invisibility() > 0)
+ continue;
#endif
- line = new OrientedLineRep();
- if (_overloadFrsMaterial)
- line->setFrsMaterial(_FrsMaterial);
-
- // there might be chains containing a single element
- if (0 == (firstEdge)->nextEdge()) {
- line->setStyle(LineRep::LINES);
- //line->AddVertex((*c)->vertexA()->point3D());
- //line->AddVertex((*c)->vertexB()->point3D());
- AddVertexToLine(line, firstEdge->vertexA());
- AddVertexToLine(line, firstEdge->vertexB());
- }
- else {
- line->setStyle(LineRep::LINE_STRIP);
-
- //firstEdge = (*c);
- nextFEdge = firstEdge;
- currentEdge = firstEdge;
- do {
- //line->AddVertex(nextFEdge->vertexA()->point3D());
- AddVertexToLine(line, nextFEdge->vertexA());
- currentEdge = nextFEdge;
- nextFEdge = nextFEdge->nextEdge();
- } while ((nextFEdge != NULL) && (nextFEdge != firstEdge));
- // Add the last vertex
- //line->AddVertex(currentEdge->vertexB()->point3D());
- AddVertexToLine(line, currentEdge->vertexB());
- }
-
- line->setId((*c)->getId().getFirst());
- line->ComputeBBox();
- tshape->AddRep(line);
- id++;
- }
-
- return group;
+ line = new OrientedLineRep();
+ if (_overloadFrsMaterial)
+ line->setFrsMaterial(_FrsMaterial);
+
+ // there might be chains containing a single element
+ if (0 == (firstEdge)->nextEdge()) {
+ line->setStyle(LineRep::LINES);
+ //line->AddVertex((*c)->vertexA()->point3D());
+ //line->AddVertex((*c)->vertexB()->point3D());
+ AddVertexToLine(line, firstEdge->vertexA());
+ AddVertexToLine(line, firstEdge->vertexB());
+ }
+ else {
+ line->setStyle(LineRep::LINE_STRIP);
+
+ //firstEdge = (*c);
+ nextFEdge = firstEdge;
+ currentEdge = firstEdge;
+ do {
+ //line->AddVertex(nextFEdge->vertexA()->point3D());
+ AddVertexToLine(line, nextFEdge->vertexA());
+ currentEdge = nextFEdge;
+ nextFEdge = nextFEdge->nextEdge();
+ } while ((nextFEdge != NULL) && (nextFEdge != firstEdge));
+ // Add the last vertex
+ //line->AddVertex(currentEdge->vertexB()->point3D());
+ AddVertexToLine(line, currentEdge->vertexB());
+ }
+
+ line->setId((*c)->getId().getFirst());
+ line->ComputeBBox();
+ tshape->AddRep(line);
+ id++;
+ }
+
+ return group;
}
} /* namespace Freestyle */
-#endif // __FREESTYLE_VIEW_MAP_TESSELATOR_H__
+#endif // __FREESTYLE_VIEW_MAP_TESSELATOR_H__