summaryrefslogtreecommitdiff
path: root/libs/assimp/contrib/Open3DGC/o3dgcIndexedFaceSet.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/assimp/contrib/Open3DGC/o3dgcIndexedFaceSet.h')
-rw-r--r--libs/assimp/contrib/Open3DGC/o3dgcIndexedFaceSet.h263
1 files changed, 263 insertions, 0 deletions
diff --git a/libs/assimp/contrib/Open3DGC/o3dgcIndexedFaceSet.h b/libs/assimp/contrib/Open3DGC/o3dgcIndexedFaceSet.h
new file mode 100644
index 0000000..adb8cb0
--- /dev/null
+++ b/libs/assimp/contrib/Open3DGC/o3dgcIndexedFaceSet.h
@@ -0,0 +1,263 @@
+/*
+Copyright (c) 2013 Khaled Mammou - Advanced Micro Devices, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+
+#pragma once
+#ifndef O3DGC_INDEXED_FACE_SET_H
+#define O3DGC_INDEXED_FACE_SET_H
+
+#include "o3dgcCommon.h"
+
+namespace o3dgc
+{
+ template<class T>
+ class IndexedFaceSet
+ {
+ public:
+ //! Constructor.
+ IndexedFaceSet(void)
+ {
+ memset(this, 0, sizeof(IndexedFaceSet));
+ m_ccw = true;
+ m_solid = true;
+ m_convex = true;
+ m_isTriangularMesh = true;
+ m_creaseAngle = 30;
+ };
+ //! Destructor.
+ ~IndexedFaceSet(void) {};
+
+ unsigned long GetNCoordIndex() const { return m_nCoordIndex ;}
+ // only coordIndex is supported
+ unsigned long GetNCoord() const { return m_nCoord ;}
+ unsigned long GetNNormal() const { return m_nNormal ;}
+ unsigned long GetNFloatAttribute(unsigned long a) const
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
+ return m_nFloatAttribute[a];
+ }
+ unsigned long GetNIntAttribute(unsigned long a) const
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
+ return m_nIntAttribute[a];
+ }
+ unsigned long GetNumFloatAttributes() const { return m_numFloatAttributes;}
+ unsigned long GetNumIntAttributes() const { return m_numIntAttributes ;}
+ const Real * GetCoordMin () const { return m_coordMin;}
+ const Real * GetCoordMax () const { return m_coordMax;}
+ const Real * GetNormalMin () const { return m_normalMin;}
+ const Real * GetNormalMax () const { return m_normalMax;}
+ Real GetCoordMin (int j) const { return m_coordMin[j] ;}
+ Real GetCoordMax (int j) const { return m_coordMax[j] ;}
+ Real GetNormalMin (int j) const { return m_normalMin[j] ;}
+ Real GetNormalMax (int j) const { return m_normalMax[j] ;}
+
+ O3DGCIFSFloatAttributeType GetFloatAttributeType(unsigned long a) const
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
+ return m_typeFloatAttribute[a];
+ }
+ O3DGCIFSIntAttributeType GetIntAttributeType(unsigned long a) const
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
+ return m_typeIntAttribute[a];
+ }
+ unsigned long GetFloatAttributeDim(unsigned long a) const
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
+ return m_dimFloatAttribute[a];
+ }
+ unsigned long GetIntAttributeDim(unsigned long a) const
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
+ return m_dimIntAttribute[a];
+ }
+ const Real * GetFloatAttributeMin(unsigned long a) const
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
+ return &(m_minFloatAttribute[a * O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES]);
+ }
+ const Real * GetFloatAttributeMax(unsigned long a) const
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
+ return &(m_maxFloatAttribute[a * O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES]);
+ }
+ Real GetFloatAttributeMin(unsigned long a, unsigned long dim) const
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
+ assert(dim < O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES);
+ return m_minFloatAttribute[a * O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES + dim];
+ }
+ Real GetFloatAttributeMax(unsigned long a, unsigned long dim) const
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
+ assert(dim < O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES);
+ return m_maxFloatAttribute[a * O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES + dim];
+ }
+ Real GetCreaseAngle() const { return m_creaseAngle ;}
+ bool GetCCW() const { return m_ccw ;}
+ bool GetSolid() const { return m_solid ;}
+ bool GetConvex() const { return m_convex ;}
+ bool GetIsTriangularMesh() const { return m_isTriangularMesh;}
+ const unsigned long * GetIndexBufferID() const { return m_indexBufferID ;}
+ const T * GetCoordIndex() const { return m_coordIndex;}
+ T * GetCoordIndex() { return m_coordIndex;}
+ Real * GetCoord() const { return m_coord ;}
+ Real * GetNormal() const { return m_normal ;}
+ Real * GetFloatAttribute(unsigned long a) const
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
+ return m_floatAttribute[a];
+ }
+ long * GetIntAttribute(unsigned long a) const
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
+ return m_intAttribute[a] ;
+ }
+ // only coordIndex is supported
+ void SetNNormalIndex(unsigned long) {}
+ void SetNTexCoordIndex(unsigned long) {}
+ void SetNFloatAttributeIndex(int, unsigned long) {}
+ void SetNIntAttributeIndex (int, unsigned long) {}
+ // per triangle attributes not supported
+ void SetNormalPerVertex(bool) {}
+ void SetColorPerVertex(bool) {}
+ void SetFloatAttributePerVertex(int, bool){}
+ void SetIntAttributePerVertex (int, bool){}
+ void SetNCoordIndex (unsigned long nCoordIndex) { m_nCoordIndex = nCoordIndex;}
+ void SetNCoord (unsigned long nCoord) { m_nCoord = nCoord ;}
+ void SetNNormal (unsigned long nNormal) { m_nNormal = nNormal ;}
+ void SetNumFloatAttributes(unsigned long numFloatAttributes)
+ {
+ assert(numFloatAttributes < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
+ m_numFloatAttributes = numFloatAttributes;
+ }
+ void SetNumIntAttributes (unsigned long numIntAttributes)
+ {
+ assert(numIntAttributes < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
+ m_numIntAttributes = numIntAttributes;
+ }
+ void SetCreaseAngle (Real creaseAngle) { m_creaseAngle = creaseAngle ;}
+ void SetCCW (bool ccw) { m_ccw = ccw ;}
+ void SetSolid (bool solid) { m_solid = solid ;}
+ void SetConvex (bool convex) { m_convex = convex ;}
+ void SetIsTriangularMesh (bool isTriangularMesh) { m_isTriangularMesh = isTriangularMesh;}
+ void SetCoordMin (int j, Real min) { m_coordMin[j] = min;}
+ void SetCoordMax (int j, Real max) { m_coordMax[j] = max;}
+ void SetNormalMin (int j, Real min) { m_normalMin[j] = min;}
+ void SetNormalMax (int j, Real max) { m_normalMax[j] = max;}
+ void SetNFloatAttribute(unsigned long a, unsigned long nFloatAttribute)
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
+ m_nFloatAttribute[a] = nFloatAttribute;
+ }
+ void SetNIntAttribute(unsigned long a, unsigned long nIntAttribute)
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
+ m_nIntAttribute[a] = nIntAttribute;
+ }
+ void SetFloatAttributeDim(unsigned long a, unsigned long d)
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
+ m_dimFloatAttribute[a] = d;
+ }
+ void SetIntAttributeDim(unsigned long a, unsigned long d)
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
+ m_dimIntAttribute[a] = d;
+ }
+ void SetFloatAttributeType(unsigned long a, O3DGCIFSFloatAttributeType t)
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
+ m_typeFloatAttribute[a] = t;
+ }
+ void SetIntAttributeType(unsigned long a, O3DGCIFSIntAttributeType t)
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
+ m_typeIntAttribute[a] = t;
+ }
+ void SetFloatAttributeMin(unsigned long a, unsigned long dim, Real min)
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
+ assert(dim < O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES);
+ m_minFloatAttribute[a * O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES + dim] = min;
+ }
+ void SetFloatAttributeMax(unsigned long a, unsigned long dim, Real max)
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
+ assert(dim < O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES);
+ m_maxFloatAttribute[a * O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES + dim] = max;
+ }
+ void SetIndexBufferID (unsigned long * const indexBufferID) { m_indexBufferID = indexBufferID;}
+ void SetCoordIndex (T * const coordIndex) { m_coordIndex = coordIndex;}
+ void SetCoord (Real * const coord ) { m_coord = coord ;}
+ void SetNormal (Real * const normal ) { m_normal = normal ;}
+ void SetFloatAttribute (unsigned long a, Real * const floatAttribute)
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES);
+ m_floatAttribute[a] = floatAttribute;
+ }
+ void SetIntAttribute (unsigned long a, long * const intAttribute)
+ {
+ assert(a < O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES);
+ m_intAttribute[a] = intAttribute ;
+ }
+ void ComputeMinMax(O3DGCSC3DMCQuantizationMode quantMode);
+
+ private:
+ // triangles list
+ unsigned long m_nCoordIndex;
+ T * m_coordIndex;
+ unsigned long * m_indexBufferID;
+ // coord, normals, texcoord and color
+ unsigned long m_nCoord;
+ unsigned long m_nNormal;
+ Real m_coordMin [3];
+ Real m_coordMax [3];
+ Real m_normalMin [3];
+ Real m_normalMax [3];
+ Real * m_coord;
+ Real * m_normal;
+ // other attributes
+ unsigned long m_numFloatAttributes;
+ unsigned long m_numIntAttributes;
+ O3DGCIFSFloatAttributeType m_typeFloatAttribute [O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES];
+ O3DGCIFSIntAttributeType m_typeIntAttribute [O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES ];
+ unsigned long m_nFloatAttribute [O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES];
+ unsigned long m_nIntAttribute [O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES ];
+ unsigned long m_dimFloatAttribute [O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES];
+ unsigned long m_dimIntAttribute [O3DGC_SC3DMC_MAX_NUM_INT_ATTRIBUTES ];
+ Real m_minFloatAttribute [O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES * O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES];
+ Real m_maxFloatAttribute [O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES * O3DGC_SC3DMC_MAX_DIM_ATTRIBUTES];
+ Real * m_floatAttribute [O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES];
+ long * m_intAttribute [O3DGC_SC3DMC_MAX_NUM_FLOAT_ATTRIBUTES];
+ // mesh info
+ Real m_creaseAngle;
+ bool m_ccw;
+ bool m_solid;
+ bool m_convex;
+ bool m_isTriangularMesh;
+ };
+}
+#include "o3dgcIndexedFaceSet.inl" // template implementation
+#endif // O3DGC_INDEXED_FACE_SET_H
+