UltiMaker uses functional, analytical and tracking cookies. Tracking cookies enhance your experience on our website and may also collect your personal data outside of Ultimaker websites. If you agree with the use of tracking cookies, click “I agree, continue browsing”. You can withdraw your consent at any time. If you do not consent with the use of tracking cookies, click “Refuse”. You can find more information about cookies on our Privacy and Cookie Policy page.
Most model files don't specify a location. Some 3mf files do.
Cura calculates the mid-point of it's virtual build plate from the numbers you have in the Machine Settings "X(width) and Y(depth)". Those should represent the true "printable area" of your build plate. In the case of my Ender 3 Pro - the build plate physically is 235 x 235. It has a 1mm bevel around the periphery so that can't be printed on. I wanted another 1.5mm safety area around the periphery as well. So in Cura I've entered X(width) = 230 and Y(depth) = 230 (235 - 2.5 "non-printable" area on the left - 2.5 "non-printable" area on the right = 230). That makes my Cura mid-point X=115 and Y=115.
In the cases where there is no location data (STL files mostly), Cura gets the "Center-of-Geometry" of the part in the XY and puts that at the midpoint of the Cura build plate. When the gcode is created the origin point of the gcode is the 0,0,0 of the Cura virtual build plate.
Then the gcode shows up in the printer.
The printer will put that 0,0,0 origin of the gcode file at the printer's defined Home Offset 0,0,0. If you haven't defined a Home Offset location (M206) then it will be the Auto-Home location. That is probably what is going on with your off-center prints.
My Auto-Home location is just off the build plate. I move the nozzle to a point 2.5mm in from the left edge of the glass and 2.5mm in from the front edge of the glass (the dimensions of my "non-printable area") and at a Z=0 and select "Set Home Offsets" on the LCD followed by "Save Settings". Now the printer matches Cura.
If your firmware doesn't have a "Set Home Offsets" option on the LCD then you can do it in a gcode file that you "print". That's another lesson if the above method can't or doesn't work.
Another lesson would be for "Disallowed Areas". For those you need a printer definition file. If you are using "fdmprinter.def.json" as your base file for your custom printer - that file should not be altered.
Edited by GregValiant
Link to post
Share on other sites
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
🚀 Help Shape the Future of Cura and Digital Factory – Join Our Power User Research Program!
We’re looking for active users of Cura and Digital Factory — across professional and educational use cases — to help us improve the next generation of our tools.
Our Power User Research Program kicks off with a quick 15-minute interview to learn about your setup and workflows. If selected, you’ll be invited into a small group of users who get early access to features and help us shape the future of 3D printing software.
🧪 What to Expect:
A short 15-minute kickoff interview to help us get to know you If selected, bi-monthly research sessions (15–30 minutes) where we’ll test features, review workflows, or gather feedback Occasional invites to try out early prototypes or vote on upcoming improvements
🎁 What You’ll Get:
Selected participants receive a free 1-year Studio or Classroom license Early access to new features and tools A direct voice in what we build next
👉 Interested? Please fill out this quick form
Your feedback helps us make Cura Cloud more powerful, more intuitive, and more aligned with how you actually print and manage your workflow.
Thanks for being part of the community,
The full stable release of Cura 5.10 has arrived, and it brings support for the new Ultimaker S8, as well as new materials and profiles for previously supported UltiMaker printers. Additionally, you can now control your models in Cura using a 3D SpaceMouse and more!
Recommended Posts
GregValiant 1,490
Most model files don't specify a location. Some 3mf files do.
Cura calculates the mid-point of it's virtual build plate from the numbers you have in the Machine Settings "X(width) and Y(depth)". Those should represent the true "printable area" of your build plate. In the case of my Ender 3 Pro - the build plate physically is 235 x 235. It has a 1mm bevel around the periphery so that can't be printed on. I wanted another 1.5mm safety area around the periphery as well. So in Cura I've entered X(width) = 230 and Y(depth) = 230 (235 - 2.5 "non-printable" area on the left - 2.5 "non-printable" area on the right = 230). That makes my Cura mid-point X=115 and Y=115.
In the cases where there is no location data (STL files mostly), Cura gets the "Center-of-Geometry" of the part in the XY and puts that at the midpoint of the Cura build plate. When the gcode is created the origin point of the gcode is the 0,0,0 of the Cura virtual build plate.
Then the gcode shows up in the printer.
The printer will put that 0,0,0 origin of the gcode file at the printer's defined Home Offset 0,0,0. If you haven't defined a Home Offset location (M206) then it will be the Auto-Home location. That is probably what is going on with your off-center prints.
My Auto-Home location is just off the build plate. I move the nozzle to a point 2.5mm in from the left edge of the glass and 2.5mm in from the front edge of the glass (the dimensions of my "non-printable area") and at a Z=0 and select "Set Home Offsets" on the LCD followed by "Save Settings". Now the printer matches Cura.
If your firmware doesn't have a "Set Home Offsets" option on the LCD then you can do it in a gcode file that you "print". That's another lesson if the above method can't or doesn't work.
Another lesson would be for "Disallowed Areas". For those you need a printer definition file. If you are using "fdmprinter.def.json" as your base file for your custom printer - that file should not be altered.
Link to post
Share on other sites