Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
Slic3r::csg::detail Namespace Reference

Functions

void merge_slices (csg::CSGType op, size_t i, std::vector< ExPolygons > &target, std::vector< ExPolygons > &source)
 
void collect_nonempty_indices (csg::CSGType op, const std::vector< float > &slicegrid, const std::vector< ExPolygons > &slices, std::vector< size_t > &indices)
 
void perform_csg (CSGType op, VoxelGridPtr &dst, VoxelGridPtr &src)
 

Function Documentation

◆ collect_nonempty_indices()

void Slic3r::csg::detail::collect_nonempty_indices ( csg::CSGType  op,
const std::vector< float > &  slicegrid,
const std::vector< ExPolygons > &  slices,
std::vector< size_t > &  indices 
)
inline
38{
39 indices.clear();
40 for (size_t i = 0; i < slicegrid.size(); ++i) {
41 if (op == CSGType::Intersection || !slices[i].empty())
42 indices.emplace_back(i);
43 }
44}
bool empty(const BoundingBoxBase< PointType, PointsType > &bb)
Definition BoundingBox.hpp:229

References Slic3r::empty(), and Slic3r::csg::Intersection.

+ Here is the call graph for this function:

◆ merge_slices()

void Slic3r::csg::detail::merge_slices ( csg::CSGType  op,
size_t  i,
std::vector< ExPolygons > &  target,
std::vector< ExPolygons > &  source 
)
inline
19{
20 switch(op) {
21 case CSGType::Union:
22 for (ExPolygon &expoly : source[i])
23 target[i].emplace_back(std::move(expoly));
24 break;
25 case CSGType::Difference:
26 target[i] = diff_ex(target[i], source[i]);
27 break;
28 case CSGType::Intersection:
29 target[i] = intersection_ex(target[i], source[i]);
30 break;
31 }
32}
Definition ExPolygon.hpp:16
Slic3r::ExPolygons diff_ex(const Slic3r::Polygons &subject, const Slic3r::Polygons &clip, ApplySafetyOffset do_safety_offset)
Definition ClipperUtils.cpp:726
Slic3r::ExPolygons intersection_ex(const Slic3r::Polygons &subject, const Slic3r::Polygons &clip, ApplySafetyOffset do_safety_offset)
Definition ClipperUtils.cpp:755
STL namespace.

References Slic3r::diff_ex(), Slic3r::csg::Difference, Slic3r::csg::Intersection, Slic3r::intersection_ex(), and Slic3r::csg::Union.

+ Here is the call graph for this function:

◆ perform_csg()

void Slic3r::csg::detail::perform_csg ( CSGType  op,
VoxelGridPtr dst,
VoxelGridPtr src 
)
inline
34{
35 if (!dst || !src)
36 return;
37
38 switch (op) {
39 case CSGType::Union:
40 if (is_grid_empty(*dst) && !is_grid_empty(*src))
41 dst = clone(*src);
42 else
43 grid_union(*dst, *src);
44
45 break;
46 case CSGType::Difference:
47 grid_difference(*dst, *src);
48 break;
49 case CSGType::Intersection:
50 grid_intersection(*dst, *src);
51 break;
52 }
53}
void grid_union(VoxelGrid &grid, VoxelGrid &arg)
Definition OpenVDBUtils.cpp:243
bool is_grid_empty(const VoxelGrid &grid)
Definition OpenVDBUtils.cpp:303
void grid_difference(VoxelGrid &grid, VoxelGrid &arg)
Definition OpenVDBUtils.cpp:248
void grid_intersection(VoxelGrid &grid, VoxelGrid &arg)
Definition OpenVDBUtils.cpp:253

References Slic3r::clone(), Slic3r::csg::Difference, Slic3r::grid_difference(), Slic3r::grid_intersection(), Slic3r::grid_union(), Slic3r::csg::Intersection, Slic3r::is_grid_empty(), and Slic3r::csg::Union.

+ Here is the call graph for this function: