OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GUI::CommonGizmosDataObjects::InstancesHider Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp>

Inheritance diagram for Slic3r::GUI::CommonGizmosDataObjects::InstancesHider:
Collaboration diagram for Slic3r::GUI::CommonGizmosDataObjects::InstancesHider:

Public Member Functions

 InstancesHider (CommonGizmosDataPool *cgdp)
CommonGizmosDataID get_dependencies () const override
void render_cut () const
void update ()
void release ()
bool is_valid () const

Protected Member Functions

void on_update () override
void on_release () override
CommonGizmosDataPool * get_pool () const

Private Attributes

std::vector< const TriangleMesh * > m_old_meshes
std::vector< std::unique_ptr< MeshClipper > > m_clippers
bool m_is_valid = false
CommonGizmosDataPool * m_common = nullptr

Detailed Description

Constructor & Destructor Documentation

◆ InstancesHider()

Slic3r::GUI::CommonGizmosDataObjects::InstancesHider::InstancesHider ( CommonGizmosDataPool * cgdp)
inlineexplicit
187 : CommonGizmosDataBase(cgdp) {}
CommonGizmosDataBase(CommonGizmosDataPool *cgdp)
Definition GLGizmosCommon.hpp:124

References Slic3r::GUI::CommonGizmosDataBase::CommonGizmosDataBase().

Here is the call graph for this function:

Member Function Documentation

◆ get_dependencies()

CommonGizmosDataID Slic3r::GUI::CommonGizmosDataObjects::InstancesHider::get_dependencies ( ) const
inlineoverridevirtual

Reimplemented from Slic3r::GUI::CommonGizmosDataBase.

@ SelectionInfo
Definition GLGizmosCommon.hpp:74

References Slic3r::GUI::SelectionInfo.

◆ get_pool()

◆ is_valid()

bool Slic3r::GUI::CommonGizmosDataBase::is_valid ( ) const
inlineinherited
135{ return m_is_valid; }
bool m_is_valid
Definition GLGizmosCommon.hpp:150

References m_is_valid.

Referenced by Slic3r::GUI::CommonGizmosDataPool::instances_hider(), Slic3r::GUI::CommonGizmosDataPool::object_clipper(), Slic3r::GUI::CommonGizmosDataPool::raycaster(), Slic3r::GUI::CommonGizmosDataObjects::InstancesHider::render_cut(), and Slic3r::GUI::CommonGizmosDataPool::selection_info().

Here is the caller graph for this function:

◆ on_release()

void Slic3r::GUI::InstancesHider::on_release ( )
overrideprotectedvirtual

Implements Slic3r::GUI::CommonGizmosDataBase.

188{
191 m_old_meshes.clear();
192 m_clippers.clear();
193}
CommonGizmosDataPool * get_pool() const
Definition GLGizmosCommon.hpp:147
std::vector< std::unique_ptr< MeshClipper > > m_clippers
Definition GLGizmosCommon.hpp:200
std::vector< const TriangleMesh * > m_old_meshes
Definition GLGizmosCommon.hpp:199
GLCanvas3D * get_canvas() const
Definition GLGizmosCommon.hpp:103
void set_use_clipping_planes(bool use)
Definition GLCanvas3D.hpp:1051
void toggle_model_objects_visibility(bool visible, const ModelObject *mo=nullptr, int instance_idx=-1, const ModelVolume *mv=nullptr)
Definition GLCanvas3D.cpp:2087

References Slic3r::GUI::CommonGizmosDataPool::get_canvas(), Slic3r::GUI::CommonGizmosDataBase::get_pool(), m_clippers, m_old_meshes, Slic3r::GUI::GLCanvas3D::set_use_clipping_planes(), and Slic3r::GUI::GLCanvas3D::toggle_model_objects_visibility().

Here is the call graph for this function:

◆ on_update()

void Slic3r::GUI::InstancesHider::on_update ( )
overrideprotectedvirtual

Implements Slic3r::GUI::CommonGizmosDataBase.

146{
147 const ModelObject* mo = get_pool()->selection_info()->model_object();
148 int active_inst = get_pool()->selection_info()->get_active_instance();
149 GLCanvas3D* canvas = get_pool()->get_canvas();
150 double z_min;
151 if (canvas->get_canvas_type() == GLCanvas3D::CanvasAssembleView)
152 z_min = std::numeric_limits<double>::max();
153 else
154 z_min = -SINKING_Z_THRESHOLD;
155
156 if (mo && active_inst != -1) {
157 canvas->toggle_model_objects_visibility(false);
158 canvas->toggle_model_objects_visibility(true, mo, active_inst);
159 canvas->toggle_sla_auxiliaries_visibility(false, mo, active_inst);
160 canvas->set_use_clipping_planes(true);
161 // Some objects may be sinking, do not show whatever is below the bed.
162 canvas->set_clipping_plane(0, ClippingPlane(Vec3d::UnitZ(), z_min));
163 canvas->set_clipping_plane(1, ClippingPlane(-Vec3d::UnitZ(), std::numeric_limits<double>::max()));
164
165
166 std::vector<const TriangleMesh*> meshes;
167 for (const ModelVolume* mv : mo->volumes)
168 meshes.push_back(&mv->mesh());
169
170 if (meshes != m_old_meshes) {
171 m_clippers.clear();
172 for (const TriangleMesh* mesh : meshes) {
173 m_clippers.emplace_back(new MeshClipper);
174 m_clippers.back()->set_plane(ClippingPlane(-Vec3d::UnitZ(), z_min));
175 m_clippers.back()->set_mesh(mesh->its);
176 // Outline only: a filled cap would read as a surface the object does not have, and it
177 // covers the model below it. 0.4 mm matches the cut gizmo's contour width.
178 m_clippers.back()->set_behaviour(false, 0.4);
179 }
180 m_old_meshes = meshes;
181 }
182 }
183 else
184 canvas->toggle_model_objects_visibility(true);
185}
ModelObject * model_object() const
Definition GLGizmosCommon.hpp:167
int get_active_instance() const
Definition GLGizmosCommon.cpp:136
CommonGizmosDataObjects::SelectionInfo * selection_info() const
Definition GLGizmosCommon.cpp:57
@ CanvasAssembleView
Definition GLCanvas3D.hpp:628
static const float SINKING_Z_THRESHOLD
Definition Model.hpp:1967

References Slic3r::GUI::GLCanvas3D::CanvasAssembleView, Slic3r::GUI::CommonGizmosDataObjects::SelectionInfo::get_active_instance(), Slic3r::GUI::CommonGizmosDataPool::get_canvas(), Slic3r::GUI::GLCanvas3D::get_canvas_type(), Slic3r::GUI::CommonGizmosDataBase::get_pool(), m_clippers, m_old_meshes, Slic3r::ModelVolume::mesh(), Slic3r::GUI::CommonGizmosDataObjects::SelectionInfo::model_object(), Slic3r::GUI::CommonGizmosDataPool::selection_info(), Slic3r::GUI::GLCanvas3D::set_clipping_plane(), Slic3r::GUI::GLCanvas3D::set_use_clipping_planes(), Slic3r::SINKING_Z_THRESHOLD, Slic3r::GUI::GLCanvas3D::toggle_model_objects_visibility(), Slic3r::GUI::GLCanvas3D::toggle_sla_auxiliaries_visibility(), and Slic3r::ModelObject::volumes.

Here is the call graph for this function:

◆ release()

void Slic3r::GUI::CommonGizmosDataBase::release ( )
inlineinherited
132{ on_release(); m_is_valid = false; }

References m_is_valid, and on_release().

Here is the call graph for this function:

◆ render_cut()

void Slic3r::GUI::InstancesHider::render_cut ( ) const
196{
197 const SelectionInfo* sel_info = get_pool()->selection_info();
198 const ModelObject* mo = sel_info->model_object();
199 Geometry::Transformation inst_trafo = mo->instances[sel_info->get_active_instance()]->get_transformation();
200
201 size_t clipper_id = 0;
202 for (const ModelVolume* mv : mo->volumes) {
203 Geometry::Transformation vol_trafo = mv->get_transformation();
204 Geometry::Transformation trafo = inst_trafo * vol_trafo;
205 trafo.set_offset(trafo.get_offset() + Vec3d(0., 0., sel_info->get_sla_shift()));
206
207 auto& clipper = m_clippers[clipper_id];
208 clipper->set_transformation(trafo);
209 const ObjectClipper* obj_clipper = get_pool()->object_clipper();
210 if (obj_clipper->is_valid() && obj_clipper->get_clipping_plane()
211 && obj_clipper->get_position() != 0.) {
212 ClippingPlane clp = *get_pool()->object_clipper()->get_clipping_plane();
213 clp.set_normal(-clp.get_normal());
214 clipper->set_limiting_plane(clp);
215 }
216 else
217 clipper->set_limiting_plane(ClippingPlane::ClipsNothing());
218
219 clipper->render_contour(mv->is_model_part() ? ColorRGBA(0.8f, 0.3f, 0.0f, 1.0f) : color_from_model_volume(*mv));
220
221 ++clipper_id;
222 }
223}
static ClippingPlane ClipsNothing()
Definition MeshUtils.hpp:73
void set_normal(const Vec3d &normal)
Definition MeshUtils.hpp:61
const ClippingPlane * get_clipping_plane(bool ignore_hide_clipped=false) const
Definition GLGizmosCommon.cpp:426
CommonGizmosDataObjects::ObjectClipper * object_clipper() const
Definition GLGizmosCommon.cpp:83
ModelInstancePtrs instances
Definition Model.hpp:390
@ ObjectClipper
Definition GLGizmosCommon.hpp:77
Eigen::Matrix< double, 3, 1, Eigen::DontAlign > Vec3d
Definition Point.hpp:68
ColorRGBA color_from_model_volume(const ModelVolume &model_volume)
Definition 3DScene.cpp:407

References Slic3r::GUI::ClippingPlane::ClipsNothing(), Slic3r::color_from_model_volume(), Slic3r::GUI::CommonGizmosDataObjects::SelectionInfo::get_active_instance(), Slic3r::GUI::CommonGizmosDataObjects::ObjectClipper::get_clipping_plane(), Slic3r::GUI::ClippingPlane::get_normal(), Slic3r::Geometry::Transformation::get_offset(), Slic3r::GUI::CommonGizmosDataBase::get_pool(), Slic3r::GUI::CommonGizmosDataObjects::ObjectClipper::get_position(), Slic3r::GUI::CommonGizmosDataObjects::SelectionInfo::get_sla_shift(), Slic3r::ModelVolume::get_transformation(), Slic3r::ModelObject::instances, Slic3r::ModelVolume::is_model_part(), Slic3r::GUI::CommonGizmosDataBase::is_valid(), m_clippers, Slic3r::GUI::CommonGizmosDataObjects::SelectionInfo::model_object(), Slic3r::GUI::CommonGizmosDataPool::object_clipper(), Slic3r::GUI::CommonGizmosDataPool::selection_info(), Slic3r::GUI::ClippingPlane::set_normal(), Slic3r::Geometry::Transformation::set_offset(), and Slic3r::ModelObject::volumes.

Here is the call graph for this function:

◆ update()

void Slic3r::GUI::CommonGizmosDataBase::update ( )
inlineinherited
129{ on_update(); m_is_valid = true; }

References m_is_valid, and on_update().

Here is the call graph for this function:

Member Data Documentation

◆ m_clippers

std::vector<std::unique_ptr<MeshClipper> > Slic3r::GUI::CommonGizmosDataObjects::InstancesHider::m_clippers
private

Referenced by on_release(), on_update(), and render_cut().

◆ m_common

CommonGizmosDataPool* Slic3r::GUI::CommonGizmosDataBase::m_common = nullptr
privateinherited

Referenced by CommonGizmosDataBase(), and get_pool().

◆ m_is_valid

bool Slic3r::GUI::CommonGizmosDataBase::m_is_valid = false
privateinherited

Referenced by is_valid(), release(), and update().

◆ m_old_meshes

std::vector<const TriangleMesh*> Slic3r::GUI::CommonGizmosDataObjects::InstancesHider::m_old_meshes
private

Referenced by on_release(), and on_update().


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