OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::Measure::SurfaceFeature Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/libslic3r/Measure.hpp>

Collaboration diagram for Slic3r::Measure::SurfaceFeature:

Public Member Functions

 SurfaceFeature (SurfaceFeatureType type, const Vec3d &pt1, const Vec3d &pt2, std::optional< Vec3d > pt3=std::nullopt, double value=0.0)
 SurfaceFeature (const Vec3d &pt)
void clone (const SurfaceFeature &sf)
void translate (const Vec3d &displacement)
void translate (const Transform3d &tran)
SurfaceFeatureType get_type () const
Vec3d get_point () const
std::pair< Vec3d, Vec3d > get_edge () const
std::tuple< Vec3d, double, Vec3d > get_circle () const
std::tuple< int, Vec3d, Vec3d > get_plane () const
std::optional< Vec3d > get_extra_point () const
bool operator== (const SurfaceFeature &other) const
bool operator!= (const SurfaceFeature &other) const
Vec3d get_pt1 () const
Vec3d get_pt2 () const
const std::optional< Vec3d > & get_pt3 () const
double get_value () const

Public Attributes

void * volume {nullptr}
std::vector< int > * plane_indices {nullptr}
Transform3d world_tran = Transform3d::Identity()
std::shared_ptr< std::vector< SurfaceFeature > > world_plane_features {nullptr}
std::shared_ptr< SurfaceFeature > origin_surface_feature {nullptr}

Private Attributes

SurfaceFeatureType m_type { SurfaceFeatureType::Undef }
Vec3d m_pt1 { Vec3d::Zero() }
Vec3d m_pt2 { Vec3d::Zero() }
std::optional< Vec3d > m_pt3
double m_value { 0.0 }

Detailed Description

Constructor & Destructor Documentation

◆ SurfaceFeature() [1/2]

Slic3r::Measure::SurfaceFeature::SurfaceFeature ( SurfaceFeatureType type,
const Vec3d & pt1,
const Vec3d & pt2,
std::optional< Vec3d > pt3 = std::nullopt,
double value = 0.0 )
inline
38 : m_type(type), m_pt1(pt1), m_pt2(pt2), m_pt3(pt3), m_value(value) {}
double m_value
Definition Measure.hpp:109
Vec3d m_pt1
Definition Measure.hpp:106
SurfaceFeatureType m_type
Definition Measure.hpp:105
std::optional< Vec3d > m_pt3
Definition Measure.hpp:108
Vec3d m_pt2
Definition Measure.hpp:107

References m_pt1, m_pt2, m_pt3, m_type, and m_value.

Referenced by clone(), operator!=(), and operator==().

Here is the caller graph for this function:

◆ SurfaceFeature() [2/2]

Slic3r::Measure::SurfaceFeature::SurfaceFeature ( const Vec3d & pt)
inline

References m_pt1, and m_type.

Member Function Documentation

◆ clone()

void Slic3r::Measure::SurfaceFeature::clone ( const SurfaceFeature & sf)
inline
44 {
45 m_type = sf.get_type();
46 m_pt1 = sf.get_pt1();
47 m_pt2 = sf.get_pt2();
48 m_pt3 = sf.get_pt3();
49 m_value = sf.get_value();
50 }

References SurfaceFeature(), get_pt1(), get_pt2(), get_pt3(), get_type(), get_value(), m_pt1, m_pt2, m_pt3, m_type, and m_value.

Referenced by Slic3r::GUI::GLGizmoMeasure::update_feature_by_tran().

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

◆ get_circle()

std::tuple< Vec3d, double, Vec3d > Slic3r::Measure::SurfaceFeature::get_circle ( ) const
inline
62{ assert(m_type == SurfaceFeatureType::Circle); return std::make_tuple(m_pt1, m_value, m_pt2); }
@ Circle
Definition Measure.hpp:27

References Slic3r::Measure::Circle, m_pt1, m_pt2, m_type, and m_value.

Referenced by Slic3r::GUI::GLGizmoMeasure::get_feature_offset(), Slic3r::Measure::get_measurement(), Slic3r::GUI::GLGizmoMeasure::init_circle_glmodel(), and Slic3r::GUI::GLGizmoMeasure::on_render().

Here is the caller graph for this function:

◆ get_edge()

std::pair< Vec3d, Vec3d > Slic3r::Measure::SurfaceFeature::get_edge ( ) const
inline
59{ assert(m_type == SurfaceFeatureType::Edge); return std::make_pair(m_pt1, m_pt2); }
@ Edge
Definition Measure.hpp:26

References Slic3r::Measure::Edge, m_pt1, m_pt2, and m_type.

Referenced by Slic3r::Measure::edge_direction(), Slic3r::GUI::GLGizmoMeasure::get_feature_offset(), Slic3r::Measure::get_measurement(), and Slic3r::GUI::GLGizmoMeasure::on_render().

Here is the caller graph for this function:

◆ get_extra_point()

std::optional< Vec3d > Slic3r::Measure::SurfaceFeature::get_extra_point ( ) const
inline
68{ assert(m_type != SurfaceFeatureType::Undef); return m_pt3; }
@ Undef
Definition Measure.hpp:24

References m_pt3, m_type, and Slic3r::Measure::Undef.

Referenced by Slic3r::GUI::GLGizmoMeasure::get_feature_offset(), Slic3r::GUI::GLGizmoMeasure::is_feature_with_center(), and Slic3r::GUI::GLGizmoMeasure::on_render().

Here is the caller graph for this function:

◆ get_plane()

std::tuple< int, Vec3d, Vec3d > Slic3r::Measure::SurfaceFeature::get_plane ( ) const
inline
65{ assert(m_type == SurfaceFeatureType::Plane); return std::make_tuple(int(m_value), m_pt1, m_pt2); }
@ Plane
Definition Measure.hpp:28

References m_pt1, m_pt2, m_type, m_value, and Slic3r::Measure::Plane.

Referenced by Slic3r::Measure::get_assembly_action(), Slic3r::Measure::get_measurement(), Slic3r::GUI::GLGizmoMeasure::init_plane_glmodel(), Slic3r::Measure::plane_normal(), and Slic3r::GUI::GLGizmoMeasure::update_world_plane_features().

Here is the caller graph for this function:

◆ get_point()

Vec3d Slic3r::Measure::SurfaceFeature::get_point ( ) const
inline
57{ assert(m_type == SurfaceFeatureType::Point); return m_pt1; }

References m_pt1, m_type, and Slic3r::Measure::Point.

Referenced by Slic3r::GUI::GLGizmoMeasure::get_feature_offset(), Slic3r::Measure::get_measurement(), and Slic3r::GUI::GLGizmoMeasure::on_render().

Here is the caller graph for this function:

◆ get_pt1()

Vec3d Slic3r::Measure::SurfaceFeature::get_pt1 ( ) const
inline
99{ return m_pt1; }

References m_pt1.

Referenced by clone().

Here is the caller graph for this function:

◆ get_pt2()

Vec3d Slic3r::Measure::SurfaceFeature::get_pt2 ( ) const
inline
100{ return m_pt2; }

References m_pt2.

Referenced by clone().

Here is the caller graph for this function:

◆ get_pt3()

const std::optional< Vec3d > & Slic3r::Measure::SurfaceFeature::get_pt3 ( ) const
inline
101{ return m_pt3; }

References m_pt3.

Referenced by clone().

Here is the caller graph for this function:

◆ get_type()

◆ get_value()

double Slic3r::Measure::SurfaceFeature::get_value ( ) const
inline
102{ return m_value; }

References m_value.

Referenced by clone().

Here is the caller graph for this function:

◆ operator!=()

bool Slic3r::Measure::SurfaceFeature::operator!= ( const SurfaceFeature & other) const
inline
89 {
90 return !operator == (other);
91 }
bool operator==(const SurfaceFeature &other) const
Definition Measure.hpp:70

References SurfaceFeature(), and operator==().

Here is the call graph for this function:

◆ operator==()

bool Slic3r::Measure::SurfaceFeature::operator== ( const SurfaceFeature & other) const
inline
70 {
71 if (this->m_type != other.m_type) return false;
72 switch (this->m_type)
73 {
74 case SurfaceFeatureType::Undef: { break; }
75 case SurfaceFeatureType::Point: { return (this->m_pt1.isApprox(other.m_pt1)); }
77 return (this->m_pt1.isApprox(other.m_pt1) && this->m_pt2.isApprox(other.m_pt2)) ||
78 (this->m_pt1.isApprox(other.m_pt2) && this->m_pt2.isApprox(other.m_pt1));
79 }
82 return (this->m_pt1.isApprox(other.m_pt1) && this->m_pt2.isApprox(other.m_pt2) && std::abs(this->m_value - other.m_value) < EPSILON);
83 }
84 }
85
86 return false;
87 }
#define EPSILON
Definition ColorUtils.cpp:64

References SurfaceFeature(), Slic3r::Measure::Circle, Slic3r::Measure::Edge, EPSILON, m_pt1, m_pt2, m_type, m_value, Slic3r::Measure::Plane, Slic3r::Measure::Point, and Slic3r::Measure::Undef.

Referenced by operator!=().

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

◆ translate() [1/2]

void Slic3r::Measure::SurfaceFeature::translate ( const Transform3d & tran)
1404{
1405 switch (get_type()) {
1407 m_pt1 = tran * m_pt1;
1408 break;
1409 }
1411 m_pt1 = tran * m_pt1;
1412 m_pt2 = tran * m_pt2;
1413 if (m_pt3.has_value()) { // extra_point()
1414 m_pt3 = tran * *m_pt3;
1415 }
1416 break;
1417 }
1419 // m_pt1 is normal;
1420 Vec3d temp_pt1 = m_pt2 + m_pt1;
1421 temp_pt1 = tran * temp_pt1;
1422 m_pt2 = tran * m_pt2;
1423 m_pt1 = (temp_pt1 - m_pt2).normalized();
1424 break;
1425 }
1427 // m_pt1 is center;
1428 // m_pt2 is normal;
1429 auto local_normal = m_pt2;
1430 auto local_center = m_pt1;
1431 Vec3d temp_pt2 = local_normal + local_center;
1432 temp_pt2 = tran * temp_pt2;
1433 m_pt1 = tran * m_pt1;
1434 auto world_center = m_pt1;
1435 m_pt2 = (temp_pt2 - m_pt1).normalized();
1436
1437 auto calc_world_radius = [&local_center, &local_normal, &tran, &world_center](const Vec3d &pt, double &value) {
1438 Vec3d intersection_pt;
1439 get_point_projection_to_plane(pt, local_center, local_normal, intersection_pt);
1440 Vec3d local_radius_pt = (intersection_pt - local_center).normalized() * value + local_center;
1441 Vec3d radius_pt = tran * local_radius_pt;
1442 value = (radius_pt - world_center).norm();
1443 };
1444 //m_value is radius
1445 auto new_pt = get_one_point_in_plane(local_center, local_normal);
1446 calc_world_radius(new_pt, m_value);
1447 break;
1448 }
1449 default: break;
1450 }
1451}
SurfaceFeatureType get_type() const
Definition Measure.hpp:54
bool get_point_projection_to_plane(const Vec3d &pt, const Vec3d &plane_origin, const Vec3d &plane_normal, Vec3d &intersection_pt)
Definition Measure.cpp:40
Vec3d get_one_point_in_plane(const Vec3d &plane_origin, const Vec3d &plane_normal)
Definition Measure.cpp:49
Eigen::Matrix< double, 3, 1, Eigen::DontAlign > Vec3d
Definition Point.hpp:68

References Slic3r::Measure::Circle, Slic3r::Measure::Edge, Slic3r::Measure::get_one_point_in_plane(), Slic3r::Measure::get_point_projection_to_plane(), get_type(), m_pt1, m_pt2, m_pt3, m_value, Slic3r::Measure::Plane, and Slic3r::Measure::Point.

Here is the call graph for this function:

◆ translate() [2/2]

void Slic3r::Measure::SurfaceFeature::translate ( const Vec3d & displacement)
1375 {
1376 switch (get_type()) {
1378 m_pt1 = m_pt1 + displacement;
1379 break;
1380 }
1382 m_pt1 = m_pt1 + displacement;
1383 m_pt2 = m_pt2 + displacement;
1384 if (m_pt3.has_value()) { //extra_point()
1385 m_pt3 = *m_pt3 + displacement;
1386 }
1387 break;
1388 }
1390 //m_pt1 is normal;
1391 m_pt2 = m_pt2 + displacement;
1392 break;
1393 }
1395 m_pt1 = m_pt1 + displacement;
1396 // m_pt2 is normal;
1397 break;
1398 }
1399 default: break;
1400 }
1401}

References Slic3r::Measure::Circle, Slic3r::Measure::Edge, get_type(), m_pt1, m_pt2, m_pt3, Slic3r::Measure::Plane, and Slic3r::Measure::Point.

Referenced by Slic3r::Measure::MeasuringImpl::get_feature(), Slic3r::GUI::GLGizmoMeasure::update_feature_by_tran(), and Slic3r::GUI::GLGizmoMeasure::update_world_plane_features().

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

Member Data Documentation

◆ m_pt1

Vec3d Slic3r::Measure::SurfaceFeature::m_pt1 { Vec3d::Zero() }
private

◆ m_pt2

Vec3d Slic3r::Measure::SurfaceFeature::m_pt2 { Vec3d::Zero() }
private

◆ m_pt3

std::optional<Vec3d> Slic3r::Measure::SurfaceFeature::m_pt3
private

◆ m_type

◆ m_value

double Slic3r::Measure::SurfaceFeature::m_value { 0.0 }
private

◆ origin_surface_feature

std::shared_ptr<SurfaceFeature> Slic3r::Measure::SurfaceFeature::origin_surface_feature {nullptr}

◆ plane_indices

std::vector<int>* Slic3r::Measure::SurfaceFeature::plane_indices {nullptr}

◆ volume

void* Slic3r::Measure::SurfaceFeature::volume {nullptr}

◆ world_plane_features

std::shared_ptr<std::vector<SurfaceFeature> > Slic3r::Measure::SurfaceFeature::world_plane_features {nullptr}

◆ world_tran


The documentation for this class was generated from the following files:
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/libslic3r/Measure.hpp
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/libslic3r/Measure.cpp