Developer Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
JointT.hh
1 /*===========================================================================*\
2 * *
3 * OpenFlipper *
4 * Copyright (C) 2001-2011 by Computer Graphics Group, RWTH Aachen *
5 * www.openflipper.org *
6 * *
7 *--------------------------------------------------------------------------- *
8 * This file is part of OpenFlipper. *
9 * *
10 * OpenFlipper is free software: you can redistribute it and/or modify *
11 * it under the terms of the GNU Lesser General Public License as *
12 * published by the Free Software Foundation, either version 3 of *
13 * the License, or (at your option) any later version with the *
14 * following exceptions: *
15 * *
16 * If other files instantiate templates or use macros *
17 * or inline functions from this file, or you compile this file and *
18 * link it with other files to produce an executable, this file does *
19 * not by itself cause the resulting executable to be covered by the *
20 * GNU Lesser General Public License. This exception does not however *
21 * invalidate any other reasons why the executable file might be *
22 * covered by the GNU Lesser General Public License. *
23 * *
24 * OpenFlipper is distributed in the hope that it will be useful, *
25 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
27 * GNU Lesser General Public License for more details. *
28 * *
29 * You should have received a copy of the GNU LesserGeneral Public *
30 * License along with OpenFlipper. If not, *
31 * see <http://www.gnu.org/licenses/>. *
32 * *
33 \*===========================================================================*/
34 
35 /*===========================================================================*\
36 * *
37 * $Revision: 10745 $ *
38 * $LastChangedBy: moebius $ *
39 * $Date: 2011-01-26 10:23:50 +0100 (Mi, 26 Jan 2011) $ *
40 * *
41 \*===========================================================================*/
42 
43 #ifndef JOINTT_HH
44 #define JOINTT_HH
45 
46 #include <vector>
47 
48 template<typename PointT>
49 class SkeletonT;
50 
58 template <class PointT>
59 class JointT
60 {
61  template< class >
62  friend class SkeletonT;
63 
64 public:
65  typedef PointT Point;
66  typedef typename Point::value_type Scalar;
67  typedef JointT<PointT> Joint;
68  typedef typename std::vector<Joint*>::iterator ChildIter;
69 
70 public:
72  JointT(const Joint &_other);
73  JointT(Joint *_parent, std::string _name = "");
75  ~JointT();
76 
78  inline unsigned int id();
79 
81  inline void setParent(Joint *_newParent, SkeletonT<PointT> &_skeleton);
82  inline Joint *parent();
83 
84  inline bool isRoot();
85 
86 public:
92  inline ChildIter begin();
93  inline ChildIter end();
94  inline size_t size();
95  inline Joint *child(size_t _index);
97 
103  inline bool selected();
104  inline void setSelected(bool _selected);
106 
108  inline std::string name();
109  inline void setName(std::string _name);
110 
111 private:
113  unsigned int id_;
114  bool selected_;
115 
116 protected:
117  inline void setId(unsigned int _id);
118 
122  std::vector<Joint*> children_;
124  std::string name_;
125 };
126 
127 //=============================================================================
128 #if defined(INCLUDE_TEMPLATES) && !defined(JOINTT_C)
129 #define JOINTT_TEMPLATES
130 #include "JointT.cc"
131 #endif
132 //=============================================================================
133 #endif