Choreonoid  1.1
BodyMotionItem.h
説明を見る。
1 
6 #ifndef CNOID_BODYPLUGIN_BODY_MOTION_ITEM_H_INCLUDED
7 #define CNOID_BODYPLUGIN_BODY_MOTION_ITEM_H_INCLUDED
8 
9 #include <cnoid/BodyMotion>
10 #include <cnoid/MultiSeqItem>
11 #include <cnoid/MultiValueSeqItem>
12 #include <cnoid/MultiAffine3SeqItem>
13 #include <cnoid/Vector3SeqItem>
14 #include "exportdecl.h"
15 
16 namespace cnoid {
17 
18  class CNOID_EXPORT BodyMotionItem : public MultiSeqItemBase
19  {
20  public:
22 
23  virtual MultiSeqBasePtr seqBase() { return bodyMotion_; }
24 
25  inline const BodyMotionPtr& motion() { return bodyMotion_; }
26 
27  inline MultiValueSeqItem* jointPosSeqItem() {
28  return jointPosSeqItem_.get();
29  }
30 
31  inline const MultiValueSeqPtr& jointPosSeq() {
32  return bodyMotion_->jointPosSeq();
33  }
34 
35  inline MultiAffine3SeqItem* linkPosSeqItem() {
36  return linkPosSeqItem_.get();
37  }
38 
39  inline const MultiAffine3SeqPtr& linkPosSeq() {
40  return bodyMotion_->linkPosSeq();
41  }
42 
43  bool hasRelativeZmpSeqItem() { return bodyMotion_->hasRelativeZmpSeq(); }
44  Vector3SeqItem* relativeZmpSeqItem();
45 
47  return relativeZmpSeqItem()->seq();
48  }
49 
50  virtual void notifyUpdate();
51 
52  void updateChildItemLineup();
53 
54  protected:
55 
56  BodyMotionItem(const BodyMotionItem& org);
57 
58  virtual ItemPtr doDuplicate() const;
59  virtual bool store(Archive& archive);
60  virtual bool restore(const Archive& archive);
61 
62  private:
63 
64  BodyMotionPtr bodyMotion_;
65 
66  MultiValueSeqItemPtr jointPosSeqItem_;
67  MultiAffine3SeqItemPtr linkPosSeqItem_;
68  Vector3SeqItemPtr relativeZmpSeqItem_;
69 
70  void initialize();
71  void onSubItemUpdated(Item* childItem);
72  };
73 
74  typedef boost::intrusive_ptr<BodyMotionItem> BodyMotionItemPtr;
75 
76  void initializeBodyMotionItem(ExtensionManager& ext);
77 
78 }
79 
80 #endif