Fixed a bug in validation of the FDM Print to check for extruder
collisions against already printed objects: Rotation of an object was not being taken into account. Fixes #2450 PrusaSlicer 2.0 Sequential printing vs rotate object Fixes #3585 Always Sequential Printing Error (Regardless of setting, placement or object size) Fixed some collisions in sequential print just after arrangement by making the validation using a slightly lower extruder radius value than the arrangement. Refactored PrintObject coordinate system so that the PrintObject's coordinate system is always centered in respect to its ModelObject's geometries. This refactoring may improve path planning a bit and it may lower the requirements on bits representing Clipper coordinates by 1 bit.
This commit is contained in:
parent
e66632a595
commit
b8c898bf40
8 changed files with 135 additions and 116 deletions
src/libslic3r
|
@ -1091,7 +1091,7 @@ namespace DoExport {
|
|||
static inline std::vector<const PrintInstance*> sort_object_instances_by_max_z(const Print &print)
|
||||
{
|
||||
std::vector<const PrintObject*> objects(print.objects().begin(), print.objects().end());
|
||||
std::sort(objects.begin(), objects.end(), [](const PrintObject *po1, const PrintObject *po2) { return po1->size()(2) < po2->size()(2); });
|
||||
std::sort(objects.begin(), objects.end(), [](const PrintObject *po1, const PrintObject *po2) { return po1->height() < po2->height(); });
|
||||
std::vector<const PrintInstance*> instances;
|
||||
instances.reserve(objects.size());
|
||||
for (const PrintObject *object : objects)
|
||||
|
@ -2616,8 +2616,9 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou
|
|||
}
|
||||
}
|
||||
else if (seam_position == spRear) {
|
||||
last_pos = m_layer->object()->bounding_box().center();
|
||||
last_pos(1) += coord_t(3. * m_layer->object()->bounding_box().radius());
|
||||
// Object is centered around (0,0) in its current coordinate system.
|
||||
last_pos.x() = 0;
|
||||
last_pos.y() += coord_t(3. * m_layer->object()->bounding_box().radius());
|
||||
last_pos_weight = 5.f;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue