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/scene_graph/IndexedFaceSet.h')
-rw-r--r--source/blender/freestyle/intern/scene_graph/IndexedFaceSet.h537
1 files changed, 276 insertions, 261 deletions
diff --git a/source/blender/freestyle/intern/scene_graph/IndexedFaceSet.h b/source/blender/freestyle/intern/scene_graph/IndexedFaceSet.h
index b875be7200e..83672199e37 100644
--- a/source/blender/freestyle/intern/scene_graph/IndexedFaceSet.h
+++ b/source/blender/freestyle/intern/scene_graph/IndexedFaceSet.h
@@ -32,271 +32,286 @@
namespace Freestyle {
-class IndexedFaceSet : public Rep
-{
-public:
- /*! Triangles description style:*/
- enum TRIANGLES_STYLE {
- TRIANGLE_STRIP,
- TRIANGLE_FAN,
- TRIANGLES,
- };
-
- /*! User-specified face and edge marks for feature edge detection */
- /* XXX Why in hel not use an enum here too? */
- typedef unsigned char FaceEdgeMark;
- static const FaceEdgeMark FACE_MARK = 1 << 0;
- static const FaceEdgeMark EDGE_MARK_V1V2 = 1 << 1;
- static const FaceEdgeMark EDGE_MARK_V2V3 = 1 << 2;
- static const FaceEdgeMark EDGE_MARK_V3V1 = 1 << 3;
-
- /*! Builds an empty indexed face set */
- IndexedFaceSet();
-
- /*! Builds an indexed face set
- * iVertices
- * The array of object vertices 3D coordinates (for all faces).
- * If iCopy != 0, the array is copied; you must desallocate iVertices. Else you must not.
- * iVSize
- * The size of iVertices (must be a multiple of 3)
- * iNormals
- * The array of object normals 3D coordinates.
- * If iCopy != 0, the array is copied; you must desallocate iNormals. Else you must not.
- * iNSize
- * The size of iNormals
- * iMaterials
- * The array of materials
- * iMSize
- * The size of iMaterials
- * iTexCoords
- * The array of texture coordinates.
- * iTSize
- * The size of iTexCoords (must be multiple of 2)
- * iNumFaces
- * The number of faces
- * iNumVertexPerFace
- * Array containing the number of vertices per face.
- * iFaceStyle
- * Array containing the description style of each faces.
- * The style belongs to:
- * - TRIANGLE_STRIP: the face indices describe a triangle strip
- * - TRIANGLE_FAN : the face indices describe a triangle fan
- * - TRIANGLES : the face indices describe single triangles
- * If iCopy != 0, the array is copied; you must desallocate iFaceStyle. Else you must not.
- * iVIndices,
- * Array of vertices indices.
- * The integers contained in this array must be multiple of 3.
- * If iCopy != 0, the array is copied; you must desallocate iVIndices. Else you must not.
- * iVISize
- * The size of iVIndices.
- * iNIndices
- * Array of normals indices.
- * The integers contained in this array must be multiple of 3.
- * If iCopy != 0, the array is copied; you must desallocate iNIndices. Else you must not.
- * iNISize
- * The size of iNIndices
- * iMIndices
- * The Material indices (per vertex)
- * iMISize
- * The size of iMIndices
- * iTIndices
- * The Texture coordinates indices (per vertex). The integers contained in this array must be multiple of 2.
- * iTISize
- * The size of iMIndices
- * iCopy
- * 0 : the arrays are not copied. The pointers passed as arguments are used. IndexedFaceSet takes these
- * arrays desallocation in charge.
- * 1 : the arrays are copied. The caller is in charge of the arrays, passed as arguments desallocation.
- */
- IndexedFaceSet(float *iVertices, unsigned iVSize, float *iNormals, unsigned iNSize, FrsMaterial **iMaterials,
- unsigned iMSize, float *iTexCoords, unsigned iTSize, unsigned iNumFaces, unsigned *iNumVertexPerFace,
- TRIANGLES_STYLE *iFaceStyle, FaceEdgeMark *iFaceEdgeMarks, unsigned *iVIndices, unsigned iVISize,
- unsigned *iNIndices, unsigned iNISize, unsigned *iMIndices, unsigned iMISize, unsigned *iTIndices,
- unsigned iTISize, unsigned iCopy = 1);
-
- /*! Builds an indexed face set from an other indexed face set */
- IndexedFaceSet(const IndexedFaceSet& iBrother);
-
- void swap(IndexedFaceSet& ioOther)
- {
- std::swap(_Vertices, ioOther._Vertices);
- std::swap(_Normals, ioOther._Normals);
- std::swap(_FrsMaterials, ioOther._FrsMaterials);
- std::swap(_TexCoords, ioOther._TexCoords);
- std::swap(_FaceEdgeMarks, ioOther._FaceEdgeMarks);
-
- std::swap(_VSize, ioOther._VSize);
- std::swap(_NSize, ioOther._NSize);
- std::swap(_MSize, ioOther._MSize);
- std::swap(_TSize, ioOther._TSize);
-
- std::swap(_NumFaces, ioOther._NumFaces);
- std::swap(_NumVertexPerFace, ioOther._NumVertexPerFace);
- std::swap(_FaceStyle, ioOther._FaceStyle);
-
- std::swap(_VIndices, ioOther._VIndices);
- std::swap(_NIndices, ioOther._NIndices);
- std::swap(_MIndices, ioOther._MIndices); // Material Indices
- std::swap(_TIndices, ioOther._TIndices);
-
- std::swap(_VISize, ioOther._VISize);
- std::swap(_NISize, ioOther._NISize);
- std::swap(_MISize, ioOther._MISize);
- std::swap(_TISize, ioOther._TISize);
-
- Rep::swap(ioOther);
- }
-
- IndexedFaceSet& operator=(const IndexedFaceSet& iBrother)
- {
- IndexedFaceSet tmp(iBrother);
- swap(tmp);
- return *this;
- }
-
- /*! Desctructor
- * desallocates all the ressources
- */
- virtual ~IndexedFaceSet();
-
- /*! Accept the corresponding visitor */
- virtual void accept(SceneVisitor& v);
-
- /*! Compute the Bounding Box */
- virtual void ComputeBBox();
-
- /*! Accessors */
- virtual const float *vertices() const
- {
- return _Vertices;
- }
-
- virtual const float *normals() const
- {
- return _Normals;
- }
-
- virtual const FrsMaterial * const *frs_materials() const
- {
- return _FrsMaterials;
- }
-
- virtual const float *texCoords() const
- {
- return _TexCoords;
- }
-
- virtual const unsigned vsize() const
- {
- return _VSize;
- }
-
- virtual const unsigned nsize() const
- {
- return _NSize;
- }
-
- virtual const unsigned msize() const
- {
- return _MSize;
- }
-
- virtual const unsigned tsize() const
- {
- return _TSize;
- }
-
- virtual const unsigned numFaces() const
- {
- return _NumFaces;
- }
-
- virtual const unsigned *numVertexPerFaces() const
- {
- return _NumVertexPerFace;
- }
-
- virtual const TRIANGLES_STYLE *trianglesStyle() const
- {
- return _FaceStyle;
- }
-
- virtual const unsigned char *faceEdgeMarks() const
- {
- return _FaceEdgeMarks;
- }
-
- virtual const unsigned *vindices() const
- {
- return _VIndices;
- }
-
- virtual const unsigned *nindices() const
- {
- return _NIndices;
- }
-
- virtual const unsigned *mindices() const
- {
- return _MIndices;
- }
-
- virtual const unsigned *tindices() const
- {
- return _TIndices;
- }
-
- virtual const unsigned visize() const
- {
- return _VISize;
- }
-
- virtual const unsigned nisize() const
- {
- return _NISize;
- }
-
- virtual const unsigned misize() const
- {
- return _MISize;
- }
-
- virtual const unsigned tisize() const
- {
- return _TISize;
- }
-
-protected:
- float *_Vertices;
- float *_Normals;
- FrsMaterial **_FrsMaterials;
- float *_TexCoords;
-
- unsigned _VSize;
- unsigned _NSize;
- unsigned _MSize;
- unsigned _TSize;
-
- unsigned _NumFaces;
- unsigned *_NumVertexPerFace;
- TRIANGLES_STYLE *_FaceStyle;
- FaceEdgeMark *_FaceEdgeMarks;
-
- unsigned *_VIndices;
- unsigned *_NIndices;
- unsigned *_MIndices; // Material Indices
- unsigned *_TIndices; // Texture coordinates Indices
-
- unsigned _VISize;
- unsigned _NISize;
- unsigned _MISize;
- unsigned _TISize;
+class IndexedFaceSet : public Rep {
+ public:
+ /*! Triangles description style:*/
+ enum TRIANGLES_STYLE {
+ TRIANGLE_STRIP,
+ TRIANGLE_FAN,
+ TRIANGLES,
+ };
+
+ /*! User-specified face and edge marks for feature edge detection */
+ /* XXX Why in hel not use an enum here too? */
+ typedef unsigned char FaceEdgeMark;
+ static const FaceEdgeMark FACE_MARK = 1 << 0;
+ static const FaceEdgeMark EDGE_MARK_V1V2 = 1 << 1;
+ static const FaceEdgeMark EDGE_MARK_V2V3 = 1 << 2;
+ static const FaceEdgeMark EDGE_MARK_V3V1 = 1 << 3;
+
+ /*! Builds an empty indexed face set */
+ IndexedFaceSet();
+
+ /*! Builds an indexed face set
+ * iVertices
+ * The array of object vertices 3D coordinates (for all faces).
+ * If iCopy != 0, the array is copied; you must desallocate iVertices. Else you must not.
+ * iVSize
+ * The size of iVertices (must be a multiple of 3)
+ * iNormals
+ * The array of object normals 3D coordinates.
+ * If iCopy != 0, the array is copied; you must desallocate iNormals. Else you must not.
+ * iNSize
+ * The size of iNormals
+ * iMaterials
+ * The array of materials
+ * iMSize
+ * The size of iMaterials
+ * iTexCoords
+ * The array of texture coordinates.
+ * iTSize
+ * The size of iTexCoords (must be multiple of 2)
+ * iNumFaces
+ * The number of faces
+ * iNumVertexPerFace
+ * Array containing the number of vertices per face.
+ * iFaceStyle
+ * Array containing the description style of each faces.
+ * The style belongs to:
+ * - TRIANGLE_STRIP: the face indices describe a triangle strip
+ * - TRIANGLE_FAN : the face indices describe a triangle fan
+ * - TRIANGLES : the face indices describe single triangles
+ * If iCopy != 0, the array is copied; you must desallocate iFaceStyle. Else you must not.
+ * iVIndices,
+ * Array of vertices indices.
+ * The integers contained in this array must be multiple of 3.
+ * If iCopy != 0, the array is copied; you must desallocate iVIndices. Else you must not.
+ * iVISize
+ * The size of iVIndices.
+ * iNIndices
+ * Array of normals indices.
+ * The integers contained in this array must be multiple of 3.
+ * If iCopy != 0, the array is copied; you must desallocate iNIndices. Else you must not.
+ * iNISize
+ * The size of iNIndices
+ * iMIndices
+ * The Material indices (per vertex)
+ * iMISize
+ * The size of iMIndices
+ * iTIndices
+ * The Texture coordinates indices (per vertex). The integers contained in this array must be multiple of 2.
+ * iTISize
+ * The size of iMIndices
+ * iCopy
+ * 0 : the arrays are not copied. The pointers passed as arguments are used. IndexedFaceSet takes these
+ * arrays desallocation in charge.
+ * 1 : the arrays are copied. The caller is in charge of the arrays, passed as arguments desallocation.
+ */
+ IndexedFaceSet(float *iVertices,
+ unsigned iVSize,
+ float *iNormals,
+ unsigned iNSize,
+ FrsMaterial **iMaterials,
+ unsigned iMSize,
+ float *iTexCoords,
+ unsigned iTSize,
+ unsigned iNumFaces,
+ unsigned *iNumVertexPerFace,
+ TRIANGLES_STYLE *iFaceStyle,
+ FaceEdgeMark *iFaceEdgeMarks,
+ unsigned *iVIndices,
+ unsigned iVISize,
+ unsigned *iNIndices,
+ unsigned iNISize,
+ unsigned *iMIndices,
+ unsigned iMISize,
+ unsigned *iTIndices,
+ unsigned iTISize,
+ unsigned iCopy = 1);
+
+ /*! Builds an indexed face set from an other indexed face set */
+ IndexedFaceSet(const IndexedFaceSet &iBrother);
+
+ void swap(IndexedFaceSet &ioOther)
+ {
+ std::swap(_Vertices, ioOther._Vertices);
+ std::swap(_Normals, ioOther._Normals);
+ std::swap(_FrsMaterials, ioOther._FrsMaterials);
+ std::swap(_TexCoords, ioOther._TexCoords);
+ std::swap(_FaceEdgeMarks, ioOther._FaceEdgeMarks);
+
+ std::swap(_VSize, ioOther._VSize);
+ std::swap(_NSize, ioOther._NSize);
+ std::swap(_MSize, ioOther._MSize);
+ std::swap(_TSize, ioOther._TSize);
+
+ std::swap(_NumFaces, ioOther._NumFaces);
+ std::swap(_NumVertexPerFace, ioOther._NumVertexPerFace);
+ std::swap(_FaceStyle, ioOther._FaceStyle);
+
+ std::swap(_VIndices, ioOther._VIndices);
+ std::swap(_NIndices, ioOther._NIndices);
+ std::swap(_MIndices, ioOther._MIndices); // Material Indices
+ std::swap(_TIndices, ioOther._TIndices);
+
+ std::swap(_VISize, ioOther._VISize);
+ std::swap(_NISize, ioOther._NISize);
+ std::swap(_MISize, ioOther._MISize);
+ std::swap(_TISize, ioOther._TISize);
+
+ Rep::swap(ioOther);
+ }
+
+ IndexedFaceSet &operator=(const IndexedFaceSet &iBrother)
+ {
+ IndexedFaceSet tmp(iBrother);
+ swap(tmp);
+ return *this;
+ }
+
+ /*! Desctructor
+ * desallocates all the ressources
+ */
+ virtual ~IndexedFaceSet();
+
+ /*! Accept the corresponding visitor */
+ virtual void accept(SceneVisitor &v);
+
+ /*! Compute the Bounding Box */
+ virtual void ComputeBBox();
+
+ /*! Accessors */
+ virtual const float *vertices() const
+ {
+ return _Vertices;
+ }
+
+ virtual const float *normals() const
+ {
+ return _Normals;
+ }
+
+ virtual const FrsMaterial *const *frs_materials() const
+ {
+ return _FrsMaterials;
+ }
+
+ virtual const float *texCoords() const
+ {
+ return _TexCoords;
+ }
+
+ virtual const unsigned vsize() const
+ {
+ return _VSize;
+ }
+
+ virtual const unsigned nsize() const
+ {
+ return _NSize;
+ }
+
+ virtual const unsigned msize() const
+ {
+ return _MSize;
+ }
+
+ virtual const unsigned tsize() const
+ {
+ return _TSize;
+ }
+
+ virtual const unsigned numFaces() const
+ {
+ return _NumFaces;
+ }
+
+ virtual const unsigned *numVertexPerFaces() const
+ {
+ return _NumVertexPerFace;
+ }
+
+ virtual const TRIANGLES_STYLE *trianglesStyle() const
+ {
+ return _FaceStyle;
+ }
+
+ virtual const unsigned char *faceEdgeMarks() const
+ {
+ return _FaceEdgeMarks;
+ }
+
+ virtual const unsigned *vindices() const
+ {
+ return _VIndices;
+ }
+
+ virtual const unsigned *nindices() const
+ {
+ return _NIndices;
+ }
+
+ virtual const unsigned *mindices() const
+ {
+ return _MIndices;
+ }
+
+ virtual const unsigned *tindices() const
+ {
+ return _TIndices;
+ }
+
+ virtual const unsigned visize() const
+ {
+ return _VISize;
+ }
+
+ virtual const unsigned nisize() const
+ {
+ return _NISize;
+ }
+
+ virtual const unsigned misize() const
+ {
+ return _MISize;
+ }
+
+ virtual const unsigned tisize() const
+ {
+ return _TISize;
+ }
+
+ protected:
+ float *_Vertices;
+ float *_Normals;
+ FrsMaterial **_FrsMaterials;
+ float *_TexCoords;
+
+ unsigned _VSize;
+ unsigned _NSize;
+ unsigned _MSize;
+ unsigned _TSize;
+
+ unsigned _NumFaces;
+ unsigned *_NumVertexPerFace;
+ TRIANGLES_STYLE *_FaceStyle;
+ FaceEdgeMark *_FaceEdgeMarks;
+
+ unsigned *_VIndices;
+ unsigned *_NIndices;
+ unsigned *_MIndices; // Material Indices
+ unsigned *_TIndices; // Texture coordinates Indices
+
+ unsigned _VISize;
+ unsigned _NISize;
+ unsigned _MISize;
+ unsigned _TISize;
#ifdef WITH_CXX_GUARDEDALLOC
- MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:IndexedFaceSet")
+ MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:IndexedFaceSet")
#endif
};
} /* namespace Freestyle */
-#endif // __FREESTYLE_INDEXED_FACE_SET_H__
+#endif // __FREESTYLE_INDEXED_FACE_SET_H__