Choreonoid  1.5
AbstractSeq.h
Go to the documentation of this file.
1 
6 #ifndef CNOID_UTIL_ABSTRACT_SEQ_H
7 #define CNOID_UTIL_ABSTRACT_SEQ_H
8 
9 #include <string>
10 #include <boost/shared_ptr.hpp>
11 #include <boost/function.hpp>
12 #include "exportdecl.h"
13 
14 namespace cnoid {
15 
16 class Mapping;
17 class YAMLWriter;
18 
20 typedef boost::shared_ptr<AbstractSeq> AbstractSeqPtr;
21 
22 
24 {
25 protected:
26  AbstractSeq(const char* seqType);
27  AbstractSeq(const AbstractSeq& org);
28 
29 public:
30  virtual ~AbstractSeq();
31 
32  virtual AbstractSeqPtr cloneSeq() const = 0;
33 
34  virtual AbstractSeq& operator=(const AbstractSeq& rhs);
35 
36  void copySeqProperties(const AbstractSeq& source);
37 
38  const std::string& seqType() const {
39  return seqType_;
40  }
41 
42  virtual double getFrameRate() const = 0;
43  virtual void setFrameRate(double frameRate) = 0;
44 
45  double getTimeStep() const {
46  return 1.0 / getFrameRate();
47  }
48 
49  void setTimeStep(double timeStep){
50  return setFrameRate(1.0 / timeStep);
51  }
52 
53  double getTimeOfFrame(int frame){
54  return frame / getFrameRate();
55  }
56 
57  virtual int getOffsetTimeFrame() const;
58 
59  double getOffsetTime() const {
60  return getOffsetTimeFrame() / getFrameRate();
61  }
62 
63  virtual int getNumFrames() const = 0;
64  virtual void setNumFrames(int n, bool clearNewElements = false) = 0;
65 
66  void setTimeLength(double length, bool clearNewElements = false){
67  return setNumFrames(static_cast<int>(length * getFrameRate()), clearNewElements);
68  }
69 
77  inline double getTimeLength() const {
78  return getNumFrames() / getFrameRate();
79  }
80 
81  inline const std::string& seqContentName() {
82  return content;
83  }
84 
85  virtual void setSeqContentName(const std::string& content) {
86  this->content = content;
87  }
88 
89  bool readSeq(const Mapping& archive);
90  bool writeSeq(YAMLWriter& writer);
91 
92  inline const std::string& seqMessage() const {
93  return message;
94  }
95 
96  static const double defaultFrameRate() { return 100.0; }
97 
98 protected:
99 
100  virtual bool doReadSeq(const Mapping& archive);
101  virtual bool doWriteSeq(YAMLWriter& writer);
102 
103  bool checkSeqContent(const Mapping& archive, const std::string contentName, bool throwEx = false);
104 
105  void clearSeqMessage() { message.clear(); }
106 
107  void addSeqMessage(const std::string& message) {
108  this->message += message;
109  }
110 
111 private:
112  std::string seqType_;
113  std::string content;
114  std::string message;
115 };
116 
117 
119 {
120 public:
121  AbstractMultiSeq(const char* seqType);
123  virtual ~AbstractMultiSeq();
124 
125  virtual AbstractSeqPtr cloneSeq() const = 0;
126 
127  AbstractMultiSeq& operator=(const AbstractMultiSeq& rhs);
128  void copySeqProperties(const AbstractMultiSeq& source);
129 
130  virtual void setDimension(int numFrames, int numParts, bool clearNewElements = false) = 0;
131 
132  virtual void setNumParts(int numParts, bool clearNewElements = false) = 0;
133  virtual int getNumParts() const = 0;
134 
135  virtual int partIndex(const std::string& partLabel) const;
136  virtual const std::string& partLabel(int partIndex) const;
137 
138 protected:
139  virtual bool doWriteSeq(YAMLWriter& writer);
140 
141  typedef boost::function<void(const std::string& label, int index)> SetPartLabelFunction;
142  bool readSeqPartLabels(const Mapping& archive, SetPartLabelFunction setPartLabel);
143  bool writeSeqPartLabels(YAMLWriter& writer);
144 };
145 
146 typedef boost::shared_ptr<AbstractMultiSeq> AbstractMultiSeqPtr;
147 }
148 
149 #endif
void setTimeStep(double timeStep)
Definition: AbstractSeq.h:49
void addSeqMessage(const std::string &message)
Definition: AbstractSeq.h:107
Definition: ValueTree.h:224
const std::string & seqContentName()
Definition: AbstractSeq.h:81
void clearSeqMessage()
Definition: AbstractSeq.h:105
static const double defaultFrameRate()
Definition: AbstractSeq.h:96
Definition: YAMLWriter.h:18
const std::string & seqType() const
Definition: AbstractSeq.h:38
Definition: AbstractSeq.h:118
boost::shared_ptr< AbstractSeq > AbstractSeqPtr
Definition: AbstractSeq.h:19
double getTimeLength() const
Definition: AbstractSeq.h:77
const std::string & seqMessage() const
Definition: AbstractSeq.h:92
double getTimeOfFrame(int frame)
Definition: AbstractSeq.h:53
Definition: AbstractSeq.h:23
Defines the minimum processing for performing pasing file for STL.
Definition: AbstractSceneLoader.h:9
boost::function< void(const std::string &label, int index)> SetPartLabelFunction
Definition: AbstractSeq.h:141
boost::shared_ptr< AbstractMultiSeq > AbstractMultiSeqPtr
Definition: AbstractSeq.h:146
double getTimeStep() const
Definition: AbstractSeq.h:45
#define CNOID_EXPORT
Definition: Util/exportdecl.h:37
double getOffsetTime() const
Definition: AbstractSeq.h:59
void setTimeLength(double length, bool clearNewElements=false)
Definition: AbstractSeq.h:66
virtual void setSeqContentName(const std::string &content)
Definition: AbstractSeq.h:85