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

ReprojectPointsOnMesh.hpp « SLA « libslic3r « src - github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 4737a6c212cee83562441d27ac6f9f1844865ad1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#ifndef REPROJECTPOINTSONMESH_HPP
#define REPROJECTPOINTSONMESH_HPP

#include "libslic3r/Point.hpp"
#include "SupportPoint.hpp"
#include "Hollowing.hpp"
#include "IndexedMesh.hpp"
#include "libslic3r/Model.hpp"

#include <tbb/parallel_for.h>

namespace Slic3r { namespace sla {

template<class Pt> Vec3d pos(const Pt &p) { return p.pos.template cast<double>(); }
template<class Pt> void pos(Pt &p, const Vec3d &pp) { p.pos = pp.cast<float>(); }

template<class PointType>
void reproject_support_points(const IndexedMesh &mesh, std::vector<PointType> &pts)
{
    tbb::parallel_for(size_t(0), pts.size(), [&mesh, &pts](size_t idx) {
        int junk;
        Vec3d new_pos;
        mesh.squared_distance(pos(pts[idx]), junk, new_pos);
        pos(pts[idx], new_pos);
    });
}

inline void reproject_points_and_holes(ModelObject *object)
{
    bool has_sppoints = !object->sla_support_points.empty();

    // Disabling reprojection of holes as they have a significant offset away
    // from the model body which tolerates minor geometrical changes.
    //
    // TODO: uncomment and ensure the right offset of the hole points if
    // reprojection would still be necessary.
    // bool has_holes    = !object->sla_drain_holes.empty();

    if (!object || (/*!has_holes &&*/ !has_sppoints)) return;

    TriangleMesh rmsh = object->raw_mesh();
    rmsh.require_shared_vertices();
    IndexedMesh emesh{rmsh};

    if (has_sppoints)
        reproject_support_points(emesh, object->sla_support_points);

//    if (has_holes)
//        reproject_support_points(emesh, object->sla_drain_holes);
}

}}
#endif // REPROJECTPOINTSONMESH_HPP