OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::SeamPlacerImpl::GlobalModelInfo Struct Reference
Collaboration diagram for Slic3r::SeamPlacerImpl::GlobalModelInfo:

Public Member Functions

bool is_enforced (const Vec3f &position, float radius) const
bool is_blocked (const Vec3f &position, float radius) const
float calculate_point_visibility (const Vec3f &position) const

Public Attributes

TriangleSetSamples mesh_samples
std::vector< float > mesh_samples_visibility
CoordinateFunctor mesh_samples_coordinate_functor
KDTreeIndirect< 3, float, CoordinateFunctor > mesh_samples_tree { CoordinateFunctor { } }
float mesh_samples_radius
indexed_triangle_set enforcers
indexed_triangle_set blockers
indexed_triangle_set non_enforcers
AABBTreeIndirect::Tree< 3, float > enforcers_tree
AABBTreeIndirect::Tree< 3, float > blockers_tree
AABBTreeIndirect::Tree< 3, float > non_enforcers_tree
PaintedContour enforcer_contour
PaintedContour blocker_contour
std::vector< const ModelVolume * > precise_seam_strong_volumes
std::vector< const ModelVolume * > precise_seam_weak_volumes
PreciseSeam::ModifierRegionsCache precise_seam_slices

Detailed Description

Member Function Documentation

◆ calculate_point_visibility()

float Slic3r::SeamPlacerImpl::GlobalModelInfo::calculate_point_visibility ( const Vec3f & position) const
inline
392 {
393 std::vector<size_t> points = find_nearby_points(mesh_samples_tree, position, mesh_samples_radius);
394 if (points.empty()) {
395 return 1.0f;
396 }
397
398 auto compute_dist_to_plane = [](const Vec3f &position, const Vec3f &plane_origin, const Vec3f &plane_normal) {
399 Vec3f orig_to_point = position - plane_origin;
400 return std::abs(orig_to_point.dot(plane_normal));
401 };
402
403 float total_weight = 0;
404 float total_visibility = 0;
405 for (size_t i = 0; i < points.size(); ++i) {
406 size_t sample_idx = points[i];
407
408 Vec3f sample_point = this->mesh_samples.positions[sample_idx];
409 Vec3f sample_normal = this->mesh_samples.normals[sample_idx];
410
411 float weight = mesh_samples_radius - compute_dist_to_plane(position, sample_point, sample_normal);
412 weight += (mesh_samples_radius - (position - sample_point).norm());
413 total_visibility += weight * mesh_samples_visibility[sample_idx];
414 total_weight += weight;
415 }
416
417 return total_visibility / total_weight;
418
419 }
Vec3d plane_normal(const SurfaceFeature &plane)
Definition Measure.hpp:207
Eigen::Matrix< float, 3, 1, Eigen::DontAlign > Vec3f
Definition Point.hpp:65
std::vector< size_t > find_nearby_points(const KDTreeIndirectType &kdtree, const PointType &center, const typename KDTreeIndirectType::CoordType &max_distance, FilterFn filter)
Definition KDTreeIndirect.hpp:286
KDTreeIndirect< 3, float, CoordinateFunctor > mesh_samples_tree
Definition SeamPlacer.cpp:351
float mesh_samples_radius
Definition SeamPlacer.cpp:352
std::vector< float > mesh_samples_visibility
Definition SeamPlacer.cpp:349
TriangleSetSamples mesh_samples
Definition SeamPlacer.cpp:348

References Slic3r::find_nearby_points(), mesh_samples_radius, mesh_samples_tree, mesh_samples_visibility, Slic3r::TriangleSetSamples::normals, and Slic3r::TriangleSetSamples::positions.

Here is the call graph for this function:

◆ is_blocked()

bool Slic3r::SeamPlacerImpl::GlobalModelInfo::is_blocked ( const Vec3f & position,
float radius ) const
inline
383 {
384 if (blockers.empty()) {
385 return false;
386 }
387 float radius_sqr = radius * radius;
389 blockers_tree, position, radius_sqr);
390 }
bool is_any_triangle_in_radius(const std::vector< VertexType > &vertices, const std::vector< IndexedFaceType > &faces, const TreeType &tree, const VectorType &point, typename VectorType::Scalar &max_distance_squared)
Definition AABBTreeIndirect.hpp:827
AABBTreeIndirect::Tree< 3, float > blockers_tree
Definition SeamPlacer.cpp:359
indexed_triangle_set blockers
Definition SeamPlacer.cpp:355

References blockers, blockers_tree, and Slic3r::AABBTreeIndirect::is_any_triangle_in_radius().

Referenced by Slic3r::SeamPlacerImpl::process_perimeter_polygon().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_enforced()

bool Slic3r::SeamPlacerImpl::GlobalModelInfo::is_enforced ( const Vec3f & position,
float radius ) const
inline
374 {
375 if (enforcers.empty()) {
376 return false;
377 }
378 float radius_sqr = radius * radius;
380 enforcers_tree, position, radius_sqr);
381 }
indexed_triangle_set enforcers
Definition SeamPlacer.cpp:354
AABBTreeIndirect::Tree< 3, float > enforcers_tree
Definition SeamPlacer.cpp:358

References enforcers, enforcers_tree, and Slic3r::AABBTreeIndirect::is_any_triangle_in_radius().

Referenced by Slic3r::SeamPlacerImpl::fully_enforced_loop(), and Slic3r::SeamPlacerImpl::process_perimeter_polygon().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ blocker_contour

PaintedContour Slic3r::SeamPlacerImpl::GlobalModelInfo::blocker_contour

◆ blockers

indexed_triangle_set Slic3r::SeamPlacerImpl::GlobalModelInfo::blockers

◆ blockers_tree

AABBTreeIndirect::Tree<3, float> Slic3r::SeamPlacerImpl::GlobalModelInfo::blockers_tree

◆ enforcer_contour

PaintedContour Slic3r::SeamPlacerImpl::GlobalModelInfo::enforcer_contour

◆ enforcers

indexed_triangle_set Slic3r::SeamPlacerImpl::GlobalModelInfo::enforcers

◆ enforcers_tree

AABBTreeIndirect::Tree<3, float> Slic3r::SeamPlacerImpl::GlobalModelInfo::enforcers_tree

◆ mesh_samples

TriangleSetSamples Slic3r::SeamPlacerImpl::GlobalModelInfo::mesh_samples

◆ mesh_samples_coordinate_functor

CoordinateFunctor Slic3r::SeamPlacerImpl::GlobalModelInfo::mesh_samples_coordinate_functor

◆ mesh_samples_radius

float Slic3r::SeamPlacerImpl::GlobalModelInfo::mesh_samples_radius

◆ mesh_samples_tree

KDTreeIndirect<3, float, CoordinateFunctor> Slic3r::SeamPlacerImpl::GlobalModelInfo::mesh_samples_tree { CoordinateFunctor { } }
351{ CoordinateFunctor { } };

Referenced by calculate_point_visibility(), and Slic3r::SeamPlacerImpl::compute_global_occlusion().

◆ mesh_samples_visibility

std::vector<float> Slic3r::SeamPlacerImpl::GlobalModelInfo::mesh_samples_visibility

◆ non_enforcers

indexed_triangle_set Slic3r::SeamPlacerImpl::GlobalModelInfo::non_enforcers

◆ non_enforcers_tree

AABBTreeIndirect::Tree<3, float> Slic3r::SeamPlacerImpl::GlobalModelInfo::non_enforcers_tree

◆ precise_seam_slices

PreciseSeam::ModifierRegionsCache Slic3r::SeamPlacerImpl::GlobalModelInfo::precise_seam_slices

◆ precise_seam_strong_volumes

std::vector<const ModelVolume*> Slic3r::SeamPlacerImpl::GlobalModelInfo::precise_seam_strong_volumes

◆ precise_seam_weak_volumes

std::vector<const ModelVolume*> Slic3r::SeamPlacerImpl::GlobalModelInfo::precise_seam_weak_volumes

The documentation for this struct was generated from the following file:
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/libslic3r/GCode/SeamPlacer.cpp