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

sla_treebuilder_tests.cpp « sla_print « tests - github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 05aca963ea536bc57557d30c438cf7b839b1c45d (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <catch2/catch.hpp>
#include <test_utils.hpp>

#include "libslic3r/TriangleMesh.hpp"
#include "libslic3r/SLA/SupportTreeBuildsteps.hpp"
#include "libslic3r/SLA/SupportTreeMesher.hpp"

TEST_CASE("Test bridge_mesh_intersect on a cube's wall", "[SLABridgeMeshInters]") {
    using namespace Slic3r;

    TriangleMesh cube = make_cube(10., 10., 10.);

    sla::SupportConfig cfg = {}; // use default config
    sla::SupportPoints pts = {{10.f, 5.f, 5.f, float(cfg.head_front_radius_mm), false}};
    sla::SupportableMesh sm{cube, pts, cfg};

    size_t steps = 45;
    SECTION("Bridge is straight horizontal and pointing away from the cube") {

        sla::Bridge bridge(pts[0].pos.cast<double>(), Vec3d{15., 5., 5.},
                           pts[0].head_front_radius);

        auto hit = sla::query_hit(sm, bridge);

        REQUIRE(std::isinf(hit.distance()));

        cube.merge(sla::to_triangle_mesh(get_mesh(bridge, steps)));
        cube.require_shared_vertices();
        cube.WriteOBJFile("cube1.obj");
    }

    SECTION("Bridge is tilted down in 45 degrees, pointing away from the cube") {
        sla::Bridge bridge(pts[0].pos.cast<double>(), Vec3d{15., 5., 0.},
                           pts[0].head_front_radius);

        auto hit = sla::query_hit(sm, bridge);

        REQUIRE(std::isinf(hit.distance()));

        cube.merge(sla::to_triangle_mesh(get_mesh(bridge, steps)));
        cube.require_shared_vertices();
        cube.WriteOBJFile("cube2.obj");
    }
}


TEST_CASE("Test bridge_mesh_intersect on a sphere", "[SLABridgeMeshInters]") {
    using namespace Slic3r;

    TriangleMesh sphere = make_sphere(1.);

    sla::SupportConfig cfg = {}; // use default config
    cfg.head_back_radius_mm = cfg.head_front_radius_mm;
    sla::SupportPoints pts = {{1.f, 0.f, 0.f, float(cfg.head_front_radius_mm), false}};
    sla::SupportableMesh sm{sphere, pts, cfg};

    size_t steps = 45;
    SECTION("Bridge is straight horizontal and pointing away from the sphere") {

        sla::Bridge bridge(pts[0].pos.cast<double>(), Vec3d{2., 0., 0.},
                           pts[0].head_front_radius);

        auto hit = sla::query_hit(sm, bridge);

        sphere.merge(sla::to_triangle_mesh(get_mesh(bridge, steps)));
        sphere.require_shared_vertices();
        sphere.WriteOBJFile("sphere1.obj");

        REQUIRE(std::isinf(hit.distance()));
    }

    SECTION("Bridge is tilted down 45 deg and pointing away from the sphere") {

        sla::Bridge bridge(pts[0].pos.cast<double>(), Vec3d{2., 0., -2.},
                           pts[0].head_front_radius);

        auto hit = sla::query_hit(sm, bridge);

        sphere.merge(sla::to_triangle_mesh(get_mesh(bridge, steps)));
        sphere.require_shared_vertices();
        sphere.WriteOBJFile("sphere2.obj");

        REQUIRE(std::isinf(hit.distance()));
    }

    SECTION("Bridge is tilted down 90 deg and pointing away from the sphere") {

        sla::Bridge bridge(pts[0].pos.cast<double>(), Vec3d{1., 0., -2.},
                           pts[0].head_front_radius);

        auto hit = sla::query_hit(sm, bridge);

        sphere.merge(sla::to_triangle_mesh(get_mesh(bridge, steps)));
        sphere.require_shared_vertices();
        sphere.WriteOBJFile("sphere3.obj");

        REQUIRE(std::isinf(hit.distance()));
    }
}