FIX: potential collsion in by object seq

1. update the expand length
2. enhance rod collision detect

jira:STUDIO-12199

Signed-off-by: xun.zhang <xun.zhang@bambulab.com>
Change-Id: I1350ef5612b833405928e22c542a7a6f0c671105
(cherry picked from commit 7a197af3e0aa6d6c1493768d757ecdc938e49c1d)
This commit is contained in:
xun.zhang
2025-05-15 17:35:55 +08:00
committed by Noisyfox
parent d7c15664dd
commit 44e62213e9
3 changed files with 91 additions and 40 deletions

View File

@@ -21,12 +21,7 @@ namespace Slic3r {
const Layer* curr_layer;
int picture_extruder_id; // the extruder id to take picture
int curr_extruder_id;
int height_to_rod;
bool based_on_all_layer; // whether to calculate the safe position based all layers
PrintSequence print_sequence; // print sequence: by layer or by object
std::optional<std::vector<const PrintObject*>> printed_objects; // printed objects, only have value in by object mode
std::optional<int> liftable_extruder_id; // extruder id that can be lifted, cause bed height to change
std::optional<int> extruder_height_gap; // the height gap caused by extruder lift
};
// data are stored without plate offset
@@ -45,12 +40,13 @@ namespace Slic3r {
Point pick_pos_for_curr_layer(const PosPickCtx& ctx);
Point pick_pos_for_all_layer(const PosPickCtx& ctx);
ExPolygons collect_object_slices_data(const Layer* curr_layer, float height_range, const std::vector<const PrintObject*>& object_list);
ExPolygons collect_object_slices_data(const Layer* curr_layer, float height_range, const std::vector<const PrintObject*>& object_list,bool by_object);
Polygons collect_limit_areas_for_camera(const std::vector<const PrintObject*>& object_list);
Polygons collect_limit_areas_for_rod(const std::vector<const PrintObject*>& object_list, const PosPickCtx& ctx);
Polygon expand_object_projection(const Polygon& poly);
Polygon expand_object_projection(const Polygon& poly, bool by_object);
BoundingBoxf3 expand_object_bbox(const BoundingBoxf3& bbox, bool by_object);
Point pick_nearest_object_center(const Point& curr_pos, const std::vector<const PrintObject*>& object_list);
Point get_objects_center(const std::vector<const PrintObject*>& object_list);
@@ -69,6 +65,13 @@ namespace Slic3r {
int m_plate_height; // unscaled data
int m_plate_width; // unscaled data
PrintSequence m_print_seq;
bool m_based_on_all_layer;
int m_nozzle_height_to_rod;
int m_nozzle_clearance_radius;
std::optional<int> m_liftable_extruder_id;
std::optional<int> m_extruder_height_gap;
std::unordered_map<const PrintInstance*, BoundingBoxf3> bbox_cache;
std::optional<Point> m_all_layer_pos;