description of the functions

This commit is contained in:
PavelMikus 2022-06-24 13:20:03 +02:00
parent 864c85d47e
commit 8e2e4154bd

View File

@ -118,6 +118,11 @@ public:
}
};
// StabilityAccumulator accumulates extrusions for each connected model part from bed to current printed layer.
// If the originaly disconected parts meet in the layer, their stability accumulators get merged and continue as one.
// (think legs of table, which get connected when the top desk is being printed).
// The class gathers mass, centroid mass, sticking force (bed extrusions, support points) and sticking centroid for the
// connected part. These values are then used to check global part stability.
class StabilityAccumulator {
private:
std::vector<Vec2f> support_points { };
@ -186,6 +191,9 @@ public:
}
};
// StabilityAccumulators class is wrapper over the vector of stability accumualtors. It provides a level of indirection
// between accumulator ID and the accumulator instance itself. While each extrusion line has one id, which is asigned
// when algorithm reaches the line's layer, the accumulator this id points to can change due to merging.
struct StabilityAccumulators {
private:
size_t next_id = 0;
@ -280,6 +288,9 @@ float get_flow_width(const LayerRegion *region, ExtrusionRole role) {
}
}
// Accumulator of current extruion path properties
// It remembers unsuported distance and maximum accumulated curvature over that distance.
// Used to determine local stability issues (too long bridges, extrusion curves into air)
struct ExtrusionPropertiesAccumulator {
float distance = 0; //accumulated distance
float curvature = 0; //accumulated signed ccw angles
@ -301,6 +312,14 @@ struct ExtrusionPropertiesAccumulator {
}
};
// check_extrusion_entity_stability checks each extrusion for local issues, appends the extrusion
// into checked lines, and gives it a stability accumulator id. If support is needed it pushes it
// into issues as well.
// Rules for stability accumulator id assigment:
// If there is close extrusion under, use min extrusion id between the id of the previous line,
// and id of line under. Also merge the accumulators of those two ids!
// If there is no close extrusion under, use id of the previous extrusion line.
// If there is no previous line, create new stability accumulator.
void check_extrusion_entity_stability(const ExtrusionEntity *entity,
StabilityAccumulators &stability_accs,
Issues &issues,
@ -395,6 +414,11 @@ void check_extrusion_entity_stability(const ExtrusionEntity *entity,
}
}
//check_layer_global_stability checks stability of the accumulators that are still present on the current line
// ( this is determined from the gathered checked_lines vector)
// For each accumulator and each its extrusion, forces and torques (weight, bed movement, extruder pressure, stickness to bed)
// are computed and if stability is not sufficient, support points are added
// accumualtors are filtered by their pointer address, since one accumulator can have multiple IDs due to merging
void check_layer_global_stability(StabilityAccumulators &stability_accs,
Issues &issues,
float flow_width,