Ultimaker / Cura

3D printer / slicing GUI built on top of the Uranium framework
GNU Lesser General Public License v3.0
6.2k stars 2.08k forks source link

[4.2.1] Can't Import Stock Profiles. #6124

Open eastabrooka opened 5 years ago

eastabrooka commented 5 years ago

Application version 4.2.1

Platform Win10 x64

Printer Ender 3

Reproduction steps 1) Get https://www.3dprintedtabletop.com/download/cura-cr10-ender-3-terrain-profile-v-1-3/ 2) Get Cura 4.2.1 3) Open Cura, Say you have an Ender3 4) Import the Ender3 profile. 5) Error !

Actual results image

Expected results It should import the profile

Additional information Pls Help !

JohnEdwa commented 5 years ago

This is because of the Creawesome merge in Cura 4.2. The profile expects your Ender 3 definition to inherit the fdmprinter definition, but it now inherits a creality_base and that inherits the fdmprinter.

Any Creality printer profile made before 4.2 will not be compatible, and even if you could make it import by editing it, because the base definitions and profiles have vastly different settings, it most definitely wouldn't work properly anyway.

It would need to be recreated for Cura 4.2 from scratch.

eastabrooka commented 5 years ago

Oh, Well, That probably means im going to be back on Cura 4.0 until the 3dprintedtabletop people make a new profile. Breaking backward compatability across all new adopters is probably a great way to make people lose their fave community profiles. Is there any way to force Cura 4.2 to recognise Ender3 Printer as type fdmprinter ?

JohnEdwa commented 5 years ago

Is there any way to force Cura 4.2 to recognise Ender3 Printer as type fdmprinter ?

No, and it wouldn't work anyway. The way Cura creates the profiles is stacking a bunch of overrides on top of a base file, and while fdmprinter is the one on the bottom and the 3dtt custom profile is the on on top, the files in the middle have changed.

It used to be custom profile -> base profile -> printer override -> fdmprinter, and it's now custom profile -> different base profile -> different printer override -> new creality_base -> fdmprinter.

There are some people (like me) who are poking at creating a legacy definition that would allow this, but it'll take some time to get it right.

zachshallbetter commented 5 years ago

Is there a reader of some kind to help us pull the info out of the profile files? When the update occurred it wiped the profile settings within Cura.

Ghostkeeper commented 5 years ago

In the configuration folder (Help -> Show configuration folder) the profiles are under quality_changes and they are text files, so you can open them up with Notepad++ or whatever you prefer.

.curaprofile files are secretly .zip files so you could rename them and open them up with an archiver application like 7-zip. Inside you'll find the same type of text files, one for each extruder and one for global settings.

The problem is that Cura doesn't know which of your profiles are made for Creality printers and which are not. The profiles for Creality should get the "definition" field under "[metadata]" filled with "creality_base". The others should have " fdmprinter" there. You could also just copy all of the entries under "[values]" over to a different profile.

kazooless commented 4 years ago

@Ghostkeeper As more and more printers are upgraded to use the variants, this "problem" is going to come up more. I just installed 4.7.1 and the TronXY printer will not use the previous profile because there are newly named profiles for it now. For anyone who doesn't understand the under-workings of Cura, this is confusing.

As I was thinking about this, I though of a possible solution. What about having a default "global" set of profiles which are available and accessible to all printers regardless of custom variants but they are hidden if they have their own set programmed?

Ghostkeeper commented 4 years ago

As I was thinking about this, I though of a possible solution. What about having a default "global" set of profiles which are available and accessible to all printers regardless of custom variants but they are hidden if they have their own set programmed?

That's basically what we have. There is a default "global" set of profiles here: https://github.com/Ultimaker/Cura/tree/master/resources/quality (scroll to the bottom). These profiles are accessible to all printers regardless of custom profiles unless the printer sets the has_machine_quality metadata entry to true. Custom profiles are classified to belong to a printer if they are created while a printer with has_machine_quality set to true was active. Otherwise they are classified to belong to all printers that have it set to false. The problem here arises from when an update changes the has_machine_quality metadata. We don't know which of those custom profiles to classify as belonging to that printer then, since previously they were global.

kazooless commented 4 years ago

These profiles are accessible to all printers regardless of custom profiles unless the printer sets the has_machine_quality metadata entry to true.

And that is what is causing the problem. I'm still seeing it come up in different help forums and expect we'll see more people confused and afflicted as more and more printers are upgraded to use the new format. But since it is pretty much already built-in, as you say, then this might be easier than I thought. I'm guessing the reason the global profiles are not available when has_machine_quality metadata entry to true is the possible conflict if the same name is used in both the custom quality and the global quality. If that is the case, then wouldn't a simple logic check work? Something like:

If quality_type doesn't match any custom_quality_type but does match global_quality_type then use global_quality_type

or a little more complicated

if setting_version is "prior to version where has_machine_quality=true" then use global_quality_type

Ghostkeeper commented 4 years ago

I'm guessing the reason the global profiles are not available when has_machine_quality metadata entry to true is the possible conflict if the same name is used in both the custom quality and the global quality.

No, the reason is that not all global quality levels are supported by all configurations of all printers. There is a wide range of global quality profiles available globally, from 0.06mm to 0.6mm layer thickness. For instance using an Ender 3 with a 0.2mm nozzle, you'll only get two quality levels: 0.08mm layers and 0.12mm layers. Because printing 0.6mm layers with a 0.2mm nozzle is just not going to work. If printers have their own set of quality profiles, they can also specialise which quality levels are available for each combination of nozzle+material. Secondary reason is that for some printers (e.g. Ultimaker) a certain level of quality is expected from the available profiles. Falling back to global profiles if a combination is untested is expensive for the user then, due to failed prints or lower quality.