Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 139 additions & 6 deletions resources/definitions/fdmprinter.def.json
Original file line number Diff line number Diff line change
Expand Up @@ -5872,19 +5872,30 @@
},
"support_brim_enable":
{
"label": "Enable Support Brim",
"description": "Generate a brim within the support infill regions of the first layer. This brim is printed underneath the support, not around it. Enabling this setting increases the adhesion of support to the build plate.",
"label": "Enable Inner Support Base",
"description": "Generate a base within the support infill regions of the first layers. Enabling this setting increases the adhesion of support to the build plate.",
"type": "bool",
"default_value": true,
"enabled": "support_enable or support_meshes_present",
"limit_to_extruder": "support_infill_extruder_nr",
"settable_per_mesh": false,
"settable_per_extruder": true
},
"support_outer_brim_enable":
{
"label": "Enable Outer Support Base",
"description": "Generate a base around the support infill regions of the first layers. Enabling this setting increases the adhesion of support to the build plate.",
"type": "bool",
"default_value": false,
"enabled": "support_enable or support_meshes_present",
"limit_to_extruder": "support_infill_extruder_nr",
"settable_per_mesh": false,
"settable_per_extruder": true
},
"support_brim_width":
{
"label": "Support Brim Width",
"description": "The width of the brim to print underneath the support. A larger brim enhances adhesion to the build plate, at the cost of some extra material.",
"label": "Support Inner Brim Width",
"description": "The width of the brim to print inside the support, on the first layer. A larger brim enhances adhesion to the build plate, at the cost of some extra material.",
"type": "float",
"unit": "mm",
"default_value": 1.2,
Expand All @@ -5899,8 +5910,8 @@
{
"support_brim_line_count":
{
"label": "Support Brim Line Count",
"description": "The number of lines used for the support brim. More brim lines enhance adhesion to the build plate, at the cost of some extra material.",
"label": "Support Inner Brim Line Count",
"description": "The number of lines used for the support inside brim. More brim lines enhance adhesion to the build plate, at the cost of some extra material.",
"type": "int",
"default_value": 3,
"minimum_value": "0",
Expand All @@ -5926,6 +5937,128 @@
"settable_per_mesh": false,
"settable_per_extruder": true
},
"support_base_height":
{
"label": "Support Base Height",
"description": "The height of the support base. Increasing this value will result in a sturdier support because the base will be wider. If this setting is too low, the supports will not have a sturdy base.",
"value": "layer_height",
"type": "float",
"unit": "mm",
"enabled": "support_enable and (support_brim_enable or support_outer_brim_enable)",
"default_value": 0,
"minimum_value": "0",
"maximum_value": "machine_height",
"limit_to_extruder": "support_extruder_nr",
"settable_per_mesh": false,
"settable_per_extruder": true,
"children":
{
"support_inside_base_height":
{
"label": "Support Inside Base Height",
"description": "The height of the inside support base. Increasing this value will result in a sturdier support because the base will be thicker. If this setting is too low, the supports will not have a sturdy base.",
"value": "support_base_height",
"type": "float",
"unit": "mm",
"enabled": "support_enable and resolveOrValue('support_brim_enable')",
"default_value": 0,
"minimum_value": "0",
"maximum_value": "machine_height",
"limit_to_extruder": "support_extruder_nr",
"settable_per_mesh": false,
"settable_per_extruder": true
},
"support_outside_base_height":
{
"label": "Support Outside Base Height",
"description": "The height of the outside support base. Increasing this value will result in a sturdier support because the base will be thicker. If this setting is too low, the supports will not have a sturdy base.",
"value": "support_base_height",
"type": "float",
"unit": "mm",
"enabled": "support_enable and resolveOrValue('support_outer_brim_enable')",
"default_value": 0,
"minimum_value": "0",
"maximum_value": "machine_height",
"limit_to_extruder": "support_extruder_nr",
"settable_per_mesh": false,
"settable_per_extruder": true
}
}
},
"support_base_inside_width":

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do base the "Support Base Height" settings and "Support Base Slope" settings have parent, children but the "Support Base Width" settings don't have a parent?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And what is the difference between this setting and "Enable Inner Support Base"?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do base the "Support Base Height" settings and "Support Base Slope" settings have parent, children but the "Support Base Width" settings don't have a parent?

For the height and the slope, it does make sense to have the same value for the inner and outer bases, so you just set the value of the parent, and it sets the value of both the children.
For the width, they will almost never have the same value, since they depend on the inner brim width and global brim width, so having a parent value doesn't make sense here.

And what is the difference between this setting and "Enable Inner Support Base"?

In practice, you can indeed disable the inner base by settings a 0 width (or height), however for the retro-compatibility I needed to keep the "Enable Outer Support Base" anyway, so for the sake of consistency it seemed logical to also have a "Enable Inner Support Base". I do think it makes some sense as a user, that the whole feature can be enabled/disabled at once.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For the width, they will almost never have the same value, since they depend on the inner brim width and global brim width, so having a parent value doesn't make sense here.

We can still have child values that differ from it's parent or siblings, see default profile for s3 for example.
Screenshot 2026-07-17 at 13 34 58

Benefit of adding this parent child relationship is that it nicely groups the values in the settings.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This example is unrelated, the top_bottom_thickness and wall_thickness do not share a parenting relationship, at best a formula that makes one depend on the other.

I do remember a discussion with Jaime about the parenting. We had an external PR that added a lot of parenting for grouping purposes. Although looking good in the UI, it was rejected because from what I understood, parenting is really only for a setting that can have multiple more-defined values of itself. For instance, wall_extruder_nr is a parent of wall_0_extruder_nr and wall_x_extruder_nr. The idea is that you can set them both at once by using the parent, or use different values with the children, in which case the parent becomes useless (and is actually greyed out).

So if we had a Support Base Width with Support Inner Base Width and Support Outer Base Width as children, what would be the value of the Support Base Width ? The innner/outer also don't have the same limits, so they are impossible to combine into a parent.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do remember a discussion with Jaime about the parenting. We

When adding a parent<->child setting, then the parent setting should never be used by the engine and the child setting should dictate how the setting is used. They can very well have different limits etc.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then could you make a proposal for the parent definition ? I fail to see how this can work 🤔

{
"label": "Support Base Inside Width",
"description": "The width of the inside support base. Increasing this value will result in a sturdier support. If this setting is too low, the supports will not have a sturdy inside base.",
"value": "extruderValue(support_extruder_nr, 'support_brim_width')",
"type": "float",
"unit": "mm",
"enabled": "support_enable and resolveOrValue('support_brim_enable')",
"default_value": 0,
"minimum_value": "0",
"maximum_value": "extruderValue(support_extruder_nr, 'support_brim_width')",
"limit_to_extruder": "support_extruder_nr",
"settable_per_mesh": false,
"settable_per_extruder": true
},
"support_base_outside_width":
{
"label": "Support Base Outside Width",
"description": "The width of the outside support base. Increasing this value will result in a sturdier support because the base will be wider. If this setting is too low, the supports will not have a sturdy base.",
"value": "extruderValue(support_extruder_nr, 'brim_width')",
"type": "float",
"unit": "mm",
"enabled": "support_enable and resolveOrValue('support_outer_brim_enable')",
"default_value": 0,
"minimum_value": "0",
"maximum_value": "extruderValue(support_extruder_nr, 'brim_width') if resolveOrValue('adhesion_type') == 'brim' else None",
"limit_to_extruder": "support_extruder_nr",
"settable_per_mesh": false,
"settable_per_extruder": true
},
"support_base_curve_magnitude":
{
"label": "Support Base Slope",
"description": "The magnitude factor used for the slope of the support base. If you increase this value, the base will become slimmer. If you decrease it, the base will become thicker.",
"type": "float",
"enabled": "support_enable",
"default_value": 4,
"minimum_value": "0",
"maximum_value": "10",
"limit_to_extruder": "support_extruder_nr",
"settable_per_mesh": false,
"settable_per_extruder": true,
"children":
{
"support_inside_base_curve_magnitude":
{
"label": "Support Inside Base Slope",
"description": "The magnitude factor used for the slope of the inside support base. If you increase this value, the base will become slimmer. If you decrease it, the base will become thicker.",
"value": "support_base_curve_magnitude",
"type": "float",
"enabled": "support_enable and resolveOrValue('support_brim_enable')",
"default_value": 4,
"minimum_value": "0",
"maximum_value": "10",
"limit_to_extruder": "support_extruder_nr",
"settable_per_mesh": false,
"settable_per_extruder": true
},
"support_outside_base_curve_magnitude":
{
"label": "Support Outside Base Slope",
"description": "The magnitude factor used for the slope of the outside support base. If you increase this value, the base will become slimmer. If you decrease it, the base will become thicker.",
"value": "support_base_curve_magnitude",
"type": "float",
"enabled": "support_enable and resolveOrValue('support_outer_brim_enable')",
"default_value": 4,
"minimum_value": "0",
"maximum_value": "10",
"limit_to_extruder": "support_extruder_nr",
"settable_per_mesh": false,
"settable_per_extruder": true
}
}
},
"support_z_distance":
{
"label": "Support Z Distance",
Expand Down
Loading