FCDocument/FCDTransform.h

Go to the documentation of this file.
00001 /*
00002     Copyright (C) 2005-2006 Feeling Software Inc.
00003     MIT License: http://www.opensource.org/licenses/mit-license.php
00004 */
00005 /*
00006     Based on the FS Import classes:
00007     Copyright (C) 2005-2006 Feeling Software Inc
00008     Copyright (C) 2005-2006 Autodesk Media Entertainment
00009     MIT License: http://www.opensource.org/licenses/mit-license.php
00010 */
00011 
00018 #ifndef _FCD_TRANSFORM_H_
00019 #define _FCD_TRANSFORM_H_
00020 
00021 class FCDocument;
00022 class FCDSceneNode;
00023 
00024 #include "FCDocument/FCDObject.h"
00025 
00035 class FCOLLADA_EXPORT FCDTransform : public FCDObject
00036 {
00037 public:
00039     enum Type
00040     {
00041         TRANSLATION, 
00042         ROTATION, 
00043         SCALE, 
00044         MATRIX, 
00045         LOOKAT, 
00046         SKEW 
00047     };
00048 
00049 private:
00050     DeclareObjectType;
00051     FCDSceneNode* parent;
00052 
00053 public:
00060     FCDTransform(FCDocument* document, FCDSceneNode* parent);
00061 
00064     virtual ~FCDTransform();
00065 
00069     FCDSceneNode* GetParent() { return parent; }
00070     const FCDSceneNode* GetParent() const { return parent; } 
00075     virtual FCDTransform* Clone(FCDSceneNode* newParent) = 0;
00076 
00080     virtual Type GetType() const = 0;
00081 
00085     virtual FMMatrix44 ToMatrix() const = 0;
00086 
00089     virtual bool IsAnimated() const = 0;
00090 
00094     virtual FCDAnimated* GetAnimated() = 0;
00095 
00102     virtual bool IsInverse(const FCDTransform* transform) const;
00103 
00108     virtual FUStatus LoadFromXML(xmlNode* transformNode) = 0;
00109 
00113     virtual xmlNode* WriteToXML(xmlNode* parentNode) const = 0;
00114 };
00115 
00122 class FCOLLADA_EXPORT FCDTTranslation : public FCDTransform
00123 {
00124 private:
00125     DeclareObjectType;
00126     FMVector3 translation;
00127 
00128 public:
00136     FCDTTranslation(FCDocument* document, FCDSceneNode* parent);
00137     
00140     virtual ~FCDTTranslation();
00141 
00144     virtual Type GetType() const { return TRANSLATION; }
00145 
00149     inline FMVector3& GetTranslation() { return translation; }
00150     inline const FMVector3& GetTranslation() const { return translation; } 
00154     inline void SetTranslation(const FMVector3& _translation) { translation = _translation; }
00155 
00160     inline void SetTranslation(float x, float y, float z) { translation = FMVector3(x, y, z); }
00161 
00164     virtual FMMatrix44 ToMatrix() const;
00165 
00168     virtual bool IsAnimated() const;
00169 
00174     virtual FCDAnimated* GetAnimated();
00175 
00181     virtual bool IsInverse(const FCDTransform* transform) const;
00182 
00186     virtual FCDTransform* Clone(FCDSceneNode* newParent);
00187 
00192     virtual FUStatus LoadFromXML(xmlNode* translationNode);
00193 
00197     virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
00198 };
00199 
00205 class FCOLLADA_EXPORT FCDTScale : public FCDTransform
00206 {
00207 private:
00208     DeclareObjectType;
00209     FMVector3 scale;
00210 
00211 public:
00219     FCDTScale(FCDocument* document, FCDSceneNode* parent);
00220 
00223     virtual ~FCDTScale();
00224 
00227     virtual Type GetType() const { return SCALE; }
00228 
00232     FMVector3& GetScale() { return scale; }
00233     const FMVector3& GetScale() const { return scale; } 
00237     inline void SetScale(const FMVector3& _scale) { scale = _scale; }
00238 
00243     inline void SetScale(float x, float y, float z) { scale = FMVector3(x, y, z); }
00244 
00247     virtual FMMatrix44 ToMatrix() const;
00248 
00251     virtual bool IsAnimated() const;
00252 
00257     virtual FCDAnimated* GetAnimated();
00258 
00262     virtual FCDTransform* Clone(FCDSceneNode* newParent);
00263 
00268     virtual FUStatus LoadFromXML(xmlNode* scaleNode);
00269 
00273     virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
00274 };
00275 
00283 class FCOLLADA_EXPORT FCDTRotation : public FCDTransform
00284 {
00285 private:
00286     DeclareObjectType;
00287     float angle;
00288     FMVector3 axis;
00289 
00290 public:
00298     FCDTRotation(FCDocument* document, FCDSceneNode* parent);
00299     
00302     virtual ~FCDTRotation();
00303 
00306     virtual Type GetType() const { return ROTATION; }
00307 
00311     inline FMVector3& GetAxis() { return axis; }
00312     inline const FMVector3& GetAxis() const { return axis; } 
00316     inline void SetAxis(const FMVector3& _axis) { axis = _axis; }
00317 
00322     inline void SetAxis(float x, float y, float z) { axis = FMVector3(x, y, z); }
00323 
00327     inline float& GetAngle() { return angle; }
00328     inline const float& GetAngle() const { return angle; } 
00332     inline void SetAngle(float a) { angle = a; }
00333 
00337     inline void SetRotation(const FMVector3& _axis, float a) { axis = _axis; angle = a; }
00338 
00341     virtual FMMatrix44 ToMatrix() const;
00342 
00345     virtual bool IsAnimated() const;
00346 
00351     virtual FCDAnimated* GetAnimated();
00352 
00358     virtual bool IsInverse(const FCDTransform* transform) const;
00359 
00363     virtual FCDTransform* Clone(FCDSceneNode* newParent);
00364 
00369     virtual FUStatus LoadFromXML(xmlNode* rotationNode);
00370 
00374     virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
00375 };
00376 
00383 class FCOLLADA_EXPORT FCDTMatrix : public FCDTransform
00384 {
00385 private:
00386     DeclareObjectType;
00387     FMMatrix44 transform;
00388 
00389 public:
00395     FCDTMatrix(FCDocument* document, FCDSceneNode* parent);
00396 
00399     virtual ~FCDTMatrix();
00400     
00403     virtual Type GetType() const { return MATRIX; }
00404 
00408     FMMatrix44& GetTransform() { return transform; }
00409     const FMMatrix44& GetTransform() const { return transform; } 
00413     inline void SetTransform(const FMMatrix44& mx) { transform = mx; }
00414 
00418     virtual FMMatrix44 ToMatrix() const { return transform; }
00419 
00422     virtual bool IsAnimated() const;
00423 
00428     virtual FCDAnimated* GetAnimated();
00429 
00433     virtual FCDTransform* Clone(FCDSceneNode* newParent);
00434 
00439     virtual FUStatus LoadFromXML(xmlNode* matrixNode);
00440 
00444     virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
00445 };
00446 
00454 class FCOLLADA_EXPORT FCDTLookAt : public FCDTransform
00455 {
00456 private:
00457     DeclareObjectType;
00458     FMVector3 position;
00459     FMVector3 target;
00460     FMVector3 up;
00461 
00462 public:
00468     FCDTLookAt(FCDocument* document, FCDSceneNode* parent);
00469 
00472     virtual ~FCDTLookAt();
00473 
00476     virtual Type GetType() const { return LOOKAT; }
00477 
00481     FMVector3& GetPosition() { return position; }
00482     const FMVector3& GetPosition() const { return position; } 
00486     inline void SetPosition(const FMVector3& pos) { position = pos; }
00487 
00492     inline void SetPosition(float x, float y, float z) { position = FMVector3(x, y, z); }
00493 
00497     FMVector3& GetTarget() { return target; }
00498     const FMVector3& GetTarget() const { return target; } 
00502     inline void SetTarget(const FMVector3& _target) { target = _target; }
00503 
00508     inline void SetTarget(float x, float y, float z) { target = FMVector3(x, y, z); }
00509 
00513     FMVector3& GetUp() { return up; }
00514     const FMVector3& GetUp() const { return up; } 
00518     inline void SetUp(const FMVector3& _up) { up = _up; }
00519 
00524     inline void SetUp(float x, float y, float z) { up = FMVector3(x, y, z); }
00525 
00528     virtual FMMatrix44 ToMatrix() const;
00529 
00532     virtual bool IsAnimated() const;
00533 
00536     virtual FCDAnimated* GetAnimated();
00537 
00541     virtual FCDTransform* Clone(FCDSceneNode* newParent);
00542 
00547     virtual FUStatus LoadFromXML(xmlNode* lookAtNode);
00548 
00552     virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
00553 };
00554 
00562 class FCOLLADA_EXPORT FCDTSkew : public FCDTransform
00563 {
00564 private:
00565     DeclareObjectType;
00566     FMVector3 rotateAxis;
00567     FMVector3 aroundAxis;
00568     float angle;
00569 
00570 public:
00576     FCDTSkew(FCDocument* document, FCDSceneNode* parent);
00577 
00580     virtual ~FCDTSkew();
00581 
00584     virtual Type GetType() const { return SKEW; }
00585 
00588     const FMVector3& GetRotateAxis() const { return rotateAxis; }
00589 
00592     inline void SetRotateAxis(const FMVector3& axis) { rotateAxis = axis; }
00593 
00596     const FMVector3& GetAroundAxis() const { return aroundAxis; }
00597 
00600     inline void SetAroundAxis(const FMVector3& axis) { aroundAxis = axis; }
00601 
00604     const float& GetAngle() { return angle; }
00605 
00608     inline void SetAngle(float _angle) { angle = _angle; }
00609 
00612     virtual FMMatrix44 ToMatrix() const;
00613 
00616     virtual bool IsAnimated() const;
00617 
00620     virtual FCDAnimated* GetAnimated();
00621 
00625     virtual FCDTransform* Clone(FCDSceneNode* newParent);
00626 
00631     virtual FUStatus LoadFromXML(xmlNode* skewNode);
00632 
00636     virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
00637 };
00638 
00644 class FCOLLADA_EXPORT FCDTFactory
00645 {
00646 private:
00647     FCDTFactory() {} // Static class: do not instantiate.
00648 
00649 public:
00656     static FCDTransform* CreateTransform(FCDocument* document, FCDSceneNode* parent, FCDTransform::Type type);
00657 
00664     static FCDTransform* CreateTransform(FCDocument* document, FCDSceneNode* parent, xmlNode* node);
00665 };
00666 
00667 #endif // _FR_TRANSFORM_H_

Generated on Fri May 12 16:44:39 2006 for FCollada by  doxygen 1.4.6-NO