All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
contour.h
1 /* Copyright (C) 2004-2009 MBSim Development Team
2  *
3  * This library is free software; you can redistribute it and/or
4  * modify it under the terms of the GNU Lesser General Public
5  * License as published by the Free Software Foundation; either
6  * version 2.1 of the License, or (at your option) any later version.
7  *
8  * This library is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  * Lesser General Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public
14  * License along with this library; if not, write to the Free Software
15  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16  *
17  * Contact: martin.o.foerg@googlemail.com
18  * rzander@users.berlios.de
19  */
20 
21 #ifndef _CONTOUR_H_
22 #define _CONTOUR_H_
23 
24 #include "mbsim/element.h"
25 #include "mbsim/contour_pdata.h"
26 #include "mbsim/frame.h"
27 #include "mbsim/mbsim_event.h"
28 
29 #ifdef HAVE_OPENMBVCPPINTERFACE
30 namespace OpenMBV {
31  class RigidBody;
32 }
33 #endif
34 
35 namespace MBSim {
36 
37  class Object;
38  class ContourPointData;
39  class ContactKinematics;
40 
51  class Contour : public Element {
52  public:
57  Contour(const std::string &name, Frame *R=0);
58 
62  virtual ~Contour();
63 
64  /* INHERITED INTERFACE OF ELEMENT */
65  virtual std::string getType() const { return "Contour"; }
66  virtual void plot(double t, double dt = 1);
67  /***************************************************/
68 
69  /* INTERFACE FOR DERIVED CLASSES */
76 
82  virtual void updateJacobiansForFrame(ContourPointData &cp, int j=0) = 0;
83 
88  virtual fmatvec::Vec3 computeNormal(ContourPointData &cp) { updateKinematicsForFrame(cp,Frame::normal); return cp.getFrameOfReference().getOrientation().col(0); }
89 
94  virtual fmatvec::Vec3 computePosition(ContourPointData &cp) { updateKinematicsForFrame(cp,Frame::position); return cp.getFrameOfReference().getPosition(); }
95 
100  virtual fmatvec::Vec3 computeVelocity(ContourPointData &cp) { updateKinematicsForFrame(cp,Frame::velocity); return cp.getFrameOfReference().getVelocity(); }
101 
106  virtual fmatvec::Vec3 computeAngularVelocity(ContourPointData &cp) { updateKinematicsForFrame(cp,Frame::angularVelocity); return cp.getFrameOfReference().getAngularVelocity(); }
107 
112  virtual double computeCurvature(ContourPointData &cp) { THROW_MBSIMERROR("(Contour::computeCurvature): Not implemented."); return 0; }
113 
121  virtual fmatvec::Vec2 computeLagrangeParameter(const fmatvec::Vec3 &WrPoint) {THROW_MBSIMERROR("computeLagrangeParameter(const fmatvec::Vec3 &WrPoint): Not implemented for this contour: \"" + this->getType() + "\"."); return 0; }
122 
126  virtual void setReferencePosition(const fmatvec::Vec3 &WrOP) { R->setPosition(WrOP); }
127 
131  virtual void setReferenceOrientation(const fmatvec::SqrMat3 &AWC) { R->setOrientation(AWC); }
132 
136  virtual void setReferenceVelocity(const fmatvec::Vec3 &WvP) { R->setVelocity(WvP); }
137 
141  virtual void setReferenceAngularVelocity(const fmatvec::Vec3 &WomegaC) { R->setAngularVelocity(WomegaC); }
142 
146  virtual void setReferenceJacobianOfTranslation(const fmatvec::Mat3xV &WJP, int j=0) { R->setJacobianOfTranslation(WJP,j); }
147 
151  virtual void setReferenceGyroscopicAccelerationOfTranslation(const fmatvec::Vec3 &WjP, int j=0) { R->setGyroscopicAccelerationOfTranslation(WjP,j); }
152 
156  virtual void setReferenceJacobianOfRotation(const fmatvec::Mat3xV &WJR, int j=0) { R->setJacobianOfRotation(WJR,j); }
157 
161  virtual void setReferenceGyroscopicAccelerationOfRotation(const fmatvec::Vec3 &WjR, int j=0) { R->setGyroscopicAccelerationOfRotation(WjR,j); }
162 
166  virtual void setReferenceAcceleration(const fmatvec::Vec3 &WaP) { R->setAcceleration(WaP); }
167 
171  virtual void setReferenceAngularAcceleration(const fmatvec::Vec3 &WpsiC) { R->setAngularAcceleration(WpsiC); }
172 
176  virtual void init(InitStage stage);
177  /***************************************************/
178 
184  virtual ContactKinematics * findContactPairingWith(std::string type0, std::string type1) = 0;
185 
186  /* GETTER / SETTER */
187  Frame* getFrame() { return R; }
188  Frame* getFrameOfReference() { return R; }
189  const fmatvec::Vec3& getReferencePosition() const { return R->getPosition(); }
190  const fmatvec::SqrMat3& getReferenceOrientation() const { return R->getOrientation(); }
191  const fmatvec::Vec3& getReferenceVelocity() const { return R->getVelocity(); }
192  const fmatvec::Vec3& getReferenceAngularVelocity() const { return R->getAngularVelocity(); }
193  const fmatvec::Mat3xV& getReferenceJacobianOfTranslation(int j=0) const { return R->getJacobianOfTranslation(j); }
194  const fmatvec::Mat3xV& getReferenceJacobianOfRotation(int j=0) const { return R->getJacobianOfRotation(j); }
195  fmatvec::Mat3xV& getReferenceJacobianOfTranslation(int j=0) { return R->getJacobianOfTranslation(j); }
196  fmatvec::Mat3xV& getReferenceJacobianOfRotation(int j=0) { return R->getJacobianOfRotation(j); }
197  const fmatvec::Vec3& getReferenceGyroscopicAccelerationOfTranslation() const { return R->getGyroscopicAccelerationOfTranslation(); }
198  const fmatvec::Vec3& getReferenceGyroscopicAccelerationOfRotation() const { return R->getGyroscopicAccelerationOfRotation(); }
199  fmatvec::Vec3& getReferenceGyroscopicAccelerationOfTranslation() { return R->getGyroscopicAccelerationOfTranslation(); }
200  fmatvec::Vec3& getReferenceGyroscopicAccelerationOfRotation() { return R->getGyroscopicAccelerationOfRotation(); }
201 
202  virtual int gethSize(int i=0) const { return hSize[i]; }
203  virtual int gethInd(int i=0) const { return hInd[i]; }
204  virtual void sethSize(int size, int i=0) { hSize[i] = size; }
205  virtual void sethInd(int ind, int i=0) { hInd[i] = ind; }
206 
207  //virtual void setPlotFeature(PlotFeature pf, PlotFeatureStatus value) { Element::setPlotFeature(pf,value); R->setPlotFeature(pf,value);}
208 // ObjectInterface* getParent() { return parent; }
209 // void setParent(ObjectInterface* parent_) { parent = parent_; }
210  /***************************************************/
211 
212  void setFrameOfReference(Frame *frame) { R = frame; }
213  void setFrameOfReference(const std::string &frame) { saved_frameOfReference = frame; }
214 
215  virtual void updateStateDependentVariables(double t) {}
216  virtual void updateJacobians(double t, int j=0) {}
217  virtual void updateStateDerivativeDependentVariables(const fmatvec::Vec &ud, double t) {}
218 
219  virtual void initializeUsingXML(xercesc::DOMElement *element);
220  virtual xercesc::DOMElement* writeXMLFile(xercesc::DOMNode *element);
221 
222  protected:
223 // /**
224 // * \brief object the contour belongs to
225 // */
226 // ObjectInterface* parent;
227 
231  int hSize[2], hInd[2];
232 
237 
238  std::string saved_frameOfReference;
239  };
240 
247  class RigidContour : public Contour {
248  public:
253  RigidContour(const std::string &name, Frame *R=0) : Contour(name,R)
254  {}
255 
256  virtual ~RigidContour();
257 
258  /* INHERITED INTERFACE OF ELEMENT */
259  std::string getType() const { return "RigidContour"; }
260  virtual void plot(double t, double dt = 1);
261  virtual void init(InitStage stage);
262  /***************************************************/
263 
264  /* INHERITED INTERFACE OF CONTOUR */
266  virtual void updateJacobiansForFrame(ContourPointData &cp, int j=0);
267  /***************************************************/
268 
274  ContactKinematics * findContactPairingWith(std::string type0, std::string type1);
275 
276 #ifdef HAVE_OPENMBVCPPINTERFACE
277  boost::shared_ptr<OpenMBV::RigidBody>& getOpenMBVRigidBody() {
278  return openMBVRigidBody;
279  }
280 
281  void setOpenMBVRigidBody(const boost::shared_ptr<OpenMBV::RigidBody> &ombvBody) {
282  openMBVRigidBody = ombvBody;
283  }
284 #endif
285 
286  protected:
287 #ifdef HAVE_OPENMBVCPPINTERFACE
288  boost::shared_ptr<OpenMBV::RigidBody> openMBVRigidBody;
289 #endif
290 
291  };
292 }
293 
294 #endif /* _CONTOUR_H_ */
295 
virtual void updateJacobiansForFrame(ContourPointData &cp, int j=0)
JACOBIAN for contour (normal, tangent, binormal) is set by implementation class.
Definition: contour.cc:157
Feature
different interest features for frames
Definition: frame.h:44
basic class for rigid contours
Definition: contour.h:247
virtual void updateKinematicsForFrame(ContourPointData &cp, Frame::Feature ff)=0
cartesian kinematic for contour (normal, tangent, binormal) is set by implementation class ...
virtual fmatvec::Vec3 computeVelocity(ContourPointData &cp)
Definition: contour.h:100
virtual fmatvec::Vec3 computeAngularVelocity(ContourPointData &cp)
Definition: contour.h:106
RigidContour(const std::string &name, Frame *R=0)
constructor
Definition: contour.h:253
ContactKinematics * findContactPairingWith(std::string type0, std::string type1)
contact search for RigidContours
Definition: contour.cc:212
virtual fmatvec::Vec2 computeLagrangeParameter(const fmatvec::Vec3 &WrPoint)
projects the point on the contour to compute the Lagrange parameter
Definition: contour.h:121
int hSize[2]
object the contour belongs to
Definition: contour.h:231
virtual void updateJacobiansForFrame(ContourPointData &cp, int j=0)=0
JACOBIAN for contour (normal, tangent, binormal) is set by implementation class.
virtual fmatvec::Vec3 computeNormal(ContourPointData &cp)
Definition: contour.h:88
Contour(const std::string &name, Frame *R=0)
constructor
Definition: contour.cc:47
basic class for contour definition for rigid (which do not know about their shape) and flexible (they...
Definition: contour.h:51
basic class of MBSim mainly for plotting
Definition: element.h:58
virtual void init(InitStage stage)
TODO.
Definition: contour.cc:171
std::string getType() const
Definition: contour.h:259
virtual void setReferenceVelocity(const fmatvec::Vec3 &WvP)
Definition: contour.h:136
Frame * R
coordinate system of contour
Definition: contour.h:236
virtual void setReferenceOrientation(const fmatvec::SqrMat3 &AWC)
Definition: contour.h:131
virtual ~Contour()
destructor
Definition: contour.cc:55
virtual void setReferenceAcceleration(const fmatvec::Vec3 &WaP)
Definition: contour.h:166
virtual fmatvec::Vec3 computePosition(ContourPointData &cp)
Definition: contour.h:94
virtual void plot(double t, double dt=1)
plots time dependent data
Definition: contour.cc:191
virtual void setReferenceJacobianOfTranslation(const fmatvec::Mat3xV &WJP, int j=0)
Definition: contour.h:146
virtual std::string getType() const
Definition: contour.h:65
virtual void setReferenceAngularAcceleration(const fmatvec::Vec3 &WpsiC)
Definition: contour.h:171
InitStage
The stages of the initialization.
Definition: element.h:97
virtual void setReferenceGyroscopicAccelerationOfRotation(const fmatvec::Vec3 &WjR, int j=0)
Definition: contour.h:161
std::string name
name of element
Definition: element.h:290
virtual void setReferenceAngularVelocity(const fmatvec::Vec3 &WomegaC)
Definition: contour.h:141
cartesian frame on bodies used for application of e.g. links and loads
Definition: frame.h:39
virtual void updateKinematicsForFrame(ContourPointData &cp, Frame::Feature ff)
cartesian kinematic for contour (normal, tangent, binormal) is set by implementation class ...
Definition: contour.cc:147
struct for data-management for single point on a contour to describe contact kinematics ...
Definition: contour_pdata.h:38
virtual void setReferenceJacobianOfRotation(const fmatvec::Mat3xV &WJR, int j=0)
Definition: contour.h:156
virtual void setReferenceGyroscopicAccelerationOfTranslation(const fmatvec::Vec3 &WjP, int j=0)
Definition: contour.h:151
virtual void setReferencePosition(const fmatvec::Vec3 &WrOP)
Definition: contour.h:126
virtual void plot(double t, double dt=1)
plots time dependent data
Definition: contour.cc:111
virtual double computeCurvature(ContourPointData &cp)
Definition: contour.h:112
virtual ContactKinematics * findContactPairingWith(std::string type0, std::string type1)=0
find contact kinematics
virtual void init(InitStage stage)
TODO.
Definition: contour.cc:57

Impressum / Disclaimer / Datenschutz Generated by doxygen 1.8.5 Valid HTML