source: NonGTP/FCollada/FCDocument/FCDGeometrySource.h @ 964

Revision 964, 6.3 KB checked in by igarcia, 19 years ago (diff)
Line 
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 FCDGeometrySource.h
8        This file contains the FCDGeometrySource class.
9*/
10
11#ifndef _FCD_GEOMETRY_SOURCE_H_
12#define _FCD_GEOMETRY_SOURCE_H_
13
14
15#include "FCDocument/FCDObject.h"
16#include "FUtils/FUDaeEnum.h"
17
18class FCDAnimated;
19
20/** A dynamically-sized array of FCDAnimated objects. */
21typedef vector<FCDAnimated*> FCDAnimatedList;
22
23/**
24        A COLLADA data source for geometric meshes.
25
26        A COLLADA data source for geometric meshes contains a list of floating-point values and the information
27        to parse these floating-point values into meaningful content: the stride of the list and the type of data
28        that the floating-point values represent. When the floating-point values are split according to the stride,
29        you get multiple elemental values of the given type. A data source may also have a user-generated name to
30        identify the data within. The name is optional and is used to keep around the user-friendly name for texture coordinate
31        sets or color sets.
32
33        The values of the COLLADA data source may be animated individually, or together: as an element.
34
35        @ingroup FCDGeometry
36*/
37class FCOLLADA_EXPORT FCDGeometrySource : public FCDObjectWithId
38{
39private:
40        DeclareObjectType
41        fstring name;
42        FloatList sourceData;
43        uint32 sourceStride;
44        xmlNode* sourceNode;
45        FUDaeGeometryInput::Semantic sourceType;
46
47        // The animated values held here are contained within the document.
48        FCDAnimatedList animatedValues;
49
50public:
51        /** Constructor: do not use directly.
52                Use FCDGeometryMesh::AddSource or FCDGeometryMesh::AddValueSource instead.
53                @param document The COLLADA document which owns the data source. */
54        FCDGeometrySource(FCDocument* document);
55
56        /** Destructor: do not use directly.
57                The geometric mesh which contains the data source will release it. */
58        virtual ~FCDGeometrySource();
59
60        /** Retrieves the name of the data source. The name is optional and is used to
61                keep around a user-friendly name for texture coordinate sets or color sets.
62                @return The name of the data source. */
63        const fstring& GetName() const { return name; }
64
65        /** Retrieves the pure data of the data source. This is a dynamically-sized array of
66                floating-point values that contains all the data of the source.
67                @return The pure data of the data source. */
68        FloatList& GetSourceData() { return sourceData; }
69        const FloatList& GetSourceData() const { return sourceData; } /**< See above. */
70
71        /** Retrieves the stride of the data within the source.
72                There is no guarantee that the number of data values within the source is a multiple of the stride,
73                yet you should always verify that the stride is at least the wanted dimension. For example, there is
74                no guarantee that your vertex position data source has a stride of 3. 3dsMax is known to always
75                export 3D texture coordinate positions.
76                @return The stride of the data. */
77        uint32 GetSourceStride() const { return sourceStride; }
78
79        /** @deprecated Retrieves the COLLADA id for the source.
80                Use the class parent's GetDaeId function instead.
81                @return The COLLADA id. */
82        const string& GetSourceId() const { return GetDaeId(); }
83
84        /** Retrieves the list of animated values for the data of the source.
85                @return The list of animated values. */
86        FCDAnimatedList& GetAnimatedValues() { return animatedValues; }
87        const FCDAnimatedList& GetAnimatedValues() const { return animatedValues; } /**< See above. */
88
89        /** @deprecated [INTERNAL] Retrieves the XML tree node that represent this source.
90                This is used when computing the list of animated values.
91                @todo Take the XML tree node out of this class.
92                @return The XML tree node. This pointer is invalid if accessed after the document is
93                        fully parsed. */
94        xmlNode* GetSourceNode() { return sourceNode; } // Should be taken out of this class
95
96        /** Retrieves the type of data contained within the source.
97                Common values for the type of data are POSITION, NORMAL, COLOR and TEXCOORD.
98                Please see FUDaeGeometryInput for more information.
99                @see FUDaeGeometryInput.
100                @return The type of data contained within the source. */
101        FUDaeGeometryInput::Semantic GetSourceType() const { return sourceType; }
102
103        /** Sets the user-friendly name of the data source. The name is optional and is used to
104                keep around a user-friendly name for texture coordinate sets or color sets.
105                @param _name The user-friendly name of the data source. */             
106        void SetName(const fstring& _name) { name = _name; }
107
108        /** Overwrites the data contained within the data source.
109                @param _sourceData The new data for this source.
110                @param _sourceStride The stride for the new data.
111                @param offset The offset at which to start retrieving the new data.
112                        This argument defaults at 0 to indicate that the data copy should start from the beginning.
113                @param count The number of data entries to copy into the data source.
114                        This argument defaults at 0 to indicate that the data copy should include everything. */
115        void SetSourceData(const FloatList& _sourceData, uint32 _sourceStride, size_t offset=0, size_t count=0);
116
117        /** [INTERNAL] Sets the XML tree node associated with the data source.
118                @todo Take the XML tree node out of this class.
119                @param _sourceNode A XML tree node. */
120        void SetSourceNode(xmlNode* _sourceNode) { sourceNode = _sourceNode; }
121
122        /** Sets the type of data contained within this data source.
123                @param type The new type of data for this data source. */
124        void SetSourceType(FUDaeGeometryInput::Semantic type);
125
126        /** [INTERNAL] Clones this data source. You will need to release this pointer manually.
127                @return An identical copy of the data source. */
128        FCDGeometrySource* Clone() const;
129
130        /** [INTERNAL] Reads in the \<source\> element from a given COLLADA XML tree node.
131                @param sourceNode The COLLADA XML tree node.
132                @return The status of the import. If the status is not successful,
133                        it may be dangerous to extract information from the data source.*/
134        FUStatus LoadFromXML(xmlNode* sourceNode);
135
136        /** [INTERNAL] Writes out the \<source\> element to the given COLLADA XML tree node.
137                @param parentNode The COLLADA XML parent node in which to insert the data source.
138                @return The created \<source\> element XML tree node. */
139        xmlNode* WriteToXML(xmlNode* parentNode) const;
140};
141
142#endif // _FCD_GEOMETRY_SOURCE_H_
Note: See TracBrowser for help on using the repository browser.