[964] | 1 | /*
|
---|
| 2 | Copyright (C) 2005-2006 Feeling Software Inc.
|
---|
| 3 | MIT License: http://www.opensource.org/licenses/mit-license.php
|
---|
| 4 | */
|
---|
| 5 |
|
---|
| 6 | /**
|
---|
| 7 | @file FCDGeometry.h
|
---|
| 8 | This file contains the FCDGeometry class.
|
---|
| 9 | The FCDGeometry class holds the information for one mesh or spline
|
---|
| 10 | entity, within the COLLADA geometry library.
|
---|
| 11 | */
|
---|
| 12 | #ifndef _FCD_GEOMETRY_H_
|
---|
| 13 | #define _FCD_GEOMETRY_H_
|
---|
| 14 |
|
---|
| 15 | #include "FCDocument/FCDEntity.h"
|
---|
| 16 | #include "FUtils/FUDaeEnum.h"
|
---|
| 17 |
|
---|
| 18 | class FCDocument;
|
---|
| 19 | class FCDGeometryMesh;
|
---|
| 20 | class FCDGeometrySpline;
|
---|
| 21 |
|
---|
| 22 | /**
|
---|
| 23 | @defgroup FCDGeometry COLLADA Document Geometry Entity
|
---|
| 24 | @addtogroup FCDocument
|
---|
| 25 | */
|
---|
| 26 |
|
---|
| 27 | /**
|
---|
| 28 | A COLLADA geometry entity.
|
---|
| 29 | There are two types of COLLADA geometry entities: meshes and splines.
|
---|
| 30 |
|
---|
| 31 | Meshes are collections of polygons where the vertices always have a position,
|
---|
| 32 | usually have a normal to define smooth or hard edges and may be colored or textured.
|
---|
| 33 |
|
---|
| 34 | Splines are a sequence of control points used to generate a smooth curve.
|
---|
| 35 |
|
---|
| 36 | @ingroup FCDGeometry
|
---|
| 37 | */
|
---|
| 38 |
|
---|
| 39 | class FCOLLADA_EXPORT FCDGeometry : public FCDEntity
|
---|
| 40 | {
|
---|
| 41 | private:
|
---|
| 42 | DeclareObjectType;
|
---|
| 43 |
|
---|
| 44 | // Contains only one of the following, in order of importance.
|
---|
| 45 | FCDGeometryMesh* mesh;
|
---|
| 46 | FCDGeometrySpline* spline;
|
---|
| 47 |
|
---|
| 48 | public:
|
---|
| 49 | /** Contructor: do not use directly. Create new geometries using the FCDocument::AddGeometry function,
|
---|
| 50 | or the FCDLibrary::AddEntity function.
|
---|
| 51 | @param document The COLLADA document which owns the new geometry entity. */
|
---|
| 52 | FCDGeometry(FCDocument* document);
|
---|
| 53 |
|
---|
| 54 | /** Destructor: only release cloned geometries directly.
|
---|
| 55 | Release original geometries using the FCDLibrary::ReleaseEntity function.
|
---|
| 56 | All original geometries are released with the document that they belong to. */
|
---|
| 57 | virtual ~FCDGeometry();
|
---|
| 58 |
|
---|
| 59 | /** Retrieves the entity class type.
|
---|
| 60 | This function is a part of the FCDEntity interface.
|
---|
| 61 | @return The entity class type: GEOMETRY. */
|
---|
| 62 | virtual Type GetType() const { return GEOMETRY; }
|
---|
| 63 |
|
---|
| 64 | /** Retrieves whether the type of this geometry is a mesh.
|
---|
| 65 | @return Whether this geometry is a mesh. */
|
---|
| 66 | bool IsMesh() const { return mesh != NULL; }
|
---|
| 67 |
|
---|
| 68 | /** Retrieves the mesh information structure for this geometry.
|
---|
| 69 | Verify that this geometry is a mesh using the IsMesh function prior to calling this function.
|
---|
| 70 | @return The mesh information structure. This pointer will be NULL when the geometry is a spline or is undefined. */
|
---|
| 71 | FCDGeometryMesh* GetMesh() { return mesh; }
|
---|
| 72 | const FCDGeometryMesh* GetMesh() const { return mesh; } /**< See above. */
|
---|
| 73 |
|
---|
| 74 | /** Sets the type of this geometry to mesh and creates an empty mesh structure.
|
---|
| 75 | This function will release any mesh or spline structure that the geometry may already contain
|
---|
| 76 | @return The mesh information structure. This pointer will always be valid. */
|
---|
| 77 | FCDGeometryMesh* CreateMesh();
|
---|
| 78 |
|
---|
| 79 | /** Retrieves whether the type of this geometry is a spline.
|
---|
| 80 | @return Whether this geometry is a spline. */
|
---|
| 81 | bool IsSpline() const { return spline != NULL; }
|
---|
| 82 |
|
---|
| 83 | /** Retrieves the spline information structure for this geometry.
|
---|
| 84 | Verify that this geometry is a spline using the IsSpline function prior to calling this function.
|
---|
| 85 | @return The spline information structure. This pointer will be NULL when the geometry is a mesh or is undefined. */
|
---|
| 86 | FCDGeometrySpline* GetSpline() { return spline; }
|
---|
| 87 | const FCDGeometrySpline* GetSpline() const { return spline; } /**< See above. */
|
---|
| 88 |
|
---|
| 89 | /** Sets the type of this geometry to spline and creates an empty spline structure.
|
---|
| 90 | This function will release any mesh or spline structure that the geometry may already contain.
|
---|
| 91 | @return The spline information structure. This pointer will always be valid. */
|
---|
| 92 | FCDGeometrySpline* CreateSpline();
|
---|
| 93 |
|
---|
| 94 | /** @deprecated [INTERNAL] Clones the geometry entity.
|
---|
| 95 | Works only on mesh geometry. Creates a full copy of the geometry, with the vertices overwritten
|
---|
| 96 | by the given data: this is used when importing COLLADA 1.3 skin controllers.
|
---|
| 97 | You will need to release the cloned entity.
|
---|
| 98 | @param newPositions The list of vertex position that will
|
---|
| 99 | overwrite the current mesh vertex positions. This list may be empty.
|
---|
| 100 | @param newPositionsStride The stride, in bytes, of the newPositions list.
|
---|
| 101 | For an empty newPositions list, this value is discarded.
|
---|
| 102 | @param newNormals The list of vertex normals that will overwrite
|
---|
| 103 | the current mesh vertex normals. This list may be empty.
|
---|
| 104 | @param newNormalsStride The stride, in bytes, of the newNormals list.
|
---|
| 105 | For an empty newNormals list, this value is discarded.
|
---|
| 106 | @return The cloned geometry entity. This pointer will be NULL,
|
---|
| 107 | if the geometry is not a mesh. You will need to release this pointer. */
|
---|
| 108 | FCDGeometry* Clone(FloatList& newPositions, uint32 newPositionsStride, FloatList& newNormals, uint32 newNormalsStride);
|
---|
| 109 |
|
---|
| 110 | /** [INTERNAL] Reads in the \<geometry\> element from a given COLLADA XML tree node.
|
---|
| 111 | @param node The COLLADA XML tree node.
|
---|
| 112 | @return The status of the import. If the status is not successful,
|
---|
| 113 | it may be dangerous to extract information from the geometry.*/
|
---|
| 114 | virtual FUStatus LoadFromXML(xmlNode* node);
|
---|
| 115 |
|
---|
| 116 | /** [INTERNAL] Writes out the \<geometry\> element to the given COLLADA XML tree node.
|
---|
| 117 | @param parentNode The COLLADA XML parent node in which to insert the geometry information.
|
---|
| 118 | @return The created \<geometry\> element XML tree node. */
|
---|
| 119 | virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
|
---|
| 120 | };
|
---|
| 121 |
|
---|
| 122 | #endif // _FCD_GEOMETRY_H_
|
---|