prusa3d / PrusaSlicer

G-code generator for 3D printers (RepRap, Makerbot, Ultimaker etc.)
https://www.prusa3d.com/prusaslicer/
GNU Affero General Public License v3.0
7.8k stars 1.94k forks source link

Complete individual objects + increase copies + arrange = random print arrangement and order printed #1052

Open GravityEcho opened 6 years ago

GravityEcho commented 6 years ago

Version

1.40.1 beta win64

Operating system type + version

Windows 10 64bit

Behavior

Complete individual objects requires objects to be added from file (not using increase copies) and manual arranging for proper sequential printing without collisions (CR-10)

  1. Add object to build plate (small object that needs to be produced in mass such as nuts and bolts.)
  2. increase copies of object by pressing + or right clicking object and select increase copies to more than 2.
  3. click arrange to arrange on build plate (slic3r accounts for print and head dimensions despite often arranging in a seemingly asymmetrical way depending on quantity), click slice, export the gcode.
  4. Now click preview tab and tick travels to inspect the order in which the objects print. (This could also be made more clear) This is where (more obvious with more objects) things for me go bad because there is no way to control the order in which the objects will be printed slic3r often prints in the upper left quadrant then beneath that (y axis) then it tries to go back up and to the right and KNOCKS OFF the first item with the X gantry. It should never try to go back up it should complete items along the X THEN go down left and print another row along X.
    • Expected Results Print individual objects without hitting objects with print head or X gantry
    • Actual Results Depending on print quantity and size can still crash because user is not given a few options to help control the print order.
    • Screenshots from Slic3r preview are preferred 1 It may be hard to see the travel lines in this image but the problem is that the increase copies and arrange method has made slicer print the middle object in the Y row of 3 first then up to the top item in the Y and then over to the one by itself and then the bottom one in the Y. It just doesn't make any sense to me to have it arrange them so strangely and print in such a haphazard order certainly will cause collision problems.

What I would like "Increase Copies" and "Arrange" to do is more like the following: 2 In this image I added each part by dragging and dropping the file into Slic3r 4 times and then manually arranging those objects on the build plate (a snap feature would be helpful, forgive me if I am unaware of it) to make it print top left, top right, then bottom left and finally bottom right. I have a print running with 9 of these using this method and it is working. Which is excellent, I love Slic3r its the best!

Is this a new feature request? Yes Please add more options for the "arrange" feature such as: align along X axis then Y (Arrange along X until out of room then down Y and along X again) align along Y axis then X (Arrange along Y until out of room then across X and along Y again) And/Or allow user to control the order in which the objects are printed/arranged.

Thank you so much for this wonderful software!

zerg960 commented 6 years ago

Preventing collisions is a bit harder of a problem than just arranging the objects in a certain order, once you consider features like crash detection & filament runout:

image

If crash detection is triggered, the extruder auto-homes. The extruder heads to 0 on the X axis, then heads to 0 on the Y axis (because it's auto homing). Printing in the order above would crash the extruder into already completed prints in the process.

Then the extruder heads back to where it was. (I had an experience where the nozzle, as it was heading back crashed into an already completed 10mm-high print, ruining it, the position of one of the Z-axis rods, and the heater body too.. and it triggered crash detection again. That was the last time I used this feature.)

At least on the MK3, the extruder also goes to a different corner if the filament runout sensor is triggered, or the user pauses the print.

All those thorny problems aside, it's possible for an algorithm to check if a collision with the extruder is possible by drawing a 2D line from the 3 corners and seeing if it intersects with any corner of the bounding boxes of any already-completed print (plus a margin equal to the extruder's body size). As long as the parts aren't taller than the distance between the X-axis guide rod and the nozzle, collisions with the gantry aren't possible.

dartrax commented 6 years ago

810: Sequential printing: Order of objects not known

486: Printing in Manual Order

1338: Sequential Printing Priority menu item is missing

1662: Complete Individual Objects should print from front to back

mjsadaway commented 6 years ago

Simply completing the objects from the front of the build plate to the back would help prevent collisions with the extruder cable.

dartrax commented 6 years ago

@mjsadaway, could you please explain how and why that would prevent collisions, i.e. collisions caused by filament runout detection, and what you mean by extruder cable?

