2
Copyright (c) 2008-2009 NetAllied Systems GmbH
4
This file is part of COLLADASaxFrameworkLoader.
6
Licensed under the MIT Open Source License,
7
for details please see LICENSE file or the website
8
http://www.opensource.org/licenses/mit-license.php
11
#ifndef __COLLADASAXFWL_KINEMATICSSCENECREATOR_H__
12
#define __COLLADASAXFWL_KINEMATICSSCENECREATOR_H__
14
#include "COLLADASaxFWLPrerequisites.h"
15
#include "COLLADAFWKinematicsModel.h"
16
#include "COLLADAFWKinematicsController.h"
23
class KinematicsScene;
24
class KinematicsModel;
28
namespace COLLADASaxFWL
30
class DocumentProcessor;
31
class KinematicsIntermediateData;
32
class KinematicsModel;
34
class KinematicAttachment;
35
class KinematicsController;
36
class KinematicsInstanceKinematicsModel;
37
class KinematicsInstanceKinematicsScene;
38
class KinematicsScene;
39
class KinematicsBindJointAxis;
42
/** Creates a kinematics scene from an intermediate kinematics data */
43
class KinematicsSceneCreator
46
typedef std::map<COLLADAFW::Joint*, size_t> JointIndexMap;
48
typedef std::stack<size_t> NumberStack;
50
typedef std::map<COLLADAFW::JointPrimitive*, COLLADAFW::JointPrimitive*> JointPrimitiveJointPrimitiveMap;
52
typedef COLLADABU::hash_map<KinematicsModel*, COLLADAFW::KinematicsModel*> KinematicsModelFWKinematicsModelMap;
54
typedef std::set<COLLADAFW::InstanceKinematicsScene::NodeLinkBinding> NodeLinkBindingSet;
57
/** The kinematics scene we are about to create.*/
58
COLLADAFW::KinematicsScene* mKinematicsScene;
60
/** The file loader that has all the information about the kinematics scene.*/
61
DocumentProcessor* mDocumentProcessor;
63
/** The kinematics intermediate data th kinematics scene will be created from. It is
64
provided by mFileLoader.*/
65
const KinematicsIntermediateData& mKinematicsIntermediateData;
67
/** Link number of the current link.*/
68
size_t mLargestLinkNumber;
70
/** Holds the link numbers of the current link and all of its parents.*/
71
NumberStack mLinkNumberStack;
73
/** Index of the next joint to be added to the current kinematics model.*/
74
size_t mLargestJointIndex;
76
/** Maps the joints in the intermediate data to their index in the current framework
78
JointIndexMap mJointIndexMap;
80
/** We use this to map the joints created during the parse proces to the final nodes in the kinematics model,
81
to point to the correct joint in the axis infos.
82
TODO: This solution is to simple for the general case. Requires a much better algo
84
JointPrimitiveJointPrimitiveMap mOriginalClonedJointPrimitiveMap;
86
/** Maps the intermediate kinematics model to the fw kinematics model.*/
87
KinematicsModelFWKinematicsModelMap mKinematicsModelFWKinematicsModelMap;
89
/** Set of all node link bindings. */
90
NodeLinkBindingSet mNodeLinkBindingSet;
94
KinematicsSceneCreator( DocumentProcessor* documentProcessor);
97
virtual ~KinematicsSceneCreator();
99
COLLADAFW::KinematicsScene* createAndGetKinematicsScene();
103
/** Disable default copy ctor. */
104
KinematicsSceneCreator( const KinematicsSceneCreator& pre );
106
/** Disable default assignment operator. */
107
const KinematicsSceneCreator& operator= ( const KinematicsSceneCreator& pre );
109
COLLADAFW::KinematicsModel* createFWKinematicsModel(KinematicsModel* kinematicsModel);
111
void createJointLinkConnections(const KinematicLink* link, COLLADAFW::KinematicsModel* fwKinematicsModel);
112
void createJointLinkConnections(const KinematicAttachment* attachment, size_t jointIndex, COLLADAFW::KinematicsModel* fwKinematicsModel);
114
COLLADAFW::KinematicsController* createFWKinematicsController(KinematicsController* kinematicsController);
116
COLLADAFW::InstanceKinematicsScene* createFWInstanceKinematicsScene(KinematicsInstanceKinematicsScene* instanceKinematicsScene);
118
COLLADAFW::AxisInfo createFWAxisInfo( const AxisInfo& axisInfo, bool& success );
120
COLLADAFW::UniqueId processInstanceKinematicsModel(const KinematicsInstanceKinematicsModel& instanceKinematicsModel);
122
bool resolveLink(KinematicsScene* kinematicsScene,
123
KinematicsBindJointAxis* kinematicsBindJointAxis,
125
COLLADAFW::KinematicsModel** kinModel);
127
size_t findLinkByJOintPrimitive(const COLLADAFW::KinematicsModel* fwKinModel, const COLLADAFW::JointPrimitive* jointPrimitive);
130
} // namespace COLLADASAXFWL
132
#endif // __COLLADASAXFWL_KINEMATICSSCENECREATOR_H__