mirror of
https://git.mirrors.martin98.com/https://github.com/bambulab/BambuStudio.git
synced 2025-08-19 15:09:05 +08:00
FIX: the brim cannot generated on left/right only printable area
jira: none Change-Id: If1a46773cdbd66ea3ab8484dc5d58ce5bbd3ded2
This commit is contained in:
parent
c6e117fef0
commit
f127f95335
@ -863,9 +863,6 @@ static ExPolygons outer_inner_brim_area(const Print& print,
|
||||
brimToWrite.insert({ objectWithExtruder.first, {true,true} });
|
||||
|
||||
ExPolygons objectIslands;
|
||||
auto bedPoly = Model::getBedPolygon();
|
||||
auto bedExPoly = diff_ex((offset(bedPoly, scale_(30.), jtRound, SCALED_RESOLUTION)), { bedPoly });
|
||||
|
||||
auto save_polygon_if_is_inner_island = [](const Polygons& holes_area, const Polygon& contour, int& hole_index) {
|
||||
for (size_t i = 0; i < holes_area.size(); i++) {
|
||||
Polygons contour_polys;
|
||||
@ -1050,18 +1047,39 @@ static ExPolygons outer_inner_brim_area(const Print& print,
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!bedExPoly.empty()){
|
||||
no_brim_area.push_back(bedExPoly.front());
|
||||
|
||||
int extruder_nums = print.config().nozzle_diameter.values.size();
|
||||
std::vector<Polygons> extruder_unprintable_area;
|
||||
if (extruder_nums == 1)
|
||||
extruder_unprintable_area.emplace_back(Polygons{Model::getBedPolygon()});
|
||||
else {
|
||||
extruder_unprintable_area = print.get_extruder_printable_polygons();
|
||||
}
|
||||
no_brim_area = offset2_ex(no_brim_area, scaled_flow_width, -scaled_flow_width); // connect scattered small areas to prevent generating very small brims
|
||||
std::vector<int> filament_map = print.get_filament_maps();
|
||||
|
||||
for (const PrintObject* object : print.objects()) {
|
||||
if (brimAreaMap.find(object->id()) != brimAreaMap.end())
|
||||
{
|
||||
brimAreaMap[object->id()] = diff_ex(brimAreaMap[object->id()], no_brim_area);
|
||||
ExPolygons extruder_no_brim_area = no_brim_area;
|
||||
auto iter = std::find_if(objPrintVec.begin(), objPrintVec.end(), [object](const std::pair<ObjectID, unsigned int>& item) {
|
||||
return item.first == object->id();
|
||||
});
|
||||
|
||||
if (iter != objPrintVec.end()) {
|
||||
int extruder_id = filament_map[iter->second - 1] - 1;
|
||||
auto bedPoly = extruder_unprintable_area[extruder_id];
|
||||
auto bedExPoly = diff_ex((offset(bedPoly, scale_(30.), jtRound, SCALED_RESOLUTION)), {bedPoly});
|
||||
if (!bedExPoly.empty()) {
|
||||
extruder_no_brim_area.push_back(bedExPoly.front());
|
||||
}
|
||||
extruder_no_brim_area = offset2_ex(extruder_no_brim_area, scaled_flow_width, -scaled_flow_width); // connect scattered small areas to prevent generating very small brims
|
||||
|
||||
}
|
||||
|
||||
if (brimAreaMap.find(object->id()) != brimAreaMap.end()) {
|
||||
brimAreaMap[object->id()] = diff_ex(brimAreaMap[object->id()], extruder_no_brim_area);
|
||||
}
|
||||
|
||||
if (supportBrimAreaMap.find(object->id()) != supportBrimAreaMap.end())
|
||||
supportBrimAreaMap[object->id()] = diff_ex(supportBrimAreaMap[object->id()], no_brim_area);
|
||||
supportBrimAreaMap[object->id()] = diff_ex(supportBrimAreaMap[object->id()], extruder_no_brim_area);
|
||||
}
|
||||
|
||||
brim_area.clear();
|
||||
|
@ -1344,15 +1344,7 @@ void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* resu
|
||||
// check gcode is valid in multi_extruder printabele area
|
||||
int extruder_size = m_print->config().nozzle_diameter.values.size();
|
||||
if (extruder_size > 1) {
|
||||
std::vector<Vec2d> printable_area = m_print->get_printable_area();
|
||||
Polygon printable_poly = Polygon::new_scale(printable_area);
|
||||
std::vector<std::vector<Vec2d>> extruder_printable_areas = m_print->get_extruder_printable_area();
|
||||
std::vector<Polygons> extruder_unprintable_polys;
|
||||
for (const auto &e_printable_area : extruder_printable_areas) {
|
||||
Polygons ploys = diff(printable_poly, Polygon::new_scale(e_printable_area));
|
||||
extruder_unprintable_polys.emplace_back(ploys);
|
||||
}
|
||||
|
||||
std::vector<Polygons> extruder_unprintable_polys = m_print->get_extruder_unprintable_polygons();
|
||||
m_processor.check_multi_extruder_gcode_valid(extruder_unprintable_polys, m_print->get_extruder_printable_height(), m_print->get_filament_maps());
|
||||
}
|
||||
|
||||
|
@ -2411,21 +2411,35 @@ FilamentMapMode Print::get_filament_map_mode() const
|
||||
return m_config.filament_map_mode;
|
||||
}
|
||||
|
||||
std::vector<Vec2d> Print::get_printable_area()
|
||||
{
|
||||
return m_config.printable_area.values;
|
||||
}
|
||||
|
||||
std::vector<std::vector<Vec2d>> Print::get_extruder_printable_area()
|
||||
{
|
||||
return m_config.extruder_printable_area.values;
|
||||
}
|
||||
|
||||
std::vector<double> Print::get_extruder_printable_height()
|
||||
std::vector<double> Print::get_extruder_printable_height() const
|
||||
{
|
||||
return m_config.extruder_printable_height.values;
|
||||
}
|
||||
|
||||
std::vector<Polygons> Print::get_extruder_printable_polygons() const
|
||||
{
|
||||
std::vector<Polygons> extruder_printable_polys;
|
||||
std::vector<std::vector<Vec2d>> extruder_printable_areas = m_config.extruder_printable_area.values;
|
||||
for (const auto &e_printable_area : extruder_printable_areas) {
|
||||
Polygons ploys = {Polygon::new_scale(e_printable_area)};
|
||||
extruder_printable_polys.emplace_back(ploys);
|
||||
}
|
||||
return std::move(extruder_printable_polys);
|
||||
}
|
||||
|
||||
std::vector<Polygons> Print::get_extruder_unprintable_polygons() const
|
||||
{
|
||||
std::vector<Vec2d> printable_area = m_config.printable_area.values;
|
||||
Polygon printable_poly = Polygon::new_scale(printable_area);
|
||||
std::vector<std::vector<Vec2d>> extruder_printable_areas = m_config.extruder_printable_area.values;
|
||||
std::vector<Polygons> extruder_unprintable_polys;
|
||||
for (const auto &e_printable_area : extruder_printable_areas) {
|
||||
Polygons ploys = diff(printable_poly, Polygon::new_scale(e_printable_area));
|
||||
extruder_unprintable_polys.emplace_back(ploys);
|
||||
}
|
||||
return std::move(extruder_unprintable_polys);
|
||||
}
|
||||
|
||||
size_t Print::get_extruder_id(unsigned int filament_id) const
|
||||
{
|
||||
std::vector<int> filament_map = get_filament_maps();
|
||||
|
@ -834,9 +834,9 @@ public:
|
||||
// 1 based ids
|
||||
const std::vector<std::vector<int>> &get_unprintable_filament_ids() const;
|
||||
|
||||
std::vector<Vec2d> get_printable_area();
|
||||
std::vector<std::vector<Vec2d>> get_extruder_printable_area();
|
||||
std::vector<double> get_extruder_printable_height();
|
||||
std::vector<double> get_extruder_printable_height() const;
|
||||
std::vector<Polygons> get_extruder_printable_polygons() const;
|
||||
std::vector<Polygons> get_extruder_unprintable_polygons() const;
|
||||
|
||||
bool enable_timelapse_print() const;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user