Shape2p5.h
Go to the documentation of this file.
1 /*+-------------------------------------------------------------------------+
2  | MultiVehicle simulator (libmvsim) |
3  | |
4  | Copyright (C) 2014-2024 Jose Luis Blanco Claraco |
5  | Copyright (C) 2017 Borys Tymchenko (Odessa Polytechnic University) |
6  | Distributed under 3-clause BSD License |
7  | See COPYING |
8  +-------------------------------------------------------------------------+ */
9 
10 #pragma once
11 
12 #include <mrpt/containers/CDynamicGrid.h>
13 #include <mrpt/math/TPoint3D.h>
14 #include <mrpt/math/TPolygon2D.h>
15 #include <mrpt/opengl/TTriangle.h>
16 
17 #include <cstdint>
18 #include <optional>
19 #include <vector>
20 
21 namespace mvsim
22 {
31 class Shape2p5
32 {
33  public:
34  Shape2p5() = default;
35 
36  void buildInit(
37  const mrpt::math::TPoint2Df& bbMin, const mrpt::math::TPoint2Df& bbMax, int numCells = 100);
38  void buildAddPoint(const mrpt::math::TPoint3Df& pt);
39  void buildAddTriangle(const mrpt::opengl::TTriangle& t);
40 
41  const mrpt::math::TPolygon2D& getContour() const;
42 
43  double volume() const;
44 
45  void mergeWith(const Shape2p5& s);
46 
47  void setShapeManual(const mrpt::math::TPolygon2D& contour, const float zMin, const float zMax);
48 
49  float zMin() const { return zMin_; }
50  float zMax() const { return zMax_; }
51 
52  void clipZMin(float v);
53  void clipZMax(float v);
54 
55  std::string asString() const;
56 
57  private:
58  mutable std::optional<mrpt::math::TPolygon2D> contour_;
59  mutable float zMin_ = 0, zMax_ = 0;
60 
61  class SimpleOccGrid : public mrpt::containers::CDynamicGrid<uint8_t>
62  {
63  public:
64  template <typename... Args>
65  SimpleOccGrid(Args&&... args)
66  : mrpt::containers::CDynamicGrid<uint8_t>(std::forward<Args>(args)...)
67  {
68  }
69 
70  // Used to debug (save grid to txt file)
71  float cell2float(const uint8_t& v) const override { return v; }
72  };
73 
74  mutable std::optional<SimpleOccGrid> grid_;
75 
77  void computeShape() const;
78 
79  void internalGridFilterSpurious() const;
80  void internalGridFloodFill() const;
81  mrpt::math::TPolygon2D internalGridContour() const;
82  mrpt::math::TPolygon2D internalPrunePolygon(const mrpt::math::TPolygon2D& poly) const;
83 
85  {
86  double loss = 0;
87  mrpt::math::TPolygon2D next;
88  };
89 
90  std::optional<RemovalCandidate> lossOfRemovingVertex(
91  size_t i, const mrpt::math::TPolygon2D& p, bool allowApproxEdges) const;
92 
94  const mrpt::math::TPolygon2D& rawGridContour, const std::string& debugStr = {}) const;
95 };
96 
97 } // namespace mvsim
mvsim::Shape2p5::internalGridContour
mrpt::math::TPolygon2D internalGridContour() const
Definition: Shape2p5.cpp:366
mvsim
Definition: Client.h:21
mvsim::Shape2p5::zMax
float zMax() const
Definition: Shape2p5.h:50
mvsim::Shape2p5::setShapeManual
void setShapeManual(const mrpt::math::TPolygon2D &contour, const float zMin, const float zMax)
Definition: Shape2p5.cpp:217
mvsim::Shape2p5::zMin
float zMin() const
Definition: Shape2p5.h:49
s
XmlRpcServer s
mvsim::Shape2p5::RemovalCandidate::loss
double loss
Definition: Shape2p5.h:86
mvsim::Shape2p5::asString
std::string asString() const
Definition: Shape2p5.cpp:635
mrpt
Definition: basic_types.h:36
mvsim::Shape2p5::volume
double volume() const
Definition: Shape2p5.cpp:43
mvsim::Shape2p5::internalGridFloodFill
void internalGridFloodFill() const
Definition: Shape2p5.cpp:255
mvsim::Shape2p5::mergeWith
void mergeWith(const Shape2p5 &s)
Definition: Shape2p5.cpp:48
mvsim::Shape2p5::zMin_
float zMin_
Definition: Shape2p5.h:59
mvsim::Shape2p5
Definition: Shape2p5.h:31
mvsim::Shape2p5::debugSaveGridTo3DSceneFile
void debugSaveGridTo3DSceneFile(const mrpt::math::TPolygon2D &rawGridContour, const std::string &debugStr={}) const
Definition: Shape2p5.cpp:498
mvsim::Shape2p5::grid_
std::optional< SimpleOccGrid > grid_
Definition: Shape2p5.h:74
mvsim::Shape2p5::RemovalCandidate
Definition: Shape2p5.h:84
mvsim::Shape2p5::SimpleOccGrid::cell2float
float cell2float(const uint8_t &v) const override
Definition: Shape2p5.h:71
mvsim::Shape2p5::RemovalCandidate::next
mrpt::math::TPolygon2D next
Definition: Shape2p5.h:87
mvsim::Shape2p5::internalGridFilterSpurious
void internalGridFilterSpurious() const
Definition: Shape2p5.cpp:226
mvsim::Shape2p5::SimpleOccGrid::SimpleOccGrid
SimpleOccGrid(Args &&... args)
Definition: Shape2p5.h:65
std
mvsim::Shape2p5::clipZMax
void clipZMax(float v)
Definition: Shape2p5.cpp:630
mvsim::Shape2p5::contour_
std::optional< mrpt::math::TPolygon2D > contour_
Definition: Shape2p5.h:58
mvsim::Shape2p5::clipZMin
void clipZMin(float v)
Definition: Shape2p5.cpp:625
mvsim::Shape2p5::Shape2p5
Shape2p5()=default
mvsim::Shape2p5::buildInit
void buildInit(const mrpt::math::TPoint2Df &bbMin, const mrpt::math::TPoint2Df &bbMax, int numCells=100)
Definition: Shape2p5.cpp:106
mvsim::Shape2p5::lossOfRemovingVertex
std::optional< RemovalCandidate > lossOfRemovingVertex(size_t i, const mrpt::math::TPolygon2D &p, bool allowApproxEdges) const
Definition: Shape2p5.cpp:547
mvsim::Shape2p5::zMax_
float zMax_
Definition: Shape2p5.h:59
mvsim::Shape2p5::buildAddPoint
void buildAddPoint(const mrpt::math::TPoint3Df &pt)
Definition: Shape2p5.cpp:126
args
mvsim::Shape2p5::SimpleOccGrid
Definition: Shape2p5.h:61
t
geometry_msgs::TransformStamped t
mvsim::Shape2p5::getContour
const mrpt::math::TPolygon2D & getContour() const
Definition: Shape2p5.cpp:95
mvsim::Shape2p5::computeShape
void computeShape() const
Computes contour_ from the contents in grid_.
Definition: Shape2p5.cpp:169
mvsim::Shape2p5::buildAddTriangle
void buildAddTriangle(const mrpt::opengl::TTriangle &t)
Definition: Shape2p5.cpp:135
mvsim::Shape2p5::internalPrunePolygon
mrpt::math::TPolygon2D internalPrunePolygon(const mrpt::math::TPolygon2D &poly) const
Definition: Shape2p5.cpp:589


mvsim
Author(s):
autogenerated on Wed May 28 2025 02:13:08