10 #include <mrpt/opengl/COpenGLScene.h> 11 #include <mrpt/system/filesystem.h> 12 #include <mrpt/version.h> 22 using namespace mvsim;
25 VerticalPlane::VerticalPlane(
48 parseSimulable(jnode, p);
78 b2dBody_ = world.CreateBody(&bodyDef);
83 const float thickness = 0.02f;
85 const mrpt::math::TPoint2Df p0 = {
x0_,
y0_};
86 const mrpt::math::TPoint2Df p1 = {
x1_,
y1_};
88 const auto v01 = p1 - p0;
89 const mrpt::math::TPoint2Df normal = {-v01.y, v01.x};
90 const auto w = normal.unitarize() * thickness;
93 const size_t nPts = 4;
94 std::vector<b2Vec2> pts;
96 const auto p00 = p0 - w, p01 = p0 + w;
97 const auto p10 = p1 - w, p11 = p1 + w;
99 pts.emplace_back(p00.x, p00.y);
100 pts.emplace_back(p01.x, p01.y);
101 pts.emplace_back(p11.x, p11.y);
102 pts.emplace_back(p10.x, p10.y);
105 blockPoly.
Set(&pts[0], nPts);
109 fixtureDef.
shape = &blockPoly;
121 const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& viz,
122 const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& physical,
123 [[maybe_unused]]
bool childrenOnly)
126 using namespace std::string_literals;
133 const mrpt::math::TPoint3Df p0 = {
x0_,
y0_,
z_};
134 const mrpt::math::TPoint3Df p1 = {
x1_,
y1_, z_};
137 const auto v01 = p1 - p0;
139 const float L = v01.norm(), H =
height_;
142 (p0 + p1) * 0.5
f + mrpt::math::TPoint3Df(0, 0, 0.5
f * H);
144 gl_plane_ = mrpt::opengl::CTexturedPlane::Create();
145 gl_plane_->setPlaneCorners(-0.5 * L, 0.5 * L, -0.5 * H, 0.5 * H);
147 mrpt::math::TPose3D p;
151 p.yaw = std::atan2(v01.y, v01.x);
152 p.roll = mrpt::DEG2RAD(90.0);
157 #if MRPT_VERSION >= 0x270 163 #if MRPT_VERSION >= 0x240 165 mrpt::typemeta::TEnumType<mrpt::opengl::TCullFace>::name2value(
175 const std::string localFileName =
177 ASSERT_FILE_EXISTS_(localFileName);
179 mrpt::img::CImage texture;
180 bool textureReadOk = texture.loadFromFile(localFileName);
181 ASSERT_(textureReadOk);
183 const mrpt::math::TPoint3Df p0 = {
x0_,
y0_,
z_};
184 const mrpt::math::TPoint3Df p1 = {
x1_,
y1_, z_};
187 const auto v01 = p1 - p0;
189 const float L = v01.norm(), H =
height_;
203 mrpt::opengl::CSetOfTexturedTriangles::TTriangle
t;
204 t.vertices[0].xyzrgba.pt = {
x0_,
y0_, z_};
205 t.vertices[1].xyzrgba.pt = {
x1_,
y1_, z_};
206 t.vertices[2].xyzrgba.pt = {
x1_,
y1_, z_ + H};
208 t.vertices[0].uv = {u_min, v_min};
209 t.vertices[1].uv = {u_max, v_min};
210 t.vertices[2].uv = {u_max, v_max};
216 mrpt::opengl::CSetOfTexturedTriangles::TTriangle
t;
217 t.vertices[0].xyzrgba.pt = {
x0_,
y0_, z_};
218 t.vertices[1].xyzrgba.pt = {
x1_,
y1_, z_ + H};
219 t.vertices[2].xyzrgba.pt = {
x0_,
y0_, z_ + H};
221 t.vertices[0].uv = {u_min, v_min};
222 t.vertices[1].uv = {u_max, v_max};
223 t.vertices[2].uv = {u_min, v_max};
231 #if MRPT_VERSION >= 0x240 233 mrpt::typemeta::TEnumType<mrpt::opengl::TCullFace>::name2value(
virtual void loadConfigFrom(const rapidxml::xml_node< char > *root) override
This file contains rapidxml parser and DOM implementation.
b2Fixture * CreateFixture(const b2FixtureDef *def)
std::map< std::string, TParamEntry > TParameterDefinitions
void parse_xmlnode_children_as_param(const rapidxml::xml_node< char > &xml_node, const TParameterDefinitions ¶ms, const std::map< std::string, std::string > &variableNamesValues={}, const char *functionNameContext="", mrpt::system::COutputLogger *logger=nullptr)
mrpt::math::TPose3D getPose() const
void SetTransform(const b2Vec2 &position, float angle)
mrpt::math::TPose3D getPoseNoLock() const
No thread-safe version. Used internally only.
virtual void internalGuiUpdate(const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &viz, const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &physical, bool childrenOnly) override
std::unique_ptr< b2World > & getBox2DWorld()
geometry_msgs::TransformStamped t
mrpt::opengl::CTexturedPlane::Ptr gl_plane_
void simul_pre_timestep(const TSimulContext &context) override
std::string textureFileName_
const std::map< std::string, std::string > & user_defined_variables() const
virtual void simul_post_timestep(const TSimulContext &context)
const std::string & getName() const
void simul_post_timestep(const TSimulContext &context) override
b2Fixture * fixture_block_
virtual void simul_pre_timestep(const TSimulContext &context)
mrpt::opengl::CSetOfTexturedTriangles::Ptr gl_plane_text_
void Set(const b2Vec2 *points, int32 count)
mrpt::opengl::CSetOfObjects::Ptr glGroup_
std::string xmlPathToActualPath(const std::string &modelURI) const
float restitution
The restitution (elasticity) usually in the range [0,1].
double restitution_
Default: 0.01.
void add(const rapidxml::xml_node< Ch > *node)