OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
PreciseSeam.cpp File Reference
#include "PreciseSeam.hpp"
#include "PreciseSeamInternal.hpp"
#include "libslic3r/Polygon.hpp"
#include "libslic3r/Polyline.hpp"
#include "libslic3r/Point.hpp"
#include "libslic3r/Model.hpp"
#include "SeamPlacer.hpp"
#include "libslic3r/libslic3r.h"
#include "libslic3r/BoundingBox.hpp"
#include "libslic3r/ClipperUtils.hpp"
#include "libslic3r/Layer.hpp"
#include "libslic3r/Print.hpp"
#include <algorithm>
#include <atomic>
#include <boost/log/trivial.hpp>
#include <optional>
#include <cstddef>
#include <string>
#include <cassert>
#include <cmath>
#include <tbb/parallel_for.h>
#include <vector>
#include <utility>
Include dependency graph for PreciseSeam.cpp:

Go to the source code of this file.

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::PreciseSeam
namespace  Slic3r::PreciseSeam::detail

Enumerations

enum class  Slic3r::PreciseSeam::EnforcedBlockedSeamPoint

Functions

ModifierRegions Slic3r::PreciseSeam::prepare_modifier_regions (ExPolygons regions)
ModifierSlices Slic3r::PreciseSeam::prepare_modifier_slices (std::vector< ExPolygons > slices)
static std::optional< double > Slic3r::PreciseSeam::detail::parameter_on_edge (const Point &point, const Point &a, const Point &b)
static std::optional< ClippedEdgeInterval > Slic3r::PreciseSeam::detail::interval_on_edge (const Point &first, const Point &last, size_t edge, const Polygon &perimeter)
static bool Slic3r::PreciseSeam::detail::append_exact_fragment (const Polyline &fragment, const Polygon &perimeter, std::vector< ClippedEdgeInterval > &intervals)
bool Slic3r::PreciseSeam::detail::append_projected_fragment (const Polyline &fragment, const Polygon &perimeter, std::vector< ClippedEdgeInterval > &intervals, FragmentBindingFailure &failure)
bool Slic3r::PreciseSeam::detail::bind_fragment (const Polyline &fragment, const Polygon &perimeter, std::vector< ClippedEdgeInterval > &intervals, FragmentBindingFailure &failure)
static bool Slic3r::PreciseSeam::detail::snap_cuts_to_adjacent_vertices (Polyline &fragment, const Polygon &perimeter)
static std::string Slic3r::PreciseSeam::detail::fragment_location (const ExtractionContext &context, size_t fragment_index)
bool Slic3r::PreciseSeam::detail::append_fragment (const Polyline &fragment, const Polygon &perimeter, std::vector< ClippedEdgeInterval > &intervals, const ExtractionContext &context, size_t fragment_index)
static void Slic3r::PreciseSeam::prepare_strong_segment (PerimeterSegment &segment, ModelVolumeType mode, bool compare_lengths)
SegmentExtraction Slic3r::PreciseSeam::extract_perimeter_segments (const PreparedPerimeter &prepared, const ModifierRegions &modifier, ModelVolumeType mode, const ExtractionContext &context)
void Slic3r::PreciseSeam::init_precise_seam_data (std::vector< const ModelVolume * > &strong_volumes_out, std::vector< const ModelVolume * > &weak_volumes_out, bool &has_strong_out, const ModelObject *model_object)
static std::pair< Point, size_t > Slic3r::PreciseSeam::insert_point_into_perimeter (const Point &point, size_t edge_start_idx, Polygon &perimeter_polygon)
static void Slic3r::PreciseSeam::refine_at_vertex (size_t point_idx, int direction, Polygon &perimeter_polygon)
static void Slic3r::PreciseSeam::record_extraction (PreciseSeamWarnings *warnings, const ModelVolume *modifier, const SegmentExtraction &extracted)
std::optional< Point > Slic3r::PreciseSeam::insert_strong_seam_point (const std::vector< const ModelVolume * > &strong_volumes, Polygon &polygon, const PreparedPerimeter &prepared, const Layer *layer, const ModifierRegionsCache &slices_cache, PreciseSeamWarnings *warnings)
static EnforcedBlockedSeamPoint Slic3r::PreciseSeam::convert_weak_modifier_type (ModelVolumeType type)
static std::vector< WeakModifierSegment > Slic3r::PreciseSeam::prepare_weak_modifier_segments (std::vector< WeakModifierSegment > result, Polygon &polygon)
std::vector< WeakModifierSegment > Slic3r::PreciseSeam::collect_weak_modifier_segments (const std::vector< const ModelVolume * > &weak_volumes, Polygon &polygon, const PreparedPerimeter &prepared, const Layer *layer, const ModifierRegionsCache &slices_cache, PreciseSeamWarnings *warnings)
void Slic3r::PreciseSeam::apply_weak_modifiers_to_perimeter (const std::vector< WeakModifierSegment > &weak_segments, PrintObjectSeamData::LayerSeams &result, const SeamPlacerImpl::Perimeter &perimeter, bool &some_point_enforced, PreciseSeamWarnings *warnings)
void Slic3r::PreciseSeam::restore_precise_seam_positions (std::vector< PrintObjectSeamData::LayerSeams > &layers)

Variables

static constexpr double Slic3r::PreciseSeam::MACHINE_PRECISION_SQUARED = 2.5
static constexpr coord_t Slic3r::PreciseSeam::TOLERANCE_LINEAR = 1000
static constexpr coord_t Slic3r::PreciseSeam::TOLERANCE_SQUARED = TOLERANCE_LINEAR * TOLERANCE_LINEAR