![]() |
Prusa Slicer 2.6.0
|
Classes | |
| struct | AreaIncreaseSettings |
| struct | Bifurcation |
| struct | Branch |
| struct | DrawArea |
| struct | Element |
| class | InterfacePlacer |
| class | RichInterfacePlacer |
| struct | Slice |
| struct | SupportElement |
| struct | SupportElementInfluenceAreas |
| struct | SupportElementMerging |
| struct | SupportElementState |
| struct | SupportElementStateBits |
| struct | Tree |
| class | TreeModelVolumes |
| struct | TreeSupportMeshGroupSettings |
| struct | TreeSupportSettings |
| This struct contains settings used in the tree support. Thanks to this most functions do not need to know of meshes etc. Also makes the code shorter. More... | |
Typedefs | |
| using | Forest = std::vector< Tree > |
| using | Trees = std::vector< Tree > |
| using | LineInformation = std::vector< std::pair< Point, LineStatus > > |
| using | LineInformations = std::vector< LineInformation > |
| using | SupportElements = std::deque< SupportElement > |
| using | LayerIndex = int |
Enumerations | |
| enum class | LineStatus { INVALID , TO_MODEL , TO_MODEL_GRACIOUS , TO_MODEL_GRACIOUS_SAFE , TO_BP , TO_BP_SAFE } |
| enum class | InterfacePreference { InterfaceAreaOverwritesSupport , SupportAreaOverwritesInterface , InterfaceLinesOverwriteSupport , SupportLinesOverwriteInterface , Nothing } |
Functions | |
| Element | to_tree_element (const TreeSupportSettings &config, const SlicingParameters &slicing_params, SupportElement &element, bool is_root) |
| Forest | make_forest (const TreeSupportSettings &config, const SlicingParameters &slicing_params, std::vector< SupportElements > &&move_bounds) |
| void | trim_influence_areas_bottom_up (Forest &forest, const float dxy_dlayer) |
| void | smooth_trees_inside_influence_areas (Branch &root, bool is_root) |
| void | smooth_trees_inside_influence_areas (Forest &forest) |
| template<bool flip_normals> | |
| void | triangulate_fan (indexed_triangle_set &its, int ifan, int ibegin, int iend) |
| static void | triangulate_strip (indexed_triangle_set &its, int ibegin1, int iend1, int ibegin2, int iend2) |
| static std::pair< int, int > | discretize_circle (const Vec3f ¢er, const Vec3f &normal, const float radius, const float eps, std::vector< Vec3f > &pts) |
| static std::pair< float, float > | extrude_branch (const std::vector< const SupportElement * > &path, const TreeSupportSettings &config, const SlicingParameters &slicing_params, const std::vector< SupportElements > &move_bounds, indexed_triangle_set &result) |
| static void | organic_smooth_branches_avoid_collisions (const PrintObject &print_object, const TreeModelVolumes &volumes, const TreeSupportSettings &config, std::vector< SupportElements > &move_bounds, const std::vector< std::pair< SupportElement *, int > > &elements_with_link_down, const std::vector< size_t > &linear_data_layers, std::function< void()> throw_on_cancel) |
| void | organic_draw_branches (PrintObject &print_object, TreeModelVolumes &volumes, const TreeSupportSettings &config, std::vector< SupportElements > &move_bounds, SupportGeneratorLayersPtr &bottom_contacts, SupportGeneratorLayersPtr &top_contacts, InterfacePlacer &interface_placer, SupportGeneratorLayersPtr &intermediate_layers, SupportGeneratorLayerStorage &layer_storage, std::function< void()> throw_on_cancel) |
| static Polygons | calculateMachineBorderCollision (Polygon machine_border) |
| static void | validate_range (const Point &pt) |
| static void | validate_range (const Points &points) |
| static void | validate_range (const MultiPoint &mp) |
| static void | validate_range (const Polygons &polygons) |
| static void | validate_range (const Polylines &polylines) |
| static void | validate_range (const LineInformation &lines) |
| static void | validate_range (const LineInformations &lines) |
| static void | check_self_intersections (const Polygons &polygons, const std::string_view message) |
| static void | check_self_intersections (const ExPolygon &expoly, const std::string_view message) |
| static std::vector< std::pair< TreeSupportSettings, std::vector< size_t > > > | group_meshes (const Print &print, const std::vector< size_t > &print_object_ids) |
| static const std::vector< Polygons > | generate_overhangs (const TreeSupportSettings &settings, const PrintObject &print_object, std::function< void()> throw_on_cancel) |
| static LayerIndex | precalculate (const Print &print, const std::vector< Polygons > &overhangs, const TreeSupportSettings &config, const std::vector< size_t > &object_ids, TreeModelVolumes &volumes, std::function< void()> throw_on_cancel) |
| Precalculates all avoidances, that could be required. | |
| static LineInformations | convert_lines_to_internal (const TreeModelVolumes &volumes, const TreeSupportSettings &config, const Polylines &polylines, LayerIndex layer_idx) |
| Converts a Polygons object representing a line into the internal format. | |
| static bool | evaluate_point_for_next_layer_function (const TreeModelVolumes &volumes, const TreeSupportSettings &config, size_t current_layer, const std::pair< Point, LineStatus > &p) |
| Evaluates if a point has to be added now. Required for a split_lines call in generate_initial_areas(). | |
| template<typename EvaluatePointFn > | |
| static std::pair< LineInformations, LineInformations > | split_lines (const LineInformations &lines, EvaluatePointFn evaluatePoint) |
| Evaluates which points of some lines are not valid one layer below and which are. Assumes all points are valid on the current layer. Validity is evaluated using supplied lambda. | |
| static std::optional< std::pair< Point, size_t > > | polyline_sample_next_point_at_distance (const Points &polyline, const Point &start_pt, size_t start_idx, double dist) |
| static Polylines | ensure_maximum_distance_polyline (const Polylines &input, double distance, size_t min_points) |
| Eensures that every line segment is about distance in length. The resulting lines may differ from the original but all points are on the original. | |
| static Polylines | generate_support_infill_lines (const Polygons &polygon, const SupportParameters &support_params, bool roof, LayerIndex layer_idx, coord_t support_infill_distance) |
| Returns Polylines representing the (infill) lines that will result in slicing the given area. | |
| static Polygons | safe_union (const Polygons first, const Polygons second={}) |
| Unions two Polygons. Ensures that if the input is non empty that the output also will be non empty. | |
| static Polygons | safe_offset_inc (const Polygons &me, coord_t distance, const Polygons &collision, coord_t safe_step_size, coord_t last_step_offset_without_check, size_t min_amount_offset) |
| Offsets (increases the area of) a polygons object in multiple steps to ensure that it does not lag through over a given obstacle. | |
| int | generate_raft_contact (const PrintObject &print_object, const TreeSupportSettings &config, InterfacePlacer &interface_placer) |
| void | finalize_raft_contact (const PrintObject &print_object, const int raft_contact_layer_idx, SupportGeneratorLayersPtr &top_contacts, std::vector< SupportElements > &move_bounds) |
| void | sample_overhang_area (Polygons &&overhang_area, const bool large_horizontal_roof, const size_t layer_idx, const size_t num_support_roof_layers, const coord_t connect_length, const TreeSupportMeshGroupSettings &mesh_group_settings, RichInterfacePlacer &interface_placer) |
| static void | generate_initial_areas (const PrintObject &print_object, const TreeModelVolumes &volumes, const TreeSupportSettings &config, const std::vector< Polygons > &overhangs, std::vector< SupportElements > &move_bounds, InterfacePlacer &interface_placer, std::function< void()> throw_on_cancel) |
| Creates the initial influence areas (that can later be propagated down) by placing them below the overhang. | |
| static unsigned int | move_inside (const Polygons &polygons, Point &from, int distance=0, int64_t maxDist2=std::numeric_limits< int64_t >::max()) |
| static Point | move_inside_if_outside (const Polygons &polygons, Point from, int distance=0, int64_t maxDist2=std::numeric_limits< int64_t >::max()) |
| static std::optional< SupportElementState > | increase_single_area (const TreeModelVolumes &volumes, const TreeSupportSettings &config, const AreaIncreaseSettings &settings, const LayerIndex layer_idx, const SupportElement &parent, const Polygons &relevant_offset, Polygons &to_bp_data, Polygons &to_model_data, Polygons &increased, const coord_t overspeed, const bool mergelayer) |
| Checks if an influence area contains a valid subsection and returns the corresponding metadata and the new Influence area. | |
| static void | increase_areas_one_layer (const TreeModelVolumes &volumes, const TreeSupportSettings &config, std::vector< SupportElementMerging > &merging_areas, const LayerIndex layer_idx, SupportElements &layer_elements, const bool mergelayer, std::function< void()> throw_on_cancel) |
| Increases influence areas as far as required. | |
| static SupportElementState | merge_support_element_states (const SupportElementState &first, const SupportElementState &second, const Point &next_position, const coord_t layer_idx, const TreeSupportSettings &config) |
| static bool | merge_influence_areas_two_elements (const TreeModelVolumes &volumes, const TreeSupportSettings &config, const LayerIndex layer_idx, SupportElementMerging &dst, SupportElementMerging &src) |
| static SupportElementMerging * | merge_influence_areas_leaves (const TreeModelVolumes &volumes, const TreeSupportSettings &config, const LayerIndex layer_idx, SupportElementMerging *const dst_begin, SupportElementMerging *dst_end) |
| Merges Influence Areas if possible. | |
| static SupportElementMerging * | merge_influence_areas_two_sets (const TreeModelVolumes &volumes, const TreeSupportSettings &config, const LayerIndex layer_idx, SupportElementMerging *const dst_begin, SupportElementMerging *dst_end, SupportElementMerging *src_begin, SupportElementMerging *const src_end) |
| static void | merge_influence_areas (const TreeModelVolumes &volumes, const TreeSupportSettings &config, const LayerIndex layer_idx, std::vector< SupportElementMerging > &influence_areas, std::function< void()> throw_on_cancel) |
| Merges Influence Areas at one layer if possible. | |
| static void | create_layer_pathing (const TreeModelVolumes &volumes, const TreeSupportSettings &config, std::vector< SupportElements > &move_bounds, std::function< void()> throw_on_cancel) |
| Propagates influence downwards, and merges overlapping ones. | |
| static void | set_points_on_areas (const SupportElement &elem, SupportElements *layer_above) |
| Sets the result_on_layer for all parents based on the SupportElement supplied. | |
| static void | set_to_model_contact_simple (SupportElement &elem) |
| static void | set_to_model_contact_to_model_gracious (const TreeModelVolumes &volumes, const TreeSupportSettings &config, std::vector< SupportElements > &move_bounds, SupportElement &first_elem, std::function< void()> throw_on_cancel) |
| Get the best point to connect to the model and set the result_on_layer of the relevant SupportElement accordingly. | |
| static void | remove_deleted_elements (std::vector< SupportElements > &move_bounds) |
| static void | create_nodes_from_area (const TreeModelVolumes &volumes, const TreeSupportSettings &config, std::vector< SupportElements > &move_bounds, std::function< void()> throw_on_cancel) |
| Set the result_on_layer point for all influence areas. | |
| static void | generate_branch_areas (const TreeModelVolumes &volumes, const TreeSupportSettings &config, const std::vector< SupportElements > &move_bounds, std::vector< DrawArea > &linear_data, std::function< void()> throw_on_cancel) |
| Draws circles around result_on_layer points of the influence areas. | |
| static void | smooth_branch_areas (const TreeSupportSettings &config, std::vector< SupportElements > &move_bounds, std::vector< DrawArea > &linear_data, const std::vector< size_t > &linear_data_layers, std::function< void()> throw_on_cancel) |
| Applies some smoothing to the outer wall, intended to smooth out sudden jumps as they can happen when a branch moves though a hole. | |
| static void | drop_non_gracious_areas (const TreeModelVolumes &volumes, const std::vector< DrawArea > &linear_data, std::vector< Polygons > &support_layer_storage, std::function< void()> throw_on_cancel) |
| Drop down areas that do rest non-gracefully on the model to ensure the branch actually rests on something. | |
| static void | finalize_interface_and_support_areas (const PrintObject &print_object, const TreeModelVolumes &volumes, const TreeSupportSettings &config, const std::vector< Polygons > &overhangs, std::vector< Polygons > &support_layer_storage, std::vector< Polygons > &support_roof_storage, SupportGeneratorLayersPtr &bottom_contacts, SupportGeneratorLayersPtr &top_contacts, SupportGeneratorLayersPtr &intermediate_layers, SupportGeneratorLayerStorage &layer_storage, std::function< void()> throw_on_cancel) |
| Generates Support Floor, ensures Support Roof can not cut of branches, and saves the branches as support to storage. | |
| static void | draw_areas (PrintObject &print_object, const TreeModelVolumes &volumes, const TreeSupportSettings &config, const std::vector< Polygons > &overhangs, std::vector< SupportElements > &move_bounds, SupportGeneratorLayersPtr &bottom_contacts, SupportGeneratorLayersPtr &top_contacts, SupportGeneratorLayersPtr &intermediate_layers, SupportGeneratorLayerStorage &layer_storage, std::function< void()> throw_on_cancel) |
| Draws circles around result_on_layer points of the influence areas and applies some post processing. | |
| static void | generate_support_areas (Print &print, const BuildVolume &build_volume, const std::vector< size_t > &print_object_ids, std::function< void()> throw_on_cancel) |
| Create the areas that need support. | |
| size_t | getEffectiveDTT (const TreeSupportSettings &settings, const SupportElementState &elem) |
| Get the Distance to top regarding the real radius this part will have. This is different from distance_to_top, which is can be used to calculate the top most layer of the branch. | |
| coord_t | support_element_radius (const TreeSupportSettings &settings, const SupportElementState &elem) |
| Get the Radius, that this element will have. | |
| coord_t | support_element_collision_radius (const TreeSupportSettings &settings, const SupportElementState &elem) |
| Get the collision Radius of this Element. This can be smaller then the actual radius, as the drawAreas will cut off areas that may collide with the model. | |
| coord_t | support_element_radius (const TreeSupportSettings &settings, const SupportElement &elem) |
| coord_t | support_element_collision_radius (const TreeSupportSettings &settings, const SupportElement &elem) |
| void | tree_supports_show_error (std::string_view message, bool critical) |
| double | layer_z (const SlicingParameters &slicing_params, const TreeSupportSettings &config, const size_t layer_idx) |
| LayerIndex | layer_idx_ceil (const SlicingParameters &slicing_params, const TreeSupportSettings &config, const double z) |
| LayerIndex | layer_idx_floor (const SlicingParameters &slicing_params, const TreeSupportSettings &config, const double z) |
| SupportGeneratorLayer & | layer_initialize (SupportGeneratorLayer &layer_new, const SlicingParameters &slicing_params, const TreeSupportSettings &config, const size_t layer_idx) |
| SupportGeneratorLayer & | layer_allocate_unguarded (SupportGeneratorLayerStorage &layer_storage, SupporLayerType layer_type, const SlicingParameters &slicing_params, const TreeSupportSettings &config, size_t layer_idx) |
| SupportGeneratorLayer & | layer_allocate (SupportGeneratorLayerStorage &layer_storage, SupporLayerType layer_type, const SlicingParameters &slicing_params, const TreeSupportSettings &config, size_t layer_idx) |
Variables | |
| static constexpr const double | SUPPORT_TREE_EXPONENTIAL_FACTOR = 1.5 |
| static constexpr const coord_t | SUPPORT_TREE_EXPONENTIAL_THRESHOLD = scaled<coord_t>(1. * SUPPORT_TREE_EXPONENTIAL_FACTOR) |
| static constexpr const coord_t | SUPPORT_TREE_COLLISION_RESOLUTION = scaled<coord_t>(0.5) |
| static constexpr const bool | SUPPORT_TREE_AVOID_SUPPORT_BLOCKER = true |
| bool | g_showed_critical_error = false |
| bool | g_showed_performance_warning = false |
| static constexpr const size_t | SUPPORT_TREE_CIRCLE_RESOLUTION = 25 |
| static constexpr const bool | polygons_strictly_simple = false |
| static constexpr const auto | tiny_area_threshold = sqr(scaled<double>(0.001)) |
| struct Slic3r::FFFTreeSupport::Bifurcation |
Collaboration diagram for Slic3r::FFFTreeSupport::Bifurcation:| Class Members | ||
|---|---|---|
| double | area | |
| Branch * | branch | |
| struct Slic3r::FFFTreeSupport::DrawArea |
Collaboration diagram for Slic3r::FFFTreeSupport::DrawArea:| Class Members | ||
|---|---|---|
| SupportElement * | child_element | |
| SupportElement * | element | |
| Polygons | polygons | |
| struct Slic3r::FFFTreeSupport::Element |
Collaboration diagram for Slic3r::FFFTreeSupport::Element:| Class Members | ||
|---|---|---|
| CollisionSphere | collision_sphere | |
| Polygons | influence_area | |
| Vec3f | last_collision | |
| double | last_collision_depth | |
| LayerIndex | layer_idx | |
| bool | locked | |
| Vec3f | position | |
| Vec3f | prev_position | |
| float | radius | |
| struct Slic3r::FFFTreeSupport::Slice |
| using Slic3r::FFFTreeSupport::Forest = typedef std::vector<Tree> |
| using Slic3r::FFFTreeSupport::LayerIndex = typedef int |
| using Slic3r::FFFTreeSupport::LineInformation = typedef std::vector<std::pair<Point, LineStatus> > |
| using Slic3r::FFFTreeSupport::LineInformations = typedef std::vector<LineInformation> |
| using Slic3r::FFFTreeSupport::SupportElements = typedef std::deque<SupportElement> |
| using Slic3r::FFFTreeSupport::Trees = typedef std::vector<Tree> |
|
strong |
| Enumerator | |
|---|---|
| InterfaceAreaOverwritesSupport | |
| SupportAreaOverwritesInterface | |
| InterfaceLinesOverwriteSupport | |
| SupportLinesOverwriteInterface | |
| Nothing | |
|
strong |
| Enumerator | |
|---|---|
| INVALID | |
| TO_MODEL | |
| TO_MODEL_GRACIOUS | |
| TO_MODEL_GRACIOUS_SAFE | |
| TO_BP | |
| TO_BP_SAFE | |
|
static |
References Slic3r::offset(), and Slic3r::MultiPoint::reverse().
Here is the call graph for this function:
|
inlinestatic |
References check_self_intersections(), and Slic3r::to_polygons().
Here is the call graph for this function:
|
inlinestatic |
References Slic3r::empty(), and Slic3r::intersecting_edges().
Referenced by check_self_intersections(), and generate_support_infill_lines().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Converts a Polygons object representing a line into the internal format.
| polylines[in] | The Polyline that will be converted. |
| layer_idx[in] | The current layer. |
polylines object, with information for each point regarding in which avoidance it is currently valid in. References Slic3r::contains(), Slic3r::FFFTreeSupport::TreeModelVolumes::Fast, Slic3r::FFFTreeSupport::TreeModelVolumes::FastSafe, Slic3r::FFFTreeSupport::TreeModelVolumes::getAvoidance(), Slic3r::FFFTreeSupport::TreeModelVolumes::getCollision(), Slic3r::FFFTreeSupport::TreeSupportSettings::getRadius(), Slic3r::FFFTreeSupport::TreeSupportSettings::support_rests_on_model, TO_BP, TO_BP_SAFE, TO_MODEL, TO_MODEL_GRACIOUS, TO_MODEL_GRACIOUS_SAFE, validate_range(), Slic3r::FFFTreeSupport::TreeSupportSettings::xy_distance, and Slic3r::FFFTreeSupport::TreeSupportSettings::xy_min_distance.
Referenced by sample_overhang_area().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Propagates influence downwards, and merges overlapping ones.
| move_bounds[in,out] | All currently existing influence areas |
References create_layer_pathing(), error, increase_areas_one_layer(), Slic3r::FFFTreeSupport::SupportElement::influence_area, Slic3r::FFFTreeSupport::TreeSupportSettings::layer_height, Slic3r::FFFTreeSupport::TreeSupportSettings::maximum_move_distance, Slic3r::FFFTreeSupport::TreeSupportSettings::maximum_move_distance_slow, merge_influence_areas(), safe_union(), Slic3r::FFFTreeSupport::SupportElement::state, and tree_supports_show_error().
Referenced by create_layer_pathing(), and generate_support_areas().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Set the result_on_layer point for all influence areas.
| move_bounds[in,out] | All currently existing influence areas |
References create_nodes_from_area(), Slic3r::FFFTreeSupport::SupportElementStateBits::deleted, error, Slic3r::FFFTreeSupport::TreeSupportSettings::min_dtt_to_model, move_inside_if_outside(), remove_deleted_elements(), Slic3r::FFFTreeSupport::SupportElementState::result_on_layer, Slic3r::FFFTreeSupport::SupportElementState::result_on_layer_is_set(), set_points_on_areas(), set_to_model_contact_simple(), set_to_model_contact_to_model_gracious(), Slic3r::FFFTreeSupport::SupportElement::state, support_element_radius(), and tree_supports_show_error().
Referenced by create_nodes_from_area(), and generate_support_areas().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
References acos(), Slic3r::angle(), ceil(), cos(), EPSILON, M_PI, and sin().
Referenced by extrude_branch().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Draws circles around result_on_layer points of the influence areas and applies some post processing.
| move_bounds[in] | All currently existing influence areas |
| storage[in,out] | The storage where the support should be stored. |
References contains(), Slic3r::debug_out_path(), draw_areas(), drop_non_gracious_areas(), finalize_interface_and_support_areas(), generate_branch_areas(), Slic3r::FFFTreeSupport::SupportElementState::result_on_layer_is_set(), smooth_branch_areas(), Slic3r::FFFTreeSupport::SupportElement::state, and Slic3r::union_ex().
Referenced by draw_areas(), and generate_support_areas().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Drop down areas that do rest non-gracefully on the model to ensure the branch actually rests on something.
| layer_tree_polygons[in] | Resulting branch areas with the layerindex they appear on. |
| linear_data[in] | All currently existing influence areas with the layer they are on |
| dropped_down_areas[out] | Areas that have to be added to support all non-graceful areas. |
| inverse_tree_order[in] | A mapping that returns the child of every influence area. |
References drop_non_gracious_areas(), and Slic3r::range().
Referenced by draw_areas(), and drop_non_gracious_areas().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Eensures that every line segment is about distance in length. The resulting lines may differ from the original but all points are on the original.
| input[in] | The lines on which evenly spaced points should be placed. |
| distance[in] | The distance the points should be from each other. |
| min_points[in] | The amount of points that have to be placed. If not enough can be placed the distance will be reduced to place this many points. |
References Slic3r::MultiPoint::clear(), Slic3r::Polyline::clip_end(), input(), Slic3r::length(), Slic3r::MultiPoint::points, polyline_sample_next_point_at_distance(), Slic3r::MultiPoint::size(), tree_supports_show_error(), and validate_range().
Referenced by sample_overhang_area().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Evaluates if a point has to be added now. Required for a split_lines call in generate_initial_areas().
| current_layer[in] | The layer on which the point lies, point and its status. |
References Slic3r::contains(), Slic3r::FFFTreeSupport::TreeModelVolumes::getAvoidance(), Slic3r::FFFTreeSupport::TreeModelVolumes::getCollision(), Slic3r::FFFTreeSupport::TreeSupportSettings::getRadius(), Slic3r::FFFTreeSupport::TreeSupportSettings::support_rests_on_model, TO_BP, TO_BP_SAFE, TO_MODEL_GRACIOUS, TO_MODEL_GRACIOUS_SAFE, Slic3r::FFFTreeSupport::TreeSupportSettings::xy_distance, and Slic3r::FFFTreeSupport::TreeSupportSettings::xy_min_distance.
Referenced by Slic3r::FFFTreeSupport::RichInterfacePlacer::add_points_along_lines(), and sample_overhang_area().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
References acos(), Slic3r::angle(), ceil(), cos(), discretize_circle(), Slic3r::FFFTreeSupport::SupportElementState::layer_idx, layer_z(), M_PI, Slic3r::FFFTreeSupport::SupportElementState::result_on_layer, sin(), Slic3r::FFFTreeSupport::SupportElement::state, support_element_radius(), Slic3r::to_3d(), triangulate_strip(), and indexed_triangle_set::vertices.
Here is the call graph for this function:
|
static |
Generates Support Floor, ensures Support Roof can not cut of branches, and saves the branches as support to storage.
| support_layer_storage[in] | Areas where support should be generated. |
| support_roof_storage[in] | Areas where support was replaced with roof. |
| storage[in,out] | The storage where the support should be stored. |
References finalize_interface_and_support_areas(), Slic3r::FFFTreeSupport::TreeSupportSettings::interface_preference, and Slic3r::range().
Referenced by draw_areas(), and finalize_interface_and_support_areas().
Here is the call graph for this function:
Here is the caller graph for this function:| void Slic3r::FFFTreeSupport::finalize_raft_contact | ( | const PrintObject & | print_object, |
| const int | raft_contact_layer_idx, | ||
| SupportGeneratorLayersPtr & | top_contacts, | ||
| std::vector< SupportElements > & | move_bounds | ||
| ) |
References Slic3r::PrintObject::config(), Slic3r::diff(), Slic3r::get_extents(), Slic3r::grid(), Slic3r::make_circle(), Slic3r::offset(), Slic3r::SlicingParameters::raft_layers(), scale_, SCALED_EPSILON, Slic3r::PrintObject::slicing_parameters(), support_element_radius(), and Slic3r::union_().
Here is the call graph for this function:
|
static |
Draws circles around result_on_layer points of the influence areas.
| linear_data[in] | All currently existing influence areas with the layer they are on |
| layer_tree_polygons[out] | Resulting branch areas with the layerindex they appear on. layer_tree_polygons.size() has to be at least linear_data.size() as each Influence area in linear_data will save have at least one (that's why it's a vector<vector>) corresponding branch area in layer_tree_polygons. |
| inverse_tree_order[in] | A mapping that returns the child of every influence area. |
References Slic3r::FFFTreeSupport::TreeSupportSettings::branch_radius, generate_branch_areas(), Slic3r::make_circle(), and Slic3r::range().
Referenced by draw_areas(), and generate_branch_areas().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Creates the initial influence areas (that can later be propagated down) by placing them below the overhang.
Generates Points where the Model should be supported and creates the areas where these points have to be placed.
| mesh[in] | The mesh that is currently processed. |
| move_bounds[out] | Storage for the influence areas. |
| storage[in] | Background storage, required for adding roofs. |
References EPSILON, generate_initial_areas(), generate_raft_contact(), Slic3r::PrintObject::layer_count(), Slic3r::FFFTreeSupport::TreeSupportSettings::layer_height, M_PI, Slic3r::FFFTreeSupport::TreeSupportSettings::min_radius, Slic3r::FFFTreeSupport::TreeSupportMeshGroupSettings::minimum_roof_area, Slic3r::FFFTreeSupport::TreeSupportSettings::raft_layers, Slic3r::range(), Slic3r::round_up_divide(), scale_, Slic3r::FFFSupport::SupportParameters::soluble_interface, Slic3r::sqr(), sqrt(), Slic3r::FFFTreeSupport::TreeSupportMeshGroupSettings::support_angle, Slic3r::FFFTreeSupport::TreeSupportSettings::support_line_width, Slic3r::FFFTreeSupport::InterfacePlacer::support_parameters, Slic3r::FFFTreeSupport::TreeSupportMeshGroupSettings::support_roof_layers, Slic3r::FFFTreeSupport::TreeSupportMeshGroupSettings::support_tree_top_rate, tan(), Slic3r::FFFTreeSupport::TreeSupportSettings::xy_distance, Slic3r::FFFTreeSupport::TreeSupportSettings::xy_min_distance, and Slic3r::FFFTreeSupport::TreeSupportSettings::z_distance_top_layers.
Referenced by generate_initial_areas(), and generate_support_areas().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
References Slic3r::BLOCKER, Slic3r::PrintObject::config(), Slic3r::Print::config(), Slic3r::debug_out_path(), Slic3r::diff(), Slic3r::ENFORCER, Slic3r::SVG::export_expolygons(), Slic3r::frExternalPerimeter, Slic3r::PrintObject::get_layer(), Slic3r::Layer::height, Slic3r::intersection(), Slic3r::PrintObject::layer_count(), Slic3r::Layer::lslices, M_PI, Slic3r::offset(), Slic3r::PrintObjectBaseWithState< PrintType, PrintObjectStepEnumType, COUNT >::print(), Slic3r::PrintObjectConfig, Slic3r::PrintObject::project_and_append_custom_facets(), Slic3r::FFFTreeSupport::TreeSupportSettings::raft_layers, Slic3r::range(), Slic3r::Layer::region_count(), Slic3r::Layer::regions(), Slic3r::FFFSupport::remove_bridges_from_contacts(), Slic3r::PrintObject::slice_support_blockers(), Slic3r::PrintObject::slice_support_enforcers(), tan(), Slic3r::to_polygons(), Slic3r::union_(), Slic3r::union_ex(), and Slic3r::Yes.
Referenced by generate_support_areas().
Here is the call graph for this function:
Here is the caller graph for this function:| int Slic3r::FFFTreeSupport::generate_raft_contact | ( | const PrintObject & | print_object, |
| const TreeSupportSettings & | config, | ||
| InterfacePlacer & | interface_placer | ||
| ) |
References Slic3r::FFFTreeSupport::InterfacePlacer::add_roof_unguarded(), Slic3r::PrintObject::config(), EPSILON, Slic3r::expand(), Slic3r::PrintObject::get_layer(), Slic3r::PrintObject::has_raft(), Slic3r::PrintObject::layer_count(), Slic3r::Layer::lslices, Slic3r::SlicingParameters::raft_contact_top_z, Slic3r::FFFTreeSupport::TreeSupportSettings::raft_layers, Slic3r::PrintObject::slicing_parameters(), and Slic3r::to_polygons().
Referenced by generate_initial_areas(), and generate_support_areas().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Create the areas that need support.
These areas are stored inside the given SliceDataStorage object.
| storage | The data storage where the mesh data is gotten from and where the resulting support areas are stored. |
References create_layer_pathing(), create_nodes_from_area(), Slic3r::debug_out_path(), draw_areas(), Slic3r::empty(), EPSILON, Slic3r::FFFSupport::export_print_z_polygons_and_extrusions_to_svg(), Slic3r::FFFSupport::export_print_z_polygons_to_svg(), g_showed_critical_error, g_showed_performance_warning, generate_initial_areas(), Slic3r::FFFSupport::generate_interface_layers(), generate_overhangs(), Slic3r::FFFSupport::generate_raft_base(), generate_raft_contact(), generate_support_areas(), Slic3r::FFFSupport::generate_support_layers(), Slic3r::FFFSupport::generate_support_toolpaths(), Slic3r::Print::get_object(), Slic3r::FFFTreeSupport::TreeModelVolumes::getWallRestriction(), group_meshes(), Slic3r::FFFSupport::SupportParameters::has_base_interfaces(), Slic3r::FFFSupport::SupportParameters::has_bottom_contacts, Slic3r::FFFSupport::SupportParameters::has_interfaces(), Slic3r::FFFSupport::SupportParameters::has_top_contacts, Slic3r::FFFTreeSupport::TreeSupportSettings::maximum_move_distance, Slic3r::FFFTreeSupport::TreeSupportSettings::maximum_move_distance_slow, organic_draw_branches(), precalculate(), Slic3r::FFFTreeSupport::TreeSupportSettings::raft_layers, Slic3r::range(), Slic3r::FFFTreeSupport::InterfacePlacer::slicing_parameters, Slic3r::smsOrganic, Slic3r::smsTree, Slic3r::FFFSupport::SupportParameters::support_density, support_element_collision_radius(), Slic3r::union_(), Slic3r::union_ex(), and Slic3r::FFFSupport::SupportParameters::with_sheath.
Referenced by generate_support_areas().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Returns Polylines representing the (infill) lines that will result in slicing the given area.
| area[in] | The area that has to be filled with infill. |
| roof[in] | Whether the roofing or regular support settings should be used. |
| layer_idx[in] | The current layer index. |
| support_infill_distance[in] | The distance that should be between the infill lines. |
References Slic3r::append(), Slic3r::area(), Slic3r::FFFSupport::SupportParameters::base_angle, Slic3r::FFFSupport::SupportParameters::base_fill_pattern, check_self_intersections(), Slic3r::BoundingBoxBase< PointType, APointsType >::contains(), Slic3r::FillParams::density, Slic3r::FillParams::dont_adjust, Slic3r::empty(), Slic3r::Surface::expolygon, Slic3r::get_extents(), Slic3r::Infill, Slic3r::BoundingBox::inflated(), Slic3r::FFFSupport::SupportParameters::interface_angle, Slic3r::FFFSupport::SupportParameters::interface_density, Slic3r::FFFSupport::SupportParameters::interface_fill_pattern, Slic3r::intersecting_edges(), M_PI, Slic3r::Fill::new_from_type(), Slic3r::FFFTreeSupport::TreeSupportSettings::resolution, Slic3r::FFFTreeSupport::TreeSupportSettings::roof_pattern, SCALED_EPSILON, Slic3r::FFFTreeSupport::TreeSupportSettings::settings, Slic3r::Flow::spacing(), Slic3r::stInternal, Slic3r::FFFTreeSupport::TreeSupportSettings::support_line_width, Slic3r::FFFSupport::SupportParameters::support_material_flow, Slic3r::FFFSupport::SupportParameters::support_material_interface_flow, Slic3r::FFFTreeSupport::TreeSupportSettings::support_pattern, Slic3r::FFFTreeSupport::TreeSupportSettings::support_roof_angles, Slic3r::FFFTreeSupport::TreeSupportSettings::support_roof_line_width, Slic3r::FFFTreeSupport::TreeSupportSettings::support_wall_count, Slic3r::to_polygons(), Slic3r::to_polylines(), Slic3r::union_ex(), and validate_range().
Referenced by Slic3r::FFFTreeSupport::RichInterfacePlacer::add_points_along_lines(), and sample_overhang_area().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inline |
Get the Distance to top regarding the real radius this part will have. This is different from distance_to_top, which is can be used to calculate the top most layer of the branch.
| elem[in] | The SupportElement one wants to know the effectiveDTT |
References Slic3r::FFFTreeSupport::SupportElementState::distance_to_top, Slic3r::FFFTreeSupport::SupportElementState::effective_radius_height, and Slic3r::FFFTreeSupport::TreeSupportSettings::increase_radius_until_layer.
Referenced by support_element_radius().
Here is the caller graph for this function:
|
static |
References Slic3r::PrintObject::config(), EPSILON, Slic3r::Print::get_object(), Slic3r::PrintObject::layers(), Slic3r::PrintObjectConfig, Slic3r::PrintObject::slicing_parameters(), Slic3r::smsOrganic, Slic3r::smsTree, and Slic3r::FFFTreeSupport::TreeSupportSettings::soluble.
Referenced by generate_support_areas().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Increases influence areas as far as required.
Calculates influence areas of the layer below, based on the influence areas of the current layer. Increases every influence area by maximum_move_distance_slow. If this is not enough, as in it would change the gracious or to_buildplate status, the influence areas are instead increased by maximum_move_distance. Also ensures that increasing the radius of a branch, does not cause it to change its status (like to_buildplate ). If this were the case, the radius is not increased instead.
Warning: The used format inside this is different as the SupportElement does not have a valid area member. Instead this area is saved as value of the dictionary. This was done to avoid not needed heap allocations.
| to_bp_areas[out] | Influence areas that can reach the buildplate |
| to_model_areas[out] | Influence areas that do not have to reach the buildplate. This has overlap with new_layer_data, as areas that can reach the buildplate are also considered valid areas to the model. This redundancy is required if a to_buildplate influence area is allowed to merge with a to model influence area. |
| influence_areas[out] | Area than can reach all further up support points. No assurance is made that the buildplate or the model can be reached in accordance to the user-supplied settings. |
| bypass_merge_areas[out] | Influence areas ready to be added to the layer below that do not need merging. |
| last_layer[in] | Influence areas of the current layer. |
| layer_idx[in] | Number of the current layer. |
| mergelayer[in] | Will the merge method be called on this layer. This information is required as some calculation can be avoided if they are not required for merging. |
References increase_areas_one_layer(), and Slic3r::range().
Referenced by create_layer_pathing(), and increase_areas_one_layer().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Checks if an influence area contains a valid subsection and returns the corresponding metadata and the new Influence area.
Calculates an influence areas of the layer below, based on the influence area of one element on the current layer. Increases every influence area by maximum_move_distance_slow. If this is not enough, as in we would change our gracious or to_buildplate status the influence areas are instead increased by maximum_move_distance_slow. Also ensures that increasing the radius of a branch, does not cause it to change its status (like to_buildplate ). If this were the case, the radius is not increased instead.
Warning: The used format inside this is different as the SupportElement does not have a valid area member. Instead this area is saved as value of the dictionary. This was done to avoid not needed heap allocations.
| settings[in] | Which settings have to be used to check validity. |
| layer_idx[in] | Number of the current layer. |
| parent[in] | The metadata of the parents influence area. |
| relevant_offset[in] | The maximal possible influence area. No guarantee regarding validity with current layer collision required, as it is ensured in-function! |
| to_bp_data[out] | The part of the Influence area that can reach the buildplate. |
| to_model_data[out] | The part of the Influence area that do not have to reach the buildplate. This has overlap with new_layer_data. |
| increased[out] | Area than can reach all further up support points. No assurance is made that the buildplate or the model can be reached in accordance to the user-supplied settings. |
| overspeed[in] | How much should the already offset area be offset again. Usually this is 0. |
| mergelayer[in] | Will the merge method be called on this layer. This information is required as some calculation can be avoided if they are not required for merging. |
References Slic3r::FFFTreeSupport::TreeSupportSettings::bp_radius_increase_per_layer, Slic3r::FFFTreeSupport::TreeSupportSettings::branch_radius, Slic3r::FFFTreeSupport::TreeSupportSettings::branch_radius_increase_per_layer, Slic3r::FFFTreeSupport::TreeModelVolumes::ceilRadius(), Slic3r::diff_clipped(), Slic3r::FFFTreeSupport::SupportElementState::effective_radius_height, error, Slic3r::FFFTreeSupport::TreeModelVolumes::getAvoidance(), Slic3r::FFFTreeSupport::TreeModelVolumes::getCollision(), Slic3r::FFFTreeSupport::TreeSupportSettings::getRadius(), Slic3r::FFFTreeSupport::TreeModelVolumes::getRadiusNextCeil(), Slic3r::FFFTreeSupport::TreeModelVolumes::getWallRestriction(), Slic3r::FFFTreeSupport::AreaIncreaseSettings::increase_radius, Slic3r::FFFTreeSupport::TreeSupportSettings::increase_radius_until_radius, increase_single_area(), Slic3r::FFFTreeSupport::SupportElement::influence_area, Slic3r::FFFTreeSupport::TreeSupportSettings::min_feature_size, Slic3r::FFFTreeSupport::AreaIncreaseSettings::move, Slic3r::FFFTreeSupport::AreaIncreaseSettings::no_error, Slic3r::polygons_simplify(), Slic3r::FFFTreeSupport::TreeSupportSettings::recommendedMinRadius(), safe_offset_inc(), safe_union(), Slic3r::FFFTreeSupport::SupportElement::state, support_element_collision_radius(), support_element_radius(), Slic3r::FFFTreeSupport::TreeSupportSettings::support_rests_on_model, tree_supports_show_error(), Slic3r::FFFTreeSupport::AreaIncreaseSettings::type, Slic3r::FFFTreeSupport::AreaIncreaseSettings::use_min_distance, Slic3r::FFFTreeSupport::SupportElementStateBits::use_min_xy_dist, Slic3r::FFFTreeSupport::TreeSupportSettings::xy_distance, Slic3r::FFFTreeSupport::TreeSupportSettings::xy_min_distance, Slic3r::FFFTreeSupport::TreeSupportSettings::z_distance_bottom_layers, and Slic3r::FFFTreeSupport::TreeSupportSettings::z_distance_top_layers.
Referenced by increase_single_area().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inline |
References Slic3r::FFFSupport::SupportGeneratorLayerStorage::allocate(), and layer_initialize().
Here is the call graph for this function:
|
inline |
References Slic3r::FFFSupport::SupportGeneratorLayerStorage::allocate_unguarded(), and layer_initialize().
Referenced by Slic3r::FFFTreeSupport::InterfacePlacer::add_roof_unguarded().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inline |
References ceil(), Slic3r::SlicingParameters::first_object_layer_height, Slic3r::SlicingParameters::layer_height, Slic3r::SlicingParameters::object_print_z_min, and Slic3r::FFFTreeSupport::TreeSupportSettings::raft_layers.
Here is the call graph for this function:
|
inline |
References Slic3r::SlicingParameters::first_object_layer_height, floor(), Slic3r::SlicingParameters::layer_height, Slic3r::SlicingParameters::object_print_z_min, and Slic3r::FFFTreeSupport::TreeSupportSettings::raft_layers.
Here is the call graph for this function:
|
inline |
References Slic3r::FFFSupport::SupportGeneratorLayer::bottom_z, Slic3r::FFFSupport::SupportGeneratorLayer::height, layer_z(), and Slic3r::FFFSupport::SupportGeneratorLayer::print_z.
Referenced by layer_allocate(), and layer_allocate_unguarded().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inline |
References Slic3r::SlicingParameters::first_object_layer_height, Slic3r::SlicingParameters::layer_height, Slic3r::SlicingParameters::object_print_z_min, and Slic3r::FFFTreeSupport::TreeSupportSettings::raft_layers.
Referenced by extrude_branch(), layer_initialize(), and to_tree_element().
Here is the caller graph for this function:| Forest Slic3r::FFFTreeSupport::make_forest | ( | const TreeSupportSettings & | config, |
| const SlicingParameters & | slicing_params, | ||
| std::vector< SupportElements > && | move_bounds | ||
| ) |
References Slic3r::FFFTreeSupport::TreeSupportSettings::branch_radius_increase_per_layer, Slic3r::FFFTreeSupport::Tree::branches, Slic3r::FFFTreeSupport::Branch::down, Slic3r::is_approx(), Slic3r::FFFTreeSupport::SupportElementState::layer_idx, Slic3r::FFFTreeSupport::SupportElementStateBits::marked, Slic3r::FFFTreeSupport::Branch::num_up_trunk, Slic3r::FFFTreeSupport::SupportElement::parents, Slic3r::FFFTreeSupport::Branch::path, Slic3r::FFFTreeSupport::Element::radius, Slic3r::FFFTreeSupport::SupportElement::state, to_tree_element(), and Slic3r::FFFTreeSupport::Branch::up.
Here is the call graph for this function:
|
static |
Merges Influence Areas at one layer if possible.
Branches which do overlap have to be merged. This manages the helper and uses a divide and conquer approach to parallelize this problem. This parallelization can at most accelerate the merging by a factor of 2.
| to_bp_areas[in] | The Elements of the current Layer that will reach the buildplate. Value is the influence area where the center of a circle of support may be placed. |
| to_model_areas[in] | The Elements of the current Layer that do not have to reach the buildplate. Also contains main as every element that can reach the buildplate is not forced to. Value is the influence area where the center of a circle of support may be placed. |
| influence_areas[in] | The Elements of the current Layer without avoidances removed. This is the largest possible influence area for this layer. Value is the influence area where the center of a circle of support may be placed. |
| layer_idx[in] | The current layer. |
References Slic3r::AABBTreeIndirect::Tree< ANumDimensions, ACoordType >::build_modify_input(), merge_influence_areas(), merge_influence_areas_leaves(), and Slic3r::range().
Referenced by create_layer_pathing(), and merge_influence_areas().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Merges Influence Areas if possible.
Branches which do overlap have to be merged. This helper merges all elements in input with the elements into reduced_new_layer. Elements in input_aabb are merged together if possible, while elements reduced_new_layer_aabb are not checked against each other.
| reduced_aabb[in,out] | The already processed elements. |
| input_aabb[in] | Not yet processed elements |
| to_bp_areas[in] | The Elements of the current Layer that will reach the buildplate. Value is the influence area where the center of a circle of support may be placed. |
| to_model_areas[in] | The Elements of the current Layer that do not have to reach the buildplate. Also contains main as every element that can reach the buildplate is not forced to. Value is the influence area where the center of a circle of support may be placed. |
| influence_areas[in] | The influence areas without avoidance removed. |
| insert_bp_areas[out] | Elements to be inserted into the main dictionary after the Helper terminates. |
| insert_model_areas[out] | Elements to be inserted into the secondary dictionary after the Helper terminates. |
| insert_influence[out] | Elements to be inserted into the dictionary containing the largest possibly valid influence area (ignoring if the area may not be there because of avoidance) |
| erase[out] | Elements that should be deleted from the above dictionaries. |
| layer_idx[in] | The Index of the current Layer. |
References merge_influence_areas_leaves(), and merge_influence_areas_two_elements().
Referenced by merge_influence_areas(), and merge_influence_areas_leaves().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
References Slic3r::FFFTreeSupport::SupportElementMerging::areas, Slic3r::FFFTreeSupport::SupportElementMerging::bbox(), Slic3r::FFFTreeSupport::SupportElementStateBits::can_use_safe_radius, Slic3r::FFFTreeSupport::SupportElementInfluenceAreas::clear(), Slic3r::FFFTreeSupport::SupportElementState::distance_to_top, Slic3r::get_extents(), Slic3r::FFFTreeSupport::TreeModelVolumes::getCollision(), Slic3r::FFFTreeSupport::SupportElementState::increased_to_model_radius, Slic3r::FFFTreeSupport::SupportElementInfluenceAreas::influence_areas, Slic3r::intersection(), Eigen::AlignedBox< _Scalar, _AmbientDim >::intersects(), Eigen::AlignedBox< _Scalar, _AmbientDim >::max(), Slic3r::FFFTreeSupport::TreeSupportSettings::max_to_model_radius_increase, Slic3r::BoundingBoxBase< PointType, APointsType >::merge(), merge_influence_areas_two_elements(), merge_support_element_states(), Eigen::AlignedBox< _Scalar, _AmbientDim >::min(), Slic3r::FFFTreeSupport::TreeSupportSettings::min_dtt_to_model, move_inside_if_outside(), Slic3r::FFFTreeSupport::SupportElementState::next_position, Slic3r::FFFTreeSupport::SupportElementMerging::parents, safe_offset_inc(), safe_union(), Slic3r::FFFTreeSupport::SupportElementMerging::set_bbox(), Slic3r::FFFTreeSupport::SupportElementMerging::state, support_element_collision_radius(), support_element_radius(), Slic3r::FFFTreeSupport::TreeSupportSettings::support_rests_on_model, Slic3r::FFFTreeSupport::SupportElementStateBits::supports_roof, Slic3r::FFFTreeSupport::SupportElementInfluenceAreas::to_bp_areas, Slic3r::FFFTreeSupport::SupportElementStateBits::to_buildplate, Slic3r::FFFTreeSupport::SupportElementInfluenceAreas::to_model_areas, Slic3r::FFFTreeSupport::SupportElementStateBits::to_model_gracious, Slic3r::FFFTreeSupport::SupportElementStateBits::use_min_xy_dist, and Slic3r::FFFTreeSupport::TreeSupportSettings::xy_distance.
Referenced by merge_influence_areas_leaves(), merge_influence_areas_two_elements(), and merge_influence_areas_two_sets().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
References merge_influence_areas_two_elements(), and merge_influence_areas_two_sets().
Referenced by merge_influence_areas_two_sets().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
References Slic3r::FFFTreeSupport::TreeSupportSettings::bp_radius_increase_per_layer, Slic3r::FFFTreeSupport::TreeSupportSettings::branch_radius_increase_per_layer, Slic3r::FFFTreeSupport::SupportElementStateBits::can_use_safe_radius, Slic3r::FFFTreeSupport::SupportElementState::distance_to_top, Slic3r::FFFTreeSupport::SupportElementState::dont_move_until, Slic3r::FFFTreeSupport::SupportElementState::effective_radius_height, Slic3r::FFFTreeSupport::SupportElementState::elephant_foot_increases, Slic3r::FFFTreeSupport::AreaIncreaseSettings::increase_radius, Slic3r::FFFTreeSupport::AreaIncreaseSettings::increase_speed, Slic3r::FFFTreeSupport::SupportElementState::last_area_increase, Slic3r::FFFTreeSupport::SupportElementState::layer_idx, merge_support_element_states(), Slic3r::FFFTreeSupport::SupportElementState::missing_roof_layers, Slic3r::FFFTreeSupport::AreaIncreaseSettings::move, Slic3r::FFFTreeSupport::SupportElementState::next_position, Slic3r::FFFTreeSupport::AreaIncreaseSettings::no_error, Slic3r::FFFTreeSupport::SupportElementStateBits::skip_ovalisation, support_element_collision_radius(), Slic3r::FFFTreeSupport::SupportElementStateBits::supports_roof, Slic3r::FFFTreeSupport::SupportElementState::target_height, Slic3r::FFFTreeSupport::SupportElementState::target_position, Slic3r::FFFTreeSupport::SupportElementStateBits::to_buildplate, Slic3r::FFFTreeSupport::SupportElementStateBits::to_model_gracious, Slic3r::FFFTreeSupport::AreaIncreaseSettings::type, Slic3r::FFFTreeSupport::AreaIncreaseSettings::use_min_distance, and Slic3r::FFFTreeSupport::SupportElementStateBits::use_min_xy_dist.
Referenced by merge_influence_areas_two_elements(), and merge_support_element_states().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
References Slic3r::MultiPoint::back(), move_inside(), and Slic3r::MultiPoint::size().
Referenced by move_inside(), and move_inside_if_outside().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
References contains(), move_inside(), and move_inside_if_outside().
Referenced by create_nodes_from_area(), merge_influence_areas_two_elements(), move_inside_if_outside(), set_points_on_areas(), set_to_model_contact_simple(), and set_to_model_contact_to_model_gracious().
Here is the call graph for this function:
Here is the caller graph for this function:| void Slic3r::FFFTreeSupport::organic_draw_branches | ( | PrintObject & | print_object, |
| TreeModelVolumes & | volumes, | ||
| const TreeSupportSettings & | config, | ||
| std::vector< SupportElements > & | move_bounds, | ||
| SupportGeneratorLayersPtr & | bottom_contacts, | ||
| SupportGeneratorLayersPtr & | top_contacts, | ||
| InterfacePlacer & | interface_placer, | ||
| SupportGeneratorLayersPtr & | intermediate_layers, | ||
| SupportGeneratorLayerStorage & | layer_storage, | ||
| std::function< void()> | throw_on_cancel | ||
| ) |
References Slic3r::FFFTreeSupport::Tree::branches, Slic3r::FFFTreeSupport::TreeModelVolumes::clear_all_but_object_collision(), Slic3r::FFFTreeSupport::Branch::has_root(), Slic3r::FFFTreeSupport::Branch::has_tip(), Slic3r::FFFTreeSupport::SupportElementState::layer_idx, Slic3r::FFFTreeSupport::SupportElementStateBits::marked, Slic3r::MeshSlicingParams::mode, organic_draw_branches(), organic_smooth_branches_avoid_collisions(), Slic3r::FFFTreeSupport::SupportElement::parents, Slic3r::FFFTreeSupport::Branch::path, Slic3r::range(), Slic3r::FFFTreeSupport::SupportElementState::result_on_layer_is_set(), Slic3r::PrintObject::slicing_parameters(), Slic3r::FFFTreeSupport::SupportElement::state, and Slic3r::FFFTreeSupport::SupportElementState::target_height.
Referenced by generate_support_areas(), and organic_draw_branches().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
References Slic3r::AABBTreeLines::build_aabb_tree_over_indexed_lines(), Slic3r::empty(), Slic3r::FFFTreeSupport::TreeModelVolumes::get_collision_lower_bound_area(), Slic3r::reserve_power_of_2(), Slic3r::PrintObject::slicing_parameters(), support_element_radius(), and Slic3r::to_lines().
Referenced by organic_draw_branches().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
References Slic3r::foot_pt(), SCALED_EPSILON, Slic3r::sqr(), sqrt(), and validate_range().
Referenced by ensure_maximum_distance_polyline().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Precalculates all avoidances, that could be required.
| storage[in] | Background storage to access meshes. |
| currently_processing_meshes[in] | Indexes of all meshes that are processed in this iteration |
References Slic3r::empty(), Slic3r::Print::get_object(), Slic3r::PrintObject::layer_count(), Slic3r::FFFTreeSupport::TreeModelVolumes::precalculate(), Slic3r::FFFTreeSupport::TreeSupportSettings::raft_layers, and Slic3r::FFFTreeSupport::TreeSupportSettings::z_distance_top_layers.
Referenced by generate_support_areas().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
References Slic3r::FFFTreeSupport::SupportElementStateBits::deleted, Slic3r::FFFTreeSupport::SupportElement::parents, remove_deleted_elements(), and Slic3r::FFFTreeSupport::SupportElement::state.
Referenced by create_nodes_from_area(), and remove_deleted_elements().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Offsets (increases the area of) a polygons object in multiple steps to ensure that it does not lag through over a given obstacle.
| me[in] | Polygons object that has to be offset. |
| distance[in] | The distance by which me should be offset. Expects values >=0. |
| collision[in] | The area representing obstacles. |
| last_step_offset_without_check[in] | The most it is allowed to offset in one step. |
| min_amount_offset[in] | How many steps have to be done at least. As this uses round offset this increases the amount of vertices, which may be required if Polygons get very small. Required as arcTolerance is not exposed in offset, which should result with a similar result. |
References Slic3r::ClipperUtils::clip_clipper_polygons_with_subject_bbox(), Slic3r::diff(), error, Slic3r::get_extents(), Slic3r::BoundingBox::inflated(), ClipperLib::jtRound, Slic3r::offset(), Slic3r::polygons_simplify(), polygons_strictly_simple, safe_union(), SCALED_EPSILON, tree_supports_show_error(), and Slic3r::union_().
Referenced by increase_single_area(), and merge_influence_areas_two_elements().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Unions two Polygons. Ensures that if the input is non empty that the output also will be non empty.
Referenced by create_layer_pathing(), increase_single_area(), merge_influence_areas_two_elements(), and safe_offset_inc().
Here is the caller graph for this function:| void Slic3r::FFFTreeSupport::sample_overhang_area | ( | Polygons && | overhang_area, |
| const bool | large_horizontal_roof, | ||
| const size_t | layer_idx, | ||
| const size_t | num_support_roof_layers, | ||
| const coord_t | connect_length, | ||
| const TreeSupportMeshGroupSettings & | mesh_group_settings, | ||
| RichInterfacePlacer & | interface_placer | ||
| ) |
References Slic3r::FFFTreeSupport::RichInterfacePlacer::add_points_along_lines(), Slic3r::FFFTreeSupport::InterfacePlacer::add_roof_build_plate(), Slic3r::FFFTreeSupport::InterfacePlacer::add_roofs(), Slic3r::area(), Slic3r::FFFTreeSupport::InterfacePlacer::config, convert_lines_to_internal(), Slic3r::diff(), Slic3r::diff_ex(), Slic3r::empty(), ensure_maximum_distance_polyline(), evaluate_point_for_next_layer_function(), Slic3r::FFFTreeSupport::RichInterfacePlacer::force_tip_to_roof, generate_support_infill_lines(), Slic3r::FFFTreeSupport::TreeModelVolumes::getAvoidance(), Slic3r::FFFTreeSupport::TreeModelVolumes::getCollision(), Slic3r::FFFTreeSupport::TreeSupportSettings::getRadius(), Slic3r::FFFTreeSupport::TreeSupportSettings::min_radius, Slic3r::FFFTreeSupport::TreeSupportMeshGroupSettings::minimum_roof_area, Slic3r::offset(), sample_overhang_area(), split_lines(), Slic3r::sqr(), Slic3r::FFFTreeSupport::TreeSupportSettings::support_line_width, Slic3r::FFFTreeSupport::InterfacePlacer::support_parameters, Slic3r::FFFTreeSupport::TreeSupportSettings::support_rests_on_model, Slic3r::FFFTreeSupport::TreeSupportMeshGroupSettings::support_roof_line_distance, Slic3r::FFFTreeSupport::TreeSupportMeshGroupSettings::support_tree_branch_distance, Slic3r::to_polylines(), Slic3r::total_length(), Slic3r::union_ex(), Slic3r::FFFTreeSupport::RichInterfacePlacer::volumes, Slic3r::FFFTreeSupport::TreeSupportSettings::xy_distance, and Slic3r::FFFTreeSupport::TreeSupportSettings::xy_min_distance.
Referenced by sample_overhang_area().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Sets the result_on_layer for all parents based on the SupportElement supplied.
| elem[in] | The SupportElements, which parent's position should be determined. |
References Slic3r::FFFTreeSupport::SupportElementStateBits::deleted, error, Slic3r::FFFTreeSupport::SupportElement::influence_area, Slic3r::FFFTreeSupport::SupportElementStateBits::marked, move_inside_if_outside(), Slic3r::FFFTreeSupport::SupportElement::parents, Slic3r::FFFTreeSupport::SupportElementState::result_on_layer, Slic3r::FFFTreeSupport::SupportElementState::result_on_layer_is_set(), set_points_on_areas(), Slic3r::FFFTreeSupport::SupportElement::state, and tree_supports_show_error().
Referenced by create_nodes_from_area(), and set_points_on_areas().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
References Slic3r::FFFTreeSupport::SupportElement::influence_area, Slic3r::FFFTreeSupport::SupportElementState::layer_idx, move_inside_if_outside(), Slic3r::FFFTreeSupport::SupportElementState::next_position, Slic3r::FFFTreeSupport::SupportElementState::result_on_layer, set_to_model_contact_simple(), and Slic3r::FFFTreeSupport::SupportElement::state.
Referenced by create_nodes_from_area(), set_to_model_contact_simple(), and set_to_model_contact_to_model_gracious().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Get the best point to connect to the model and set the result_on_layer of the relevant SupportElement accordingly.
| move_bounds[in,out] | All currently existing influence areas |
| first_elem[in,out] | SupportElement that did not have its result_on_layer set meaning that it does not have a child element. |
| layer_idx[in] | The current layer. |
References Slic3r::FFFTreeSupport::SupportElementStateBits::deleted, Slic3r::FFFTreeSupport::TreeModelVolumes::getPlaceableAreas(), Slic3r::FFFTreeSupport::SupportElement::influence_area, Slic3r::intersection(), Slic3r::FFFTreeSupport::SupportElementState::layer_idx, move_inside_if_outside(), Slic3r::FFFTreeSupport::SupportElementState::next_position, Slic3r::FFFTreeSupport::SupportElement::parents, Slic3r::FFFTreeSupport::SupportElementState::result_on_layer, set_to_model_contact_simple(), set_to_model_contact_to_model_gracious(), Slic3r::FFFTreeSupport::SupportElement::state, support_element_collision_radius(), Slic3r::FFFTreeSupport::SupportElementStateBits::to_model_gracious, and tree_supports_show_error().
Referenced by create_nodes_from_area(), and set_to_model_contact_to_model_gracious().
Here is the call graph for this function:
Here is the caller graph for this function:
|
static |
Applies some smoothing to the outer wall, intended to smooth out sudden jumps as they can happen when a branch moves though a hole.
| layer_tree_polygons[in,out] | Resulting branch areas with the layerindex they appear on. |
References contains(), Slic3r::debug_out_path(), Slic3r::FFFTreeSupport::DrawArea::element, Slic3r::intersection(), Slic3r::FFFTreeSupport::SupportElementState::layer_idx, Slic3r::FFFTreeSupport::SupportElementStateBits::marked, Slic3r::FFFTreeSupport::TreeSupportSettings::maximum_move_distance_slow, Slic3r::FFFTreeSupport::SupportElement::parents, Slic3r::FFFTreeSupport::DrawArea::polygons, Slic3r::range(), Slic3r::FFFTreeSupport::SupportElementState::result_on_layer, smooth_branch_areas(), Slic3r::FFFTreeSupport::SupportElement::state, support_element_collision_radius(), support_element_radius(), Slic3r::FFFTreeSupport::TreeSupportSettings::support_line_width, and Slic3r::union_ex().
Referenced by draw_areas(), and smooth_branch_areas().
Here is the call graph for this function:
Here is the caller graph for this function:References Slic3r::FFFTreeSupport::Bifurcation::branch, Slic3r::contains(), Slic3r::cross(), Slic3r::FFFTreeSupport::Branch::down, EPSILON, Slic3r::FFFTreeSupport::Element::influence_area, Slic3r::FFFTreeSupport::Element::locked, Slic3r::FFFTreeSupport::Branch::path, Slic3r::FFFTreeSupport::Element::position, Slic3r::FFFTreeSupport::Element::prev_position, Slic3r::FFFTreeSupport::Element::radius, Slic3r::sqr(), and sqrt().
Referenced by smooth_trees_inside_influence_areas().
Here is the call graph for this function:
Here is the caller graph for this function:References smooth_trees_inside_influence_areas().
Here is the call graph for this function:
|
static |
Evaluates which points of some lines are not valid one layer below and which are. Assumes all points are valid on the current layer. Validity is evaluated using supplied lambda.
| lines[in] | The lines that have to be evaluated. |
| evaluatePoint[in] | The function used to evaluate the points. |
References validate_range().
Referenced by Slic3r::FFFTreeSupport::RichInterfacePlacer::add_points_along_lines(), and sample_overhang_area().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inline |
References Slic3r::FFFTreeSupport::SupportElement::state, and support_element_collision_radius().
Here is the call graph for this function:
|
inline |
Get the collision Radius of this Element. This can be smaller then the actual radius, as the drawAreas will cut off areas that may collide with the model.
| elem[in] | The Element. |
References Slic3r::FFFTreeSupport::SupportElementState::effective_radius_height, Slic3r::FFFTreeSupport::SupportElementState::elephant_foot_increases, and Slic3r::FFFTreeSupport::TreeSupportSettings::getRadius().
Referenced by generate_support_areas(), increase_single_area(), merge_influence_areas_two_elements(), merge_support_element_states(), set_to_model_contact_to_model_gracious(), smooth_branch_areas(), and support_element_collision_radius().
Here is the call graph for this function:
Here is the caller graph for this function:
|
inline |
References Slic3r::FFFTreeSupport::SupportElement::state, and support_element_radius().
Here is the call graph for this function:
|
inline |
Get the Radius, that this element will have.
| elem[in] | The Element. |
References Slic3r::FFFTreeSupport::SupportElementState::elephant_foot_increases, getEffectiveDTT(), and Slic3r::FFFTreeSupport::TreeSupportSettings::getRadius().
Referenced by create_nodes_from_area(), extrude_branch(), finalize_raft_contact(), increase_single_area(), merge_influence_areas_two_elements(), organic_smooth_branches_avoid_collisions(), smooth_branch_areas(), support_element_radius(), and to_tree_element().
Here is the call graph for this function:
Here is the caller graph for this function:| Element Slic3r::FFFTreeSupport::to_tree_element | ( | const TreeSupportSettings & | config, |
| const SlicingParameters & | slicing_params, | ||
| SupportElement & | element, | ||
| bool | is_root | ||
| ) |
References Slic3r::FFFTreeSupport::Element::influence_area, Slic3r::FFFTreeSupport::SupportElement::influence_area, Slic3r::FFFTreeSupport::Element::layer_idx, Slic3r::FFFTreeSupport::SupportElementState::layer_idx, layer_z(), Slic3r::FFFTreeSupport::Element::locked, Slic3r::FFFTreeSupport::SupportElementState::locked(), Slic3r::FFFTreeSupport::Element::position, Slic3r::FFFTreeSupport::Element::radius, Slic3r::FFFTreeSupport::SupportElementState::result_on_layer, Slic3r::FFFTreeSupport::SupportElement::state, support_element_radius(), and Slic3r::to_3d().
Referenced by make_forest().
Here is the call graph for this function:
Here is the caller graph for this function:| void Slic3r::FFFTreeSupport::tree_supports_show_error | ( | std::string_view | message, |
| bool | critical | ||
| ) |
References g_showed_critical_error, and g_showed_performance_warning.
Referenced by Slic3r::FFFTreeSupport::RichInterfacePlacer::add_point_as_influence_area(), create_layer_pathing(), create_nodes_from_area(), ensure_maximum_distance_polyline(), Slic3r::FFFTreeSupport::TreeModelVolumes::getAvoidance(), Slic3r::FFFTreeSupport::TreeModelVolumes::getCollision(), Slic3r::FFFTreeSupport::TreeModelVolumes::getCollisionHolefree(), Slic3r::FFFTreeSupport::TreeModelVolumes::getPlaceableAreas(), Slic3r::FFFTreeSupport::TreeModelVolumes::getWallRestriction(), increase_single_area(), safe_offset_inc(), set_points_on_areas(), and set_to_model_contact_to_model_gracious().
Here is the caller graph for this function:| void Slic3r::FFFTreeSupport::triangulate_fan | ( | indexed_triangle_set & | its, |
| int | ifan, | ||
| int | ibegin, | ||
| int | iend | ||
| ) |
References indexed_triangle_set::indices, and indexed_triangle_set::vertices.
|
static |
References indexed_triangle_set::indices, Slic3r::l2(), and indexed_triangle_set::vertices.
Referenced by extrude_branch().
Here is the call graph for this function:
Here is the caller graph for this function:| void Slic3r::FFFTreeSupport::trim_influence_areas_bottom_up | ( | Forest & | forest, |
| const float | dxy_dlayer | ||
| ) |
References Slic3r::intersection(), Slic3r::FFFTreeSupport::Branch::path, and Slic3r::FFFTreeSupport::Branch::up.
Here is the call graph for this function:
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
References Slic3r::MultiPoint::points, and validate_range().
Here is the call graph for this function:Referenced by Slic3r::FFFTreeSupport::RichInterfacePlacer::add_points_along_lines(), convert_lines_to_internal(), ensure_maximum_distance_polyline(), generate_support_infill_lines(), polyline_sample_next_point_at_distance(), split_lines(), validate_range(), validate_range(), validate_range(), validate_range(), validate_range(), and validate_range().
Here is the caller graph for this function:| bool Slic3r::FFFTreeSupport::g_showed_critical_error = false |
Referenced by generate_support_areas(), and tree_supports_show_error().
| bool Slic3r::FFFTreeSupport::g_showed_performance_warning = false |
Referenced by generate_support_areas(), and tree_supports_show_error().
|
staticconstexpr |
Referenced by Slic3r::FFFTreeSupport::TreeModelVolumes::TreeModelVolumes(), and safe_offset_inc().
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |