mc_rtc  2.14.0
Surface.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015-2019 CNRS-UM LIRMM, CNRS-AIST JRL
3  */
4 
5 #pragma once
6 
7 #include <mc_rbdyn/api.h>
8 
9 #include <RBDyn/MultiBodyConfig.h>
10 
11 #include <SpaceVecAlg/SpaceVecAlg>
12 
13 #include <memory>
14 #include <string>
15 #include <tinyxml2.h>
16 #include <vector>
17 
18 namespace mc_rbdyn
19 {
20 
21 struct Robot;
22 
23 struct SurfaceImpl;
24 
26 {
27 public:
28  Surface(const std::string & name,
29  const std::string & bodyName,
30  const sva::PTransformd & X_b_s,
31  const std::string & materialName);
32 
33  virtual ~Surface();
34 
44  static std::unique_ptr<Surface> fromXML(const tinyxml2::XMLElement & elem);
45 
46  const std::string & name() const;
47 
48  void name(const std::string & name);
49 
50  const std::string & bodyName() const;
51 
52  const std::string & materialName() const;
53 
54  const std::vector<sva::PTransformd> & points() const;
55 
56  unsigned int bodyIndex(const mc_rbdyn::Robot & robot) const;
57 
58  sva::PTransformd X_0_s(const mc_rbdyn::Robot & robot) const;
59 
60  sva::PTransformd X_0_s(const mc_rbdyn::Robot & robot, const rbd::MultiBodyConfig & mbc) const;
61 
62  const sva::PTransformd & X_b_s() const;
63 
64  void X_b_s(const sva::PTransformd & X_b_s);
65 
66  virtual void computePoints() = 0;
67 
68  std::string toStr();
69  virtual tinyxml2::XMLElement * toXML(tinyxml2::XMLDocument & doc) const = 0;
70 
71  virtual std::shared_ptr<Surface> copy() const = 0;
72 
73  virtual std::string type() const = 0;
74 
75  bool operator==(const Surface & rhs);
76  bool operator!=(const Surface & rhs);
77 
78 protected:
79  std::vector<sva::PTransformd> & points();
80 
81 private:
82  std::unique_ptr<SurfaceImpl> impl;
83 };
84 
85 typedef std::shared_ptr<Surface> SurfacePtr;
86 
87 } // namespace mc_rbdyn
#define MC_RBDYN_DLLAPI
Definition: api.h:50
Definition: generic_gripper.h:15
std::shared_ptr< Surface > SurfacePtr
Definition: Surface.h:85
auto Robot(const std::string &name, GetT get_fn)
Definition: Robot.h:56
Definition: Robot.h:63
Definition: Surface.h:26
static std::unique_ptr< Surface > fromXML(const tinyxml2::XMLElement &elem)
Construct a Surface (of the appropriate derived type) from an XML element.
unsigned int bodyIndex(const mc_rbdyn::Robot &robot) const
void X_b_s(const sva::PTransformd &X_b_s)
virtual void computePoints()=0
virtual ~Surface()
void name(const std::string &name)
const sva::PTransformd & X_b_s() const
sva::PTransformd X_0_s(const mc_rbdyn::Robot &robot) const
const std::string & materialName() const
virtual std::shared_ptr< Surface > copy() const =0
bool operator!=(const Surface &rhs)
virtual tinyxml2::XMLElement * toXML(tinyxml2::XMLDocument &doc) const =0
Surface(const std::string &name, const std::string &bodyName, const sva::PTransformd &X_b_s, const std::string &materialName)
const std::vector< sva::PTransformd > & points() const
const std::string & bodyName() const
bool operator==(const Surface &rhs)
const std::string & name() const
std::vector< sva::PTransformd > & points()
virtual std::string type() const =0
std::string toStr()
sva::PTransformd X_0_s(const mc_rbdyn::Robot &robot, const rbd::MultiBodyConfig &mbc) const