Choreonoid  1.5
PoseSeq.h
Go to the documentation of this file.
1 
6 #ifndef CNOID_POSE_SEQ_PLUGIN_POSE_SEQ_H
7 #define CNOID_POSE_SEQ_PLUGIN_POSE_SEQ_H
8 
9 #include "Pose.h"
10 #include <set>
11 #include <list>
12 #include <cnoid/Body>
13 #include <cnoid/Signal>
14 #include <cnoid/ConnectionSet>
15 #include "exportdecl.h"
16 
17 namespace cnoid {
18 
19 class PoseSeq;
21 
23 {
24 public:
25 
26  inline const std::string& name() const {
27  return poseUnit_->name();
28  }
29 
30  inline const PoseUnitPtr poseUnit() const { return poseUnit_; }
31  inline PoseUnitPtr poseUnit() { return poseUnit_; }
32 
33  template <class PoseType> inline const ref_ptr<PoseType> get() const {
34  return dynamic_pointer_cast<PoseType>(poseUnit_);
35  }
36 
37  template <class PoseType> inline ref_ptr<PoseType> get() {
38  return dynamic_pointer_cast<PoseType>(poseUnit_);
39  }
40 
41  inline double time() const {
42  return time_;
43  }
44 
55  inline void setMaxTransitionTime(double time){
56  maxTransitionTime_ = time;
57  }
58 
59  inline double maxTransitionTime() const {
60  return maxTransitionTime_;
61  }
62 
63 private:
64 
65  friend class PoseSeq;
66 
67  PoseRef(PoseSeq* owner, PoseUnitPtr poseUnit, double time);
68  //PoseRef(const PoseRef& org, bool doDeepCopy = false);
69 
70  PoseSeq* owner;
71  PoseUnitPtr poseUnit_;
72  double time_;
73  double maxTransitionTime_;
74 };
75 
76 
78 {
79 public:
80 
81  typedef std::list<PoseRef>::iterator iterator;
82  typedef std::list<PoseRef>::const_iterator const_iterator;
83 
84  PoseSeq();
85  PoseSeq(const PoseSeq& org);
86  ~PoseSeq();
87 
88  void setName(const std::string& name);
89 
90  void setTargetBodyName(const std::string& name) { targetBodyName_ = name; }
91  const std::string& targetBodyName() { return targetBodyName_; }
92 
93  iterator copyElement(iterator seekpos, const_iterator org, double offset = 0.0);
94 
95  virtual PoseUnit* duplicate();
96 
97  bool load(const std::string& filename, const BodyPtr body);
98  bool save(const std::string& filename, const BodyPtr body);
99 
100  bool exportTalkPluginFile(const std::string& filename);
101  bool exportSeqFileForFaceController(const std::string& filename);
102 
103  const std::string& errorMessage() { return errorMessage_; }
104 
105  virtual bool restore(const Mapping& archive, const BodyPtr body);
106  virtual void store(Mapping& archive, const BodyPtr body) const;
107 
108  iterator changeTime(iterator it, double time);
109 
110  inline bool empty() const {
111  return refs.empty();
112  }
113 
114  inline std::list<PoseRef>::size_type size() const {
115  return refs.size();
116  }
117 
118  inline iterator begin(){
119  return refs.begin();
120  }
121 
122  inline const_iterator begin() const {
123  return refs.begin();
124  }
125 
126  inline iterator end(){
127  return refs.end();
128  }
129 
130  inline const_iterator end() const {
131  return refs.end();
132  }
133 
134  inline PoseRef& front() {
135  return refs.front();
136  }
137 
138  inline PoseRef& back() {
139  return refs.back();
140  }
141 
142  PoseUnitPtr find(const std::string& name);
143 
144  //iterator seek(double time, bool seekPosToInsert = false);
145  iterator seek(iterator current, double time, bool seekPosToInsert = false);
146 
147  //iterator insert(double time, PoseUnitPtr pose);
148  iterator insert(iterator current, double time, PoseUnitPtr pose);
149 
150  iterator insert(iterator current, double time, const std::string& name);
151 
152  iterator erase(iterator it);
153 
154  void rename(iterator it, const std::string newName);
155 
156  inline double beginningTime() { return refs.empty() ? 0.0 : refs.front().time(); }
157  inline double endingTime() { return refs.empty() ? 0.0 : refs.back().time(); }
158 
159  void getDomain(double& out_lower, double& out_upper);
160 
161  //SignalProxy<void(PoseUnitPtr, const std::string& oldName)> sigNameChanged();
162 
163  /*
164  SignalProxy<void(iterator, bool isMoving)> sigPoseInserted() {
165  return sigPoseInserted_;
166  }
167 
168  SignalProxy<void(iterator, bool isMoving)> sigPoseRemoving(){
169  return sigPoseRemoving_;
170  }
171 
172  SignalProxy<void(iterator)> sigPoseModified(){
173  return sigPoseModified_;
174  }
175  */
176 
177  /*
178  void emitSigPoseModified(iterator it) {
179  sigPoseModified_(it);
180  }
181  */
182 
183  void beginPoseModification(iterator it){
184  sigPoseModifying_(it);
185  }
186 
187  void endPoseModification(iterator it){
188  sigPoseModified_(it);
189  }
190 
191  ConnectionSet connectSignalSet(
192  const Signal<void(iterator, bool isMoving)>::Slot& slotInserted,
193  const Signal<void(iterator, bool isMoving)>::Slot& slotRemoving,
194  const Signal<void(iterator)>::slot_type& slotModified);
195 
196  ConnectionSet connectSignalSet(
197  const Signal<void(iterator, bool isMoving)>::Slot& slotInserted,
198  const Signal<void(iterator, bool isMoving)>::Slot& slotRemoving,
199  const Signal<void(iterator)>::Slot& slotModifying,
200  const Signal<void(iterator)>::Slot& slotModified);
201 
203  void blockSignals();
204  void unblockSignals();
205 
206 private:
207 
208  typedef std::list<PoseRef> PoseRefList;
209  PoseRefList refs;
210 
211  typedef std::map<std::string, PoseUnitPtr> PoseUnitMap;
212  PoseUnitMap poseUnitMap;
213  std::set<std::string> storedNames;
214 
215  Signal<void(iterator, bool isMoving)> sigPoseInserted_;
216  Signal<void(iterator, bool isMoving)> sigPoseRemoving_;
217  Signal<void(iterator)> sigPoseModifying_;
218  Signal<void(iterator)> sigPoseModified_;
219 
220  std::string targetBodyName_;
221 
222  std::string errorMessage_;
223 
224  iterator insertSub(PoseSeq::iterator current, double time, PoseUnitPtr poseUnit);
225  iterator insert(iterator current, double time, PoseRef& ref);
226 
227  friend class PoseRef;
228 };
229 
230 }
231 
232 #endif
void endPoseModification(iterator it)
Definition: PoseSeq.h:187
std::list< PoseRef >::size_type size() const
Definition: PoseSeq.h:114
const PoseUnitPtr poseUnit() const
Definition: PoseSeq.h:30
double endingTime()
Definition: PoseSeq.h:157
ref_ptr< T > dynamic_pointer_cast(ref_ptr< U > const &p)
Definition: Referenced.h:280
Definition: PoseSeq.h:22
ref_ptr< PoseSeq > PoseSeqPtr
Definition: PoseSeq.h:19
PoseUnitPtr poseUnit()
Definition: PoseSeq.h:31
Definition: ValueTree.h:224
double beginningTime()
Definition: PoseSeq.h:156
double time() const
Definition: PoseSeq.h:41
Definition: ConnectionSet.h:22
bool empty() const
Definition: PoseSeq.h:110
void beginPoseModification(iterator it)
Definition: PoseSeq.h:183
const std::string & targetBodyName()
Definition: PoseSeq.h:91
iterator begin()
Definition: PoseSeq.h:118
std::list< PoseRef >::iterator iterator
Definition: PoseSeq.h:81
PoseRef & front()
Definition: PoseSeq.h:134
void setMaxTransitionTime(double time)
Definition: PoseSeq.h:55
const std::string & errorMessage()
Definition: PoseSeq.h:103
Defines the minimum processing for performing pasing file for STL.
Definition: AbstractSceneLoader.h:9
double maxTransitionTime() const
Definition: PoseSeq.h:59
std::list< PoseRef >::const_iterator const_iterator
Definition: PoseSeq.h:82
const std::string & name() const
Definition: PoseSeq.h:26
const_iterator end() const
Definition: PoseSeq.h:130
Definition: Signal.h:320
#define CNOID_EXPORT
Definition: Util/exportdecl.h:37
Definition: PoseSeq.h:77
PoseRef & back()
Definition: PoseSeq.h:138
Definition: Pose.h:23
void setTargetBodyName(const std::string &name)
Definition: PoseSeq.h:90
const_iterator begin() const
Definition: PoseSeq.h:122
iterator end()
Definition: PoseSeq.h:126