Choreonoid  1.5
PoseSeqItem.h
Go to the documentation of this file.
1 
6 #ifndef CNOID_POSESEQ_PLUGIN_POSE_SEQ_ITEM_H
7 #define CNOID_POSESEQ_PLUGIN_POSE_SEQ_ITEM_H
8 
9 #include "PoseSeq.h"
10 #include "PoseSeqInterpolator.h"
11 #include <cnoid/Item>
12 #include <cnoid/BodyMotionItem>
13 #include <set>
14 #include <deque>
15 #include "exportdecl.h"
16 
17 namespace cnoid {
18 
19 class TimeBar;
20 class BodyItem;
21 class BodyMotionGenerationBar;
22 
24 {
25 public:
26  static void initializeClass(ExtensionManager* ext);
27 
28  PoseSeqItem();
29  PoseSeqItem(const PoseSeqItem& org);
30  ~PoseSeqItem();
31 
32  virtual void setName(const std::string& name);
33 
34  inline PoseSeqPtr poseSeq() {
35  return seq;
36  }
37 
39  return interpolator_;
40  }
41 
43  return bodyMotionItem_.get();
44  }
45 
46  virtual bool updateInterpolation();
47  virtual bool updateTrajectory(bool putMessages = false);
48 
49  void beginEditing();
50  bool endEditing(bool actuallyModified = true);
51  void clearEditHistory();
52 
53  bool undo();
54  bool redo();
55 
59  bool updateKeyPosesWithBalancedTrajectories(std::ostream& os);
60 
61  double barLength() const { return barLength_; }
62 
63 protected:
64 
65  virtual Item* doDuplicate() const;
66  virtual void onPositionChanged();
67  virtual void doPutProperties(PutPropertyFunction& putProperty);
68  virtual bool store(Archive& archive);
69  virtual bool restore(const Archive& archive);
70 
76 
78 
79  struct EditHistory {
80  /*
81  Unify these containers into one which contains elements
82  in the operated orders and restore them in the same order
83  when undo or redo is carried out.
84  */
88  removed = new PoseSeq();
89  added = new PoseSeq();
90  }
91  bool empty(){
92  return removed->empty() && added->empty();
93  }
94  void clear(){
95  if(!empty()){
96  removed = new PoseSeq();
97  added = new PoseSeq();
98  }
99  }
100  };
101 
102  struct PoseIterComp {
103  bool operator()(const PoseSeq::iterator it1, const PoseSeq::iterator it2) const {
104  return &(*it1) < &(*it2);
105  }
106  };
107  std::set<PoseSeq::iterator, PoseIterComp> inserted;
108  std::set<PoseSeq::iterator, PoseIterComp> modified;
109 
114 
115  std::deque<EditHistory> editHistories;
118 
121 
123 
124  double barLength_;
125 
126  void init();
127  void convert(BodyPtr orgBody);
128  bool convertSub(BodyPtr orgBody, const Mapping& convInfo);
129  void updateInterpolationParameters();
130  void onInserted(PoseSeq::iterator p, bool isMoving);
131  void onRemoving(PoseSeq::iterator p, bool isMoving);
132  void onModifying(PoseSeq::iterator p);
133  void onModified(PoseSeq::iterator p);
134  PoseSeq::iterator removeSameElement(PoseSeq::iterator current, PoseSeq::iterator p);
135 };
136 
138 }
139 
140 #endif
double modifyingPoseTTime
Definition: PoseSeqItem.h:111
ref_ptr< PoseSeqItem > PoseSeqItemPtr
Definition: PoseSeqItem.h:137
BodyMotionItem * bodyMotionItem()
Definition: PoseSeqItem.h:42
Definition: Archive.h:21
EditHistory()
Definition: PoseSeqItem.h:87
Definition: ValueTree.h:224
Definition: ExtensionManager.h:26
Definition: ConnectionSet.h:22
bool empty() const
Definition: PoseSeq.h:110
Definition: BodyMotionGenerationBar.h:26
PoseSeqPtr seq
Definition: PoseSeqItem.h:72
bool operator()(const PoseSeq::iterator it1, const PoseSeq::iterator it2) const
Definition: PoseSeqItem.h:103
std::set< PoseSeq::iterator, PoseIterComp > inserted
Definition: PoseSeqItem.h:107
Definition: PoseSeqItem.h:79
Definition: TimeBar.h:16
PoseSeqInterpolatorPtr interpolator()
Definition: PoseSeqItem.h:38
std::list< PoseRef >::iterator iterator
Definition: PoseSeq.h:81
PoseSeqInterpolatorPtr interpolator_
Definition: PoseSeqItem.h:73
bool empty()
Definition: PoseSeqItem.h:91
EditHistory newHistory
Definition: PoseSeqItem.h:116
double modifyingPoseTime
Definition: PoseSeqItem.h:110
bool isSelectedPoseMoving
Definition: PoseSeqItem.h:122
PoseSeqPtr added
Definition: PoseSeqItem.h:86
Definition: PutPropertyFunction.h:35
Definition: BodyMotionItem.h:18
BodyMotionGenerationBar * generationBar
Definition: PoseSeqItem.h:119
std::set< PoseSeq::iterator, PoseIterComp > modified
Definition: PoseSeqItem.h:108
int currentHistory
Definition: PoseSeqItem.h:117
std::deque< EditHistory > editHistories
Definition: PoseSeqItem.h:115
double barLength() const
Definition: PoseSeqItem.h:61
BodyItem * ownerBodyItem
Definition: PoseSeqItem.h:71
PoseSeqPtr removed
Definition: PoseSeqItem.h:85
Definition: Item.h:38
PoseSeqPtr poseSeq()
Definition: PoseSeqItem.h:34
Defines the minimum processing for performing pasing file for STL.
Definition: AbstractSceneLoader.h:9
PoseSeq::iterator modifyingPoseIter
Definition: PoseSeqItem.h:113
Definition: Signal.h:107
TimeBar * timeBar
Definition: PoseSeqItem.h:120
boost::shared_ptr< PoseSeqInterpolator > PoseSeqInterpolatorPtr
Definition: PoseSeqInterpolator.h:87
BodyMotionItemPtr bodyMotionItem_
Definition: PoseSeqItem.h:74
ConnectionSet editConnections
Definition: PoseSeqItem.h:77
double barLength_
Definition: PoseSeqItem.h:124
PoseUnitPtr modifyingPoseUnitOrg
Definition: PoseSeqItem.h:112
Connection sigInterpolationParametersChangedConnection
Definition: PoseSeqItem.h:75
Definition: PoseSeqItem.h:102
void clear()
Definition: PoseSeqItem.h:94
Definition: PoseSeqItem.h:23
#define CNOID_EXPORT
Definition: Util/exportdecl.h:37
Definition: PoseSeq.h:77
Definition: BodyItem.h:31