Choreonoid  1.1
MultiAffine3SeqGraphView.h
説明を見る。
1 
5 #ifndef CNOID_BODYPLUGIN_MULTI_AFFINE_SEQ_GRAPH_VIEW_H_INCLUDED
6 #define CNOID_BODYPLUGIN_MULTI_AFFINE_SEQ_GRAPH_VIEW_H_INCLUDED
7 
8 #include "BodyItem.h"
9 #include "LinkSelectionView.h"
10 #include <set>
11 #include <list>
12 #include <vector>
13 #include <QBoxLayout>
14 #include <boost/signals.hpp>
15 #include <cnoid/Button>
16 #include <cnoid/MultiAffine3SeqItem>
17 #include <cnoid/Link>
18 #include <cnoid/View>
19 #include <cnoid/GraphWidget>
20 #include <cnoid/ItemList>
21 #include <cnoid/ConnectionSet>
22 
23 namespace cnoid {
24 
25  class Archive;
26 
31  class MultiAffine3SeqGraphView : public View, public boost::signals::trackable
32  {
33  public:
34 
37 
38  virtual bool storeState(Archive& archive);
39  virtual bool restoreState(const Archive& archive);
40 
41  protected:
42 
43  virtual QWidget* indicatorOnInfoBar();
44 
45  private:
46 
47  GraphWidget graph;
48  LinkSelectionView* linkSelection;
49 
50  ToggleToolButton xyzToggles[3];
51  ToggleToolButton rpyToggles[3];
52 
53  ConnectionSet toggleConnections;
54 
55  struct ItemInfo
56  {
57  ~ItemInfo(){
58  connections.disconnect();
59  }
60  MultiAffine3SeqItemPtr item;
62  BodyItemPtr bodyItem;
63  ConnectionSet connections;
64  std::vector<GraphDataHandlerPtr> handlers;
65  };
66 
67  std::list<ItemInfo> itemInfos;
68 
69  std::set<BodyItemPtr> bodyItems;
70  ConnectionSet bodyItemConnections;
71 
72  void setupElementToggleSet(QBoxLayout* box, ToggleToolButton toggles[], const char* labels[], bool isActive);
73  void onItemSelectionChanged(const ItemList<MultiAffine3SeqItem>& dataItems);
74  void onDataItemDetachedFromRoot(std::list<ItemInfo>::iterator itemInfoIter);
75  void updateBodyItems();
76  void onBodyItemDetachedFromRoot(BodyItemPtr bodyItem);
77  void setupGraphWidget();
78  void addPositionTrajectory(std::list<ItemInfo>::iterator itemInfoIter, Link* link, MultiAffine3SeqPtr seq);
79  void onDataItemUpdated(std::list<ItemInfo>::iterator itemInfoIter);
80 
81  void onDataRequest(
82  std::list<ItemInfo>::iterator itemInfoIter,
83  int linkIndex, int type, int axis, int frame, int size, double* out_values);
84  void onDataModified(
85  std::list<ItemInfo>::iterator itemInfoIter,
86  int linkIndex, int type, int axis, int frame, int size, double* values);
87 
88  };
89 }
90 
91 #endif