Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Matena <lukasmatena@seznam.cz>2019-12-10 11:52:20 +0300
committerLukas Matena <lukasmatena@seznam.cz>2019-12-10 11:53:34 +0300
commitf6e217171af4ccb0d5a6f2846d4ca7d821c5320a (patch)
treecf434a5a384a605056e3b7cd68200fedddd060a2 /src/slic3r/GUI/MeshUtils.hpp
parent68812b081ffc993845c10e7c8697a053dc45df91 (diff)
Added comments in MeshUtils.hpp
PIMPL in MeshRaycaster now uses std::unique_ptr instead of raw pointer
Diffstat (limited to 'src/slic3r/GUI/MeshUtils.hpp')
-rw-r--r--src/slic3r/GUI/MeshUtils.hpp53
1 files changed, 41 insertions, 12 deletions
diff --git a/src/slic3r/GUI/MeshUtils.hpp b/src/slic3r/GUI/MeshUtils.hpp
index e4c4c20d2..d05cc4206 100644
--- a/src/slic3r/GUI/MeshUtils.hpp
+++ b/src/slic3r/GUI/MeshUtils.hpp
@@ -17,7 +17,7 @@ namespace GUI {
struct Camera;
-
+// lm_FIXME: Following class might possibly be replaced by Eigen::Hyperplane
class ClippingPlane
{
double m_data[4];
@@ -67,13 +67,23 @@ public:
};
-
+// MeshClipper class cuts a mesh and is able to return a triangulated cut.
class MeshClipper {
public:
+ // Inform MeshClipper about which plane we want to use to cut the mesh
+ // This is supposed to be in world coordinates.
void set_plane(const ClippingPlane& plane);
+
+ // Which mesh to cut. MeshClipper remembers const * to it, caller
+ // must make sure that it stays valid.
void set_mesh(const TriangleMesh& mesh);
+
+ // Inform the MeshClipper about the transformation that transforms the mesh
+ // into world coordinates.
void set_transformation(const Geometry::Transformation& trafo);
+ // Return the triangulated cut. The points are returned directly
+ // in world coordinates.
const std::vector<Vec3f>& get_triangles();
private:
@@ -90,26 +100,45 @@ private:
-
+// MeshRaycaster class answers queries such as where on the mesh someone clicked,
+// whether certain points are visible or obscured by the mesh etc.
class MeshRaycaster {
public:
+ // The class saves a const* to the mesh, called is responsible
+ // for making sure it does not get invalid.
MeshRaycaster(const TriangleMesh& mesh);
- ~MeshRaycaster();
- void set_transformation(const Geometry::Transformation& trafo);
- void set_camera(const Camera& camera);
- bool unproject_on_mesh(const Vec2d& mouse_pos, const Transform3d& trafo, const Camera& camera,
- Vec3f& position, Vec3f& normal, const ClippingPlane* clipping_plane = nullptr) const;
-
- std::vector<unsigned> get_unobscured_idxs(const Geometry::Transformation& trafo, const Camera& camera,
- const std::vector<Vec3f>& points, const ClippingPlane* clipping_plane = nullptr) const;
+ ~MeshRaycaster();
+ // Given a mouse position, this returns true in case it is on the mesh.
+ bool unproject_on_mesh(
+ const Vec2d& mouse_pos,
+ const Transform3d& trafo, // how to get the mesh into world coords
+ const Camera& camera, // current camera position
+ Vec3f& position, // where to save the positibon of the hit (mesh coords)
+ Vec3f& normal, // normal of the triangle that was hit
+ const ClippingPlane* clipping_plane = nullptr // clipping plane (if active)
+ ) const;
+
+ // Given a vector of points in woorld coordinates, this returns vector
+ // of indices of points that are visible (i.e. not cut by clipping plane
+ // or obscured by part of the mesh.
+ std::vector<unsigned> get_unobscured_idxs(
+ const Geometry::Transformation& trafo, // how to get the mesh into world coords
+ const Camera& camera, // current camera position
+ const std::vector<Vec3f>& points, // points in world coords
+ const ClippingPlane* clipping_plane = nullptr // clipping plane (if active)
+ ) const;
+
+ // Given a point in world coords, the method returns closest point on the mesh.
+ // The output is in mesh coords.
+ // normal* can be used to also get normal of the respective triangle.
Vec3f get_closest_point(const Vec3f& point, Vec3f* normal = nullptr) const;
private:
// PIMPL wrapper around igl::AABB so I don't have to include the header-only IGL here
class AABBWrapper;
- AABBWrapper* m_AABB_wrapper;
+ std::unique_ptr<AABBWrapper> m_AABB_wrapper;
const TriangleMesh* m_mesh = nullptr;
};