mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-17 02:22:17 +00:00
ENH: buildvolume: add logic to support extruder_printable_height
jira: no-jira Change-Id: I962c4aed8c536c0fd8b89ae090cd0463c5d645db (cherry picked from commit 43773d77010492453473797e77e83e9a4630c25f)
This commit is contained in:
@@ -2121,7 +2121,7 @@ bool PartPlate::check_outside(int obj_id, int instance_id, BoundingBoxf3* boundi
|
||||
// Orca: For sinking object, we use a more expensive algorithm so part below build plate won't be considered
|
||||
if (plate_box.intersects(instance_box)) {
|
||||
// TODO: FIXME: this does not take exclusion area into account
|
||||
const BuildVolume build_volume(get_shape(), m_plater->build_volume().printable_height(), m_extruder_areas);
|
||||
const BuildVolume build_volume(get_shape(), m_plater->build_volume().printable_height(), m_extruder_areas, m_extruder_heights);
|
||||
const auto state = instance->calc_print_volume_state(build_volume);
|
||||
outside = state == ModelInstancePVS_Partly_Outside;
|
||||
}
|
||||
@@ -2668,9 +2668,10 @@ void PartPlate::generate_exclude_polygon(ExPolygon &exclude_polygon)
|
||||
exclude_polygon.contour.make_counter_clockwise();
|
||||
}
|
||||
|
||||
bool PartPlate::set_shape(const Pointfs& shape, const Pointfs& exclude_areas, const std::vector<Pointfs>& extruder_areas, Vec2d position, float height_to_lid, float height_to_rod)
|
||||
bool PartPlate::set_shape(const Pointfs& shape, const Pointfs& exclude_areas, const std::vector<Pointfs>& extruder_areas, const std::vector<double>& extruder_heights, Vec2d position, float height_to_lid, float height_to_rod)
|
||||
{
|
||||
Pointfs new_shape, new_exclude_areas;
|
||||
m_extruder_heights = extruder_heights;
|
||||
for (const Vec2d& p : shape) {
|
||||
new_shape.push_back(Vec2d(p.x() + position.x(), p.y() + position.y()));
|
||||
}
|
||||
@@ -3675,7 +3676,7 @@ void PartPlateList::reset_size(int width, int depth, int height, bool reload_obj
|
||||
m_plate_height = height;
|
||||
update_all_plates_pos_and_size(false, false, true);
|
||||
if (update_shapes) {
|
||||
set_shapes(m_shape, m_exclude_areas, m_extruder_areas, m_logo_texture_filename, m_height_to_lid, m_height_to_rod);
|
||||
set_shapes(m_shape, m_exclude_areas, m_extruder_areas, m_extruder_heights, m_logo_texture_filename, m_height_to_lid, m_height_to_rod);
|
||||
}
|
||||
if (reload_objects)
|
||||
reload_all_objects();
|
||||
@@ -3760,7 +3761,7 @@ void PartPlateList::reinit()
|
||||
|
||||
//reset plate 0's position
|
||||
Vec2d pos = compute_shape_position(0, m_plate_cols);
|
||||
m_plate_list[0]->set_shape(m_shape, m_exclude_areas, m_extruder_areas, pos, m_height_to_lid, m_height_to_rod);
|
||||
m_plate_list[0]->set_shape(m_shape, m_exclude_areas, m_extruder_areas, m_extruder_heights, pos, m_height_to_lid, m_height_to_rod);
|
||||
//reset unprintable plate's position
|
||||
Vec3d origin2 = compute_origin_for_unprintable();
|
||||
unprintable_plate.set_pos_and_size(origin2, m_plate_width, m_plate_depth, m_plate_height, false);
|
||||
@@ -3777,7 +3778,7 @@ void PartPlateList::reinit()
|
||||
void PartPlateList::update_plates()
|
||||
{
|
||||
update_all_plates_pos_and_size(true, false);
|
||||
set_shapes(m_shape, m_exclude_areas, m_extruder_areas, m_logo_texture_filename, m_height_to_lid, m_height_to_rod);
|
||||
set_shapes(m_shape, m_exclude_areas, m_extruder_areas, m_extruder_heights, m_logo_texture_filename, m_height_to_lid, m_height_to_rod);
|
||||
}
|
||||
|
||||
int PartPlateList::create_plate(bool adjust_position)
|
||||
@@ -3810,7 +3811,7 @@ int PartPlateList::create_plate(bool adjust_position)
|
||||
|
||||
plate->set_index(new_index);
|
||||
Vec2d pos = compute_shape_position(new_index, cols);
|
||||
plate->set_shape(m_shape, m_exclude_areas, m_extruder_areas, pos, m_height_to_lid, m_height_to_rod);
|
||||
plate->set_shape(m_shape, m_exclude_areas, m_extruder_areas, m_extruder_heights, pos, m_height_to_lid, m_height_to_rod);
|
||||
m_plate_list.emplace_back(plate);
|
||||
update_plate_cols();
|
||||
if (old_cols != cols)
|
||||
@@ -3818,7 +3819,7 @@ int PartPlateList::create_plate(bool adjust_position)
|
||||
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(":old_cols %1% -> new_cols %2%") % old_cols % cols;
|
||||
//update the origin of each plate
|
||||
update_all_plates_pos_and_size(adjust_position, false);
|
||||
set_shapes(m_shape, m_exclude_areas, m_extruder_areas, m_logo_texture_filename, m_height_to_lid, m_height_to_rod);
|
||||
set_shapes(m_shape, m_exclude_areas, m_extruder_areas, m_extruder_heights, m_logo_texture_filename, m_height_to_lid, m_height_to_rod);
|
||||
|
||||
if (m_plater) {
|
||||
Vec2d pos = compute_shape_position(m_current_plate, cols);
|
||||
@@ -3989,7 +3990,7 @@ int PartPlateList::delete_plate(int index)
|
||||
|
||||
//update render shapes
|
||||
Vec2d pos = compute_shape_position(i, m_plate_cols);
|
||||
plate->set_shape(m_shape, m_exclude_areas, m_extruder_areas, pos, m_height_to_lid, m_height_to_rod);
|
||||
plate->set_shape(m_shape, m_exclude_areas, m_extruder_areas, m_extruder_heights, pos, m_height_to_lid, m_height_to_rod);
|
||||
}
|
||||
|
||||
//update current_plate if delete current
|
||||
@@ -4012,7 +4013,7 @@ int PartPlateList::delete_plate(int index)
|
||||
{
|
||||
//update the origin of each plate
|
||||
update_all_plates_pos_and_size();
|
||||
set_shapes(m_shape, m_exclude_areas, m_extruder_areas, m_logo_texture_filename, m_height_to_lid, m_height_to_rod);
|
||||
set_shapes(m_shape, m_exclude_areas, m_extruder_areas, m_extruder_heights, m_logo_texture_filename, m_height_to_lid, m_height_to_rod);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -5109,12 +5110,13 @@ void PartPlateList::select_plate_view()
|
||||
m_plater->get_camera().select_view("topfront");
|
||||
}
|
||||
|
||||
bool PartPlateList::set_shapes(const Pointfs& shape, const Pointfs& exclude_areas, const std::vector<Pointfs>& extruder_areas, const std::string& texture_filename, float height_to_lid, float height_to_rod)
|
||||
bool PartPlateList::set_shapes(const Pointfs& shape, const Pointfs& exclude_areas, const std::vector<Pointfs>& extruder_areas, const std::vector<double>& extruder_heights, const std::string& texture_filename, float height_to_lid, float height_to_rod)
|
||||
{
|
||||
const std::lock_guard<std::mutex> local_lock(m_plates_mutex);
|
||||
m_shape = shape;
|
||||
m_exclude_areas = exclude_areas;
|
||||
m_extruder_areas = extruder_areas;
|
||||
m_extruder_heights = extruder_heights;
|
||||
m_height_to_lid = height_to_lid;
|
||||
m_height_to_rod = height_to_rod;
|
||||
|
||||
@@ -5128,7 +5130,7 @@ bool PartPlateList::set_shapes(const Pointfs& shape, const Pointfs& exclude_area
|
||||
Vec2d pos;
|
||||
|
||||
pos = compute_shape_position(i, m_plate_cols);
|
||||
plate->set_shape(shape, exclude_areas, extruder_areas, pos, height_to_lid, height_to_rod);
|
||||
plate->set_shape(shape, exclude_areas, extruder_areas, extruder_heights, pos, height_to_lid, height_to_rod);
|
||||
}
|
||||
is_load_bedtype_textures = false; //reload textures
|
||||
is_load_extruder_only_area_textures = false; // reload textures
|
||||
@@ -5308,7 +5310,7 @@ int PartPlateList::rebuild_plates_after_deserialize(std::vector<bool>& previous_
|
||||
}
|
||||
update_plate_cols();
|
||||
update_all_plates_pos_and_size(false, false, false, false);
|
||||
set_shapes(m_shape, m_exclude_areas, m_extruder_areas, m_logo_texture_filename, m_height_to_lid, m_height_to_rod);
|
||||
set_shapes(m_shape, m_exclude_areas, m_extruder_areas, m_extruder_heights, m_logo_texture_filename, m_height_to_lid, m_height_to_rod);
|
||||
for (unsigned int i = 0; i < (unsigned int)m_plate_list.size(); ++i)
|
||||
{
|
||||
bool need_reset_print = false;
|
||||
@@ -5643,7 +5645,7 @@ int PartPlateList::load_gcode_files()
|
||||
//BoundingBoxf3 print_volume = m_plate_list[i]->get_bounding_box(false);
|
||||
//print_volume.max(2) = this->m_plate_height;
|
||||
//print_volume.min(2) = -1e10;
|
||||
m_model->update_print_volume_state({m_plate_list[i]->get_shape(), (double)this->m_plate_height, m_plate_list[i]->get_extruder_areas() });
|
||||
m_model->update_print_volume_state({m_plate_list[i]->get_shape(), (double)this->m_plate_height, m_plate_list[i]->get_extruder_areas(), m_plate_list[i]->get_extruder_heights() });
|
||||
|
||||
if (!m_plate_list[i]->load_gcode_from_file(m_plate_list[i]->m_gcode_path_from_3mf))
|
||||
ret ++;
|
||||
|
||||
Reference in New Issue
Block a user