Go to the documentation of this file.
16 #include <mrpt/img/TColor.h>
17 #include <mrpt/math/TPolygon2D.h>
18 #include <mrpt/opengl/CSetOfLines.h>
19 #include <mrpt/opengl/CSetOfObjects.h>
20 #include <mrpt/poses/CPose2D.h>
21 #include <mrpt/typemeta/TEnumType.h>
53 using Ptr = std::shared_ptr<Block>;
69 const mrpt::math::TVector2D& force,
70 const mrpt::math::TPoint2D& applyPoint = mrpt::math::TPoint2D(0, 0))
override;
82 mrpt::math::TPoint2D getBlockCenterOfMass()
const
140 std::optional<float>
getElevationAt(
const mrpt::math::TPoint2D& worldXY)
const override;
144 const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& viz,
145 const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& physical,
bool childrenOnly)
override;
177 {
"mass", {
"%lf", &
mass_}},
213 {
"radius", {
"%f", &
radius}},
214 {
"length", {
"%f", &
length}},
238 using Ptr = std::shared_ptr<DummyInvisibleBlock>;
252 for (
auto&
s :
sensors_)
s->simul_pre_timestep(context);
257 for (
auto&
s :
sensors_)
s->simul_post_timestep(context);
261 [[maybe_unused]]
const mrpt::math::TVector2D& force,
262 [[maybe_unused]]
const mrpt::math::TPoint2D& applyPoint)
override
277 const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& viz,
278 const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& physical,
279 [[maybe_unused]]
bool childrenOnly)
override;
285 for (
auto& sensor :
sensors_) sensor->registerOnServer(c);
mrpt::img::TColor block_color_
const mrpt::img::TColor block_color() const
double restitution_
Default: 0.01.
mrpt::opengl::CSetOfObjects::Ptr gl_block_
std::mutex force_segments_for_rendering_cs_
static Ptr factory(World *parent, const rapidxml::xml_node< char > *xml_node)
void mass(double newValue)
void registerOnServer(mvsim::Client &c) override
void internal_parseGeometry(const rapidxml::xml_node< char > &xml_geom_node)
VisualObject * meAsVisualObject() override
A rigid body. These are created via b2World::CreateBody.
mrpt::opengl::CSetOfLines::Ptr gl_forces_
std::vector< b2FrictionJoint * > friction_joints_
const TParameterDefinitions params_
virtual void create_multibody_system(b2World &world)
virtual void apply_force(const mrpt::math::TVector2D &force, const mrpt::math::TPoint2D &applyPoint=mrpt::math::TPoint2D(0, 0)) override
virtual double getMass() const
double block_z_min() const
virtual void simul_post_timestep(const TSimulContext &context) override
void block_color(const mrpt::img::TColor &c)
std::shared_ptr< DummyInvisibleBlock > Ptr
static Ptr factory(World *parent, const rapidxml::xml_node< char > *xml_node)
const mrpt::math::TPolygon2D & blockShape() const
void internal_internalGuiUpdate_forces(mrpt::opengl::COpenGLScene &scene)
GLenum GLuint GLenum GLsizei length
GeometryParams geomParams_
void ground_friction(double newValue)
void internalGuiUpdate(const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &viz, const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &physical, [[maybe_unused]] bool childrenOnly) override
bool default_block_z_min_max() const
std::map< std::string, TParamEntry > TParameterDefinitions
mrpt::math::TPolygon2D block_poly_
void block_z_max(double v)
void block_z_min(double v)
virtual void simul_post_timestep(const TSimulContext &context)
static void register_block_class(const World &parent, const rapidxml::xml_node< char > *xml_node)
double block_z_max() const
std::shared_ptr< SensorBase > Ptr
virtual void simul_pre_timestep(const TSimulContext &context) override
void updateMaxRadiusFromPoly()
TListSensors sensors_
Sensors aboard.
double groundFriction_
Default: 0.5.
virtual void registerOnServer(mvsim::Client &c)
virtual void apply_force([[maybe_unused]] const mrpt::math::TVector2D &force, [[maybe_unused]] const mrpt::math::TPoint2D &applyPoint) override
virtual void simul_pre_timestep(const TSimulContext &context) override
virtual void create_multibody_system(b2World &)
size_t getBlockIndex() const
virtual double getMass() const
std::optional< float > getElevationAt(const mrpt::math::TPoint2D &worldXY) const override
virtual float getMaxBlockRadius() const
std::shared_ptr< Block > Ptr
b2Body * getBox2DBlockBody()
virtual float getMaxBlockRadius() const
std::vector< mrpt::math::TSegment3D > force_segments_for_rendering_
virtual void simul_pre_timestep(const TSimulContext &context)
Params for the <geometry> XML tag:
double ground_friction() const
virtual void simul_post_timestep(const TSimulContext &context) override
b2Fixture * fixture_block_
double lateral_friction_
Default: 0.5.
void setBlockIndex(size_t idx)
mrpt::math::TPoint2D block_com_
In local coordinates.
const TParameterDefinitions params
void add_sensor(const SensorBase::Ptr &sensor)
DummyInvisibleBlock(World *parent)
std::vector< SensorBase::Ptr > TListSensors
void blockShape(const mrpt::math::TPolygon2D &p)
virtual void internalGuiUpdate(const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &viz, const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &physical, bool childrenOnly) override
MRPT_FILL_ENUM_CUSTOM_NAME(GeometryType::Cylinder, "cylinder")
mvsim
Author(s):
autogenerated on Wed May 28 2025 02:13:07