mjsadaway commented 6 years ago

It wouldn't prevent collisions caused by filament runout or crash detection, both of which cause the MK3 to auto home. It should help in the case where completed parts near the back of the build plate are knocked over by the large bundle of wires sticking out the back of the extruder.

Yes, it would be nice to solve the problem in every case, but I would be happy if I could rely on the "complete individual objects" function most of the time, when the filament didn't run out and a crash didn't occur.

chrschn commented 5 years ago

I think giving uses control about the print order (see #1338) would at least allow one to manually handle complicated use-cases.

My use-case would be printing multiple copies of the same object in different colors using an MMU. The printer should complete one object in one color, then do a tool change, then print a manual wipe object before starting to print the next object with the new tool. This would be possible to achieve if I could manually set the print order of the objects (in particular printing the wipe object before the actual object).

bubnikv commented 4 years ago

The upcoming PrusaSlicer 2.2.0-alpha4 will print sequentially in the order displayed at the object list. Also the object list will support drag & drop to reorder.

luismasg commented 4 years ago

I'm doing nintendo yoshis and i wanted to print 4 sets of shoes different color, the height es about .8 cm so the support rod is not an issue. seems like its ready to print. but i see no wipe tower. I would expect for the first layer to be the color transition. I might just try it . I'm doing the soles right now. Is this 'complete individual objects' feature considered for MMU ? it would vastly reduce filament swap from 30+ to 4
does anyone if something like this is on the roadmap ? or is it possible ? image

bubnikv commented 4 years ago

Wipe tower is not supported for sequential print.

pá 6. 3. 2020 v 22:41 odesílatel Luis Manuel Suarez < notifications@github.com> napsal:

I'm doing nintendo yoshis and i wanted to print 4 sets of shoes different color, the height es about .8 cm so the support rod is not an issue. seems like its ready to print. but i see no wipe tower. I would expect for the first layer to be the color transition. I might just try it . I'm doing the soles right now. Is this 'complete individual objects' feature considered for MMU ? it would vastly reduce filament swap from 30+ to 4 does anyone if something like this is on the roadmap ? or is it possible ? [image: image] https://user-images.githubusercontent.com/12954857/76124630-bdbf1e80-5fc0-11ea-9e4b-74026cb35662.png

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/prusa3d/PrusaSlicer/issues/1052?email_source=notifications&email_token=ABMPSIYOLFOPCUN24RT3I2TRGFUYHA5CNFSM4FJ4QOJKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEOC6HCA#issuecomment-595977096, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABMPSI7JRZQZHS3EQLVSWCLRGFUYHANCNFSM4FJ4QOJA .

freakydude commented 1 year ago

Hi,

I was posting a short pseudo algorithm to improve the automatic arrange in the linked issue above.

I was rethinking about it and like to share the my idea in some diagrams. I am sure that others had similar ideas before me, I'm not well informed about that - feel free to participate.

In my opinion there are absolut basic operations we need to support anyway. This basic idea should be easy to implement and would help for a lot of use cases already.

Basic Idea:

First of all, all we need is the x and y distance (Xd,Yd) from the nozzle tip to the front left corner of the extruder. There is no need for a radius or clearance height at all.

The following diagram shows a cartesian printer from the top. All we need to know is the red rectangle, or more specific the xy-distance from the nozzle tip to the front left corner and the object x-y-dimensions.

cartesian-printer-top

This enables us to make some easy calculations for a collision free sequential printing. In addtion the the xy-distance we need the maximum x-y-printing area of each object to print. That should be well known already, because the normal arrangement algorithm is doing very well here.

So for printing in x+y+ -direction:

Print in x+ and y+ direction

print-in-xandy-direction-variable

If this is working, it's a real improvement to the current (not working) state.

In a next step, further optimizations can be implemented. For example, sorting by x,y object size, more detailed modelling the xyz clearance of extruder/x-axes or object height. Things how to use the space of the heater bed more efficiently. I have also some ideas, maybe I add that later on.

Conclusion:

What are you thinking about it? Any hints, where is the place to implementing this - or someone who like to try that?

With best regards, freakyDude

891paul commented 1 year ago

Look at https://github.com/prusa3d/PrusaSlicer/issues/10552#issue-1708902322

10552