Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
Slic3r::FacetsAnnotation Class Referencefinal

#include <src/libslic3r/Model.hpp>

+ Inheritance diagram for Slic3r::FacetsAnnotation:
+ Collaboration diagram for Slic3r::FacetsAnnotation:

Public Types

using Timestamp = uint64_t
 

Public Member Functions

void assign (const FacetsAnnotation &rhs)
 
void assign (FacetsAnnotation &&rhs)
 
const std::pair< std::vector< std::pair< int, int > >, std::vector< bool > > & get_data () const throw ()
 
bool set (const TriangleSelector &selector)
 
indexed_triangle_set get_facets (const ModelVolume &mv, EnforcerBlockerType type) const
 
indexed_triangle_set get_facets_strict (const ModelVolume &mv, EnforcerBlockerType type) const
 
bool has_facets (const ModelVolume &mv, EnforcerBlockerType type) const
 
bool empty () const
 
void reset ()
 
std::string get_triangle_as_string (int i) const
 
void reserve (int n_triangles)
 
void set_triangle_from_string (int triangle_id, const std::string &str)
 
void shrink_to_fit ()
 
Timestamp timestamp () const override throw ()
 
bool timestamp_matches (const ObjectWithTimestamp &rhs) const throw ()
 
bool object_id_and_timestamp_match (const ObjectWithTimestamp &rhs) const throw ()
 
void touch ()
 
ObjectID id () const
 

Protected Member Functions

void copy_timestamp (const ObjectWithTimestamp &rhs)
 
void set_new_unique_id ()
 
void set_invalid_id ()
 
void copy_id (const ObjectBase &rhs)
 
virtual void assign_new_unique_ids_recursive ()
 

Private Member Functions

 FacetsAnnotation ()=default
 
 FacetsAnnotation (int)
 
 FacetsAnnotation (const FacetsAnnotation &rhs)=default
 
 FacetsAnnotation (FacetsAnnotation &&rhs)=default
 
FacetsAnnotationoperator= (const FacetsAnnotation &rhs)=default
 
FacetsAnnotationoperator= (FacetsAnnotation &&rhs)=default
 
template<class Archive >
void serialize (Archive &ar)
 

Static Private Member Functions

static ObjectID generate_new_id ()
 
template<class Archive >
static void load_and_construct (Archive &ar, cereal::construct< ObjectBase > &construct)
 

Private Attributes

std::pair< std::vector< std::pair< int, int > >, std::vector< bool > > m_data
 
Timestamp m_timestamp { 1 }
 
ObjectID m_id
 

Static Private Attributes

static Timestamp s_last_timestamp = 1
 
static size_t s_last_id = 0
 

Friends

class cereal::access
 
class UndoRedo::StackImpl
 
class ModelVolume
 

Detailed Description

Member Typedef Documentation

◆ Timestamp

Constructor & Destructor Documentation

◆ FacetsAnnotation() [1/4]

Slic3r::FacetsAnnotation::FacetsAnnotation ( )
explicitprivatedefault

◆ FacetsAnnotation() [2/4]

Slic3r::FacetsAnnotation::FacetsAnnotation ( int  )
inlineexplicitprivate

◆ FacetsAnnotation() [3/4]

Slic3r::FacetsAnnotation::FacetsAnnotation ( const FacetsAnnotation rhs)
explicitprivatedefault

◆ FacetsAnnotation() [4/4]

Slic3r::FacetsAnnotation::FacetsAnnotation ( FacetsAnnotation &&  rhs)
explicitprivatedefault

Member Function Documentation

◆ assign() [1/2]

void Slic3r::FacetsAnnotation::assign ( const FacetsAnnotation rhs)
inline
697{ if (! this->timestamp_matches(rhs)) { m_data = rhs.m_data; this->copy_timestamp(rhs); } }
std::pair< std::vector< std::pair< int, int > >, std::vector< bool > > m_data
Definition Model.hpp:744
bool timestamp_matches(const ObjectWithTimestamp &rhs) const
Definition ObjectID.hpp:120
void copy_timestamp(const ObjectWithTimestamp &rhs)
Definition ObjectID.hpp:112

References Slic3r::ObjectWithTimestamp::copy_timestamp(), m_data, and Slic3r::ObjectWithTimestamp::timestamp_matches().

Referenced by Slic3r::ModelObject::convert_units(), Slic3r::model_volume_list_copy_configs(), and Slic3r::GUI::Plater::priv::replace_volume_with_stl().

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

◆ assign() [2/2]

void Slic3r::FacetsAnnotation::assign ( FacetsAnnotation &&  rhs)
inline
698{ if (! this->timestamp_matches(rhs)) { m_data = std::move(rhs.m_data); this->copy_timestamp(rhs); } }

References Slic3r::ObjectWithTimestamp::copy_timestamp(), m_data, and Slic3r::ObjectWithTimestamp::timestamp_matches().

+ Here is the call graph for this function:

◆ assign_new_unique_ids_recursive()

virtual void Slic3r::ObjectBase::assign_new_unique_ids_recursive ( )
inlineprotectedvirtualinherited

Reimplemented in Slic3r::Model, Slic3r::ModelObject, and Slic3r::ModelVolume.

79{ this->set_new_unique_id(); }
void set_new_unique_id()
Definition ObjectID.hpp:73

References Slic3r::ObjectBase::set_new_unique_id().

+ Here is the call graph for this function:

◆ copy_id()

void Slic3r::ObjectBase::copy_id ( const ObjectBase rhs)
inlineprotectedinherited
76{ m_id = rhs.id(); }
ObjectID m_id
Definition ObjectID.hpp:82
size_t id
Definition ObjectID.hpp:37

References Slic3r::ObjectBase::id(), and Slic3r::ObjectBase::m_id.

Referenced by Slic3r::CutObjectBase::copy().

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

◆ copy_timestamp()

void Slic3r::ObjectWithTimestamp::copy_timestamp ( const ObjectWithTimestamp rhs)
inlineprotectedinherited
112{ m_timestamp = rhs.m_timestamp; }
Timestamp m_timestamp
Definition ObjectID.hpp:126

References Slic3r::ObjectWithTimestamp::m_timestamp.

Referenced by assign(), Slic3r::LayerHeightProfile::assign(), assign(), and Slic3r::LayerHeightProfile::assign().

+ Here is the caller graph for this function:

◆ empty()

bool Slic3r::FacetsAnnotation::empty ( ) const
inline
704{ return m_data.first.empty(); }

References m_data.

Referenced by Slic3r::ModelVolume::ModelVolume(), Slic3r::ModelVolume::is_fdm_support_painted(), Slic3r::ModelVolume::is_mm_painted(), and Slic3r::ModelVolume::is_seam_painted().

+ Here is the caller graph for this function:

◆ generate_new_id()

static ObjectID Slic3r::ObjectBase::generate_new_id ( )
inlinestaticprivateinherited
84{ return ObjectID(++ s_last_id); }
static size_t s_last_id
Definition ObjectID.hpp:85

References Slic3r::ObjectBase::s_last_id.

Referenced by Slic3r::ObjectBase::set_new_unique_id().

+ Here is the caller graph for this function:

◆ get_data()

const std::pair< std::vector< std::pair< int, int > >, std::vector< bool > > & Slic3r::FacetsAnnotation::get_data ( ) const
throw (
)
inline
699{ return m_data; }

References m_data.

◆ get_facets()

indexed_triangle_set Slic3r::FacetsAnnotation::get_facets ( const ModelVolume mv,
EnforcerBlockerType  type 
) const
2378{
2379 TriangleSelector selector(mv.mesh());
2380 // Reset of TriangleSelector is done inside TriangleSelector's constructor, so we don't need it to perform it again in deserialize().
2381 selector.deserialize(m_data, false);
2382 return selector.get_facets(type);
2383}

References Slic3r::TriangleSelector::deserialize(), Slic3r::TriangleSelector::get_facets(), and Slic3r::ModelVolume::mesh().

+ Here is the call graph for this function:

◆ get_facets_strict()

indexed_triangle_set Slic3r::FacetsAnnotation::get_facets_strict ( const ModelVolume mv,
EnforcerBlockerType  type 
) const
2386{
2387 TriangleSelector selector(mv.mesh());
2388 // Reset of TriangleSelector is done inside TriangleSelector's constructor, so we don't need it to perform it again in deserialize().
2389 selector.deserialize(m_data, false);
2390 return selector.get_facets_strict(type);
2391}

References Slic3r::TriangleSelector::deserialize(), Slic3r::TriangleSelector::get_facets_strict(), and Slic3r::ModelVolume::mesh().

+ Here is the call graph for this function:

◆ get_triangle_as_string()

std::string Slic3r::FacetsAnnotation::get_triangle_as_string ( int  i) const
2420{
2421 std::string out;
2422
2423 auto triangle_it = std::lower_bound(m_data.first.begin(), m_data.first.end(), triangle_idx, [](const std::pair<int, int> &l, const int r) { return l.first < r; });
2424 if (triangle_it != m_data.first.end() && triangle_it->first == triangle_idx) {
2425 int offset = triangle_it->second;
2426 int end = ++ triangle_it == m_data.first.end() ? int(m_data.second.size()) : triangle_it->second;
2427 while (offset < end) {
2428 int next_code = 0;
2429 for (int i=3; i>=0; --i) {
2430 next_code = next_code << 1;
2431 next_code |= int(m_data.second[offset + i]);
2432 }
2433 offset += 4;
2434
2435 assert(next_code >=0 && next_code <= 15);
2436 char digit = next_code < 10 ? next_code + '0' : (next_code-10)+'A';
2437 out.insert(out.begin(), digit);
2438 }
2439 }
2440 return out;
2441}
Slic3r::Polygons offset(const Slic3r::Polygon &polygon, const float delta, ClipperLib::JoinType joinType, double miterLimit)
Definition ClipperUtils.cpp:416
S::iterator end(S &sh, const PathTag &)
Definition geometry_traits.hpp:620

◆ has_facets()

bool Slic3r::FacetsAnnotation::has_facets ( const ModelVolume mv,
EnforcerBlockerType  type 
) const
2394{
2396}
bool has_facets(EnforcerBlockerType state) const
Definition TriangleSelector.cpp:1317

◆ id()

ObjectID Slic3r::ObjectBase::id ( ) const
inlineinherited
55{ return m_id; }

References Slic3r::ObjectBase::m_id.

Referenced by Slic3r::Model::Model(), Slic3r::ModelInstance::ModelInstance(), Slic3r::ModelMaterial::ModelMaterial(), Slic3r::ModelObject::ModelObject(), Slic3r::ModelObject::ModelObject(), Slic3r::ModelObject::ModelObject(), Slic3r::ModelObject::ModelObject(), Slic3r::ModelObject::ModelObject(), Slic3r::ModelVolume::ModelVolume(), Slic3r::ModelVolume::ModelVolume(), Slic3r::ModelVolume::ModelVolume(), Slic3r::_3MF_Importer::_load_model_from_file(), Slic3r::GUI::Plater::priv::actualize_slicing_warnings(), Slic3r::ModelObjectStatusDB::add(), Slic3r::ModelObjectStatusDB::add_if_new(), Slic3r::Print::apply(), Slic3r::SLAPrint::apply(), Slic3r::GUI::GLGizmoFdmSupports::apply_data_from_backend(), Slic3r::ModelVolume::check(), Slic3r::check_model_ids_equal(), Slic3r::ModelObject::convert_units(), Slic3r::ObjectBase::copy_id(), Slic3r::PrintObjectStatusDB::count(), anonymous_namespace{RaycastManager.cpp}::create_key(), priv::create_volume(), Slic3r::GUI::Emboss::create_volume_sources(), Slic3r::GUI::GLGizmoHollow::data_changed(), Slic3r::GUI::GLGizmoPainterBase::data_changed(), Slic3r::GUI::GLGizmoSlaSupports::data_changed(), Slic3r::Model::delete_object(), Slic3r::GUI::Plater::export_stl_obj(), Slic3r::ModelObjectStatusDB::get(), Slic3r::GUI::get_arrange_poly(), Slic3r::GUI::GLGizmoSlaSupports::get_data_from_backend(), Slic3r::PrintObjectStatusDB::get_range(), Slic3r::GUI::GLGizmoFdmSupports::has_backend_supports(), Slic3r::GUI::GLGizmoSlaSupports::has_backend_supports(), Slic3r::CutObjectBase::has_same_id(), Slic3r::UndoRedo::StackImpl::immutable_object_id_impl(), Slic3r::GUI::GLGizmoSimplify::init_model(), Slic3r::inner_brim_area(), Slic3r::ModelObject::is_cut(), Slic3r::CutObjectBase::is_equal(), Slic3r::ObjectBase::load_and_construct(), Slic3r::UndoRedo::StackImpl::load_snapshot(), Slic3r::GUI::ObjectList::merge(), Slic3r::model_property_changed(), Slic3r::model_volume_list_changed(), Slic3r::model_volume_list_copy_configs(), Slic3r::ModelConfigObject::object_id_and_timestamp_match(), Slic3r::ObjectWithTimestamp::object_id_and_timestamp_match(), Slic3r::GUI::GLGizmoEmboss::on_mouse_change_selection(), Slic3r::GUI::CommonGizmosDataObjects::SelectionInfo::on_update(), Slic3r::CutObjectBase::operator<(), Slic3r::Model::operator=(), Slic3r::ModelObject::operator=(), Slic3r::ModelObject::operator=(), Slic3r::CutObjectBase::operator==(), Slic3r::GUI::GLGizmoCut3D::perform_cut(), Slic3r::GUI::GLGizmoEmboss::process(), Slic3r::GUI::processed_objects_idxs(), Slic3r::GUI::GLCanvas3D::reload_scene(), Slic3r::GUI::GLCanvas3D::LayersEditing::select_object(), Slic3r::ModelMaterial::serialize(), Slic3r::SLAPrintObject::SliceRecord::set_model_slice_idx(), Slic3r::SLAPrintObject::SliceRecord::set_support_slice_idx(), Slic3r::slices_to_regions(), Slic3r::ModelObject::split(), Slic3r::UndoRedo::StackImpl::take_snapshot(), Slic3r::top_level_outer_brim_area(), Slic3r::GUI::update_object_cut_id(), and anonymous_namespace{EmbossJob.cpp}::update_volume_name().

◆ load_and_construct()

template<class Archive >
static void Slic3r::ObjectBase::load_and_construct ( Archive &  ar,
cereal::construct< ObjectBase > &  construct 
)
inlinestaticprivateinherited
96{ ObjectID id; ar(id); construct(id); }
ObjectID id() const
Definition ObjectID.hpp:55

References Slic3r::ObjectBase::id().

+ Here is the call graph for this function:

◆ object_id_and_timestamp_match()

bool Slic3r::ObjectWithTimestamp::object_id_and_timestamp_match ( const ObjectWithTimestamp rhs) const
throw (
)
inlineinherited
121{ return this->id() == rhs.id() && m_timestamp == rhs.m_timestamp; }

References Slic3r::ObjectID::id, Slic3r::ObjectBase::id(), and Slic3r::ObjectWithTimestamp::m_timestamp.

+ Here is the call graph for this function:

◆ operator=() [1/2]

FacetsAnnotation & Slic3r::FacetsAnnotation::operator= ( const FacetsAnnotation rhs)
privatedefault

◆ operator=() [2/2]

FacetsAnnotation & Slic3r::FacetsAnnotation::operator= ( FacetsAnnotation &&  rhs)
privatedefault

◆ reserve()

void Slic3r::FacetsAnnotation::reserve ( int  n_triangles)
inline
714{ m_data.first.reserve(n_triangles); }

References m_data.

◆ reset()

void Slic3r::FacetsAnnotation::reset ( )
2410{
2411 m_data.first.clear();
2412 m_data.second.clear();
2413 this->touch();
2414}
void touch()
Definition ObjectID.hpp:122

◆ serialize()

template<class Archive >
void Slic3r::FacetsAnnotation::serialize ( Archive &  ar)
inlineprivate
740 {
741 ar(cereal::base_class<ObjectWithTimestamp>(this), m_data);
742 }

References m_data.

◆ set()

bool Slic3r::FacetsAnnotation::set ( const TriangleSelector selector)
2399{
2400 std::pair<std::vector<std::pair<int, int>>, std::vector<bool>> sel_map = selector.serialize();
2401 if (sel_map != m_data) {
2402 m_data = std::move(sel_map);
2403 this->touch();
2404 return true;
2405 }
2406 return false;
2407}

References Slic3r::TriangleSelector::serialize().

+ Here is the call graph for this function:

◆ set_invalid_id()

void Slic3r::ObjectBase::set_invalid_id ( )
inlineprotectedinherited
74{ m_id = 0; }

References Slic3r::ObjectBase::m_id.

Referenced by Slic3r::CutObjectBase::invalidate().

+ Here is the caller graph for this function:

◆ set_new_unique_id()

void Slic3r::ObjectBase::set_new_unique_id ( )
inlineprotectedinherited
73{ m_id = generate_new_id(); }
static ObjectID generate_new_id()
Definition ObjectID.hpp:84

References Slic3r::ObjectBase::generate_new_id(), and Slic3r::ObjectBase::m_id.

Referenced by Slic3r::ModelVolume::ModelVolume(), Slic3r::Model::assign_new_unique_ids_recursive(), Slic3r::ObjectBase::assign_new_unique_ids_recursive(), Slic3r::ModelObject::assign_new_unique_ids_recursive(), Slic3r::CutObjectBase::init(), Slic3r::ModelMaterial::set_new_unique_id(), Slic3r::ModelObject::set_new_unique_id(), and Slic3r::ModelVolume::set_new_unique_id().

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

◆ set_triangle_from_string()

void Slic3r::FacetsAnnotation::set_triangle_from_string ( int  triangle_id,
const std::string &  str 
)
2446{
2447 assert(! str.empty());
2448 assert(m_data.first.empty() || m_data.first.back().first < triangle_id);
2449 m_data.first.emplace_back(triangle_id, int(m_data.second.size()));
2450
2451 for (auto it = str.crbegin(); it != str.crend(); ++it) {
2452 const char ch = *it;
2453 int dec = 0;
2454 if (ch >= '0' && ch<='9')
2455 dec = int(ch - '0');
2456 else if (ch >='A' && ch <= 'F')
2457 dec = 10 + int(ch - 'A');
2458 else
2459 assert(false);
2460
2461 // Convert to binary and append into code.
2462 for (int i=0; i<4; ++i)
2463 m_data.second.insert(m_data.second.end(), bool(dec & (1 << i)));
2464 }
2465}

◆ shrink_to_fit()

void Slic3r::FacetsAnnotation::shrink_to_fit ( )
inline
718{ m_data.first.shrink_to_fit(); m_data.second.shrink_to_fit(); }

References m_data.

◆ timestamp()

Timestamp Slic3r::ObjectWithTimestamp::timestamp ( ) const
throw (
)
inlineoverridevirtualinherited

Reimplemented from Slic3r::ObjectBase.

119{ return m_timestamp; }

References Slic3r::ObjectWithTimestamp::m_timestamp.

◆ timestamp_matches()

bool Slic3r::ObjectWithTimestamp::timestamp_matches ( const ObjectWithTimestamp rhs) const
throw (
)
inlineinherited
120{ return m_timestamp == rhs.m_timestamp; }

References Slic3r::ObjectWithTimestamp::m_timestamp.

Referenced by Slic3r::Print::apply(), assign(), Slic3r::LayerHeightProfile::assign(), assign(), Slic3r::LayerHeightProfile::assign(), Slic3r::model_custom_seam_data_changed(), Slic3r::model_custom_supports_data_changed(), and Slic3r::model_mmu_segmentation_data_changed().

+ Here is the caller graph for this function:

◆ touch()

void Slic3r::ObjectWithTimestamp::touch ( )
inlineinherited
static Timestamp s_last_timestamp
Definition ObjectID.hpp:127

References Slic3r::ObjectWithTimestamp::m_timestamp, and Slic3r::ObjectWithTimestamp::s_last_timestamp.

Referenced by Slic3r::LayerHeightProfile::clear(), Slic3r::LayerHeightProfile::set(), and Slic3r::LayerHeightProfile::set().

+ Here is the caller graph for this function:

Friends And Related Symbol Documentation

◆ cereal::access

friend class cereal::access
friend

◆ ModelVolume

friend class ModelVolume
friend

◆ UndoRedo::StackImpl

friend class UndoRedo::StackImpl
friend

Member Data Documentation

◆ m_data

std::pair<std::vector<std::pair<int, int> >, std::vector<bool> > Slic3r::FacetsAnnotation::m_data
private

◆ m_id

◆ m_timestamp

◆ s_last_id

size_t Slic3r::ObjectBase::s_last_id = 0
staticprivateinherited

◆ s_last_timestamp

ObjectWithTimestamp::Timestamp Slic3r::ObjectWithTimestamp::s_last_timestamp = 1
staticprivateinherited

The documentation for this class was generated from the following files: