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

Revision 964, 5.3 KB checked in by igarcia, 18 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        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 FCDController.h
14        This file contains the FCDController class.
15*/
16
17#ifndef _FCD_CONTROLLER_H_
18#define _FCD_CONTROLLER_H_
19
20#include "FCDocument/FCDEntity.h"
21
22class FCDocument;
23class FCDSkinController;
24class FCDMorphController;
25
26/**
27        A generic COLLADA controller.
28        A COLLADA controller is used to influence a mesh.
29        COLLADA defines two types of controller:
30        skins (FCDSkinController) and morphers (FCDMorphController).
31
32        @ingroup FCDGeometry
33*/
34class FCOLLADA_EXPORT FCDController : public FCDEntity
35{
36private:
37        DeclareObjectType;
38
39        FCDSkinController* skinController;
40        FCDMorphController* morphController;
41
42        string targetId; // COLLADA 1.3 backward compatibility
43
44public:
45        /** Constructor: do not use directly.
46                Instead, use the FCDLibrary::AddEntity function.
47                @param document The COLLADA document that owns the controller. */
48        FCDController(FCDocument* document);
49
50        /** Destructor: do not use directly.
51                Instead, use the FCDLibrary::ReleaseEntity function. */
52        virtual ~FCDController();
53
54        /** Retrieves the entity class type.
55                This function is a part of the FCDEntity interface.
56                @return The entity class type: CONTROLLER. */
57        virtual Type GetType() const { return CONTROLLER; };
58
59        /** Retrieves whether this controller is a skin controller.
60                @return Whether this controller is a skin controller. */
61        bool HasSkinController() const { return skinController != NULL; }
62
63        /** Retrieves whether this controller is a morph controller.
64                @return Whether this controller is a morph controller. */
65        bool HasMorphController() const { return morphController != NULL; }
66
67        /** Sets the type of this controller to a skin controller.
68                This function will release any previously created morpher or skin.
69                @return The new skin controller. */
70        FCDSkinController* CreateSkinController();
71
72        /** Sets the type of this controller to a morph controller.
73                This function will release any previously created morpher or skin.
74                @return The new morph controller. */
75        FCDMorphController* CreateMorphController();
76
77        /** Retrieves the skin controller.
78                This pointer is only valid for skins. To verify that this is a skin,
79                check the HasSkinController function.
80                @return The skin controller. This pointer will be NULL, if the controller
81                        is not a skin. */
82        FCDSkinController* GetSkinController() { return skinController; }
83        const FCDSkinController* GetSkinController() const { return skinController; } /**< See above. */
84
85        /** Retrieves the morph controller.
86                This pointer is only valid for skins. To verify that this is a morpher,
87                check the HasMorphController function.
88                @return The morph controller. This pointer will be NULL, if the controller
89                        is not a morpher. */
90        FCDMorphController* GetMorphController() { return morphController; }
91        const FCDMorphController* GetMorphController() const { return morphController; } /**< See above. */
92
93        /** Retrieves the base target entity for this controller.
94                The base target entity may be another controller or a geometry entity.
95                To change the base target, use the FCDMorphController::SetBaseTarget
96                or the FCDSkinController::SetTarget functions.
97                @return The base target entity. This pointer will be NULL
98                        if no base target is defined. */
99        FCDEntity* GetBaseTarget();
100        const FCDEntity* GetBaseTarget() const; /**< See above. */
101
102        /** Retrieves the base target geometry for this controller.
103                Controllers can be chained together. This function allows
104                you to retrieve the base target geometry, if there is one.
105                @return The base target geometry. This pointer will be NULL
106                        if no base target is defined or if the base target entity
107                        is not a geometry. */
108        FCDGeometry* GetBaseGeometry();
109        const FCDGeometry* GetBaseGeometry() const; /**< See above. */
110
111        /** [INTERNAL] Retrieves the COLLADA id of the target entity.
112                This value is only useful for COLLADA 1.3 backward compatibility.
113                For more recent COLLADA documents, this value is unused.
114                @return The COLLADA id of the target entity. */
115        const string& GetTargetId() const { return targetId; }
116
117        /** [INTERNAL] Reads in the \<controller\> element from a given COLLADA XML tree node.
118                @param controllerNode The COLLADA XML tree node.
119                @return The status of the import. If the status is not successful,
120                        it may be dangerous to extract information from the controller.*/
121        virtual FUStatus LoadFromXML(xmlNode* controllerNode);
122
123        /** [INTERNAL] Writes out the \<controller\> element to the given COLLADA XML tree node.
124                @param parentNode The COLLADA XML parent node in which to insert the controller information.
125                @return The created element XML tree node. */
126        virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
127
128        /** [INTERNAL] Links the controller entities with their many targets/influences.
129                This function is executed for all the controllers, after the scene graph has been imported.
130                It is mainly used to link the skin and its bones.
131                @return The status of the linkage.*/
132        FUStatus Link();
133};
134
135#endif // _FCD_CONTROLLER_H_
136
Note: See TracBrowser for help on using the repository browser.