/usr/include/opencollada/COLLADAFramework/COLLADAFWMeshPrimitive.h is in opencollada-dev 0.1.0~20140703.ddf8f47+dfsg1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 | /*
Copyright (c) 2008-2009 NetAllied Systems GmbH
This file is part of COLLADAFramework.
Licensed under the MIT Open Source License,
for details please see LICENSE file or the website
http://www.opensource.org/licenses/mit-license.php
*/
#ifndef __COLLADAFW_MESHPRIMITIVE_H__
#define __COLLADAFW_MESHPRIMITIVE_H__
#include "COLLADAFWPrerequisites.h"
#include "COLLADAFWObject.h"
#include "COLLADAFWConstants.h"
#include "COLLADAFWTypes.h"
#include "COLLADAFWEdge.h"
#include "COLLADAFWIndexList.h"
#include <map>
#include <vector>
namespace COLLADAFW
{
/**
Geometric primitives, which assemble values from the inputs into vertex attribute data.
Can be any combination of any primitive types in any order.
To describe geometric primitives that are formed from the vertex data, the <mesh> element may
contain zero or more of the primitive elements <lines>, <linestrips>, <polygons>, <polylist>,
<triangles>, <trifans>, and <tristrips>.
The <vertices> element under <mesh> is used to describe mesh-vertices. Polygons, triangles, and
so forth index mesh-vertices, not positions directly. Mesh-vertices must have at least one
<input> (unshared) element with a semantic attribute whose value is POSITION.
For texture coordinates, COLLADA�s right-handed coordinate system applies; therefore, an ST
texture coordinate of [0,0] maps to the lower-left texel of a texture image, when loaded in a
professional 2-D texture viewer/editor.
*/
class MeshPrimitive : public ObjectTemplate<COLLADA_TYPE::PRIMITIVE_ELEMENT>
{
public:
/** The types of primitives. */
enum PrimitiveType
{
LINES, /**< A list of lines. Only one element is contained in the face-vertex count list.
It represents the total number of line vertices. The total number of lines is
equal to half the total number of line vertices. */
LINE_STRIPS, /**< A list of continuous lines. Each element in the face-vertex count list
represents the number of consecutive line vertices before restarting. */
POLYGONS, /**< A list of polygons. All the polygons may be triangles.
This is the most common primitive type. The polygons may have holes. Each element in the
face-vertex count list represent the number of vertices for one polygon. */
POLYLIST,
TRIANGLES,
TRIANGLE_FANS, /**< A list of triangle fans. Each element in the face-vertex count list
represents the number of vertices for one fan. A triangle fan is defined by re-using the first
vertex for every triangle. Advancing pairs are then used in order to generate adjacent triangles
such that if there are 5 vertices, then 3 triangles are created: {0,1,2}, {0,2,3} and {0,3,4}. */
TRIANGLE_STRIPS, /**< A list of continuous triangles. Each element in the face-vertex count list
represents the number of vertices for one strip. A triangle strip is defined by re-using two
advancing vertices from the previous triangle for the next triangle. If there are 5 vertices in
the strip, then 3 triangles are created: {0,1,2}, {1,2,3}, {2,3,4}. Note that vertex winding must
also be taken into consideration and every even triangle in the strip has its vertices swapped
from the above pattern. */
POINTS, /**< A list of Camera-facing sprites. The face-vertex count list will contain one element that
represents the total number of points. Two non-COLLADA geometry sources (POINT_SIZE and POINT_ROTATION)
are specific to this type. */
UNDEFINED_PRIMITIVE_TYPE
};
private:
/**
* The type of the current primitive. Possible values are:
* <lines>, <linestrips>, <polygons>, <polylist>, <triangles>, <trifans>, and <tristrips>.
*/
PrimitiveType mPrimitiveType;
/**
* The attribute indicates the number of polygon faces in the current primitive element.
*/
size_t mFaceCount;
/**
* The material attribute declares a symbol for a material. This symbol
* is bound to a material at the time of instantiation. If the material
* attribute is not specified then the lighting and shading results are
* application defined. Optional attribute.
*/
String mMaterial;
/** The material id of the sub mesh. This material id is used to assign material
to submeshes when the mesh gets instantiated.*/
MaterialId mMaterialId;
/**
* The index list of the positions array.
*/
UIntValuesArray mPositionIndices;
/**
* The index list of the normals array.
*/
UIntValuesArray mNormalIndices;
/**
* The index list of the tangent array (support of multiple uv sets).
*/
UIntValuesArray mTangentIndices;
/**
* The index list of the binormal array (support of multiple uv sets).
*/
UIntValuesArray mBinormalIndices;
/**
* The index list of the colors array (support of multiple colors).
*/
IndexListArray mColorIndicesArray;
/**
* The index list of the uv coordinates array (support of multiple uv sets).
*/
IndexListArray mUVCoordIndicesArray;
public:
/**
* Constructor.
*/
MeshPrimitive ( const UniqueId& uniqueId );
/**
* Constructor.
*/
MeshPrimitive ( const UniqueId& uniqueId, PrimitiveType primitiveType );
/**
* Destructor.
*/
virtual ~MeshPrimitive();
/** The type of the current primitive. Possible values are:
<lines>, <linestrips>, <polygons>, <polylist>, <triangles>, <trifans>, and <tristrips>. */
const MeshPrimitive::PrimitiveType getPrimitiveType () const { return mPrimitiveType; }
/** The type of the current primitive. Possible values are:
<lines>, <linestrips>, <polygons>, <polylist>, <triangles>, <trifans>, and <tristrips>. */
void setPrimitiveType ( const MeshPrimitive::PrimitiveType PrimitiveType ) { mPrimitiveType = PrimitiveType; }
/**
* Gets the count attribute.
* @return Returns the count attribute.
*/
const size_t getFaceCount () const { return mFaceCount; }
/**
* Sets the count attribute.
* @param atCount The new value for the count attribute.
*/
void setFaceCount ( const size_t count ) { mFaceCount = count; }
/**
* Gets the material attribute.
* @return Returns a xsNCName of the material attribute.
*/
String getMaterial () const { return mMaterial; }
/**
* Sets the material attribute.
* @param atMaterial The new value for the material attribute.
*/
void setMaterial ( const String& material ) { mMaterial = material; }
/**
* The index list of the positions array.
*/
UIntValuesArray& getPositionIndices () { return mPositionIndices; }
/**
* The index list of the positions array.
*/
const UIntValuesArray& getPositionIndices () const { return mPositionIndices; }
/**
* The index list of the positions array.
*/
void setPositionIndices ( const UIntValuesArray& PositionIndices ) { mPositionIndices = PositionIndices; }
/**
* The index list of the normals array.
*/
UIntValuesArray& getNormalIndices () { return mNormalIndices; }
/**
* The index list of the normals array.
*/
const UIntValuesArray& getNormalIndices () const{ return mNormalIndices; }
/**
* The index list of the normals array.
*/
void setNormalIndices ( const UIntValuesArray& NormalIndices ) { mNormalIndices = NormalIndices; }
/**Returns true if the mesh primitive has normals.*/
bool hasNormalIndices() const { return !mNormalIndices.empty(); }
/**
* The index list of the normals array.
*/
UIntValuesArray& getTangentIndices () { return mTangentIndices; }
/**
* The index list of the normals array.
*/
const UIntValuesArray& getTangentIndices () const{ return mTangentIndices; }
/**
* The index list of the normals array.
*/
void setTagentIndices ( const UIntValuesArray& TangentIndices ) { mTangentIndices = TangentIndices; }
/**Returns true if the mesh primitive has normals.*/
bool hasTangentIndices() const { return !mTangentIndices.empty(); }
/**
* The index list of the normals array.
*/
UIntValuesArray& getBinormalIndices () { return mBinormalIndices; }
/**
* The index list of the normals array.
*/
const UIntValuesArray& getBinormalIndices () const{ return mBinormalIndices; }
/**
* The index list of the normals array.
*/
void setBinormalIndices ( const UIntValuesArray& BinormalIndices ) { mBinormalIndices = BinormalIndices; }
/**Returns true if the mesh primitive has normals.*/
bool hasBinormalIndices() const { return !mBinormalIndices.empty(); }
/**
* The index list of the colors array.
*/
IndexList* getColorIndices ( size_t index )
{
if ( index >= mColorIndicesArray.getCount () ) return 0;
return mColorIndicesArray [ index ];
}
/**
* The index list of the colors array.
*/
const IndexList* getColorIndices ( size_t index ) const
{
if ( index >= mColorIndicesArray.getCount () ) return 0;
return mColorIndicesArray [ index ];
}
/**
* The index list of the colors array.
*/
IndexListArray& getColorIndicesArray () { return mColorIndicesArray; }
/**
* The index list of the colors array.
*/
const IndexListArray& getColorIndicesArray () const { return mColorIndicesArray; }
/**Returns true if the mesh primitive has at least one set of colors.*/
bool hasColorIndices() const { return !mColorIndicesArray.empty(); }
/**
* The index list of the colors array.
*/
void appendColorIndices ( IndexList* colorIndices ) { mColorIndicesArray.append ( colorIndices ); }
/**
* The index list of the uv coordinates array.
*/
IndexListArray& getUVCoordIndicesArray () { return mUVCoordIndicesArray; }
/**
* The index list of the uv coordinates array.
*/
const IndexListArray& getUVCoordIndicesArray () const { return mUVCoordIndicesArray; }
/**
* The index list of the uv coordinates array.
*/
IndexList* getUVCoordIndices ( size_t index )
{
if ( index >= mUVCoordIndicesArray.getCount () ) return 0;
return mUVCoordIndicesArray [ index ];
}
/**
* The index list of the uv coordinates array.
*/
const IndexList* getUVCoordIndices ( size_t index ) const
{
if ( index >= mUVCoordIndicesArray.getCount () ) return 0;
return mUVCoordIndicesArray [ index ];
}
/**
* The index list of the uv coordinates array.
*/
void appendUVCoordIndices ( IndexList* uvCoordIndices ) { mUVCoordIndicesArray.append ( uvCoordIndices ); }
/**Returns true if the mesh primitive has at least one set of uv coordinates.*/
bool hasUVCoordIndices() const { return !mUVCoordIndicesArray.empty(); }
/** @return The material id of the sub mesh. This material id is used to assign material
to submeshes when the mesh gets instantiated.*/
MaterialId getMaterialId() const { return mMaterialId; }
/** Sets the material id of the sub mesh. This material id is used to assign material
to submeshes when the mesh gets instantiated.*/
void setMaterialId(MaterialId val) { mMaterialId = val; }
/*
* Determine the number of grouped vertex elements in the current mesh primitive.
*/
const size_t getGroupedVertexElementsCount () const;
/*
* Returns the vertex count of the face with the specified index.
*/
const int getGroupedVerticesVertexCount ( const size_t faceIndex ) const;
};
typedef ArrayPrimitiveType<MeshPrimitive*> MeshPrimitiveArray;
}
#endif // __COLLADAFW_MESHPRIMITIVE_H__
|