OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
FillAdaptive.cpp File Reference
#include "../AABBTreeLines.hpp"
#include "../ClipperUtils.hpp"
#include "../ExPolygon.hpp"
#include "../Surface.hpp"
#include "../Geometry.hpp"
#include "../Layer.hpp"
#include "../Print.hpp"
#include "../ShortestPath.hpp"
#include "libslic3r/BoundingBox.hpp"
#include "libslic3r/Point.hpp"
#include "libslic3r/Flow.hpp"
#include "libslic3r/PrintConfig.hpp"
#include "libslic3r/libslic3r.h"
#include "libslic3r/Polyline.hpp"
#include "libslic3r/Line.hpp"
#include "libslic3r/Fill/FillBase.hpp"
#include "FillAdaptive.hpp"
#include <Eigen/Geometry>
#include <Eigen/Core>
#include <admesh/stl.h>
#include <array>
#include <cassert>
#include <boost/geometry/core/cs.hpp>
#include <boost/geometry/index/parameters.hpp>
#include <boost/geometry/index/predicates.hpp>
#include <boost/geometry/core/access.hpp>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <functional>
#include <math.h>
#include <limits>
#include <iterator>
#include <numeric>
#include <optional>
#include <tuple>
#include <vector>
#include <utility>
#include <boost/pool/object_pool.hpp>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point.hpp>
#include <boost/geometry/geometries/segment.hpp>
#include <boost/geometry/index/rtree.hpp>
#include "libslic3r/Config.hpp"
#include "libslic3r/Polygon.hpp"
#include "libslic3r/SurfaceCollection.hpp"
Include dependency graph for FillAdaptive.cpp:

Go to the source code of this file.

Classes

struct  Slic3r::FillAdaptive::Cube
struct  Slic3r::FillAdaptive::CubeProperties
struct  Slic3r::FillAdaptive::Octree
struct  Slic3r::FillAdaptive::FillContext
struct  Slic3r::FillAdaptive::Intersection
struct  Slic3r::FillAdaptive::noncrossing::SweepLine
struct  Slic3r::FillAdaptive::noncrossing::Junction
struct  Slic3r::FillAdaptive::noncrossing::LevelPath

Namespaces

namespace  Slic3r
 |/ Copyright (c) Prusa Research 2020 - 2023 Enrico Turri @enricoturri1966 |/ |/ PrusaSlicer is released under the terms of the AGPLv3 or higher |/
namespace  Slic3r::FillAdaptive
namespace  Slic3r::FillAdaptive::noncrossing

Macros

#define BOOST_POOL_NO_MT

Typedefs

using Slic3r::FillAdaptive::rtree_point_t = bgm::point<float, 2, boost::geometry::cs::cartesian>
using Slic3r::FillAdaptive::rtree_segment_t = bgm::segment<rtree_point_t>
using Slic3r::FillAdaptive::rtree_t = bgi::rtree<std::pair<rtree_segment_t, size_t>, bgi::rstar<16, 4>>
using Slic3r::FillAdaptive::noncrossing::Lin = Vec2d

Functions

template<typename Vector>
bool Slic3r::FillAdaptive::triangle_AABB_intersects (const Vector &a, const Vector &b, const Vector &c, const BoundingBoxBase< Vector > &aabb)
std::vector< double > Slic3r::FillAdaptive::adaptive_fill_line_spacing (const PrintObject &print_object)
Eigen::Quaterniond Slic3r::FillAdaptive::transform_to_world ()
Eigen::Quaterniond Slic3r::FillAdaptive::transform_to_octree ()
static bool Slic3r::FillAdaptive::verify_traversal_order (FillContext &context, const Cube *cube, int depth, const Vec2d &line_from, const Vec2d &line_to)
static void Slic3r::FillAdaptive::generate_infill_lines_recursive (FillContext &context, const Cube *cube, int address, int depth)
static Intersection * Slic3r::FillAdaptive::get_nearest_intersection (std::vector< std::pair< Intersection *, double > > &intersect_line, const size_t first_idx)
static Line Slic3r::FillAdaptive::create_offset_line (Line offset_line, const Intersection &intersection, const double scaled_offset)
static rtree_point_t Slic3r::FillAdaptive::mk_rtree_point (const Point &pt)
static rtree_segment_t Slic3r::FillAdaptive::mk_rtree_seg (const Point &a, const Point &b)
static rtree_segment_t Slic3r::FillAdaptive::mk_rtree_seg (const Line &l)
static void Slic3r::FillAdaptive::add_hook (const Intersection &intersection, const double scaled_offset, const coordf_t hook_length, double scaled_trim_distance, const rtree_t &rtree, const Lines &lines_src)
bool Slic3r::FillAdaptive::validate_intersection_t_joint (const Intersection &intersection)
bool Slic3r::FillAdaptive::validate_intersections (const std::vector< Intersection > &intersections)
static Polylines Slic3r::FillAdaptive::connect_lines_using_hooks (Polylines &&lines, const ExPolygon &boundary, const double spacing, const coordf_t hook_length, const coordf_t hook_length_max)
bool Slic3r::FillAdaptive::has_no_collinear_lines (const Polylines &polylines)
static void Slic3r::FillAdaptive::noncrossing::clip_profile (std::vector< Vec2d > &f, const Lin &c, int side, double w0, double w1, double lim0, double lim1, bool cut_at_window, bool drop_past_limits)
static std::vector< Vec2d > Slic3r::FillAdaptive::noncrossing::path_points (const LevelPath &path, const std::vector< SweepLine > &lines, double reach)
static double Slic3r::FillAdaptive::noncrossing::polyline_length (const std::vector< Vec2d > &pts)
static std::pair< Vec2d, size_t > Slic3r::FillAdaptive::noncrossing::point_along (const std::vector< Vec2d > &pts, double t)
Polylines Slic3r::FillAdaptive::multiline_paths (const Lines &lines_in, double d1, double end_overlap, int sweep, const BoundingBox &cover)
static std::vector< CubeProperties > Slic3r::FillAdaptive::make_cubes_properties (double max_cube_edge_length, double line_spacing)
static bool Slic3r::FillAdaptive::is_overhang_triangle (const Vec3d &a, const Vec3d &b, const Vec3d &c, const Vec3d &up)
static void Slic3r::FillAdaptive::transform_center (Cube *current_cube, const Eigen::Matrix3d &rot)
OctreePtr Slic3r::FillAdaptive::build_octree (const indexed_triangle_set &triangle_mesh, const std::vector< Vec3d > &overhang_triangles, coordf_t line_spacing, bool support_overhangs_only)

Variables

static const std::array< Vec3d, 8 > Slic3r::FillAdaptive::child_centers
static constexpr std::array< std::array< int, 8 >, 3 > Slic3r::FillAdaptive::child_traversal_order
static constexpr double Slic3r::FillAdaptive::octree_rot [3] = { 5.0 * M_PI / 4.0, Geometry::deg2rad(215.264), M_PI / 6.0 }
static const Vec2d Slic3r::FillAdaptive::noncrossing::family_dir [3] { Vec2d(1., 0.), Vec2d(0.5, 0.5 * sqrt(3.)), Vec2d(0.5, -0.5 * sqrt(3.)) }

Class Documentation

◆ Slic3r::FillAdaptive::CubeProperties

struct Slic3r::FillAdaptive::CubeProperties
Class Members
double diagonal_length
double edge_length
double height
double line_xy_distance
double line_z_distance

◆ Slic3r::FillAdaptive::noncrossing::SweepLine

struct Slic3r::FillAdaptive::noncrossing::SweepLine
Collaboration diagram for Slic3r::FillAdaptive::noncrossing::SweepLine:
Class Members
Vec2d a
Vec2d b
int family
vector< pair< double, int > > junctions
Lin lin

◆ Slic3r::FillAdaptive::noncrossing::Junction

struct Slic3r::FillAdaptive::noncrossing::Junction
Collaboration diagram for Slic3r::FillAdaptive::noncrossing::Junction:
Class Members
vector< pair< int, int > > bends
vector< int > lines
Vec2d p
vector< pair< int, int > > pairs

◆ Slic3r::FillAdaptive::noncrossing::LevelPath

struct Slic3r::FillAdaptive::noncrossing::LevelPath
Collaboration diagram for Slic3r::FillAdaptive::noncrossing::LevelPath:
Class Members
vector< vector< Lin > > cuts
int end_term { -1 }
vector< int > junctions
vector< int > lines
vector< pair< Lin, int > > pushes
int start_term { -1 }
vector< int > turn
vector< Vec2d > verts

Macro Definition Documentation

◆ BOOST_POOL_NO_MT

#define BOOST_POOL_NO_MT