1 | /*
|
---|
2 | Copyright (C) 2005-2006 Feeling Software Inc.
|
---|
3 | MIT License: http://www.opensource.org/licenses/mit-license.php
|
---|
4 | */
|
---|
5 | /*
|
---|
6 | Based on the FS Import classes:
|
---|
7 | Copyright (C) 2005-2006 Feeling Software Inc
|
---|
8 | Copyright (C) 2005-2006 Autodesk Media Entertainment
|
---|
9 | MIT License: http://www.opensource.org/licenses/mit-license.php
|
---|
10 | */
|
---|
11 |
|
---|
12 | /**
|
---|
13 | @file FCDEntity.h
|
---|
14 | This file contains the FCDEntity class.
|
---|
15 | */
|
---|
16 |
|
---|
17 | #ifndef _FCD_ENTITY_H_
|
---|
18 | #define _FCD_ENTITY_H_
|
---|
19 |
|
---|
20 | #include "FCDocument/FCDObject.h"
|
---|
21 |
|
---|
22 | class FCDocument;
|
---|
23 | class FCDExtra;
|
---|
24 |
|
---|
25 | /**
|
---|
26 | A COLLADA entity.
|
---|
27 |
|
---|
28 | A COLLADA entity is an object contained within a COLLADA library.
|
---|
29 | As such, it is based on the FCDObjectWithId class so that it
|
---|
30 | can be accessed by other entities, such as the scene graph.
|
---|
31 |
|
---|
32 | The entity adds to the FCDObjectWithId class: a name,
|
---|
33 | an extra tree and an optional note, as well as a way
|
---|
34 | to identity the type of the entity, in order to up-cast it
|
---|
35 | to its correct class.
|
---|
36 |
|
---|
37 | @ingroup FCDocument
|
---|
38 | */
|
---|
39 |
|
---|
40 | class FCOLLADA_EXPORT FCDEntity : public FCDObjectWithId
|
---|
41 | {
|
---|
42 | public:
|
---|
43 | /** The types of entity classes.
|
---|
44 | Each type corresponds directly to one class that contains the
|
---|
45 | FCDEntity class as a parent, so you can up-cast FCDEntity pointers. */
|
---|
46 | enum Type
|
---|
47 | {
|
---|
48 | ENTITY, /**< A generic entity (FCDEntity). Should never be used. */
|
---|
49 | ANIMATION, /**< An animation (FCDAnimation). */
|
---|
50 | ANIMATION_CLIP, /**< An animation clip (FCDAnimationClip). */
|
---|
51 | CAMERA, /**< A camera (FCDCamera). */
|
---|
52 | LIGHT, /**< A light (FCDLight). */
|
---|
53 | IMAGE, /**< An image (FCDImage). */
|
---|
54 | TEXTURE, /**< A texture (FCDTexture). Used for COLLADA 1.3 backward compatibility only! */
|
---|
55 | MATERIAL, /**< A visual material definition (FCDMaterial). */
|
---|
56 | EFFECT, /**< An effect definition (FCDEffect). */
|
---|
57 | GEOMETRY, /**< A geometric object (FCDGeometry). Includes splines and meshes. */
|
---|
58 | CONTROLLER, /**< A geometric controller (FCDController). Includes skins and morphers. */
|
---|
59 | SCENE_NODE, /**< A visual scene node (FCDSceneNode). */
|
---|
60 | PHYSICS_RIGID_CONSTRAINT, /**< A physics rigid constraint (FCDPhysicsRigidConstraint). */
|
---|
61 | PHYSICS_MATERIAL, /**< A physics material definiton (FCDPhysicsMaterial). */
|
---|
62 | PHYSICS_RIGID_BODY, /**< A physics rigid body (FCDPhysicsRigidBody). */
|
---|
63 | PHYSICS_SHAPE, /**< A physics shape (FCDPhysicsShape). */
|
---|
64 | PHYSICS_ANALYTICAL_GEOMETRY, /**< A physics analytical geometric object (FCDPhysicsAnalyticalGeometry). */
|
---|
65 | PHYSICS_MODEL, /**< A physics model (FCDPhysicsModel). */
|
---|
66 | PHYSICS_SCENE_NODE /**< A physics scene node (FCDPhysicsSceneNode). */
|
---|
67 | };
|
---|
68 |
|
---|
69 | private:
|
---|
70 | DeclareObjectType;
|
---|
71 | fstring name;
|
---|
72 |
|
---|
73 | // Extra information for the entity.
|
---|
74 | FCDExtra* extra;
|
---|
75 |
|
---|
76 | // Maya and Max both support custom strings for objects.
|
---|
77 | fstring note;
|
---|
78 |
|
---|
79 | // Deprecated ColladaMaya post-processing information.
|
---|
80 | StringList postCmds;
|
---|
81 |
|
---|
82 | public:
|
---|
83 | /** Constructor: do not use directly.
|
---|
84 | Instead, create objects of the up-classes.
|
---|
85 | @param document The COLLADA document that owns the entity.
|
---|
86 | @param baseId The prefix COLLADA id to be used if no COLLADA id is provided. */
|
---|
87 | FCDEntity(FCDocument* document, const char* baseId = "GenericEntity");
|
---|
88 |
|
---|
89 | /** Destructor: do not use directly.
|
---|
90 | Instead, release objects through their libraries or their parent entities. */
|
---|
91 | virtual ~FCDEntity();
|
---|
92 |
|
---|
93 | /** Retrieves the entity class type for an entity.
|
---|
94 | You can use the entity class type of up-cast an entity pointer
|
---|
95 | to the correct up-class.
|
---|
96 | This function should be overwritten by all up-classes.
|
---|
97 | @return The entity class type. */
|
---|
98 | virtual Type GetType() const { return ENTITY; }
|
---|
99 |
|
---|
100 | /** Retrieves the name of the entity.
|
---|
101 | This value has no direct use in COLLADA but is useful
|
---|
102 | to track the user-friendly name of an entity.
|
---|
103 | @return The name. */
|
---|
104 | const fstring& GetName() const { return name; }
|
---|
105 |
|
---|
106 | /** Sets the name of the entity.
|
---|
107 | This value has no direct use in COLLADA but is useful
|
---|
108 | to track the user-friendly name of an entity.
|
---|
109 | @param _name The name. */
|
---|
110 | void SetName(const fstring& _name);
|
---|
111 |
|
---|
112 | /** Retrieves the extra information tree for this entity.
|
---|
113 | The prefered way to save extra information in FCollada is at
|
---|
114 | the entity level. Use this extra information tree to store
|
---|
115 | any information you want exported and imported back.
|
---|
116 | @return The extra information tree. */
|
---|
117 | FCDExtra* GetExtra() { return extra; }
|
---|
118 | const FCDExtra* GetExtra() const { return extra; } /**< See above. */
|
---|
119 |
|
---|
120 | /** Retrieves whether the entity has a user-defined note.
|
---|
121 | This value is a simpler way, than the extra tree, to store
|
---|
122 | user-defined information that does not belong in COLLADA.
|
---|
123 | @return Whether the entity has an user-defined note. */
|
---|
124 | bool HasNote() const { return !note.empty(); }
|
---|
125 |
|
---|
126 | /** Retrieves the user-defined note for this entity.
|
---|
127 | This value is a simpler way, than the extra tree, to store
|
---|
128 | user-defined information that does not belong in COLLADA.
|
---|
129 | @return The user-defined note. */
|
---|
130 | const fstring& GetNote() const { return note; }
|
---|
131 |
|
---|
132 | /** Sets the user-defined note for this entity.
|
---|
133 | This value is a simpler way, than the extra tree, to store
|
---|
134 | user-defined information that does not belong in COLLADA.
|
---|
135 | @param _note The user-defined note. */
|
---|
136 | void SetNote(const fstring& _note) { note = _note; }
|
---|
137 |
|
---|
138 | /** Retrieves the child entity that has the given COLLADA id.
|
---|
139 | This function is only useful for entities that are hierarchical:
|
---|
140 | visual/physics scene nodes and animations.
|
---|
141 | @param daeId A COLLADA id.
|
---|
142 | @return The child entity with the given id. This pointer will be NULL
|
---|
143 | if no child entity matches the given id. */
|
---|
144 | virtual FCDEntity* FindDaeId(const string& daeId);
|
---|
145 |
|
---|
146 | /** [INTERNAL] Reads in the entity from a given COLLADA XML tree node.
|
---|
147 | This function should be overwritten by all up-classes.
|
---|
148 | @param entityNode The COLLADA XML tree node.
|
---|
149 | @return The status of the import. If the status is not successful,
|
---|
150 | it may be dangerous to extract information from the entity.*/
|
---|
151 | virtual FUStatus LoadFromXML(xmlNode* entityNode);
|
---|
152 |
|
---|
153 | /** [INTERNAL] Writes out the entity to the given COLLADA XML tree node.
|
---|
154 | This function should be overwritten by all up-classes.
|
---|
155 | @param parentNode The COLLADA XML parent node in which to insert the entity.
|
---|
156 | @return The created element XML tree node. */
|
---|
157 | virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
|
---|
158 |
|
---|
159 | /** @deprecated Retrieves the like of post-processing commands.
|
---|
160 | Used only in ColladaMaya and should be taken out.
|
---|
161 | @return The list of post-processing commands. */
|
---|
162 | StringList& GetPostProcessCmds() { return postCmds; }
|
---|
163 |
|
---|
164 | protected:
|
---|
165 | /** [INTERNAL] Writes out the top entity XML node for the entity.
|
---|
166 | This function should be used by all up-classes within the
|
---|
167 | WriteToXML overwritting function to create the top XML node,
|
---|
168 | as it will write out the name and COLLADA id of the entity.
|
---|
169 | @param parentNode The COLLADA XML parent node in which to insert the entity.
|
---|
170 | @param nodeName The COLLADA XML node name for the top entity XML node.
|
---|
171 | @return The created element XML tree node. */
|
---|
172 | xmlNode* WriteToEntityXML(xmlNode* parentNode, const char* nodeName) const;
|
---|
173 |
|
---|
174 | /** [INTERNAL] Writes out the extra information for the entity.
|
---|
175 | This function should be used by all up-classes within the
|
---|
176 | WriteToXML overwritting function, at the very end, to write
|
---|
177 | the user-defined note and the extra tree to the COLLADA document.
|
---|
178 | @param entityNode The created element XML tree node returned
|
---|
179 | by the WriteToEntityXML function. */
|
---|
180 | void WriteToExtraXML(xmlNode* entityNode) const;
|
---|
181 |
|
---|
182 | /** [INTERNAL] Copies the entity information into a cloned entity.
|
---|
183 | This function should be used by all up-classes when cloning an entity
|
---|
184 | to copy the COLLADA id and the other entity-level information into a clone.
|
---|
185 | @param clone The cloned entity. */
|
---|
186 | void Clone(FCDEntity* clone);
|
---|
187 | };
|
---|
188 |
|
---|
189 | #endif // _FCD_ENTITY_H_
|
---|
190 |
|
---|