1318{
1319 ConfigOptionDef* def;
1320
1321
1322 const int max_temp = 1500;
1323
1324 def = this->
add(
"reduce_crossing_wall",
coBool);
1325 def->label =
L(
"Avoid crossing walls");
1326 def->category =
L(
"Quality");
1327 def->tooltip =
L(
"This detours to avoid traveling across walls, which may cause blobs on the surface.");
1330
1332 def->label =
L(
"Avoid crossing walls - Max detour length");
1333 def->category =
L(
"Quality");
1334 def->tooltip =
L(
"Maximum detour distance for avoiding crossing wall: The printer won\'t detour if the detour distance is larger than this value. Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path. A value of 0 will disable this.");
1335 def->sidetext =
L(
"mm or %");
1336 def->min = 0;
1337 def->max_literal = 1000;
1339 def->set_default_value(new ConfigOptionFloatOrPercent(0., false));
1340
1341
1342 def = this->
add(
"supertack_plate_temp",
coInts);
1343 def->label =
L(
"Other layers");
1344 def->tooltip =
L(
"This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack.");
1345 def->sidetext =
L(u8
"\u2103" );
1346 def->full_label =
L(
"Bed temperature");
1347 def->min = 0;
1348 def->max = 120;
1350
1351 def = this->
add(
"cool_plate_temp",
coInts);
1352 def->label =
L(
"Other layers");
1353 def->tooltip =
L(
"This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate.");
1354 def->sidetext =
L(u8
"\u2103" );
1355 def->full_label =
L(
"Bed temperature");
1356 def->min = 0;
1357 def->max = 300;
1359
1360 def = this->
add(
"textured_cool_plate_temp",
coInts);
1361 def->label =
L(
"Other layers");
1362 def->tooltip =
L(
"This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured Cool Plate.");
1363 def->sidetext =
L(u8
"\u2103" );
1364 def->full_label =
L(
"Bed temperature");
1365 def->min = 0;
1366 def->max = 300;
1368
1369 def = this->
add(
"eng_plate_temp",
coInts);
1370 def->label =
L(
"Other layers");
1371 def->tooltip =
L(
"This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Engineering Plate.");
1372 def->sidetext =
L(u8
"\u2103" );
1373 def->full_label =
L(
"Bed temperature");
1374 def->min = 0;
1375 def->max = 300;
1377
1378 def = this->
add(
"hot_plate_temp",
coInts);
1379 def->label =
L(
"Other layers");
1380 def->tooltip =
L(
"This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the High Temp Plate.");
1381 def->sidetext =
L(u8
"\u2103" );
1382 def->full_label =
L(
"Bed temperature");
1383 def->min = 0;
1384 def->max = 300;
1386
1387 def = this->
add(
"textured_plate_temp",
coInts);
1388 def->label =
L(
"Other layers");
1389 def->tooltip =
L(
"This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured PEI Plate.");
1390 def->sidetext =
L(u8
"\u2103" );
1391 def->full_label =
L(
"Bed temperature");
1392 def->min = 0;
1393 def->max = 300;
1395
1396 def = this->
add(
"supertack_plate_temp_initial_layer",
coInts);
1397 def->label =
L(
"First layer");
1398 def->full_label =
L(
"First layer bed temperature");
1399 def->tooltip =
L(
"This is the bed temperature of the first layer. A value of 0 means the filament does not support printing on the Cool Plate SuperTack.");
1400 def->sidetext =
L(u8
"\u2103" );
1401 def->min = 0;
1402 def->max = 120;
1404
1405 def = this->
add(
"cool_plate_temp_initial_layer",
coInts);
1406 def->label =
L(
"First layer");
1407 def->full_label =
L(
"First layer bed temperature");
1408 def->tooltip =
L(
"This is the bed temperature of the first layer. A value of 0 means the filament does not support printing on the Cool Plate.");
1409 def->sidetext =
L(u8
"\u2103" );
1410 def->min = 0;
1411 def->max = 120;
1413
1414 def = this->
add(
"textured_cool_plate_temp_initial_layer",
coInts);
1415 def->label =
L(
"First layer");
1416 def->full_label =
L(
"First layer bed temperature");
1417 def->tooltip =
L(
"This is the bed temperature of the first layer. A value of 0 means the filament does not support printing on the Textured Cool Plate.");
1418 def->sidetext =
L(u8
"\u2103" );
1419 def->min = 0;
1420 def->max = 120;
1422
1423 def = this->
add(
"eng_plate_temp_initial_layer",
coInts);
1424 def->label =
L(
"First layer");
1425 def->full_label =
L(
"First layer bed temperature");
1426 def->tooltip =
L(
"This is the bed temperature of the first layer. A value of 0 means the filament does not support printing on the Engineering Plate.");
1427 def->sidetext =
L(u8
"\u2103" );
1428 def->min = 0;
1429 def->max = 300;
1431
1432 def = this->
add(
"hot_plate_temp_initial_layer",
coInts);
1433 def->label =
L(
"First layer");
1434 def->full_label =
L(
"First layer bed temperature");
1435 def->tooltip =
L(
"This is the bed temperature of the first layer. A value of 0 means the filament does not support printing on the High Temp Plate.");
1436 def->sidetext =
L(u8
"\u2103" );
1437 def->max = 300;
1439
1440 def = this->
add(
"textured_plate_temp_initial_layer",
coInts);
1441 def->label =
L(
"First layer");
1442 def->full_label =
L(
"First layer bed temperature");
1443 def->tooltip =
L(
"This is the bed temperature of the first layer. A value of 0 means the filament does not support printing on the Textured PEI Plate.");
1444 def->sidetext =
L(u8
"\u2103" );
1445 def->min = 0;
1446 def->max = 300;
1448
1449 def = this->
add(
"curr_bed_type",
coEnum);
1450 def->label =
L(
"Bed type");
1451 def->tooltip =
L(
"Plate types supported by the printer");
1454
1455 def->enum_values.emplace_back("Cool Plate");
1456 def->enum_values.emplace_back("Engineering Plate");
1457 def->enum_values.emplace_back("High Temp Plate");
1458 def->enum_values.emplace_back("Textured PEI Plate");
1459 def->enum_values.emplace_back("Textured Cool Plate");
1460 def->enum_values.emplace_back("Supertack Plate");
1461 def->enum_labels.emplace_back(
L(
"Smooth Cool Plate"));
1462 def->enum_labels.emplace_back(
L(
"Engineering Plate"));
1463 def->enum_labels.emplace_back(
L(
"Smooth High Temp Plate"));
1464 def->enum_labels.emplace_back(
L(
"Textured PEI Plate"));
1465 def->enum_labels.emplace_back(
L(
"Textured Cool Plate"));
1466 def->enum_labels.emplace_back(
L(
"Cool Plate (SuperTack)"));
1467 def->set_default_value(
new ConfigOptionEnum<BedType>(
btPC));
1468
1469
1470
1472 def->label =
L(
"Default bed type");
1473 def->tooltip =
L(
"Default bed type for the printer (supports both numeric and string format).");
1476
1477
1478 def = this->
add(
"first_layer_print_sequence",
coInts);
1479 def->label =
L(
"First layer print sequence");
1480 def->min = 0;
1481 def->max = 16;
1483
1484 def = this->
add(
"other_layers_print_sequence",
coInts);
1485 def->label =
L(
"Other layers print sequence");
1486 def->min = 0;
1487 def->max = 16;
1489
1490 def = this->
add(
"other_layers_print_sequence_nums",
coInt);
1491 def->label =
L(
"The number of other layers print sequence");
1492 def->set_default_value(new ConfigOptionInt{0});
1493
1494 def = this->
add(
"first_layer_sequence_choice",
coEnum);
1495 def->category =
L(
"Quality");
1496 def->label =
L(
"First layer filament sequence");
1498 def->enum_values.push_back("Auto");
1499 def->enum_values.push_back("Customize");
1500 def->enum_labels.push_back(
L(
"Auto"));
1501 def->enum_labels.push_back(
L(
"Customize"));
1503 def->set_default_value(
new ConfigOptionEnum<LayerSeq>(
flsAuto));
1504
1505 def = this->
add(
"other_layers_sequence_choice",
coEnum);
1506 def->category =
L(
"Quality");
1507 def->label =
L(
"Other layers filament sequence");
1509 def->enum_values.push_back("Auto");
1510 def->enum_values.push_back("Customize");
1511 def->enum_labels.push_back(
L(
"Auto"));
1512 def->enum_labels.push_back(
L(
"Customize"));
1514 def->set_default_value(
new ConfigOptionEnum<LayerSeq>(
flsAuto));
1515
1516 def = this->
add(
"before_layer_change_gcode",
coString);
1517 def->label =
L(
"Before layer change G-code");
1518 def->tooltip =
L(
"This G-code is inserted at every layer change before the Z lift.");
1519 def->multiline = true;
1520 def->full_width = true;
1521 def->height = 5;
1524
1525 def = this->
add(
"bottom_shell_layers",
coInt);
1526 def->label =
L(
"Bottom shell layers");
1527 def->category =
L(
"Strength");
1528 def->sidetext =
L(
"layers");
1529 def->tooltip =
L(
"This is the number of solid layers of bottom shell, including the bottom "
1530 "surface layer. When the thickness calculated by this value is thinner "
1531 "than bottom shell thickness, the bottom shell layers will be increased.");
1532 def->full_label =
L(
"Bottom shell layers");
1533 def->min = 0;
1534 def->set_default_value(new ConfigOptionInt(3));
1535
1536 def = this->
add(
"bottom_shell_thickness",
coFloat);
1537 def->label =
L(
"Bottom shell thickness");
1538 def->category =
L(
"Strength");
1539 def->tooltip =
L(
"The number of bottom solid layers is increased when slicing if the thickness calculated by bottom shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and the thickness of the bottom shell is determined simply by the number of bottom shell layers.");
1540 def->full_label =
L(
"Bottom shell thickness");
1541 def->sidetext =
L(
"mm");
1542 def->min = 0;
1544
1545 def = this->
add(
"bottom_color_penetration_layers",
coInt);
1546 def->label =
L(
"Bottom paint penetration layers");
1547 def->category =
L(
"Strength");
1548 def->sidetext =
L(
"layers");
1549 def->tooltip =
L(
"The number of layers, including the bottom surface layer, that take the color painted on a bottom surface. "
1550 "Set to 0 to use the bottom shell layers. A value larger than the bottom shell also colors the sparse "
1551 "infill above the painted area.");
1552 def->min = 0;
1554 def->set_default_value(new ConfigOptionInt(0));
1555
1556 def = this->
add(
"gap_fill_target",
coEnum);
1557 def->label =
L(
"Apply gap fill");
1558 def->category =
L(
"Strength");
1559 def->tooltip =
L(
"Enables gap fill for the selected solid surfaces. The minimum gap length that will be filled can be controlled "
1560 "from the filter out tiny gaps option below.\n\n"
1561 "Options:\n"
1562 "1. Everywhere: Applies gap fill to top, bottom and internal solid surfaces for maximum strength\n"
1563 "2. Top and Bottom surfaces: Applies gap fill to top and bottom surfaces only, balancing print speed, "
1564 "reducing potential over extrusion in the solid infill and making sure the top and bottom surfaces have "
1565 "no pinhole gaps\n"
1566 "3. Nowhere: Disables gap fill for all solid infill areas\n\n"
1567 "Note that if using the classic perimeter generator, gap fill may also be generated between perimeters, "
1568 "if a full width line cannot fit between them. That perimeter gap fill is not controlled by this setting.\n\n"
1569 "If you would like all gap fill, including the classic perimeter generated one, removed, "
1570 "set the filter out tiny gaps value to a large number, like 999999.\n\n"
1571 "However this is not advised, as gap fill between perimeters is contributing to the model's strength. "
1572 "For models where excessive gap fill is generated between perimeters, a better option would be to "
1573 "switch to the arachne wall generator and use this option to control whether the cosmetic top and "
1574 "bottom surface gap fill is generated.");
1576 def->enum_values.push_back("everywhere");
1577 def->enum_values.push_back("topbottom");
1578 def->enum_values.push_back("nowhere");
1579 def->enum_labels.push_back(
L(
"Everywhere"));
1580 def->enum_labels.push_back(
L(
"Top and bottom surfaces"));
1581 def->enum_labels.push_back(
L(
"Nowhere"));
1583 def->set_default_value(
new ConfigOptionEnum<GapFillTarget>(
gftNowhere));
1584
1585 def = this->
add(
"enable_overhang_bridge_fan",
coBools);
1586 def->label =
L(
"Force cooling for overhangs and bridges");
1587 def->tooltip =
L(
"Enable this option to allow adjustment of the part cooling fan speed for specifically for overhangs, internal and external "
1588 "bridges. Setting the fan speed specifically for these features can improve overall print quality and reduce warping.");
1591
1592 def = this->
add(
"overhang_fan_speed",
coInts);
1593 def->label =
L(
"Overhangs and external bridges fan speed");
1594 def->tooltip =
L(
"Use this part cooling fan speed when printing bridges or overhang walls with an overhang threshold that exceeds "
1595 "the value set in the 'Overhangs cooling threshold' parameter above. Increasing the cooling specifically for overhangs "
1596 "and bridges can improve the overall print quality of these features.\n\n"
1597 "Please note, this fan speed is clamped on the lower end by the minimum fan speed threshold set above. It is also adjusted "
1598 "upwards up to the maximum fan speed threshold when the minimum layer time threshold is not met.");
1599 def->sidetext = "%";
1600 def->min = 0;
1601 def->max = 100;
1604
1605 def = this->
add(
"overhang_fan_threshold",
coEnums);
1606 def->label =
L(
"Overhang cooling activation threshold");
1607
1608 def->tooltip =
L(
"When the overhang exceeds this specified threshold, force the cooling fan to run at the 'Overhang Fan Speed' set below. "
1609 "This threshold is expressed as a percentage, indicating the portion of each line's width that is unsupported by the layer "
1610 "beneath it. Setting this value to 0% forces the cooling fan to run for all outer walls, regardless of the overhang degree.");
1611
1614 def->enum_values.emplace_back("0%");
1615 def->enum_values.emplace_back("10%");
1616 def->enum_values.emplace_back("25%");
1617 def->enum_values.emplace_back("50%");
1618 def->enum_values.emplace_back("75%");
1619 def->enum_values.emplace_back("95%");
1620 def->enum_labels.emplace_back("0%");
1621 def->enum_labels.emplace_back("10%");
1622 def->enum_labels.emplace_back("25%");
1623 def->enum_labels.emplace_back("50%");
1624 def->enum_labels.emplace_back("75%");
1625 def->enum_labels.emplace_back("95%");
1627
1629 def->label =
L(
"External bridge infill direction");
1630 def->category =
L(
"Strength");
1631
1632 def->tooltip =
L(
"External Bridging angle override.\n"
1633 "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
1634 "Otherwise the provided angle will be used according to:\n"
1635 " - The absolute coordinates\n"
1636 " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
1637 " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n\n"
1638 "Use 180° for zero absolute angle.");
1639 def->sidetext = u8"°";
1640 def->min = 0;
1641 def->max = 180;
1644
1645
1646 def = this->
add(
"internal_bridge_angle",
coFloat);
1647 def->label =
L(
"Internal bridge infill direction");
1648 def->category =
L(
"Strength");
1649 def->tooltip =
L(
"Internal Bridging angle override.\n"
1650 "If left to zero, the bridging angle will be calculated automatically for each specific bridge.\n"
1651 "Otherwise the provided angle will be used according to:\n"
1652 " - The absolute coordinates\n"
1653 " - The absolute coordinates + Model rotation: If Align directions to model is enabled\n"
1654 " - The optimal automatic angle + this value: If 'Relative Bridge Angle' is enabled\n\n"
1655 "Use 180° for zero absolute angle.");
1656 def->sidetext = u8"°";
1657 def->min = 0;
1658 def->max = 180;
1661
1662
1663 def = this->
add(
"relative_bridge_angle",
coBool);
1664 def->label =
L(
"Relative bridge angle");
1665 def->category =
L(
"Strength");
1666 def->tooltip =
L(
"When enabled, the bridge angle values are added to the automatically calculated bridge direction instead of overriding it.");
1668 def->set_default_value(new ConfigOptionBool(false));
1669
1671 def->label =
L(
"External bridge density");
1672 def->category =
L(
"Strength");
1673 def->tooltip =
L(
"Controls the density (spacing) of external bridge lines.\n"
1674 "Theoretically, 100% means a solid bridge, but due to the tendency of bridge extrusions to sag, 100% may not be sufficient.\n\n"
1675 "- Higher than 100% density (Recommended Max 125%):\n"
1676 " - Pros: Produces smoother bridge surfaces, as overlapping lines provide additional support during printing.\n"
1677 " - Cons: Can cause overextrusion, which may reduce lower and upper surface quality and increase the risk of warping.\n\n"
1678 "- Lower than 100% density (Min 10%):\n"
1679 " - Pros: Can create a string-like first layer. Faster and with better cooling because there is more space for air to circulate around the extruded bridge.\n"
1680 " - Cons: May lead to sagging and poorer surface finish.");
1681 def->sidetext = "%";
1682 def->min = 10;
1683 def->max = 125;
1685 def->set_default_value(new ConfigOptionPercent(100));
1686
1688 def->label =
L(
"Internal bridge density");
1689 def->category =
L(
"Strength");
1690 def->tooltip =
L(
"Controls the density (spacing) of internal bridge lines.\n"
1691 "Internal bridges act as intermediate support between sparse infill and top solid infill and can strongly affect top surface quality.\n\n"
1692 "- Higher than 100% density (Recommended Max 125%):\n"
1693 " - Pros: Improves internal bridge strength and support under top layers, reducing sagging and improving top-surface finish.\n"
1694 " - Cons: Increases material use and print time; excessive density may cause overextrusion and internal stresses.\n\n"
1695 "- Lower than 100% density (Min 10%):\n"
1696 " - Pros: Can reduce pillowing and improve cooling (more airflow through the bridge), and may speed up printing.\n"
1697 " - Cons: May reduce internal support, increasing the risk of sagging and top surface defects.\n\n"
1698 "This option works particularly well when combined with the second internal bridge over infill option to improve bridging further before solid infill is extruded.");
1699 def->sidetext = "%";
1700 def->min = 10;
1701 def->max = 125;
1703 def->set_default_value(new ConfigOptionPercent(100));
1704
1706 def->label =
L(
"Bridge flow ratio");
1707 def->category =
L(
"Quality");
1708 def->tooltip =
L(
"This value governs the thickness of the external (visible) bridge layer.\n"
1709 "Values above 1.0: Increase the amount of material while maintaining line spacing. This can improve line contact and strength.\n"
1710 "Values below 1.0: Reduce the amount of material while adjusting line spacing to maintain contact. This can improve sagging.\n\n"
1711 "The actual bridge flow used is calculated by multiplying this value with the filament flow ratio, and if set, the object's flow ratio.");
1712 def->min = 0;
1713 def->max = 2.0;
1716
1718 def->label =
L(
"Bridge");
1719 def->category =
L(
"Quality");
1720 def->tooltip =
L(
"Line width of the Bridge. If expressed as a %, it will be computed over the nozzle diameter.\n"
1721 "Recommended to use with a higher Bridge density or Bridge flow ratio.\n\n"
1722 "The maximum value is 100% or the nozzle diameter.\n"
1723 "If set to 0, the line width will match the Internal solid infill width, or the nozzle diameter for thick bridges.");
1724 def->sidetext =
L(
"mm or %");
1725 def->ratio_over = "nozzle_diameter";
1726 def->min = 0;
1727 def->max = 100;
1728 def->max_literal = 10;
1730 def->set_default_value(new ConfigOptionFloatOrPercent(100., true));
1731
1732 def = this->
add(
"internal_bridge_flow",
coFloat);
1733 def->label =
L(
"Internal bridge flow ratio");
1734 def->category =
L(
"Quality");
1735 def->tooltip =
L(
"This value governs the thickness of the internal bridge layer. This is the first layer over sparse infill so increasing it may increase strength and upper layer quality.\n"
1736 "Values above 1.0: Increase the amount of material while maintaining line spacing. This can improve line contact and strength.\n"
1737 "Values below 1.0: Reduce the amount of material while adjusting line spacing to maintain contact. This can improve sagging.\n\n"
1738 "The actual bridge flow used is calculated by multiplying this value with the filament flow ratio, and if set, the object's flow ratio.");
1739 def->min = 0;
1740 def->max = 2.0;
1743
1744 def = this->
add(
"top_solid_infill_flow_ratio",
coFloats);
1745 def->label =
L(
"Top surface flow ratio");
1746 def->category =
L(
"Advanced");
1747 def->tooltip =
L(
"This factor affects the amount of material for top solid infill. "
1748 "You can decrease it slightly to have smooth surface finish.\n\n"
1749 "The actual top surface flow used is calculated by multiplying this value with the filament flow ratio, and if set, the object's flow ratio.");
1750 def->min = 0;
1751 def->max = 2;
1753 def->nullable = true;
1755
1756 def = this->
add(
"bottom_solid_infill_flow_ratio",
coFloat);
1757 def->label =
L(
"Bottom surface flow ratio");
1758 def->category =
L(
"Advanced");
1759 def->tooltip =
L(
"This factor affects the amount of material for bottom solid infill.\n\n"
1760 "The actual bottom solid infill flow used is calculated by multiplying this value with the filament flow ratio, and if set, the object's flow ratio.");
1761 def->min = 0;
1762 def->max = 2;
1765
1766 def = this->
add(
"set_other_flow_ratios",
coBool);
1767 def->label =
L(
"Set other flow ratios");
1768 def->category =
L(
"Advanced");
1769 def->tooltip =
L(
"Change flow ratios for other extrusion path types.");
1771 def->set_default_value(new ConfigOptionBool(false));
1772
1773 def = this->
add(
"first_layer_flow_ratio",
coFloat);
1774 def->label =
L(
"First layer flow ratio");
1775 def->category =
L(
"Advanced");
1776 def->tooltip =
L(
"This factor affects the amount of material on the first layer for the extrusion path roles listed in this section.\n\n"
1777 "For the first layer, the actual flow ratio for each path role (does not affect brims and skirts) will be multiplied by this value.");
1778 def->min = 0;
1779 def->max = 2;
1782
1783 def = this->
add(
"outer_wall_flow_ratio",
coFloat);
1784 def->label =
L(
"Outer wall flow ratio");
1785 def->category =
L(
"Advanced");
1786 def->tooltip =
L(
"This factor affects the amount of material for outer walls.\n\n"
1787 "The actual outer wall flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio.");
1788 def->min = 0;
1789 def->max = 2;
1792
1793 def = this->
add(
"inner_wall_flow_ratio",
coFloat);
1794 def->label =
L(
"Inner wall flow ratio");
1795 def->category =
L(
"Advanced");
1796 def->tooltip =
L(
"This factor affects the amount of material for inner walls.\n\n"
1797 "The actual inner wall flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio.");
1798 def->min = 0;
1799 def->max = 2;
1802
1803 def = this->
add(
"overhang_flow_ratio",
coFloat);
1804 def->label =
L(
"Overhang flow ratio");
1805 def->category =
L(
"Advanced");
1806 def->tooltip =
L(
"This factor affects the amount of material for overhangs.\n\n"
1807 "The actual overhang flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio.");
1808 def->min = 0;
1809 def->max = 2;
1812
1813 def = this->
add(
"sparse_infill_flow_ratio",
coFloat);
1814 def->label =
L(
"Sparse infill flow ratio");
1815 def->category =
L(
"Advanced");
1816 def->tooltip =
L(
"This factor affects the amount of material for sparse infill.\n\n"
1817 "The actual sparse infill flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio.");
1818 def->min = 0;
1819 def->max = 2;
1822
1823 def = this->
add(
"internal_solid_infill_flow_ratio",
coFloat);
1824 def->label =
L(
"Internal solid infill flow ratio");
1825 def->category =
L(
"Advanced");
1826 def->tooltip =
L(
"This factor affects the amount of material for internal solid infill.\n\n"
1827 "The actual internal solid infill flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio.");
1828 def->min = 0;
1829 def->max = 2;
1832
1833 def = this->
add(
"gap_fill_flow_ratio",
coFloat);
1834 def->label =
L(
"Gap fill flow ratio");
1835 def->category =
L(
"Advanced");
1836 def->tooltip =
L(
"This factor affects the amount of material for filling the gaps.\n\n"
1837 "The actual gap filling flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio.");
1838 def->min = 0;
1839 def->max = 2;
1842
1843 def = this->
add(
"support_flow_ratio",
coFloat);
1844 def->label =
L(
"Support flow ratio");
1845 def->category =
L(
"Advanced");
1846 def->tooltip =
L(
"This factor affects the amount of material for support.\n\n"
1847 "The actual support flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio.");
1848 def->min = 0;
1849 def->max = 2;
1852
1853 def = this->
add(
"support_interface_flow_ratio",
coFloat);
1854 def->label =
L(
"Support interface flow ratio");
1855 def->category =
L(
"Advanced");
1856 def->tooltip =
L(
"This factor affects the amount of material for the support interface.\n\n"
1857 "The actual support interface flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio.");
1858 def->min = 0;
1859 def->max = 2;
1862
1863 def = this->
add(
"precise_outer_wall",
coBool);
1864 def->label =
L(
"Precise wall");
1865 def->category =
L(
"Quality");
1866 def->tooltip =
L(
"Improve shell precision by adjusting outer wall spacing. This also improves layer consistency. NOTE: This option "
1867 "will be ignored for outer-inner or inner-outer-inner wall sequences.");
1868 def->set_default_value(new ConfigOptionBool{true});
1869
1870 def = this->
add(
"only_one_wall_top",
coBool);
1871 def->label =
L(
"Only one wall on top surfaces");
1872 def->category =
L(
"Quality");
1873 def->tooltip =
L(
"Use only one wall on flat top surfaces, to give more space to the top infill pattern.");
1874 def->set_default_value(new ConfigOptionBool(false));
1875
1876
1878 def->label =
L(
"One wall threshold");
1879 def->category =
L(
"Quality");
1880
1881 def->tooltip =
L(
"If a top surface has to be printed and it's partially covered by another layer, it won't be considered at a top layer where its width is below this value."
1882 " This can be useful to not let the 'one perimeter on top' trigger on surface that should be covered only by perimeters."
1883 " This value can be a mm or a % of the perimeter extrusion width."
1884 "\nWarning: If enabled, artifacts can be created if you have some thin features on the next layer, like letters. Set this setting to 0 to remove these artifacts.");
1885 def->sidetext =
L(
"mm or %");
1886 def->ratio_over = "inner_wall_line_width";
1887 def->min = 0;
1888 def->max_literal = 15;
1890 def->set_default_value(new ConfigOptionFloatOrPercent(300, true));
1891
1892 def = this->
add(
"only_one_wall_first_layer",
coBool);
1893 def->label =
L(
"Only one wall on first layer");
1894 def->category =
L(
"Quality");
1895 def->tooltip =
L(
"Use only one wall on first layer, to give more space to the bottom infill pattern.");
1896 def->set_default_value(new ConfigOptionBool(false));
1897
1898 def = this->
add(
"extra_perimeters_on_overhangs",
coBool);
1899 def->label =
L(
"Extra perimeters on overhangs");
1900 def->category =
L(
"Quality");
1901 def->tooltip =
L(
"Create additional perimeter paths over steep overhangs and areas where bridges cannot be anchored.");
1903 def->set_default_value(new ConfigOptionBool(false));
1904
1905 def = this->
add(
"overhang_reverse",
coBool);
1906 def->label =
L(
"Reverse on even");
1907 def->full_label =
L(
"Overhang reversal");
1908 def->category =
L(
"Quality");
1909 def->tooltip =
L(
"Extrude perimeters that have a part over an overhang in the reverse direction on even layers. This alternating pattern can drastically improve steep overhangs.\n\nThis setting can also help reduce part warping due to the reduction of stresses in the part walls.");
1911 def->set_default_value(new ConfigOptionBool(false));
1912
1913 def = this->
add(
"overhang_reverse_internal_only",
coBool);
1914 def->label =
L(
"Reverse only internal perimeters");
1915 def->full_label =
L(
"Reverse only internal perimeters");
1916 def->category =
L(
"Quality");
1917 def->tooltip =
L(
"Apply the reverse perimeters logic only on internal perimeters.\n\n"
1918 "This setting greatly reduces part stresses as they are now distributed in alternating directions. "
1919 "This should reduce part warping while also maintaining external wall quality. "
1920 "This feature can be very useful for warp prone material, like ABS/ASA, and also for elastic filaments, like TPU and Silk PLA. "
1921 "It can also help reduce warping on floating regions over supports.\n\nFor this setting to be the most effective, "
1922 "it is recommended to set the Reverse Threshold to 0 so that all internal walls print in alternating directions on even layers irrespective of their overhang degree.");
1924 def->set_default_value(new ConfigOptionBool(false));
1925
1926 def = this->
add(
"counterbore_hole_bridging",
coEnum);
1927 def->label =
L(
"Bridge counterbore holes");
1928 def->category =
L(
"Quality");
1930 "This option creates bridges for counterbore holes, allowing them to be printed without support. Available modes include:\n"
1931 "1. None: No bridge is created\n"
1932 "2. Partially Bridged: Only a part of the unsupported area will be bridged\n"
1933 "3. Sacrificial Layer: A full sacrificial bridge layer is created");
1936 def->enum_values.emplace_back("none");
1937 def->enum_values.emplace_back("partiallybridge");
1938 def->enum_values.emplace_back("sacrificiallayer");
1939 def->enum_labels.emplace_back(
L(
"None"));
1940 def->enum_labels.emplace_back(
L(
"Partially bridged"));
1941 def->enum_labels.emplace_back(
L(
"Sacrificial layer"));
1942 def->set_default_value(
new ConfigOptionEnum<CounterboreHoleBridgingOption>(
chbNone));
1943
1945 def->label =
L(
"Reverse threshold");
1946 def->full_label =
L(
"Overhang reversal threshold");
1947 def->category =
L(
"Quality");
1948
1949 def->tooltip =
L(
"Number of mm the overhang need to be for the reversal to be considered useful. Can be a % of the perimeter width."
1950 "\nValue 0 enables reversal on every even layers regardless."
1951 "\nWhen Detect overhang wall is not enabled, this option is ignored and reversal happens on every even layers regardless.");
1952 def->sidetext =
L(
"mm or %");
1953 def->ratio_over = "line_width";
1954 def->min = 0;
1955 def->max_literal = 20;
1957 def->set_default_value(new ConfigOptionFloatOrPercent(50, true));
1958
1959 def = this->
add(
"enable_overhang_speed",
coBools);
1960 def->label =
L(
"Slow down for overhangs");
1961 def->category =
L(
"Speed");
1962 def->tooltip =
L(
"Enable this option to slow down when printing overhangs. The speeds for different overhang percentages are set below.");
1964 def->nullable = true;
1966
1967 def = this->
add(
"slowdown_for_curled_perimeters",
coBools);
1968 def->label =
L(
"Slow down for curled perimeters");
1969 def->category =
L(
"Speed");
1970
1971 def->tooltip =
L(
"Enable this option to slow down printing in areas where perimeters may have curled upwards.\n"
1972 "For example, additional slowdown will be applied when printing overhangs on sharp corners like the "
1973 "front of the Benchy hull, reducing curling which compounds over multiple layers.\n\n"
1974 "It is generally recommended to have this option switched on unless your printer cooling is powerful enough or the "
1975 "print speed is slow enough that perimeter curling does not happen. \n"
1976 "If printing with a high external perimeter speed, this parameter may introduce wall artifacts when slowing down, "
1977 "due to the potentially large variance in print speeds causing the extruder to be unable to keep up with the requested flow change.\n"
1978 "Root cause of these artifacts is most likely PA tuning being slightly off, especially when combined "
1979 "with a high PA smooth time.\n\n"
1980 "Recommendations when enabling this option:\n"
1981 "1. Reduce Pressure Advance smooth time to 0.015 - 0.02 so the extruder reacts quickly to the speed changes.\n"
1982 "2. Increase the minimum print speeds to limit the magnitude of the slowdown and reduce the variance between fast and slow segments.\n"
1983 "3. If artifacts still appear, enable Extrusion Rate Smoothing (ERS) to further smooth the flow transitions.\n\n"
1984 "Note: When this option is enabled, overhang perimeters are treated like overhangs, meaning the overhang speed is "
1985 "applied even if the overhanging perimeter is part of a bridge.\n"
1986 "For example, when the perimeters are 100% overhanging, with no wall supporting them from underneath, the 75% overhang speed will be applied, limited by the bridge speed.");
1988 def->nullable = true;
1990
1992 def->label = "10%";
1993 def->category =
L(
"Speed");
1994 def->full_label = "10%";
1995
1996
1997 def->sidetext =
L(
"mm/s or %");
1998 def->ratio_over = "outer_wall_speed";
1999 def->min = 0;
2001 def->nullable = true;
2003
2005 def->label = "25%";
2006 def->category =
L(
"Speed");
2007 def->full_label = "25%";
2008
2009
2010 def->sidetext =
L(
"mm/s or %");
2011 def->ratio_over = "outer_wall_speed";
2012 def->min = 0;
2014 def->nullable = true;
2016
2018 def->label = "50%";
2019 def->category =
L(
"Speed");
2020 def->full_label = "50%";
2021
2022
2023 def->sidetext =
L(
"mm/s or %");
2024 def->ratio_over = "outer_wall_speed";
2025 def->min = 0;
2027 def->nullable = true;
2029
2031 def->label = "75%";
2032 def->category =
L(
"Speed");
2033 def->full_label = "75%";
2034
2035
2036 def->sidetext =
L(
"mm/s or %");
2037 def->ratio_over = "outer_wall_speed";
2038 def->min = 0;
2040 def->nullable = true;
2042
2044 def->label =
L(
"External");
2045 def->category =
L(
"Speed");
2046 def->tooltip =
L(
"Speed of the externally visible bridge extrusions.\n\n"
2047 "In addition, if Slow down for curled perimeters is disabled, "
2048 "it will be the print speed of overhang walls that are supported by less than 13%, "
2049 "whether they are part of a bridge or an overhang.");
2050 def->sidetext =
L(
"mm/s");
2051 def->min = 1;
2053 def->nullable = true;
2055
2057 def->label =
L(
"Internal");
2058 def->category =
L(
"Speed");
2059 def->tooltip =
L(
"Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%.");
2060 def->sidetext =
L(
"mm/s or %");
2061 def->ratio_over = "bridge_speed";
2062 def->min = 1;
2064 def->nullable = true;
2066
2068 def->label =
L(
"Brim width");
2069 def->category =
L(
"Support");
2070 def->tooltip =
L(
"This is the distance from the model to the outermost brim line.");
2071 def->sidetext =
L(
"mm");
2072 def->min = 0;
2073 def->max = 100;
2076
2077 def = this->
add(
"leading_brim_length",
coFloat);
2078 def->label =
L(
"Leading brim length");
2079 def->category =
L(
"Support");
2080 def->tooltip =
L(
"Belt printers only. Extends the brim AHEAD of the object along the belt, on "
2081 "every downhill-facing edge of its contact area - both the object's first "
2082 "contact with the belt and any island that lands later. This apron is laid "
2083 "onto the belt before the object reaches it, so the leading edge has "
2084 "something already stuck down to hold on to.\n\n"
2085 "Measured on the belt surface, and added on top of Brim width: the brim "
2086 "reaches Brim-object gap + Leading brim length + Brim width ahead of the "
2087 "object. Set Brim-object gap to 0, or the apron will not touch the object it "
2088 "is meant to anchor.\n\n"
2089 "On a tilted belt each layer lays one strip of the brim, so the thickness of "
2090 "the resulting brim sheet is set by flow rather than by layer height. Use "
2091 "Brim flow ratio to tune it.\n\n"
2092 "Set to 0 to disable.");
2093 def->sidetext =
L(
"mm");
2094 def->min = 0;
2095 def->max = 100;
2098
2099 def = this->
add(
"extra_brim_width",
coFloat);
2100 def->label =
L(
"Extra brim width");
2101 def->category =
L(
"Support");
2102 def->tooltip =
L(
"Belt printers only. Widens the brim SIDEWAYS, across the belt, without "
2103 "extending it further ahead of or behind the object. Use it when a part needs "
2104 "more grip along its length than Brim width alone gives.\n\n"
2105 "Measured on the belt surface, and added on top of Brim width: the brim "
2106 "reaches Brim-object gap + Brim width + Extra brim width to either side of "
2107 "the object. To extend the brim ahead of the object instead, use Leading brim "
2108 "length.\n\n"
2109 "Set to 0 to disable.");
2110 def->sidetext =
L(
"mm");
2111 def->min = 0;
2112 def->max = 100;
2115
2117 def->label =
L(
"Brim type");
2118 def->category =
L(
"Support");
2119 def->tooltip =
L(
"This controls the generation of the brim at outer and/or inner side of models. "
2120 "Auto means the brim width is analyzed and calculated automatically.");
2122 def->enum_values.emplace_back("auto_brim");
2123 def->enum_values.emplace_back("brim_ears");
2124 def->enum_values.emplace_back("painted");
2125 def->enum_values.emplace_back("outer_only");
2126 def->enum_values.emplace_back("inner_only");
2127 def->enum_values.emplace_back("outer_and_inner");
2128 def->enum_values.emplace_back("no_brim");
2129 def->enum_values.emplace_back("leading_edge_only");
2130 def->enum_labels.emplace_back(
L(
"Auto"));
2131 def->enum_labels.emplace_back(
L(
"Mouse ear"));
2132 def->enum_labels.emplace_back(
L(
"Painted"));
2133 def->enum_labels.emplace_back(
L(
"Outer brim only"));
2134 def->enum_labels.emplace_back(
L(
"Inner brim only"));
2135 def->enum_labels.emplace_back(
L(
"Outer and inner brim"));
2136 def->enum_labels.emplace_back(
L(
"No-brim"));
2137 def->enum_labels.emplace_back(
L(
"Leading edge only"));
2139 def->set_default_value(
new ConfigOptionEnum<BrimType>(
btAutoBrim));
2140
2142 def->label =
L(
"Brim-object gap");
2143 def->category =
L(
"Support");
2144 def->tooltip =
L(
"This creates a gap between the innermost brim line and the object and can make the brim easier to remove.");
2145 def->sidetext =
L(
"mm");
2146 def->min = 0;
2147 def->max = 2;
2150
2152 def->label =
L(
"Brim flow ratio");
2153 def->category =
L(
"Support");
2154 def->tooltip =
L(
"This factor affects the amount of material for brims.\n\n"
2155 "The actual brim flow used is calculated by multiplying this value by the filament flow ratio, and if set, the object's flow ratio.\n\n"
2156 "Note: The resulting value will not be affected by the first-layer flow ratio.");
2157 def->min = 0;
2158 def->max = 2;
2161
2162 def = this->
add(
"brim_use_efc_outline",
coBool);
2163 def->label =
L(
"Brim follows compensated outline");
2164 def->category =
L(
"Support");
2165 def->tooltip =
L(
"When enabled, the brim is aligned with the first-layer perimeter geometry after Elephant Foot Compensation is applied.\nThis option is intended for cases where Elephant Foot Compensation significantly alters the first-layer footprint.\n\nIf your current setup already works well, enabling it may be unnecessary and can cause the brim to fuse with upper layers.");
2167 def->set_default_value(new ConfigOptionBool(false));
2168
2169 def = this->
add(
"combine_brims",
coBool);
2170 def->label =
L(
"Combine brims");
2171 def->category =
L(
"Support");
2172 def->tooltip =
L(
"Combine multiple brims into one when they are close to each other. This can improve brim adhesion.");
2174 def->set_default_value(new ConfigOptionBool(false));
2175
2177 def->label =
L(
"Brim ears");
2178 def->category =
L(
"Support");
2179 def->tooltip =
L(
"Only draw brim over the sharp edges of the model.");
2181 def->set_default_value(new ConfigOptionBool(false));
2182
2183 def = this->
add(
"brim_ears_max_angle",
coFloat);
2184 def->label =
L(
"Brim ear max angle");
2185 def->category =
L(
"Support");
2186 def->tooltip =
L(
"Maximum angle to let a brim ear appear.\n"
2187 "If set to 0, no brim will be created.\n"
2188 "If set to ~180, brim will be created on everything but straight sections.");
2189 def->sidetext = u8"°";
2190 def->min = 0;
2191 def->max = 180;
2194
2195 def = this->
add(
"brim_ears_detection_length",
coFloat);
2196 def->label =
L(
"Brim ear detection radius");
2197 def->category =
L(
"Support");
2198 def->tooltip =
L(
"The geometry will be decimated before detecting sharp angles. "
2199 "This parameter indicates the minimum length of the deviation for the decimation.\n"
2200 "0 to deactivate.");
2201 def->sidetext =
L(
"mm");
2202 def->min = 0;
2205
2206 def = this->
add(
"brim_ears_outer_only",
coBool);
2207 def->label =
L(
"Brim ears outer only");
2208 def->category =
L(
"Support");
2209 def->tooltip =
L(
"Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections.");
2211 def->set_default_value(new ConfigOptionBool(false));
2212
2214 def->label =
L(
"Select printers");
2216 def->set_default_value(new ConfigOptionStrings());
2218
2219
2220 def = this->
add(
"upward_compatible_machine",
coStrings);
2221 def->label =
L(
"upward compatible machine");
2223 def->set_default_value(new ConfigOptionStrings());
2225
2226 def = this->
add(
"compatible_printers_condition",
coString);
2227 def->label =
L(
"Condition");
2228 def->tooltip =
L(
"A Boolean expression using the configuration values of an active printer profile. If this expression evaluates to true, this profile is considered compatible with the active printer profile.");
2232
2234 def->label =
L(
"Select profiles");
2236 def->set_default_value(new ConfigOptionStrings());
2238
2239 def = this->
add(
"compatible_prints_condition",
coString);
2240 def->label =
L(
"Condition");
2241 def->tooltip =
L(
"A Boolean expression using the configuration values of an active print profile. If this expression evaluates to true, this profile is considered compatible with the active print profile.");
2245
2246
2247
2248 def = this->
add(
"compatible_machine_expression_group",
coStrings);
2249 def->set_default_value(new ConfigOptionStrings());
2251 def = this->
add(
"compatible_process_expression_group",
coStrings);
2252 def->set_default_value(new ConfigOptionStrings());
2254
2255
2256 def = this->
add(
"different_settings_to_system",
coStrings);
2257 def->set_default_value(new ConfigOptionStrings());
2259
2260 def = this->
add(
"print_compatible_printers",
coStrings);
2261 def->set_default_value(new ConfigOptionStrings());
2263
2264 def = this->
add(
"print_sequence",
coEnum);
2265 def->label =
L(
"Print sequence");
2266 def->tooltip =
L(
"This determines the print sequence, allowing you to print layer-by-layer or object-by-object.");
2268 def->enum_values.push_back("by layer");
2269 def->enum_values.push_back("by object");
2270 def->enum_labels.push_back(
L(
"By layer"));
2271 def->enum_labels.push_back(
L(
"By object"));
2274
2276 def->label =
L(
"Intra-layer order");
2277 def->tooltip =
L(
"Order in which object instances are visited within a single layer, which controls how much "
2278 "travel is spent moving between them.\n\n"
2279 "Default: nearest-neighbor chaining, refined with 2-opt and crossing removal. A good general "
2280 "choice.\n"
2281 "As object list: instances are printed in the same order as the object list, without any path "
2282 "optimization. Use it when you need a predictable, manually controlled order.\n"
2283 "Best of all (shortest path): every strategy is evaluated and the shortest one is used. The "
2284 "object instance order is decided once for the whole print, while the ordering of individual "
2285 "islands is decided per layer, so different layers may end up using different strategies. "
2286 "Slightly slower to slice.\n"
2287 "Snake: serpentine row-by-row traversal, refined with 2-opt. Well suited to regular grids of "
2288 "many small parts.\n\n"
2289 "With multiple filaments or tools in the same layer, minimizing tool changes takes priority: "
2290 "objects are grouped by filament first and this setting only orders the instances within each "
2291 "filament group, so the overall sequence may not look like the shortest path across the plate.");
2293 def->enum_values.push_back("default");
2294 def->enum_values.push_back("as_obj_list");
2295 def->enum_values.push_back("best_of");
2296 def->enum_values.push_back("snake");
2297 def->enum_labels.push_back(
L(
"Default"));
2298 def->enum_labels.push_back(
L(
"As object list"));
2299 def->enum_labels.push_back(
L(
"Best of all (shortest path)"));
2300 def->enum_labels.push_back(
L(
"Snake"));
2303
2304 def = this->
add(
"slow_down_for_layer_cooling",
coBools);
2305 def->label =
L(
"Slow printing down for better layer cooling");
2306 def->tooltip =
L(
"Enable this option to slow printing speed down to ensure that the final layer time is not shorter than the layer time threshold in \"Max fan speed threshold\", so that the layer can be cooled for a longer time. This can improve the quality for small details.");
2308
2309 def = this->
add(
"default_acceleration",
coFloats);
2310 def->label =
L(
"Normal printing");
2311 def->category =
L(
"Speed");
2312 def->tooltip =
L(
"This is the default acceleration for both normal printing and travel after the first layer.");
2313 def->sidetext =
L(u8
"mm/s²");
2314 def->min = 0;
2316 def->nullable = true;
2318
2320 def->label =
L(
"Travel");
2321 def->category =
L(
"Speed");
2322 def->tooltip =
L(
"Acceleration of travel moves.");
2323 def->sidetext =
L(u8
"mm/s²");
2324 def->min = 0;
2326 def->nullable = true;
2328
2330 def->label =
L(
"First layer travel");
2331 def->tooltip =
L(
"Travel acceleration of first layer.\nThe percentage value is relative to Travel Acceleration.");
2332 def->sidetext =
L(u8
"mm/s² or %");
2333 def->min = 0;
2335 def->ratio_over = "travel_acceleration";
2336 def->nullable = true;
2338
2340 def->label =
L(
"Bridge");
2341 def->category =
L(
"Speed");
2342 def->tooltip =
L(
"Acceleration of bridges. If the value is expressed as a percentage (e.g. 50%), it will be calculated based on the outer wall acceleration.");
2343 def->sidetext =
L(u8
"mm/s² or %");
2344 def->min = 0;
2346 def->ratio_over = "outer_wall_acceleration";
2347 def->nullable = true;
2349
2350 def = this->
add(
"default_filament_profile",
coStrings);
2351 def->label =
L(
"Default filament profile");
2352 def->tooltip =
L(
"Default filament profile when switching to this machine profile.");
2353 def->set_default_value(new ConfigOptionStrings());
2355
2356 def = this->
add(
"default_print_profile",
coString);
2357 def->label =
L(
"Default process profile");
2358 def->tooltip =
L(
"Default process profile when switching to this machine profile.");
2361
2362 def = this->
add(
"activate_air_filtration",
coBools);
2363 def->label =
L(
"Activate air filtration");
2364 def->tooltip =
L(
"Activate for better air filtration. G-code command: M106 P3 S(0-255)");
2367
2368
2369 def = this->
add(
"activate_air_filtration_during_print",
coBools);
2370 def->full_label =
L(
"During print");
2371 def->tooltip=
L(
"Enable this to override the fan speed set in custom G-code during print.");
2374
2375 def = this->
add(
"activate_air_filtration_on_completion",
coBools);
2376 def->full_label =
L(
"On completion");
2377 def->tooltip=
L(
"Enable this to override the fan speed set in custom G-code after print completion.");
2380
2381 def = this->
add(
"during_print_exhaust_fan_speed",
coInts);
2382 def->label =
L(
"Fan speed");
2383 def->tooltip=
L(
"Speed of exhaust fan during printing. This speed will override the speed in filament custom G-code.");
2384 def->sidetext = "%";
2385 def->min=0;
2386 def->max=100;
2389
2390 def = this->
add(
"complete_print_exhaust_fan_speed",
coInts);
2391 def->label =
L(
"Fan speed");
2392 def->tooltip=
L(
"Speed of exhaust fan after printing completes.");
2393 def->sidetext = "%";
2394 def->min=0;
2395 def->max=100;
2398
2399 def = this->
add(
"close_fan_the_first_x_layers",
coInts);
2400 def->label =
L(
"No cooling for the first");
2401 def->tooltip =
L(
"Turn off all cooling fans for the first few layers. "
2402 "This can be used to improve build plate adhesion.");
2403 def->sidetext =
L(
"layers");
2404 def->min = 0;
2405 def->max = 1000;
2408
2409 def = this->
add(
"bridge_no_support",
coBool);
2410 def->label =
L(
"Don't support bridges");
2411 def->category =
L(
"Support");
2412 def->tooltip =
L(
"This disables supporting bridges, which decreases the amount of support required. Bridges can usually be printed directly without support over a reasonable distance.");
2414 def->set_default_value(new ConfigOptionBool(false));
2415
2416 def = this->
add(
"thick_bridges",
coBool);
2417 def->label =
L(
"Thick external bridges");
2418 def->category =
L(
"Quality");
2419 def->tooltip =
L(
"If enabled, bridge extrusion uses a line height equal to the nozzle diameter.\n"
2420 "This increases bridge strength and reliability, allowing longer spans, but may worsen appearance.\n"
2421 "If disabled, bridges may look better but are generally reliable only for shorter spans.");
2423 def->set_default_value(new ConfigOptionBool(false));
2424
2425 def = this->
add(
"thick_internal_bridges",
coBool);
2426 def->label =
L(
"Thick internal bridges");
2427 def->category =
L(
"Quality");
2428 def->tooltip =
L(
"If enabled, internal bridge extrusion uses a line height equal to the nozzle diameter.\n"
2429 "This increases internal bridge strength and reliability when printed over sparse infill, but may worsen appearance.\n"
2430 "If disabled, internal bridges may look better but can be less reliable over sparse infill.");
2432 def->set_default_value(new ConfigOptionBool(true));
2433
2434 def = this->
add(
"enable_extra_bridge_layer",
coEnum);
2435 def->label =
L(
"Extra bridge layers (beta)");
2436 def->category =
L(
"Quality");
2437 def->tooltip =
L(
"This option enables the generation of an extra bridge layer over internal and/or external bridges.\n\n"
2438 "Extra bridge layers help improve bridge appearance and reliability, as the solid infill is better supported. "
2439 "This is especially useful in fast printers, where the bridge and solid infill speeds vary greatly. "
2440 "The extra bridge layer results in reduced pillowing on top surfaces, as well as reduced separation of the external bridge layer from its surrounding perimeters.\n\n"
2441 "It is generally recommended to set this to at least 'External bridge only', unless specific issues with the sliced model are found.\n\n"
2442 "Options:\n"
2443 "1. Disabled - does not generate second bridge layers. This is the default and is set for compatibility purposes\n"
2444 "2. External bridge only - generates second bridge layers for external-facing bridges only. Please note that small bridges that are shorter "
2445 "or narrower than the set number of perimeters will be skipped as they would not benefit from a second bridge layer. If generated, "
2446 "the second bridge layer will be extruded parallel to the first bridge layer to reinforce the bridge strength\n"
2447 "3. Internal bridge only - generates second bridge layers for internal bridges over sparse infill only. "
2448 "Please note that the internal bridges count towards the top shell layer count of your model. "
2449 "The second internal bridge layer will be extruded as close to perpendicular to the first as possible. "
2450 "If multiple regions in the same island, with varying bridge angles are present, the last region of that island will be selected as the angle reference\n"
2451 "4. Apply to all - generates second bridge layers for both internal and external-facing bridges\n");
2452
2454 def->enum_values.push_back("disabled");
2455 def->enum_values.push_back("external_bridge_only");
2456 def->enum_values.push_back("internal_bridge_only");
2457 def->enum_values.push_back("apply_to_all");
2458 def->enum_labels.push_back(
L(
"Disabled"));
2459 def->enum_labels.push_back(
L(
"External bridge only"));
2460 def->enum_labels.push_back(
L(
"Internal bridge only"));
2461 def->enum_labels.push_back(
L(
"Apply to all"));
2463 def->set_default_value(
new ConfigOptionEnum<EnableExtraBridgeLayer>(
eblDisabled));
2464
2465 def = this->
add(
"dont_filter_internal_bridges",
coEnum);
2466 def->label =
L(
"Filter out small internal bridges");
2467 def->category =
L(
"Quality");
2468 def->tooltip =
L(
"This option can help reduce pillowing on top surfaces in heavily slanted or curved models.\n"
2469 "By default, small internal bridges are filtered out and the internal solid infill is printed "
2470 "directly over the sparse infill. This works well in most cases, speeding up printing without "
2471 "too much compromise on top surface quality.\n"
2472 "However, in heavily slanted or curved models, especially where too low a sparse infill density "
2473 "is used, this may result in curling of the unsupported solid infill, causing pillowing.\n"
2474 "Enabling limited filtering or no filtering will print internal bridge layer over slightly "
2475 "unsupported internal solid infill. The options below control the sensitivity of the filtering, "
2476 "i.e. they control where internal bridges are created:\n"
2477 "1. Filter - enables this option. This is the default behavior and works well in most cases\n"
2478 "2. Limited filtering - creates internal bridges on heavily slanted surfaces while avoiding "
2479 "unnecessary bridges. This works well for most difficult models\n"
2480 "3. No filtering - creates internal bridges on every potential internal overhang. This option is "
2481 "useful for heavily slanted top surface models; however, in most cases, it creates too many "
2482 "unnecessary bridges.");
2484 def->enum_values.push_back("disabled");
2485 def->enum_values.push_back("limited");
2486 def->enum_values.push_back("nofilter");
2487 def->enum_labels.push_back(
L(
"Filter"));
2488 def->enum_labels.push_back(
L(
"Limited filtering"));
2489 def->enum_labels.push_back(
L(
"No filtering"));
2491 def->set_default_value(
new ConfigOptionEnum<InternalBridgeFilter>(
ibfDisabled));
2492
2493
2494 def = this->
add(
"max_bridge_length",
coFloat);
2495 def->label =
L(
"Max bridge length");
2496 def->category =
L(
"Support");
2497 def->tooltip =
L(
"This is the maximum length of bridges that don\'t need support. Set it to 0 if you want all bridges to be supported, and set it to a very large value if you don\'t want any bridges to be supported.");
2498 def->sidetext =
L(
"mm");
2499 def->min = 0;
2502
2504 def->label =
L(
"End G-code");
2505 def->tooltip =
L(
"Add end G-code when finishing the entire print.");
2506 def->multiline = true;
2507 def->full_width = true;
2508 def->height = 12;
2510 def->set_default_value(
new ConfigOptionString(
"M104 S0 ; turn off temperature\nG28 X0 ; home X axis\nM84 ; disable motors\n"));
2511
2512 def = this->
add(
"printing_by_object_gcode",
coString);
2513 def->label =
L(
"Between Object G-code");
2514 def->tooltip =
L(
"Insert G-code between objects. This parameter will only come into effect when you print your models object by object.");
2515 def->multiline = true;
2516 def->full_width = true;
2517 def->height = 12;
2520
2522 def->label =
L(
"End G-code");
2523 def->tooltip =
L(
"Add end G-code when finishing the printing of this filament.");
2524 def->multiline = true;
2525 def->full_width = true;
2526 def->height = 120;
2528 def->set_default_value(new ConfigOptionStrings { " " });
2529
2530 def = this->
add(
"ensure_vertical_shell_thickness",
coEnum);
2531 def->label =
L(
"Ensure vertical shell thickness");
2532 def->category =
L(
"Strength");
2534 "Add solid infill near sloping surfaces to guarantee the vertical shell thickness (top+bottom solid layers)\nNone: No solid infill "
2535 "will be added anywhere. Caution: Use this option carefully if your model has sloped surfaces\nCritical Only: Avoid adding solid infill for walls\nModerate: Add solid infill for heavily "
2536 "sloping surfaces only\nAll: Add solid infill for all suitable sloping surfaces\nDefault value is All.");
2538 def->enum_values.push_back("none");
2539 def->enum_values.push_back("ensure_critical_only");
2540 def->enum_values.push_back("ensure_moderate");
2541 def->enum_values.push_back("ensure_all");
2542 def->enum_labels.push_back(
L(
"None"));
2543 def->enum_labels.push_back(
L(
"Critical Only"));
2544 def->enum_labels.push_back(
L(
"Moderate"));
2545 def->enum_labels.push_back(
L(
"All"));
2548
2549 auto def_top_fill_pattern = def = this->
add(
"top_surface_pattern",
coEnum);
2550 def->label =
L(
"Top surface pattern");
2551 def->category =
L(
"Strength");
2552 def->tooltip =
L(
"This is the line pattern for top surface infill.");
2554 def->enum_values.push_back("monotonic");
2555 def->enum_values.push_back("monotonicline");
2556 def->enum_values.push_back("rectilinear");
2557 def->enum_values.push_back("alignedrectilinear");
2558 def->enum_values.push_back("concentric");
2559 def->enum_values.push_back("spiralinset");
2560 def->enum_values.push_back("hilbertcurve");
2561 def->enum_values.push_back("archimedeanchords");
2562 def->enum_values.push_back("octagramspiral");
2563 def->enum_labels.push_back(
L(
"Monotonic"));
2564 def->enum_labels.push_back(
L(
"Monotonic line"));
2565 def->enum_labels.push_back(
L(
"Rectilinear"));
2566 def->enum_labels.push_back(
L(
"Aligned Rectilinear"));
2567 def->enum_labels.push_back(
L(
"Concentric"));
2568 def->enum_labels.push_back(
L(
"Spiral Inset"));
2569 def->enum_labels.push_back(
L(
"Hilbert Curve"));
2570 def->enum_labels.push_back(
L(
"Archimedean Chords"));
2571 def->enum_labels.push_back(
L(
"Octagram Spiral"));
2572 def->set_default_value(
new ConfigOptionEnum<InfillPattern>(
ipMonotonicLine));
2573
2575 def->label =
L(
"Top surface density");
2576 def->category =
L(
"Strength");
2577 def->tooltip =
L(
"Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. "
2578 "Reducing this value results in a textured top surface, according to the chosen top surface pattern. "
2579 "A value of 0% will result in only the walls on the top layer being created. "
2580 "Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion.");
2581 def->sidetext = ("%");
2582 def->min = 0;
2583 def->max = 100;
2584 def->set_default_value(new ConfigOptionPercent(100));
2585
2586 def = this->
add(
"top_surface_expansion",
coFloat);
2587 def->label =
L(
"Top surface expansion");
2588 def->category =
L(
"Strength");
2589 def->tooltip =
L(
"Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n"
2590 "Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane. "
2591 "Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top. "
2592 "The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection.");
2593 def->sidetext =
L(
"mm");
2594 def->min = 0;
2597
2598 def = this->
add(
"top_surface_expansion_margin",
coFloat);
2599 def->label =
L(
"Top expansion wall margin");
2600 def->category =
L(
"Strength");
2601 def->tooltip =
L(
"Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n"
2602 "This can cause contraction marks (such as the hull line) on the outer walls.\n"
2603 "By adding a small margin, this contraction will not occur directly on the walls, thereby preventing a visible mark.");
2604 def->sidetext =
L(
"mm");
2605 def->min = 0;
2606 def->max = 10;
2609
2610 def = this->
add(
"top_surface_expansion_direction",
coEnum);
2611 def->label =
L(
"Top expansion direction");
2612 def->category =
L(
"Strength");
2613 def->tooltip =
L(
"Direction in which the top surface expansion grows.\n"
2614 " - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n"
2615 " - Outward grows the outer edge of the surface, connecting surfaces separated by features that can divide a surface, such as a lattice pattern.\n"
2616 " - Inward and Outward does both.");
2618 def->enum_values.push_back("inward_and_outward");
2619 def->enum_values.push_back("inward");
2620 def->enum_values.push_back("outward");
2621 def->enum_labels.push_back(
L(
"Inward and Outward"));
2622 def->enum_labels.push_back(
L(
"Inward"));
2623 def->enum_labels.push_back(
L(
"Outward"));
2626
2627 def = this->
add(
"bottom_surface_pattern",
coEnum);
2628 def->label =
L(
"Bottom surface pattern");
2629 def->category =
L(
"Strength");
2630 def->tooltip =
L(
"This is the line pattern of bottom surface infill, not including bridge infill.");
2632 def->enum_values = def_top_fill_pattern->enum_values;
2633 def->enum_labels = def_top_fill_pattern->enum_labels;
2634 def->set_default_value(
new ConfigOptionEnum<InfillPattern>(
ipMonotonic));
2635
2637 def->label =
L(
"Bottom surface density");
2638 def->category =
L(
"Strength");
2639 def->tooltip =
L(
"Density of the bottom surface layer. "
2640 "Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion.\n"
2641 "WARNING: Lowering this value may negatively affect bed adhesion.");
2642 def->sidetext = ("%");
2643 def->min = 10;
2644 def->max = 100;
2645 def->set_default_value(new ConfigOptionPercent(100));
2646
2647 auto def_top_fill_order = def = this->
add(
"top_surface_fill_order",
coEnum);
2648 def->label =
L(
"Top surface fill order");
2649 def->category =
L(
"Strength");
2650 def->tooltip =
L(
"Direction in which top surfaces are filled when using a center-based pattern "
2651 "(Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
2652 "Outward starts at the center of the surface, so any excess material is pushed "
2653 "towards the edge where it is least visible. Inward starts at the edge and ends "
2654 "with the tight curves at the center.\n"
2655 "Default uses shortest-path ordering, which may run in either direction.");
2657 def->enum_values.push_back("default");
2658 def->enum_values.push_back("outward");
2659 def->enum_values.push_back("inward");
2660 def->enum_labels.push_back(
L(
"Default"));
2661 def->enum_labels.push_back(
L(
"Outward"));
2662 def->enum_labels.push_back(
L(
"Inward"));
2665
2666 def = this->
add(
"bottom_surface_fill_order",
coEnum);
2667 def->label =
L(
"Bottom surface fill order");
2668 def->category =
L(
"Strength");
2669 def->tooltip =
L(
"Direction in which bottom surfaces are filled when using a center-based pattern "
2670 "(Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n"
2671 "Inward starts each surface with the wider outer curves, which improves first layer "
2672 "adhesion on build plates where the tight curves at the center may not stick. "
2673 "Outward starts at the center, pushing any excess material towards the edge.\n"
2674 "Default uses shortest-path ordering, which may run in either direction.");
2676 def->enum_values = def_top_fill_order->enum_values;
2677 def->enum_labels = def_top_fill_order->enum_labels;
2680
2681 def = this->
add(
"internal_solid_infill_pattern",
coEnum);
2682 def->label =
L(
"Internal solid infill pattern");
2683 def->category =
L(
"Strength");
2684 def->tooltip =
L(
"Line pattern of internal solid infill. if the detect narrow internal solid infill be enabled, the concentric pattern will be used for the small area.");
2686 def->enum_values = def_top_fill_pattern->enum_values;
2687 def->enum_labels = def_top_fill_pattern->enum_labels;
2688 def->set_default_value(
new ConfigOptionEnum<InfillPattern>(
ipMonotonic));
2689
2691 def->label =
L(
"Outer wall");
2692 def->category =
L(
"Quality");
2693 def->tooltip =
L(
"Line width of outer wall. If expressed as a %, it will be computed over the nozzle diameter.");
2694 def->sidetext =
L(
"mm or %");
2695 def->ratio_over = "nozzle_diameter";
2696 def->min = 0;
2697 def->max = 1000;
2698 def->max_literal = 10;
2700 def->set_default_value(new ConfigOptionFloatOrPercent(0., false));
2701
2703 def->label =
L(
"Outer wall");
2704 def->category =
L(
"Speed");
2705 def->tooltip =
L(
"This is the printing speed for the outer walls of parts. These are generally printed slower than inner walls for higher quality.");
2706 def->sidetext =
L(
"mm/s");
2707 def->min = 1;
2709 def->nullable = true;
2711
2713 def->label =
L(
"Small perimeters");
2714 def->category =
L(
"Speed");
2715 def->tooltip =
L(
"This separate setting will affect the speed of perimeters having radius <= small_perimeter_threshold "
2716 "(usually holes). If expressed as percentage (for example: 80%) it will be calculated "
2717 "on the outer wall speed setting above.");
2718 def->sidetext =
L(
"mm/s or %");
2719 def->ratio_over = "outer_wall_speed";
2720 def->min = 1;
2722 def->nullable = true;
2724
2725 def = this->
add(
"small_perimeter_threshold",
coFloats);
2726 def->label =
L(
"Small perimeters threshold");
2727 def->category =
L(
"Speed");
2728 def->tooltip =
L(
"This sets the threshold for small perimeter length. Default threshold is 0mm.");
2729 def->sidetext =
L(
"mm");
2730 def->min = 0;
2732 def->nullable = true;
2734
2736 def->label =
L(
"Small support perimeters");
2737 def->category =
L(
"Speed");
2738 def->tooltip =
L(
"Same as \"Small perimeters\", but for supports. "
2739 "This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. "
2740 "If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above.");
2741 def->sidetext =
L(
"mm/s or %");
2742 def->ratio_over = "support_speed";
2743 def->min = 1;
2746
2747 def = this->
add(
"small_support_perimeter_threshold",
coFloats);
2748 def->label =
L(
"Small support perimeters threshold");
2749 def->category =
L(
"Speed");
2750 def->tooltip =
L(
"This sets the threshold for small support perimeter length. The default threshold is 0mm.");
2751 def->sidetext =
L(
"mm");
2752 def->min = 0;
2755
2756 def = this->
add(
"wall_sequence",
coEnum);
2757 def->label =
L(
"Walls printing order");
2758 def->category =
L(
"Quality");
2759 def->tooltip =
L(
"Print sequence of the internal (inner) and external (outer) walls.\n\n"
2760 "Use Inner/Outer for best overhangs. This is because the overhanging walls can adhere to a neighbouring perimeter while printing. "
2761 "However, this option results in slightly reduced surface quality as the external perimeter is deformed by being squashed to the internal perimeter.\n\n"
2762 "Use Inner/Outer/Inner for the best external surface finish and dimensional accuracy as the external wall is printed undisturbed from an internal perimeter. "
2763 "However, overhang performance will reduce as there is no internal perimeter to print the external wall against. "
2764 "This option requires a minimum of 3 walls to be effective as it prints the internal walls from the 3rd perimeter onwards first, "
2765 "then the external perimeter and, finally, the first internal perimeter. "
2766 "This option is recommended over the Outer/Inner option in most cases.\n\n"
2767 "Use Outer/Inner for the same external wall quality and dimensional accuracy benefits of Inner/Outer/Inner option. "
2768 "However, the Z seams will appear less consistent as the first extrusion of a new layer starts on a visible surface.");
2770 def->enum_values.push_back("inner wall/outer wall");
2771 def->enum_values.push_back("outer wall/inner wall");
2772 def->enum_values.push_back("inner-outer-inner wall");
2773 def->enum_labels.push_back(
L(
"Inner/Outer"));
2774 def->enum_labels.push_back(
L(
"Outer/Inner"));
2775 def->enum_labels.push_back(
L(
"Inner/Outer/Inner"));
2778
2779 def = this->
add(
"is_infill_first",
coBool);
2780 def->label =
L(
"Print infill first");
2781 def->tooltip =
L(
"Order of wall/infill. When the tickbox is unchecked the walls are printed first, which works best in most cases.\n\nPrinting infill first may help with extreme overhangs as the walls have the neighbouring infill to adhere to. However, the infill will slightly push out the printed walls where it is attached to them, resulting in a worse external surface finish. It can also cause the infill to shine through the external surfaces of the part.");
2782 def->category =
L(
"Quality");
2784 def->set_default_value(new ConfigOptionBool{false});
2785
2786 def = this->
add(
"wall_direction",
coEnum);
2787 def->label =
L(
"Wall loop direction");
2788 def->category =
L(
"Quality");
2789 def->tooltip =
L(
"The direction which the contour wall loops are extruded when looking down from the top.\nHoles are printed in the opposite direction to the contour to maintain alignment with layers whose contour polygons are incomplete and change direction, also partially forming the contour of a hole.\n\nThis option will be disabled if spiral vase mode is enabled.");
2791 def->enum_values.push_back("ccw");
2792 def->enum_values.push_back("cw");
2793 def->enum_labels.push_back(
L(
"Counter clockwise"));
2794 def->enum_labels.push_back(
L(
"Clockwise"));
2797
2798 def = this->
add(
"extruder",
coInt);
2800 def->label =
L(
"Extruder");
2801 def->category =
L(
"Extruders");
2802
2803
2804 def->min = 0;
2805 def->enum_labels.push_back(
L(
"default"));
2806 def->enum_labels.push_back("1");
2807 def->enum_labels.push_back("2");
2808 def->enum_labels.push_back("3");
2809 def->enum_labels.push_back("4");
2810 def->enum_labels.push_back("5");
2812
2813
2814
2815 def = this->
add(
"extruder_clearance_dist_to_rod",
coFloat);
2816 def->label =
L(
"Distance to rod");
2817 def->tooltip =
L(
"Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing.");
2818 def->sidetext =
L(
"mm");
2819 def->min = 0;
2822
2823 def = this->
add(
"extruder_clearance_height_to_rod",
coFloat);
2824 def->label =
L(
"Height to rod");
2825 def->tooltip =
L(
"Distance from the nozzle tip to the lower rod. Used for collision avoidance in by-object printing.");
2826 def->sidetext =
L(
"mm");
2827 def->min = 0;
2830
2831
2832 def = this->
add(
"extruder_clearance_height_to_lid",
coFloat);
2833 def->label =
L(
"Height to lid");
2834 def->tooltip =
L(
"Distance from the nozzle tip to the lid. Used for collision avoidance in by-object printing.");
2835 def->sidetext =
L(
"mm");
2836 def->min = 0;
2839
2840 def = this->
add(
"extruder_clearance_radius",
coFloat);
2841 def->label =
L(
"Radius");
2842 def->tooltip =
L(
"Clearance radius around extruder: used for collision avoidance in by-object printing.");
2843 def->sidetext =
L(
"mm");
2844 def->min = 0;
2847
2849 def->label =
L(
"Nozzle height");
2850 def->tooltip =
L(
"The height of nozzle tip.");
2851 def->sidetext =
L(
"mm");
2852 def->min = 0;
2855
2857 def->label =
L(
"Bed mesh min");
2859 "This option sets the min point for the allowed bed mesh area. Due to the probe's XY offset, most printers are unable to probe the "
2860 "entire bed. To ensure the probe point does not go outside the bed area, the minimum and maximum points of the bed mesh should be "
2861 "set appropriately. OrcaSlicer ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not exceed these min/max "
2862 "points. This information can usually be obtained from your printer manufacturer. The default setting is (-99999, -99999), which "
2863 "means there are no limits, thus allowing probing across the entire bed.");
2864 def->sidetext =
L(
"mm");
2866 def->set_default_value(
new ConfigOptionPoint(
Vec2d(-99999, -99999)));
2867
2869 def->label =
L(
"Bed mesh max");
2871 "This option sets the max point for the allowed bed mesh area. Due to the probe's XY offset, most printers are unable to probe the "
2872 "entire bed. To ensure the probe point does not go outside the bed area, the minimum and maximum points of the bed mesh should be "
2873 "set appropriately. OrcaSlicer ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not exceed these min/max "
2874 "points. This information can usually be obtained from your printer manufacturer. The default setting is (99999, 99999), which "
2875 "means there are no limits, thus allowing probing across the entire bed.");
2876 def->sidetext =
L(
"mm");
2878 def->set_default_value(
new ConfigOptionPoint(
Vec2d(99999, 99999)));
2879
2880 def = this->
add(
"bed_mesh_probe_distance",
coPoint);
2881 def->label =
L(
"Probe point distance");
2882 def->tooltip =
L(
"This option sets the preferred distance between probe points (grid size) for the X and Y directions, with the "
2883 "default being 50mm for both X and Y.");
2884 def->min = 0;
2885 def->sidetext =
L(
"mm");
2887 def->set_default_value(
new ConfigOptionPoint(
Vec2d(50, 50)));
2888
2889 def = this->
add(
"adaptive_bed_mesh_margin",
coFloat);
2890 def->label =
L(
"Mesh margin");
2891 def->tooltip =
L(
"This option determines the additional distance by which the adaptive bed mesh area should be expanded in the XY directions.");
2892 def->sidetext =
L(
"mm");
2895
2897 def->label =
L(
"Grab length");
2898 def->sidetext =
L(
"mm");
2899 def->min = 0;
2902
2904 def->label =
L(
"Extruder Color");
2905 def->tooltip =
L(
"Only used as a visual help on UI.");
2907
2909 def->set_default_value(new ConfigOptionStrings { "" });
2910
2912 def->label =
L(
"Extruder offset");
2913
2914
2915
2916
2917 def->sidetext =
L(
"mm");
2919 def->set_default_value(
new ConfigOptionPoints {
Vec2d(0,0) });
2920
2922 def->label =
L(
"Flow ratio");
2923 def->tooltip =
L(
"The material may have volumetric change after switching between molten and crystalline states. "
2924 "This setting changes all extrusion flow of this filament in G-code proportionally. "
2925 "The recommended value range is between 0.95 and 1.05. "
2926 "You may be able to tune this value to get a nice flat surface if there is slight overflow or underflow.");
2927 def->min = 0;
2928 def->max = 2;
2930 def->nullable = true;
2932
2933 def = this->
add(
"print_flow_ratio",
coFloat);
2934 def->label =
L(
"Flow ratio");
2935 def->category =
L(
"Quality");
2936 def->tooltip =
L(
"The material may have volumetric change after switching between molten and crystalline states. "
2937 "This setting changes all extrusion flow of this filament in G-code proportionally. "
2938 "The recommended value range is between 0.95 and 1.05. "
2939 "You may be able to tune this value to get a nice flat surface if there is slight overflow or underflow."
2940 "\n\nThe final object flow ratio is this value multiplied by the filament flow ratio.");
2942 def->max = 2.f;
2943 def->min = 0.01f;
2945
2946 def = this->
add(
"enable_pressure_advance",
coBools);
2947 def->label =
L(
"Enable pressure advance");
2948 def->tooltip =
L(
"Enable pressure advance, auto calibration result will be overwritten once enabled.");
2950
2952 def->label =
L(
"Pressure advance");
2953 def->tooltip =
L(
"Pressure advance (Klipper) AKA Linear advance factor (Marlin).");
2954 def->max = 2;
2957
2958
2959 def = this->
add(
"adaptive_pressure_advance",
coBools);
2960 def->label =
L(
"Enable adaptive pressure advance (beta)");
2961
2962 def->tooltip =
L(
"With increasing print speeds (and hence increasing volumetric flow through the nozzle) and increasing accelerations, "
2963 "it has been observed that the effective PA value typically decreases. "
2964 "This means that a single PA value is not always 100% optimal for all features and a compromise value is usually used "
2965 "that does not cause too much bulging on features with lower flow speed and accelerations while also not causing gaps on faster features.\n\n"
2966 "This feature aims to address this limitation by modeling the response of your printer's extrusion system depending "
2967 "on the volumetric flow speed and acceleration it is printing at. Internally, it generates a fitted model that can extrapolate the needed pressure "
2968 "advance for any given volumetric flow speed and acceleration, which is then emitted to the printer depending on the current print conditions.\n\n"
2969 "When enabled, the pressure advance value above is overridden. However, a reasonable default value above is "
2970 "strongly recommended to act as a fallback and for when tool changing.\n\n");
2973
2974
2975 def = this->
add(
"adaptive_pressure_advance_model",
coStrings);
2976 def->label =
L(
"Adaptive pressure advance measurements (beta)");
2977
2978 def->tooltip =
L(
"Add sets of pressure advance (PA) values, the volumetric flow speeds and accelerations they were measured at, separated by a comma. "
2979 "One set of values per line. For example\n"
2980 "0.04,3.96,3000\n0.033,3.96,10000\n0.029,7.91,3000\n0.026,7.91,10000\n\n"
2981 "How to calibrate:\n"
2982 "1. Run the pressure advance test for at least 3 speeds per acceleration value. It is recommended that the test is run "
2983 "for at least the speed of the external perimeters, the speed of the internal perimeters and the fastest feature "
2984 "print speed in your profile (usually its the sparse or solid infill). Then run them for the same speeds for the slowest and fastest print accelerations, "
2985 "and no faster than the recommended maximum acceleration as given by the Klipper input shaper\n"
2986 "2. Take note of the optimal PA value for each volumetric flow speed and acceleration. You can find the flow number by selecting "
2987 "flow from the color scheme drop down and move the horizontal slider over the PA pattern lines. The number should be visible "
2988 "at the bottom of the page. The ideal PA value should be decreasing the higher the volumetric flow is. "
2989 "If it is not, confirm that your extruder is functioning correctly. The slower and with less acceleration you print, "
2990 "the larger the range of acceptable PA values. If no difference is visible, use the PA value from the faster test\n"
2991 "3. Enter the triplets of PA values, Flow and Accelerations in the text box here and save your filament profile.");
2993
2994 def->multiline = true;
2995 def->full_width = true;
2996 def->height = 15;
2997 def->set_default_value(new ConfigOptionStrings{"0,0,0\n0,0,0"});
2998
2999
3000 def = this->
add(
"adaptive_pressure_advance_overhangs",
coBools);
3001 def->label =
L(
"Enable adaptive pressure advance within features (beta)");
3002 def->tooltip =
L(
"Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n\n"
3003 "Not compatible with Prusa printers as they pause to process PA changes, which causes delays and defects.\n\n"
3004 "This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues.");
3007
3008 def = this->
add(
"adaptive_pressure_advance_bridges",
coFloats);
3009 def->label =
L(
"Static pressure advance for bridges");
3010 def->tooltip =
L(
"Static pressure advance value for bridges. Set to 0 to apply the same pressure advance as \n"
3011 "equivalent walls (using adaptive settings if enabled).\n\n"
3012 "A lower PA value when printing bridges helps reduce the appearance of slight under-extrusion immediately after bridges. "
3013 "This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this.");
3014 def->max = 2;
3017
3019 def->label =
L(
"Default");
3020 def->category =
L(
"Quality");
3021 def->tooltip =
L(
"Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter.");
3022 def->sidetext =
L(
"mm or %");
3023 def->ratio_over = "nozzle_diameter";
3024 def->min = 0;
3025 def->max = 1000;
3026 def->max_literal = 10;
3028 def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
3029
3030 def = this->
add(
"reduce_fan_stop_start_freq",
coBools);
3031 def->label =
L(
"Keep fan always on");
3032 def->tooltip =
L(
"Enabling this setting means that part cooling fan will never stop entirely and will instead run at least at minimum speed to reduce the frequency of starting and stopping.");
3034
3035 def = this->
add(
"dont_slow_down_outer_wall",
coBools);
3036 def->label =
L(
"Don't slow down outer walls");
3037 def->tooltip =
L(
"If enabled, this setting will ensure external perimeters are not slowed down to meet the minimum layer time. "
3038 "This is particularly helpful in the below scenarios:\n"
3039 "1. To avoid changes in shine when printing glossy filaments\n"
3040 "2. To avoid changes in external wall speed which may create slight wall artifacts that appear like Z banding\n"
3041 "3. To avoid printing at speeds which cause VFAs (fine artifacts) on the external walls");
3043
3044 def = this->
add(
"fan_cooling_layer_time",
coFloats);
3045 def->label =
L(
"Layer time");
3046 def->tooltip =
L(
"The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time.");
3047 def->sidetext =
L_CONTEXT(
"s",
"second");
3048 def->min = 0;
3049 def->max = 1000;
3052
3054 def->label =
L(
"Default color");
3055 def->tooltip =
L(
"Default filament color.\n"
3056 "Right click to reset value to system default.");
3059 def->set_default_value(new ConfigOptionStrings{""});
3060
3062 def->label =
L(
"Color");
3063 def->tooltip =
L(
"Only used as a visual help on UI.");
3066 def->set_default_value(new ConfigOptionStrings{ "#F2754E" });
3067
3068
3070 def->label =
L(
"Filament notes");
3071 def->tooltip =
L(
"You can put your notes regarding the filament here.");
3072 def->multiline = true;
3073 def->full_width = true;
3074 def->height = 13;
3076 def->set_default_value(new ConfigOptionStrings { "" });
3077
3078
3080 def->set_default_value(new ConfigOptionStrings{""});
3081
3082
3084 def->set_default_value(new ConfigOptionStrings{"1"});
3085
3086
3087 def = this->
add(
"required_nozzle_HRC",
coInts);
3088 def->label =
L(
"Required nozzle HRC");
3089 def->tooltip =
L(
"Minimum HRC of nozzle required to print the filament. A value of 0 means no checking of the nozzle\'s HRC.");
3090 def->min = 0;
3091 def->max = 500;
3094
3095 def = this->
add(
"filament_map",
coInts);
3096 def->label =
L(
"Filament map to extruder");
3097 def->tooltip =
L(
"Filament map to extruder.");
3100
3101
3102
3103
3104
3105
3106 def = this->
add(
"filament_map_2",
coInts);
3107 def->label = "Filament map plus for multi nozzle";
3108 def->tooltip = "Filament map to the index identified by extruder and nozzle_volume_type";
3111
3112
3113
3114
3115
3116
3117
3118 def = this->
add(
"filament_volume_map",
coInts);
3121
3122 def = this->
add(
"physical_extruder_map",
coInts);
3123
3124 def->label = "Map the logical extruder to physical extruder";
3125 def->tooltip = "Map the logical extruder to physical extruder.";
3128
3129 def = this->
add(
"filament_map_mode",
coEnum);
3130
3131 def->label = "filament mapping mode";
3132 def->tooltip = "Filament mapping mode used as plate param.";
3134 def->enum_values.push_back("Auto For Flush");
3135 def->enum_values.push_back("Auto For Match");
3136 def->enum_values.push_back("Manual");
3137 def->enum_values.push_back("Nozzle Manual");
3138 def->enum_values.push_back("Default");
3139 def->enum_labels.push_back(
L(
"Auto For Flush"));
3140 def->enum_labels.push_back(
L(
"Auto For Match"));
3141 def->enum_labels.push_back(
L(
"Manual"));
3142 def->enum_labels.push_back(
L(
"Nozzle Manual"));
3143 def->enum_labels.push_back(
L(
"Default"));
3145 def->set_default_value(
new ConfigOptionEnum<FilamentMapMode>(
fmmAutoForFlush));
3146
3147
3148
3149
3150
3151 def = this->
add(
"filament_nozzle_map",
coInts);
3154
3155 def = this->
add(
"filament_flush_temp",
coInts);
3156 def->label =
L(
"Flush temperature");
3157 def->tooltip =
L(
"Temperature when flushing filament. 0 indicates the upper bound of the recommended nozzle temperature range.");
3159 def->nullable = true;
3160 def->min = 0;
3161 def->max = max_temp;
3162 def->sidetext =
L(u8
"\u2103" );
3164
3165
3166
3167
3168 def = this->
add(
"filament_flush_temp_fast",
coInts);
3169 def->label =
L(
"Flush temperature");
3170 def->tooltip =
L(
"Flush temperature used in fast purge mode.");
3172 def->nullable = true;
3173 def->min = 0;
3174 def->max = max_temp;
3175 def->sidetext =
L(u8
"\u2103" );
3177
3178 def = this->
add(
"filament_flush_volumetric_speed",
coFloats);
3179 def->label =
L(
"Flush volumetric speed");
3180 def->tooltip =
L(
"Volumetric speed when flushing filament. 0 indicates the max volumetric speed.");
3182 def->nullable = true;
3183 def->min = 0;
3184 def->max = 200;
3185 def->sidetext =
L(u8
"mm³/s");
3187
3188 def = this->
add(
"filament_max_volumetric_speed",
coFloats);
3189 def->label =
L(
"Max volumetric speed");
3190 def->tooltip =
L(
"This setting is the volume of filament that can be melted and extruded per second. Printing speed is limited by max volumetric speed, in case of too high and unreasonable speed setting. This value cannot be zero.");
3191 def->sidetext =
L(u8
"mm³/s");
3192 def->min = 0;
3195
3196 def = this->
add(
"machine_load_filament_time",
coFloat);
3197 def->label =
L(
"Filament load time");
3198 def->tooltip =
L(
"Time to load new filament when switch filament. It's usually applicable for single-extruder multi-material machines. "
3199 "For tool changers or multi-tool machines, it's typically 0. For statistics only.");
3200 def->sidetext =
L_CONTEXT(
"s",
"second");
3201 def->min = 0;
3204
3205 def = this->
add(
"machine_unload_filament_time",
coFloat);
3206 def->label =
L(
"Filament unload time");
3207 def->tooltip =
L(
"Time to unload old filament when switch filament. It's usually applicable for single-extruder multi-material machines. "
3208 "For tool changers or multi-tool machines, it's typically 0. For statistics only.");
3209 def->sidetext =
L_CONTEXT(
"s",
"second");
3210 def->min = 0;
3213
3214 def = this->
add(
"machine_tool_change_time",
coFloat);
3215 def->label =
L(
"Tool change time");
3216 def->tooltip =
L(
"Time taken to switch tools. It's usually applicable for tool changers or multi-tool machines. "
3217 "For single-extruder multi-material machines, it's typically 0. For statistics only.");
3218 def->sidetext =
L_CONTEXT(
"s",
"second");
3219 def->min = 0;
3222
3223
3224 def = this->
add(
"support_object_skip_flush",
coBool);
3225 def->set_default_value(new ConfigOptionBool(false));
3226
3227 def = this->
add(
"bed_temperature_formula",
coEnum);
3228 def->label =
L(
"Bed temperature type");
3229 def->tooltip =
L(
"This option determines how the bed temperature is set during slicing: based on the temperature of the first filament or the highest temperature of the printed filaments.");
3232 def->enum_values.push_back("by_first_filament");
3233 def->enum_values.push_back("by_highest_temp");
3234 def->enum_labels.push_back(
L(
"By First filament"));
3235 def->enum_labels.push_back(
L(
"By Highest Temp"));
3237
3238 def = this->
add(
"nozzle_flush_dataset",
coInts);
3239 def->nullable = true;
3241
3243 def->label =
L(
"Diameter");
3244 def->tooltip =
L(
"Filament diameter is used to calculate extrusion variables in G-code, so it is important that this is accurate and precise.");
3245 def->sidetext =
L(
"mm");
3246 def->min = 0;
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275 def = this->
add(
"pellet_flow_coefficient",
coFloats);
3276 def->label =
L(
"Pellet flow coefficient");
3277 def->tooltip =
L(
"Pellet flow coefficient is empirically derived and allows for volume calculation for pellet printers.\n\nInternally it is converted to filament_diameter. All other volume calculations remain the same.\n\nfilament_diameter = sqrt( (4 * pellet_flow_coefficient) / PI )");
3278 def->min = 0;
3280
3281 def = this->
add(
"filament_adaptive_volumetric_speed",
coBools);
3282 def->label =
L(
"Adaptive volumetric speed");
3283 def->tooltip =
L(
"When enabled, the extrusion flow is limited by the smaller of "
3284 "the fitted value (calculated from line width and layer height) and the user-defined maximum flow."
3285 " When disabled, only the user-defined maximum flow is applied.\n\n"
3286 "Note: Experimental and incomplete feature imported from BBS. Functional for some profiles that already have the variable saved.");
3288 def->nullable = true;
3290
3291 def = this->
add(
"volumetric_speed_coefficients",
coStrings);
3292 def->label =
L(
"Max volumetric speed multinomial coefficients");
3293 def->set_default_value(new ConfigOptionStrings{""});
3294
3296 def->label =
L(
"Shrinkage (XY)");
3297
3298 def->tooltip =
L(
"Enter the shrinkage percentage that the filament will get after cooling (94% if you measure 94mm instead of 100mm). "
3299 "The part will be scaled in XY to compensate. For multi-material prints, ensure filament shrinkage matches across all used filaments.\n"
3300 "Be sure to allow enough space between objects, as this compensation is done after the checks.");
3301 def->sidetext = "%";
3302 def->ratio_over = "";
3303 def->min = 50;
3304 def->max = 150;
3307
3308 def = this->
add(
"filament_shrinkage_compensation_z",
coPercents);
3309 def->label =
L(
"Shrinkage (Z)");
3310
3311 def->tooltip =
L(
"Enter the shrinkage percentage that the filament will get after cooling (94% if you measure 94mm instead of 100mm)."
3312 " The part will be scaled in Z to compensate.");
3313 def->sidetext = "%";
3314 def->ratio_over = "";
3315 def->min = 50;
3316 def->max = 150;
3319
3320 def = this->
add(
"filament_adhesiveness_category",
coInts);
3321 def->label =
L(
"Adhesiveness Category");
3322 def->tooltip =
L(
"Filament category.");
3323 def->min = 0;
3326
3327 def = this->
add(
"filament_loading_speed",
coFloats);
3328 def->label =
L(
"Loading speed");
3329 def->tooltip =
L(
"Speed used for loading the filament on the wipe tower.");
3330 def->sidetext =
L(
"mm/s");
3331 def->min = 0;
3334
3335 def = this->
add(
"filament_loading_speed_start",
coFloats);
3336 def->label =
L(
"Loading speed at the start");
3337 def->tooltip =
L(
"Speed used at the very beginning of loading phase.");
3338 def->sidetext =
L(
"mm/s");
3339 def->min = 0;
3342
3343 def = this->
add(
"filament_unloading_speed",
coFloats);
3344 def->label =
L(
"Unloading speed");
3345 def->tooltip =
L(
"Speed used for unloading the filament on the wipe tower (does not affect initial part of unloading just after ramming).");
3346 def->sidetext =
L(
"mm/s");
3347 def->min = 0;
3350
3351 def = this->
add(
"filament_unloading_speed_start",
coFloats);
3352 def->label =
L(
"Unloading speed at the start");
3353 def->tooltip =
L(
"Speed used for unloading the tip of the filament immediately after ramming.");
3354 def->sidetext =
L(
"mm/s");
3355 def->min = 0;
3358
3359 def = this->
add(
"filament_toolchange_delay",
coFloats);
3360 def->label =
L(
"Delay after unloading");
3361 def->tooltip =
L(
"Time to wait after the filament is unloaded. "
3362 "May help to get reliable tool changes with flexible materials "
3363 "that may need more time to shrink to original dimensions.");
3364 def->sidetext =
L_CONTEXT(
"s",
"second");
3365 def->min = 0;
3368
3369 def = this->
add(
"filament_cooling_moves",
coInts);
3370 def->label =
L(
"Number of cooling moves");
3371 def->tooltip =
L(
"Filament is cooled by being moved back and forth in the "
3372 "cooling tubes. Specify desired number of these moves.");
3373 def->min = 0;
3374 def->max = 20;
3377
3378 def = this->
add(
"filament_stamping_loading_speed",
coFloats);
3379 def->label =
L(
"Stamping loading speed");
3380 def->tooltip =
L(
"Speed used for stamping.");
3381 def->min = 0;
3384
3385 def = this->
add(
"filament_stamping_distance",
coFloats);
3386 def->label =
L(
"Stamping distance measured from the center of the cooling tube");
3387 def->tooltip =
L(
"If set to non-zero value, filament is moved toward the nozzle between the individual cooling moves (\"stamping\"). "
3388 "This option configures how long this movement should be before the filament is retracted again.");
3389 def->min = 0;
3392
3393 def = this->
add(
"filament_cooling_initial_speed",
coFloats);
3394 def->label =
L(
"Speed of the first cooling move");
3395 def->tooltip =
L(
"Cooling moves are gradually accelerating beginning at this speed.");
3396 def->sidetext =
L(
"mm/s");
3397 def->min = 0;
3400
3401 def = this->
add(
"filament_minimal_purge_on_wipe_tower",
coFloats);
3402 def->label =
L(
"Minimal purge on wipe tower");
3403 def->tooltip =
L(
"After a tool change, the exact position of the newly loaded filament inside "
3404 "the nozzle may not be known, and the filament pressure is likely not yet stable. "
3405 "Before purging the print head into an infill or a sacrificial object, Orca Slicer will always prime "
3406 "this amount of material into the wipe tower to produce successive infill or sacrificial object extrusions reliably.");
3407 def->sidetext =
L(u8
"mm³");
3408 def->min = 0;
3411
3412 def = this->
add(
"filament_cooling_before_tower",
coFloats);
3413 def->label =
L(
"Wipe tower cooling");
3414 def->tooltip =
L(
"Temperature drop before entering the wipe tower.");
3415 def->sidetext =
L(u8
"\u2103" );
3417 def->nullable = true;
3419
3420 def = this->
add(
"filament_tower_interface_pre_extrusion_dist",
coFloats);
3421 def->label =
L(
"Interface layer pre-extrusion distance");
3422 def->tooltip =
L(
"Pre-extrusion distance for prime tower interface layer (where different materials meet).");
3423 def->sidetext =
L(
"mm");
3424 def->min = 0;
3427
3428 def = this->
add(
"filament_tower_interface_pre_extrusion_length",
coFloats);
3429 def->label =
L(
"Interface layer pre-extrusion length");
3430 def->tooltip =
L(
"Pre-extrusion length for prime tower interface layer (where different materials meet).");
3431 def->sidetext =
L(
"mm");
3432 def->min = 0;
3435
3436 def = this->
add(
"filament_tower_ironing_area",
coFloats);
3437 def->label =
L(
"Tower ironing area");
3438 def->tooltip =
L(
"Ironing area for prime tower interface layer (where different materials meet).");
3439 def->sidetext =
L(u8
"mm²");
3440 def->min = 0;
3443
3444 def = this->
add(
"filament_tower_interface_purge_volume",
coFloats);
3445 def->label =
L(
"Interface layer purge length");
3446 def->tooltip =
L(
"Purge length for prime tower interface layer (where different materials meet).");
3447 def->sidetext =
L(
"mm");
3448 def->min = 0;
3451
3452 def = this->
add(
"filament_tower_interface_print_temp",
coInts);
3453 def->label =
L(
"Interface layer print temperature");
3454 def->tooltip =
L(
"Print temperature for prime tower interface layer (where different materials meet). If set to -1, use max recommended nozzle temperature.");
3455 def->sidetext =
L(u8
"\u2103" );
3456 def->min = -1;
3459
3460 def = this->
add(
"filament_cooling_final_speed",
coFloats);
3461 def->label =
L(
"Speed of the last cooling move");
3462 def->tooltip =
L(
"Cooling moves are gradually accelerating towards this speed.");
3463 def->sidetext =
L(
"mm/s");
3464 def->min = 0;
3467
3468 def = this->
add(
"filament_ramming_parameters",
coStrings);
3469 def->label =
L(
"Ramming parameters");
3470 def->tooltip =
L(
"This string is edited by RammingDialog and contains ramming specific parameters.");
3472 def->set_default_value(new ConfigOptionStrings { "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0|"
3473 " 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" });
3474
3475 def = this->
add(
"filament_multitool_ramming",
coBools);
3476 def->label =
L(
"Enable ramming for multi-tool setups");
3477 def->tooltip =
L(
"Perform ramming when using multi-tool printer (i.e. when the 'Single Extruder Multimaterial' in Printer Settings is unchecked). "
3478 "When checked, a small amount of filament is rapidly extruded on the wipe tower just before the tool change. "
3479 "This option is only used when the wipe tower is enabled.");
3482
3483 def = this->
add(
"filament_multitool_ramming_volume",
coFloats);
3484 def->label =
L(
"Multi-tool ramming volume");
3485 def->tooltip =
L(
"The volume to be rammed before the tool change.");
3486 def->sidetext =
L(u8
"mm³");
3487 def->min = 0;
3490
3491 def = this->
add(
"filament_multitool_ramming_flow",
coFloats);
3492 def->label =
L(
"Multi-tool ramming flow");
3493 def->tooltip =
L(
"Flow used for ramming the filament before the tool change.");
3494 def->sidetext =
L(u8
"mm³/s");
3495 def->min = 0;
3498
3500 def->label =
L(
"Density");
3501 def->tooltip =
L(
"Filament density, for statistical purposes only.");
3502 def->sidetext =
L(u8
"g/cm³");
3503 def->min = 0;
3506
3508 def->label =
L(
"Type");
3509 def->tooltip =
L(
"Filament material type");
3511 def->gui_flags = "show_value";
3512
3513
3515 def->enum_values.push_back(filament.name);
3516 }
3517
3519 def->set_default_value(new ConfigOptionStrings { "PLA" });
3520
3521 def = this->
add(
"filament_soluble",
coBools);
3522 def->label =
L(
"Soluble material");
3523 def->tooltip =
L(
"Soluble material is commonly used to print supports and support interfaces.");
3526
3527 def = this->
add(
"filament_change_length",
coFloats);
3528 def->label =
L(
"Filament ramming length");
3529 def->tooltip =
L(
"When changing the extruder, it is recommended to extrude a certain length of filament from the original extruder. This helps minimize nozzle oozing.");
3530 def->sidetext =
L(
"mm");
3531 def->min = 0;
3534
3535 def = this->
add(
"filament_is_support",
coBools);
3536 def->label =
L(
"Support material");
3537 def->tooltip =
L(
"Support material is commonly used to print supports and support interfaces.");
3540
3541
3542
3543
3544
3545 def = this->
add(
"filament_is_mixed",
coBools);
3546 def->label =
L(
"Is mixed filament");
3547 def->tooltip =
L(
"Whether this filament slot is a mixed filament composed of multiple physical filaments");
3550
3551 def = this->
add(
"filament_mixed_components",
coStrings);
3552 def->label =
L(
"Mixed filament components");
3553 def->tooltip =
L(
"Comma-separated 1-based indices of component filaments, e.g. \"1,3\"");
3555 def->set_default_value(new ConfigOptionStrings{""});
3556
3557 def = this->
add(
"filament_mixed_sublayer_ratios",
coStrings);
3558 def->label =
L(
"Mixed filament sublayer ratios");
3559 def->tooltip =
L(
"Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"");
3561 def->set_default_value(new ConfigOptionStrings{""});
3562
3563 def = this->
add(
"filament_mixed_gradient",
coBools);
3564 def->label =
L(
"Mixed filament gradient");
3565 def->tooltip =
L(
"Enable Z-direction gradient mode for mixed filament sub-layers. "
3566 "When enabled, the sub-layer ratios vary linearly across layers.");
3569
3570 def = this->
add(
"filament_mixed_gradient_range",
coStrings);
3571 def->label =
L(
"Mixed filament gradient range");
3572 def->tooltip =
L(
"Start and end ratios for the first component in gradient mode. "
3573 "Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%.");
3575 def->set_default_value(new ConfigOptionStrings{""});
3576
3577 def = this->
add(
"filament_mixed_gradient_curve",
coStrings);
3578 def->label =
L(
"Mixed filament gradient curve");
3579 def->tooltip =
L(
"Optional Photoshop-style custom curve mapping Z progress to the first "
3580 "component ratio. Encoded as pipe-separated control points, "
3581 "either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override "
3582 "is needed (empty token or \"nan\" means use PCHIP default). "
3583 "x in [0,1]; y is clamped to the configured ratio range, "
3584 "e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear "
3585 "gradient_range is used instead.");
3587 def->set_default_value(new ConfigOptionStrings{""});
3588
3589 def = this->
add(
"filament_mixed_gradient_per_part",
coBools);
3590 def->label =
L(
"Mixed filament per-part gradient");
3591 def->tooltip =
L(
"When gradient mode is enabled, apply the gradient to each part of an "
3592 "assembly independently rather than treating the whole assembly as one "
3593 "Z range.");
3596
3597
3598
3599
3600
3601 def = this->
add(
"filament_printable",
coInts);
3602 def->label =
L(
"Filament printable");
3603 def->tooltip =
L(
"The filament is printable in extruder.");
3606
3607
3608
3609
3610
3611 def = this->
add(
"filament_extruder_compatibility",
coInts);
3612 def->label =
L(
"Filament-extruder compatibility");
3613 def->tooltip =
L(
"A single 32-bit int encoding the compatibility level of a filament across all extruders (up to 10). "
3614 "Every 3 bits represent one extruder (bits [3*i, 3*i+2] for extruder i). "
3615 "0: printable, 1: error, 2: critical warning, 3: warning, 4-7: reserved.");
3618
3619
3620 def = this->
add(
"temperature_vitrification",
coInts);
3621 def->label =
L(
"Softening temperature");
3622 def->tooltip =
L(
"The material softens at this temperature, so when the bed temperature is equal to or greater than this, it\'s highly recommended to open the front door and/or remove the upper glass to avoid clogs.");
3623 def->sidetext =
L(u8
"\u2103" );
3626
3628 def->label =
L(
"Price");
3629 def->tooltip =
L(
"Filament price, for statistical purposes only.");
3630 def->sidetext =
L(
"money/kg");
3631 def->min = 0;
3634
3636 def->set_default_value(new ConfigOptionStrings { "" });
3637
3638
3639
3641 def->set_default_value(new ConfigOptionStrings());
3643
3645 def->label =
L(
"Vendor");
3646 def->tooltip =
L(
"Vendor of filament. For show only.");
3648 def->set_default_value(
new ConfigOptionStrings{
L(
"(Undefined)")});
3650
3651 def = this->
add(
"infill_direction",
coFloat);
3652 def->label =
L(
"Sparse infill direction");
3653 def->category =
L(
"Strength");
3654 def->tooltip =
L(
"This is the angle for sparse infill pattern, which controls the start or main direction of lines.");
3655 def->sidetext = u8"°";
3656 def->min = 0;
3657 def->max = 360;
3660
3661 def = this->
add(
"solid_infill_direction",
coFloat);
3662 def->label =
L(
"Solid infill direction");
3663 def->category =
L(
"Strength");
3664 def->tooltip =
L(
"Angle for solid infill pattern, which controls the start or main direction of line.");
3665 def->sidetext = u8"°";
3666 def->min = 0;
3667 def->max = 360;
3670
3671 def = this->
add(
"top_layer_direction",
coFloat);
3672 def->label =
L(
"Top layer direction");
3673 def->category =
L(
"Strength");
3674 def->tooltip =
L(
"Fixed angle for the top solid infill and ironing lines.\nSet to -1 to follow the default solid infill direction.");
3675 def->sidetext = u8"°";
3676 def->min = -1;
3677 def->max = 360;
3680
3681 def = this->
add(
"bottom_layer_direction",
coFloat);
3682 def->label =
L(
"Bottom layer direction");
3683 def->category =
L(
"Strength");
3684 def->tooltip =
L(
"Fixed angle for the bottom solid infill lines.\nSet to -1 to follow the default solid infill direction.");
3685 def->sidetext = u8"°";
3686 def->min = -1;
3687 def->max = 360;
3690
3692 def->label =
L(
"Sparse infill density");
3693 def->category =
L(
"Strength");
3694
3695 def->tooltip =
L(
"Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used.");
3696 def->sidetext = "%";
3697 def->min = 0;
3698 def->max = 100;
3699 def->set_default_value(new ConfigOptionPercent(20));
3700
3701 def = this->
add(
"align_infill_direction_to_model",
coBool);
3702 def->label =
L(
"Align directions to model");
3703 def->category =
L(
"Strength");
3704 def->tooltip =
L(
"Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n"
3705 "When enabled, these directions rotate together with the model so the printed features keep their intended orientation "
3706 "relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed.");
3708 def->set_default_value(new ConfigOptionBool(false));
3709
3711 def->label =
L(
"Insert solid layers");
3712 def->category =
L(
"Strength");
3713 def->tooltip =
L(
"Insert solid infill at specific layers. Use N to insert every Nth layer, N#K to insert K consecutive solid layers every N layers (K is optional, e.g. '5#' equals '5#1'), or a comma-separated list (e.g. 1,7,9) to insert at explicit layers. Layers are 1-based.");
3716
3717
3718
3719 def = this->
add(
"fill_multiline",
coInt);
3720 def->label =
L(
"Fill Multiline");
3721 def->category =
L(
"Strength");
3722 def->tooltip =
L(
"Using multiple lines for the infill pattern, if supported by infill pattern.");
3723 def->min = 1;
3724 def->max = 10;
3725 def->set_default_value(new ConfigOptionInt(1));
3726
3727 def = this->
add(
"adaptive_infill_mode",
coEnum);
3728 def->label =
L(
"Adaptive density (experimental)");
3729 def->category =
L(
"Strength");
3730 def->tooltip =
L(
"Grades the Gyroid and TPMS infill inside the object: its cells grow from the surface of the "
3731 "object towards its center. The sparse infill density is used at the surface and the interior "
3732 "density at the center.\n"
3733 "Distance warp, Smooth blend and Stepped shells follow the distance to the nearest surface, "
3734 "including the top and bottom, with the interior density at the point farthest from it:\n"
3735 " - Distance warp: one continuous pattern, stretched and sheared where the distance changes "
3736 "across directions, as in plates and long parts.\n"
3737 " - Smooth blend: the patterns of neighbouring densities blended into each other, with small "
3738 "loops where they meet.\n"
3739 " - Stepped shells: shells of the regular pattern at densities about 1.5 times apart, their "
3740 "lines joined along the shell boundaries.\n"
3741 " - Lobes: follows the 3D shape of the object, including its top and bottom. Every lobe, a part "
3742 "joined to the rest by a narrower neck, is graded towards its own center.\n"
3743 " - Normal Z, Y or X: follows the sections of the object normal to that axis, so the density "
3744 "does not change along it.");
3746 def->enum_values.push_back("disabled");
3747 def->enum_values.push_back("distance_warp");
3748 def->enum_values.push_back("smooth_blend");
3749 def->enum_values.push_back("stepped_shells");
3750 def->enum_values.push_back("lobes");
3751 def->enum_values.push_back("normal_z");
3752 def->enum_values.push_back("normal_y");
3753 def->enum_values.push_back("normal_x");
3754 def->enum_labels.push_back(
L(
"Disabled"));
3755 def->enum_labels.push_back(
L(
"Distance warp"));
3756 def->enum_labels.push_back(
L(
"Smooth blend"));
3757 def->enum_labels.push_back(
L(
"Stepped shells"));
3758 def->enum_labels.push_back(
L(
"Lobes"));
3759 def->enum_labels.push_back(
L(
"Normal Z"));
3760 def->enum_labels.push_back(
L(
"Normal Y"));
3761 def->enum_labels.push_back(
L(
"Normal X"));
3764
3765 def = this->
add(
"adaptive_infill_interior_density",
coPercent);
3766 def->label =
L(
"Interior density");
3767 def->category =
L(
"Strength");
3768 def->tooltip =
L(
"Density of the adaptive infill at the center of the object.");
3769 def->sidetext = "%";
3770 def->min = 1;
3771 def->max = 100;
3773 def->set_default_value(new ConfigOptionPercent(5));
3774
3775 def = this->
add(
"adaptive_infill_gradient",
coEnum);
3776 def->label =
L(
"Adaptive gradient");
3777 def->category =
L(
"Strength");
3778 def->tooltip =
L(
"How the density changes from the surface to the center of the object.\n"
3779 "Linear: the density changes at a constant rate.\n"
3780 "Quadratic: the density stays close to the sparse infill density near the surface and "
3781 "changes faster towards the center.\n"
3782 "Exponential: the density changes quickly just below the surface and levels off towards "
3783 "the center.");
3785 def->enum_values.push_back("linear");
3786 def->enum_values.push_back("quadratic");
3787 def->enum_values.push_back("exponential");
3788 def->enum_labels.push_back(
L(
"Linear"));
3789 def->enum_labels.push_back(
L(
"Quadratic"));
3790 def->enum_labels.push_back(
L(
"Exponential"));
3793
3794
3795
3796
3797
3798 def = this->
add(
"gyroid_optimized",
coBool);
3799 def->label =
L(
"Z-buckling bias optimization (experimental)");
3800 def->category =
L(
"Strength");
3801
3802 def->tooltip =
L(
"Tightens the gyroid wave along the Z (vertical) axis at low infill density "
3803 "to shorten the effective vertical column length and improve Z-axis compression "
3804 "buckling resistance. Filament use is preserved. No effect at ~30% sparse infill "
3805 "density and above. Only applies when Sparse infill pattern is set to Gyroid.");
3806 def->set_default_value(new ConfigOptionBool(false));
3807
3808 def = this->
add(
"sparse_infill_pattern",
coEnum);
3809 def->label =
L(
"Sparse infill pattern");
3810 def->category =
L(
"Strength");
3811 def->tooltip =
L(
"This is the line pattern for internal sparse infill.");
3813 def->enum_values.push_back("rectilinear");
3814 def->enum_values.push_back("alignedrectilinear");
3815 def->enum_values.push_back("zigzag");
3816 def->enum_values.push_back("crosszag");
3817 def->enum_values.push_back("lockedzag");
3818 def->enum_values.push_back("line");
3819 def->enum_values.push_back("grid");
3820 def->enum_values.push_back("triangles");
3821 def->enum_values.push_back("tri-hexagon");
3822 def->enum_values.push_back("cubic");
3823 def->enum_values.push_back("adaptivecubic");
3824 def->enum_values.push_back("quartercubic");
3825 def->enum_values.push_back("supportcubic");
3826 def->enum_values.push_back("lightning");
3827 def->enum_values.push_back("honeycomb");
3828 def->enum_values.push_back("3dhoneycomb");
3829 def->enum_values.push_back("lateral-honeycomb");
3830 def->enum_values.push_back("lateral-lattice");
3831 def->enum_values.push_back("crosshatch");
3832 def->enum_values.push_back("tpmsd");
3833 def->enum_values.push_back("tpmsfk");
3834 def->enum_values.push_back("gyroid");
3835 def->enum_values.push_back("concentric");
3836 def->enum_values.push_back("hilbertcurve");
3837 def->enum_values.push_back("archimedeanchords");
3838 def->enum_values.push_back("octagramspiral");
3839 def->enum_labels.push_back(
L(
"Rectilinear"));
3840 def->enum_labels.push_back(
L(
"Aligned Rectilinear"));
3841 def->enum_labels.push_back(
L(
"Zig Zag"));
3842 def->enum_labels.push_back(
L(
"Cross Zag"));
3843 def->enum_labels.push_back(
L(
"Locked Zag"));
3844 def->enum_labels.push_back(
L(
"Line"));
3845 def->enum_labels.push_back(
L(
"Grid"));
3846 def->enum_labels.push_back(
L(
"Triangles"));
3847 def->enum_labels.push_back(
L(
"Tri-hexagon"));
3848 def->enum_labels.push_back(
L(
"Cubic"));
3849 def->enum_labels.push_back(
L(
"Adaptive Cubic"));
3850 def->enum_labels.push_back(
L(
"Quarter Cubic"));
3851 def->enum_labels.push_back(
L(
"Support Cubic"));
3852 def->enum_labels.push_back(
L(
"Lightning"));
3853 def->enum_labels.push_back(
L(
"Honeycomb"));
3854 def->enum_labels.push_back(
L(
"3D Honeycomb"));
3855 def->enum_labels.push_back(
L(
"Lateral Honeycomb"));
3856 def->enum_labels.push_back(
L(
"Lateral Lattice"));
3857 def->enum_labels.push_back(
L(
"Cross Hatch"));
3858 def->enum_labels.push_back(
L(
"TPMS-D"));
3859 def->enum_labels.push_back(
L(
"TPMS-FK"));
3860 def->enum_labels.push_back(
L(
"Gyroid"));
3861 def->enum_labels.push_back(
L(
"Concentric"));
3862 def->enum_labels.push_back(
L(
"Hilbert Curve"));
3863 def->enum_labels.push_back(
L(
"Archimedean Chords"));
3864 def->enum_labels.push_back(
L(
"Octagram Spiral"));
3865 def->set_default_value(
new ConfigOptionEnum<InfillPattern>(
ipCrossHatch));
3866
3867 def = this->
add(
"sparse_infill_smooth_factor",
coPercent);
3868 def->label =
L(
"Sparse infill smooth factor");
3869 def->category =
L(
"Strength");
3870 def->tooltip =
L(
"Controls how strongly sparse infill corners are rounded. 0% keeps the original sharp path, "
3871 "while 100% produces the largest possible curves between adjacent infill lines.");
3872 def->sidetext = "%";
3873 def->min = 0;
3874 def->max = 100;
3876 def->set_default_value(new ConfigOptionPercent(0));
3877
3878 def = this->
add(
"top_surface_acceleration",
coFloats);
3879 def->label =
L(
"Top surface");
3880 def->category =
L(
"Speed");
3881 def->tooltip =
L(
"This is the acceleration of top surface infill. Using a lower value may improve top surface quality.");
3882 def->sidetext =
L(u8
"mm/s²");
3883 def->min = 0;
3885 def->nullable = true;
3887
3888 def = this->
add(
"outer_wall_acceleration",
coFloats);
3889 def->label =
L(
"Outer wall");
3890 def->category =
L(
"Speed");
3891 def->tooltip =
L(
"Acceleration of outer wall: using a lower value can improve quality.");
3892 def->sidetext =
L(u8
"mm/s²");
3893 def->min = 0;
3895 def->nullable = true;
3897
3898 def = this->
add(
"inner_wall_acceleration",
coFloats);
3899 def->label =
L(
"Inner wall");
3900 def->category =
L(
"Speed");
3901 def->tooltip =
L(
"Acceleration of inner walls.");
3902 def->sidetext =
L(u8
"mm/s²");
3903 def->min = 0;
3905 def->nullable = true;
3907
3909 def->label =
L(
"Sparse infill");
3910 def->category =
L(
"Speed");
3911 def->tooltip =
L(
"Acceleration of sparse infill. If the value is expressed as a percentage (e.g. 100%), it will be calculated based on the default acceleration.");
3912 def->sidetext =
L(u8
"mm/s² or %");
3913 def->min = 0;
3915 def->ratio_over = "default_acceleration";
3916 def->nullable = true;
3918
3920 def->label =
L(
"Internal solid infill");
3921 def->category =
L(
"Speed");
3922 def->tooltip =
L(
"Acceleration of internal solid infill. If the value is expressed as a percentage (e.g. 100%), it will be calculated based on the default acceleration.");
3923 def->sidetext =
L(u8
"mm/s² or %");
3924 def->min = 0;
3926 def->ratio_over = "default_acceleration";
3927 def->nullable = true;
3929
3930 def = this->
add(
"initial_layer_acceleration",
coFloats);
3931 def->label =
L(
"First layer");
3932 def->category =
L(
"Speed");
3933 def->tooltip =
L(
"This is the printing acceleration for the first layer. Using limited acceleration can improve build plate adhesion.");
3934 def->sidetext =
L(u8
"mm/s²");
3935 def->min = 0;
3937 def->nullable = true;
3939
3940 def = this->
add(
"accel_to_decel_enable",
coBool);
3941 def->label =
L(
"Enable accel_to_decel");
3942 def->category =
L(
"Speed");
3943 def->tooltip =
L(
"Klipper's max_accel_to_decel will be adjusted automatically.");
3945 def->set_default_value(new ConfigOptionBool(true));
3946
3948 def->label =
L(
"accel_to_decel");
3949 def->category =
L(
"Speed");
3950
3951 def->tooltip =
L(
"Klipper's max_accel_to_decel will be adjusted to this % of acceleration.");
3952 def->sidetext = "%";
3953 def->min = 1;
3954 def->max = 100;
3956 def->set_default_value(new ConfigOptionPercent(50));
3957
3959 def->label =
L(
"Default");
3960 def->category =
L(
"Speed");
3961 def->tooltip =
L(
"Default jerk.");
3962 def->sidetext =
L(
"mm/s");
3963 def->min = 0;
3965 def->nullable = true;
3967
3968 def = this->
add(
"default_junction_deviation",
coFloats);
3969 def->label =
L(
"Junction Deviation");
3970 def->category =
L(
"Speed");
3971 def->tooltip =
L(
"Marlin Firmware Junction Deviation (replaces the traditional XY Jerk setting).");
3972 def->sidetext =
L(
"mm");
3973 def->min = 0.f;
3974 def->max = 0.3f;
3976 def->nullable = true;
3978
3980 def->label =
L(
"Outer wall");
3981 def->category =
L(
"Speed");
3982 def->tooltip =
L(
"Jerk of outer walls.");
3983 def->sidetext =
L(
"mm/s");
3984 def->min = 0;
3986 def->nullable = true;
3988
3990 def->label =
L(
"Inner wall");
3991 def->category =
L(
"Speed");
3992 def->tooltip =
L(
"Jerk of inner walls.");
3993 def->sidetext =
L(
"mm/s");
3994 def->min = 0;
3996 def->nullable = true;
3998
4000 def->label =
L(
"Top surface");
4001 def->category =
L(
"Speed");
4002 def->nullable = true;
4003 def->tooltip =
L(
"Jerk for top surface.");
4004 def->sidetext =
L(
"mm/s");
4005 def->min = 0;
4008
4010 def->label =
L(
"Infill");
4011 def->category =
L(
"Speed");
4012 def->tooltip =
L(
"Jerk for infill.");
4013 def->sidetext =
L(
"mm/s");
4014 def->min = 0;
4016 def->nullable = true;
4018
4020 def->label =
L(
"First layer");
4021 def->category =
L(
"Speed");
4022 def->tooltip =
L(
"Jerk for the first layer.");
4023 def->sidetext =
L(
"mm/s");
4024 def->min = 0;
4026 def->nullable = true;
4028
4030 def->label =
L(
"Travel");
4031 def->category =
L(
"Speed");
4032 def->tooltip =
L(
"Jerk for travel.");
4033 def->sidetext =
L(
"mm/s");
4034 def->min = 0;
4036 def->nullable = true;
4038
4040 def->label =
L(
"First layer travel");
4041 def->tooltip =
L(
"Travel jerk of first layer.\nThe percentage value is relative to Travel Jerk.");
4042 def->sidetext =
L(
"mm/s or %");
4043 def->min = 0;
4045 def->ratio_over = "travel_jerk";
4046 def->nullable = true;
4048
4050 def->label =
L(
"First layer");
4051 def->category =
L(
"Quality");
4052 def->tooltip =
L(
"Line width of the first layer. If expressed as a %, it will be computed over the nozzle diameter.");
4053 def->sidetext =
L(
"mm or %");
4054 def->ratio_over = "nozzle_diameter";
4055 def->min = 0;
4056 def->max = 1000;
4057 def->max_literal = 10;
4059 def->set_default_value(new ConfigOptionFloatOrPercent(0., false));
4060
4061 def = this->
add(
"initial_layer_print_height",
coFloat);
4062 def->label =
L(
"First layer height");
4063 def->category =
L(
"Quality");
4064 def->tooltip =
L(
"Height of the first layer. Making the first layer height thicker can improve build plate adhesion.");
4065 def->sidetext =
L(
"mm");
4066 def->min = 0;
4068
4069
4070
4071
4072
4073
4074
4075
4076
4078 def->label =
L(
"First layer");
4079 def->tooltip =
L(
"This is the speed for the walls and brim of the first layer.");
4080 def->sidetext =
L(
"mm/s");
4081 def->min = 1;
4083 def->nullable = true;
4085
4086 def = this->
add(
"initial_layer_infill_speed",
coFloats);
4087 def->label =
L(
"First layer infill");
4088 def->tooltip =
L(
"This is the speed for the first layer except for walls and brim, such as infill, gap fill and support.");
4089 def->sidetext =
L(
"mm/s");
4090 def->min = 1;
4092 def->nullable = true;
4094
4096 def->label =
L(
"First layer travel speed");
4097 def->tooltip =
L(
"Travel speed of the first layer.");
4098 def->category =
L(
"Speed");
4099 def->sidetext =
L(
"mm/s or %");
4100 def->ratio_over = "travel_speed";
4101 def->min = 1;
4103 def->nullable = true;
4105
4106 def = this->
add(
"slow_down_layers",
coInt);
4107 def->label =
L(
"Number of slow layers");
4108 def->tooltip =
L(
"The first few layers are printed slower than normal. "
4109 "The speed is gradually increased in a linear fashion over the specified number of layers.");
4110 def->category =
L(
"Speed");
4111 def->sidetext =
L(
"layers");
4112 def->min = 0;
4114 def->set_default_value(new ConfigOptionInt(0));
4115
4116 def = this->
add(
"nozzle_temperature_initial_layer",
coInts);
4117 def->label =
L(
"First layer");
4118 def->full_label =
L(
"First layer nozzle temperature");
4119 def->tooltip =
L(
"Nozzle temperature for printing the first layer with this filament");
4120 def->sidetext =
L(u8
"\u2103" );
4121 def->min = 0;
4122 def->max = max_temp;
4124
4125 def = this->
add(
"full_fan_speed_layer",
coInts);
4126 def->label =
L(
"Full fan speed at layer");
4127 def->tooltip =
L(
"Fan speed will be ramped up linearly from zero at layer \"close_fan_the_first_x_layers\" "
4128 "to maximum at layer \"full_fan_speed_layer\". "
4129 "\"full_fan_speed_layer\" will be ignored if lower than \"close_fan_the_first_x_layers\", in which case "
4130 "the fan will be running at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1.");
4131 def->sidetext =
L(
"layer");
4132 def->min = 0;
4133 def->max = 1000;
4136
4137
4138 def = this->
add(
"initial_layer_fan_speed",
coInts);
4139 def->label =
L(
"First layer fan speed");
4140 def->tooltip =
L(
"Sets an exact fan speed for the first layer, overriding all other cooling settings. "
4141 "Useful for protecting 3D-printed toolhead parts (e.g. Voron-style ABS/ASA ducts) from "
4142 "a hot bed. A small amount of airflow cools the ducts down, without using full cooling that "
4143 "may in certain conditions hurt first-layer adhesion."
4144 "\nFrom the second layer onwards, normal cooling resumes."
4145 "\nIf \"Full fan speed at layer\" is also set, the fan ramps smoothly from this value "
4146 "on the first layer up to your target by the chosen layer."
4147 "\nOnly available when \"No cooling for the first\" is 0."
4148 "\nSet to -1 to disable it.");
4149 def->sidetext = "%";
4150 def->min = -1;
4151 def->max = 100;
4154
4155 def = this->
add(
"support_material_interface_fan_speed",
coInts);
4156 def->label =
L(
"Support interface fan speed");
4157 def->tooltip =
L(
"This part cooling fan speed is applied when printing support interfaces. Setting this parameter to a higher than regular speed "
4158 "reduces the layer binding strength between supports and the supported part, making them easier to separate."
4159 "\nSet to -1 to disable it."
4160 "\nThis setting is overridden by disable_fan_first_layers.");
4161 def->sidetext = "%";
4162 def->min = -1;
4163 def->max = 100;
4166
4167
4168 def = this->
add(
"internal_bridge_fan_speed",
coInts);
4169 def->label =
L(
"Internal bridges fan speed");
4170 def->tooltip =
L(
"The part cooling fan speed used for all internal bridges. Set to -1 to use the overhang fan speed settings instead.\n\n"
4171 "Reducing the internal bridges fan speed, compared to your regular fan speed, can help reduce part warping due to excessive "
4172 "cooling applied over a large surface for a prolonged period of time.");
4173 def->sidetext = "%";
4174 def->min = -1;
4175 def->max = 100;
4178
4179 def = this->
add(
"ironing_fan_speed",
coInts);
4180 def->label =
L(
"Ironing fan speed");
4181 def->tooltip =
L(
"This part cooling fan speed is applied when ironing. Setting this parameter to a lower than regular speed "
4182 "reduces possible nozzle clogging due to the low volumetric flow rate, making the interface smoother."
4183 "\nSet to -1 to disable it.");
4184 def->sidetext = "%";
4185 def->min = -1;
4186 def->max = 100;
4189
4190
4192 def->label =
L(
"Ironing flow");
4193 def->category =
L(
"Quality");
4194 def->tooltip =
L(
"Filament-specific override for ironing flow. This allows you to customize the ironing flow "
4195 "for each filament type. Too high value results in overextrusion on the surface.");
4196 def->sidetext = "%";
4197 def->min = 0;
4198 def->max = 100;
4200 def->nullable = true;
4202
4203 def = this->
add(
"filament_ironing_spacing",
coFloats);
4204 def->label =
L(
"Ironing line spacing");
4205 def->category =
L(
"Quality");
4206 def->tooltip =
L(
"Filament-specific override for ironing line spacing. This allows you to customize the spacing "
4207 "between ironing lines for each filament type.");
4208 def->sidetext =
L(
"mm");
4209 def->min = 0;
4210 def->max = 1;
4212 def->nullable = true;
4214
4215 def = this->
add(
"filament_ironing_inset",
coFloats);
4216 def->label =
L(
"Ironing inset");
4217 def->category =
L(
"Quality");
4218 def->tooltip =
L(
"Filament-specific override for ironing inset. This allows you to customize the distance to keep "
4219 "from the edges when ironing for each filament type.");
4220 def->sidetext =
L(
"mm");
4221 def->min = 0;
4222 def->max = 100;
4224 def->nullable = true;
4226
4227 def = this->
add(
"filament_ironing_speed",
coFloats);
4228 def->label =
L(
"Ironing speed");
4229 def->category =
L(
"Speed");
4230 def->tooltip =
L(
"Filament-specific override for ironing speed. This allows you to customize the print speed "
4231 "of ironing lines for each filament type.");
4232 def->sidetext =
L(
"mm/s");
4233 def->min = 1;
4235 def->nullable = true;
4237
4239 def->label =
L(
"Fuzzy skin");
4240 def->category =
L(
"Others");
4241 def->tooltip =
L(
"This setting makes the toolhead randomly jitter while printing walls so that the surface has a rough textured look. This setting controls the fuzzy position.");
4243 def->enum_values.push_back("none");
4244 def->enum_values.push_back("external");
4245 def->enum_values.push_back("hole");
4246 def->enum_values.push_back("all");
4247 def->enum_values.push_back("allwalls");
4248 def->enum_values.push_back("disabled_fuzzy");
4249 def->enum_labels.push_back(
L(
"Painted only"));
4250 def->enum_labels.push_back(
L(
"Contour"));
4251 def->enum_labels.push_back(
L(
"Hole"));
4252 def->enum_labels.push_back(
L(
"Contour and hole"));
4253 def->enum_labels.push_back(
L(
"All walls"));
4254 def->enum_labels.push_back(
L(
"Disabled"));
4257
4258 def = this->
add(
"fuzzy_skin_thickness",
coFloat);
4259 def->label =
L(
"Fuzzy skin thickness");
4260 def->category =
L(
"Others");
4261 def->tooltip =
L(
"The width of jittering: it\u2019s recommended to keep this lower than the outer wall line width.");
4262 def->sidetext =
L(
"mm");
4263 def->min = 0;
4264 def->max = 2;
4267
4268 def = this->
add(
"fuzzy_skin_point_distance",
coFloat);
4269 def->label =
L(
"Fuzzy skin point distance");
4270 def->category =
L(
"Others");
4271 def->tooltip =
L(
"The average distance between the random points introduced on each line segment.");
4272 def->sidetext =
L(
"mm");
4273 def->min = 0.01f;
4274 def->max = 5.f;
4277
4278 def = this->
add(
"fuzzy_skin_first_layer",
coBool);
4279 def->label =
L(
"Apply fuzzy skin to first layer");
4280 def->category =
L(
"Others");
4281 def->tooltip =
L(
"Whether to apply fuzzy skin on the first layer.");
4283 def->set_default_value(new ConfigOptionBool(0));
4284
4285 def = this->
add(
"fuzzy_skin_mode",
coEnum);
4286 def->label =
L(
"Fuzzy skin generator mode");
4287 def->category =
L(
"Others");
4288
4289 def->tooltip =
L(
"Fuzzy skin generation mode. Works only with Arachne!\n"
4290 "Displacement: Сlassic mode when the pattern is formed by shifting the nozzle sideways from the original path.\n"
4291 "Extrusion: The mode when the pattern formed by the amount of extruded plastic. "
4292 "This is the fast and straight algorithm without unnecessary nozzle shake that gives a smooth pattern. "
4293 "But it is more useful for forming loose walls in the entire they array.\n"
4294 "Combined: Joint mode [Displacement] + [Extrusion]. The appearance of the walls is similar to [Displacement] Mode, but it leaves no pores between the perimeters.\n\n"
4295 "Attention! The [Extrusion] and [Combined] modes works only the fuzzy_skin_thickness parameter not more than the thickness of printed loop. "
4296 "At the same time, the width of the extrusion for a particular layer should also not be below a certain level. "
4297 "It is usually equal 15-25% of a layer height. Therefore, the maximum fuzzy skin thickness with a perimeter width of 0.4 mm and a layer height of 0.2 mm will be 0.4-(0.2*0.25)=±0.35mm! "
4298 "If you enter a higher parameter than this, the error Flow::spacing() will displayed, and the model will not be sliced. You can choose this number until this error is repeated." );
4300 def->enum_values.push_back("displacement");
4301 def->enum_values.push_back("extrusion");
4302 def->enum_values.push_back("combined");
4303 def->enum_labels.push_back(
L(
"Displacement"));
4304 def->enum_labels.push_back(
L(
"Extrusion"));
4305 def->enum_labels.push_back(
L(
"Combined"));
4308
4309 def = this->
add(
"fuzzy_skin_noise_type",
coEnum);
4310 def->label =
L(
"Fuzzy skin noise type");
4311 def->category =
L(
"Others");
4312 def->tooltip =
L(
"Noise type to use for fuzzy skin generation:\n"
4313 "Classic: Classic uniform random noise.\n"
4314 "Perlin: Perlin noise, which gives a more consistent texture.\n"
4315 "Billow: Similar to perlin noise, but clumpier.\n"
4316 "Ridged Multifractal: Ridged noise with sharp, jagged features. Creates marble-like textures.\n"
4317 "Voronoi: Divides the surface into voronoi cells, and displaces each one by a random amount. Creates a patchwork texture.\n"
4318 "Ripple: Uniform ripple pattern that ripples left and right of the original path. Repeating pattern, woven appearance.");
4320 def->enum_values.push_back("classic");
4321 def->enum_values.push_back("perlin");
4322 def->enum_values.push_back("billow");
4323 def->enum_values.push_back("ridgedmulti");
4324 def->enum_values.push_back("voronoi");
4325 def->enum_values.push_back("ripple");
4326 def->enum_labels.push_back(
L(
"Classic"));
4327 def->enum_labels.push_back(
L(
"Perlin"));
4328 def->enum_labels.push_back(
L(
"Billow"));
4329 def->enum_labels.push_back(
L(
"Ridged Multifractal"));
4330 def->enum_labels.push_back(
L(
"Voronoi"));
4331 def->enum_labels.push_back(
L(
"Ripple"));
4334
4335 def = this->
add(
"fuzzy_skin_scale",
coFloat);
4336 def->label =
L(
"Fuzzy skin feature size");
4337 def->category =
L(
"Others");
4338 def->tooltip =
L(
"The base size of the coherent noise features, in mm. Higher values will result in larger features.");
4339 def->sidetext =
L(
"mm");
4340 def->min = 0.1f;
4341 def->max = 500;
4344
4345 def = this->
add(
"fuzzy_skin_octaves",
coInt);
4346 def->label =
L(
"Fuzzy Skin Noise Octaves");
4347 def->category =
L(
"Others");
4348 def->tooltip =
L(
"The number of octaves of coherent noise to use. Higher values increase the detail of the noise, but also increase computation time.");
4349 def->min = 1;
4350 def->max = 10;
4352 def->set_default_value(new ConfigOptionInt(4));
4353
4354 def = this->
add(
"fuzzy_skin_persistence",
coFloat);
4355 def->label =
L(
"Fuzzy skin noise persistence");
4356 def->category =
L(
"Others");
4357 def->tooltip =
L(
"The decay rate for higher octaves of the coherent noise. Lower values will result in smoother noise.");
4358 def->min = 0.01f;
4359 def->max = 1;
4362
4363 def = this->
add(
"fuzzy_skin_ripples_per_layer",
coInt);
4364 def->label =
L(
"Number of ripples per layer");
4365 def->category =
L(
"Others");
4366 def->tooltip =
L(
"Controls how many full cycles of ripples will be added per layer.");
4367 def->min = 1;
4369 def->set_default_value(new ConfigOptionInt(15));
4370
4371 def = this->
add(
"fuzzy_skin_ripple_offset",
coPercent);
4372 def->label =
L(
"Ripple offset");
4373 def->category =
L(
"Others");
4374 def->tooltip =
L(
"Shifts the ripple phase forward along the print path by the specified percentage of a wavelength each layer period.\n"
4375 "- 0% keeps every layer identical.\n"
4376 "- 50% shifts the pattern by half a wavelength, effectively inverting the phase.\n"
4377 "- 100% shifts the pattern by a full wavelength, returning to the original phase.\n\n"
4378 "The shift is applied once every number of layers set by Layers between ripple offset, so layers within the same group are printed identically.");
4379 def->min = 0;
4380 def->max = 100;
4381 def->sidetext = "%";
4383 def->set_default_value(new ConfigOptionPercent(50));
4384
4385 def = this->
add(
"fuzzy_skin_layers_between_ripple_offset",
coInt);
4386 def->label =
L(
"Layers between ripple offset");
4387 def->category =
L(
"Others");
4388 def->tooltip =
L(
"Specifies how many consecutive layers share the same ripple phase before the offset is applied.\n"
4389 "For example:\n"
4390 "- 1 = Layer 1 is printed with the base ripple pattern, then layer 2 is shifted by the configured offset, then layer 3 returns to the base pattern, and so on.\n"
4391 "- 3 = Layers 1 to 3 are printed with the base ripple pattern, then layers 4 to 6 are shifted by the configured offset, then layers 7 to 9 return to the base pattern, etc.");
4392 def->min = 1;
4394 def->set_default_value(new ConfigOptionInt(1));
4395
4396 def = this->
add(
"filter_out_gap_fill",
coFloat);
4397 def->label =
L(
"Filter out tiny gaps");
4398 def->category =
L(
"Layers and Perimeters");
4399 def->tooltip =
L(
"Don't print gap fill with a length is smaller than the threshold specified (in mm). This setting applies to top, "
4400 "bottom and solid infill and, if using the classic perimeter generator, to wall gap fill.");
4401 def->sidetext =
L(
"mm");
4404
4406 def->label =
L(
"Gap infill");
4407 def->category =
L(
"Speed");
4408 def->tooltip =
L(
"This is the speed for gap infill. Gaps usually have irregular line width and should be printed more slowly.");
4409 def->sidetext =
L(
"mm/s");
4410 def->min = 1;
4412 def->nullable = true;
4414
4415
4416 def = this->
add(
"precise_z_height",
coBool);
4417 def->label =
L(
"Precise Z height");
4418 def->category =
L(
"Quality");
4419 def->tooltip =
L(
"Enable this to get precise Z height of object after slicing. "
4420 "It will get the precise object height by fine-tuning the layer heights of the last few layers. "
4421 "Note that this is an experimental parameter.");
4423 def->set_default_value(new ConfigOptionBool(0));
4424
4425
4426 def = this->
add(
"enable_arc_fitting",
coEnum);
4427 def->label =
L(
"Arc fitting");
4428 def->tooltip =
L(
"Fit G2 and G3 arc moves to the toolpaths. Walls and surfaces are fitted within the resolution, while "
4429 "sparse infill, supports and the wipe tower use fixed tolerances.\n"
4430 " - Disabled: only straight G1 moves are used.\n"
4431 " - Enabled: arcs are fitted to all toolpaths.\n"
4432 " - Sparse infill only: arcs are fitted to the sparse infill only, which shortens the G-code of "
4433 "curved infill patterns without affecting the walls and surfaces.\n\n"
4434 "Note: For Klipper machines, Disabled is recommended. Klipper splits arcs back into line segments, "
4435 "which lowers the surface quality and can increase the print time.");
4437 def->enum_values.push_back("disabled");
4438 def->enum_values.push_back("enabled");
4439 def->enum_values.push_back("sparse_infill");
4440 def->enum_labels.push_back(
L(
"Disabled"));
4441 def->enum_labels.push_back(
L(
"Enabled"));
4442 def->enum_labels.push_back(
L(
"Sparse infill only"));
4445
4446 def = this->
add(
"gcode_add_line_number",
coBool);
4447 def->label =
L(
"Add line number");
4448 def->tooltip =
L(
"Enable this to add line number(Nx) at the beginning of each G-code line.");
4450 def->set_default_value(new ConfigOptionBool(0));
4451
4452
4453 def = this->
add(
"scan_first_layer",
coBool);
4454 def->label =
L(
"Scan first layer");
4455 def->tooltip =
L(
"Enable this to allow the camera on the printer to check the quality of the first layer.");
4457 def->set_default_value(new ConfigOptionBool(false));
4458
4459
4460 def = this->
add(
"enable_power_loss_recovery",
coEnum);
4461 def->label =
L(
"Power Loss Recovery");
4462 def->tooltip =
L(
"Choose how to control power loss recovery. When set to Printer configuration, the slicer will not emit power loss recovery G-code and will leave the printer's configuration unchanged. Applicable to Bambu Lab or Marlin 2 firmware based printers.");
4465 def->enum_values.push_back("printer_configuration");
4466 def->enum_values.push_back("enable");
4467 def->enum_values.push_back("disable");
4468 def->enum_labels.push_back(
L(
"Printer configuration"));
4469 def->enum_labels.push_back(
L(
"Enable"));
4470 def->enum_labels.push_back(
L(
"Disable"));
4472
4473
4474
4475
4476
4477
4478
4479
4481 def->label =
L(
"Nozzle type");
4482 def->tooltip =
L(
"The metallic material of the nozzle: This determines the abrasive resistance of the nozzle and what kind of filament can be printed.");
4484 def->enum_values.push_back("undefine");
4485 def->enum_values.push_back("hardened_steel");
4486 def->enum_values.push_back("stainless_steel");
4487 def->enum_values.push_back("tungsten_carbide");
4488 def->enum_values.push_back("brass");
4489 def->enum_labels.push_back(
L(
"Undefined"));
4490 def->enum_labels.push_back(
L(
"Hardened steel"));
4491 def->enum_labels.push_back(
L(
"Stainless steel"));
4492 def->enum_labels.push_back(
L(
"Tungsten carbide"));
4493 def->enum_labels.push_back(
L(
"Brass"));
4495 def->nullable = true;
4497
4498
4499 def = this->
add(
"nozzle_hrc",
coInt);
4500 def->label =
L(
"Nozzle HRC");
4501 def->tooltip =
L(
"The nozzle\'s hardness. Zero means no checking for nozzle hardness during slicing.");
4502 def->sidetext =
L(
"HRC");
4503 def->min = 0;
4504 def->max = 500;
4506 def->set_default_value(new ConfigOptionInt{0});
4507
4508 def = this->
add(
"printer_structure",
coEnum);
4509 def->label =
L(
"Printer structure");
4510 def->tooltip =
L(
"The physical arrangement and components of a printing device.");
4512 def->enum_values.push_back("undefine");
4513 def->enum_values.push_back("corexy");
4514 def->enum_values.push_back("i3");
4515 def->enum_values.push_back("hbot");
4516 def->enum_values.push_back("delta");
4517 def->enum_labels.push_back(
L(
"Undefined"));
4518 def->enum_labels.push_back(
L(
"CoreXY"));
4519 def->enum_labels.push_back(
L(
"I3"));
4520 def->enum_labels.push_back(
L(
"Hbot"));
4521 def->enum_labels.push_back(
L(
"Delta"));
4523 def->set_default_value(
new ConfigOptionEnum<PrinterStructure>(
psUndefine));
4524
4526 def->label =
L(
"Best object position");
4527 def->tooltip =
L(
"Best auto arranging position in range [0,1] w.r.t. bed shape.");
4529 def->set_default_value(
new ConfigOptionPoint(
Vec2d(0.5, 0.5)));
4530
4531 def = this->
add(
"auxiliary_fan",
coBool);
4532 def->label =
L(
"Auxiliary part cooling fan");
4533 def->tooltip =
L(
"Enable this option if machine has auxiliary part cooling fan. G-code command: M106 P2 S(0-255).");
4535 def->set_default_value(new ConfigOptionBool(false));
4536
4537 def = this->
add(
"fan_direction",
coEnum);
4538 def->label =
L(
"Fan direction");
4539 def->tooltip =
L(
"Cooling fan direction of the printer");
4541 def->enum_values.push_back("undefine");
4542 def->enum_values.push_back("left");
4543 def->enum_values.push_back("right");
4544 def->enum_values.push_back("both");
4545 def->enum_labels.push_back(
L(
"Undefined"));
4546 def->enum_labels.push_back(
L(
"Left"));
4547 def->enum_labels.push_back(
L(
"Right"));
4548 def->enum_labels.push_back(
L(
"Both"));
4550 def->set_default_value(
new ConfigOptionEnum<FanDirection>(
fdUndefine));
4551
4552 def = this->
add(
"fan_speedup_time",
coFloat);
4553
4554
4555 def->tooltip =
L(
"Start the fan this number of seconds earlier than its target start time (you can use fractional seconds)."
4556 " It assumes infinite acceleration for this time estimation, and will only take into account G1 and G0 moves (arc fitting"
4557 " is unsupported)."
4558 "\nIt won't move fan commands from custom G-code (they act as a sort of 'barrier')."
4559 "\nIt won't move fan commands into the start G-code if the 'only custom start G-code' is activated."
4560 "\nUse 0 to deactivate.");
4561 def->sidetext =
L_CONTEXT(
"s",
"second");
4564
4565 def = this->
add(
"fan_speedup_overhangs",
coBool);
4566 def->label =
L(
"Only overhangs");
4567 def->tooltip =
L(
"Will only take into account the delay for the cooling of overhangs.");
4569 def->set_default_value(new ConfigOptionBool(true));
4570
4572 def->label =
L(
"Fan kick-start time");
4573 def->tooltip =
L(
"Emit a max fan speed command for this amount of seconds before reducing to target speed to kick-start the cooling fan."
4574 "\nThis is useful for fans where a low PWM/power may be insufficient to get the fan started spinning from a stop, or to "
4575 "get the fan up to speed faster."
4576 "\nSet to 0 to deactivate.");
4577 def->sidetext =
L_CONTEXT(
"s",
"second");
4578 def->min = 0;
4581
4582
4583 def = this->
add(
"part_cooling_fan_min_pwm",
coInt);
4584 def->label =
L(
"Minimum non-zero part cooling fan speed");
4585 def->tooltip =
L(
"Some part-cooling fans cannot start spinning when commanded below a certain PWM duty cycle. "
4586 "When set above 0, any non-zero part-cooling fan command will be raised to at least this percentage "
4587 "so the fan reliably starts. A fan command of 0 (fan off) is always honoured exactly. "
4588 "This clamp is applied after every other fan calculation (first-layer ramp, layer-time interpolation, "
4589 "overhang/bridge/support-interface/ironing overrides), so scaling still operates within the range "
4590 "[this value, 100%]."
4591 "\nIf your firmware already disables the fan below a threshold (for example Klipper's "
4592 "[fan] off_below: 0.10 shuts the fan off whenever the commanded duty cycle is below 10%), "
4593 "this option and the firmware threshold should ideally be set to the same value. Matching them "
4594 "(e.g. off_below: 0.10 in Klipper and 10% here) guarantees the slicer never emits a non-zero "
4595 "value that the firmware would silently drop, and the fan never receives a value below the one "
4596 "you know it can actually spool at."
4597 "\nSet to 0 to deactivate.");
4598 def->sidetext = "%";
4599 def->min = 0;
4600 def->max = 100;
4602 def->set_default_value(new ConfigOptionInt(0));
4603
4604
4606 def->label =
L(
"Time cost");
4607 def->tooltip =
L(
"The printer cost per hour.");
4608 def->sidetext =
L(
"money/h");
4609 def->min = 0;
4612
4613
4614 def =this->
add(
"support_chamber_temp_control",
coBool);
4615 def->label=
L(
"Support controlling chamber temperature");
4616 def->tooltip=
L(
"This option is enabled if the machine supports controlling the chamber temperature\nG-code command: M141 S(0-255)");
4618 def->set_default_value(new ConfigOptionBool(true));
4619 def->readonly=false;
4620
4621 def =this->
add(
"support_air_filtration",
coBool);
4622 def->label=
L(
"Support air filtration");
4623 def->tooltip=
L(
"Enable this if the printer supports air filtration\nG-code command: M106 P3 S(0-255)");
4625 def->set_default_value(new ConfigOptionBool(true));
4626
4627
4628 def = this->
add(
"support_cooling_filter",
coBool);
4630 def->set_default_value(new ConfigOptionBool(false));
4631
4632 def = this->
add(
"cooling_filter_enabled",
coBool);
4633 def->label =
L(
"Use cooling filter");
4634 def->tooltip =
L(
"Enable this if the printer supports a cooling filter");
4636 def->set_default_value(new ConfigOptionBool(false));
4637
4638 def = this->
add(
"gcode_flavor",
coEnum);
4639 def->label =
L(
"G-code flavor");
4640 def->tooltip =
L(
"What kind of G-code the printer is compatible with.");
4642 def->enum_values.push_back("marlin");
4643 def->enum_values.push_back("klipper");
4644 def->enum_values.push_back("reprapfirmware");
4645 def->enum_values.push_back("repetier");
4646 def->enum_values.push_back("marlin2");
4647
4648
4649
4650
4651
4652
4653
4654
4655 def->enum_labels.push_back(
L(
"Marlin (legacy)"));
4656 def->enum_labels.push_back(
L(
"Klipper"));
4657 def->enum_labels.push_back("RepRapFirmware");
4658 def->enum_labels.push_back("Repetier");
4659 def->enum_labels.push_back("Marlin 2");
4660
4661
4662
4663
4664
4665
4666
4667
4669 def->readonly = false;
4670 def->set_default_value(
new ConfigOptionEnum<GCodeFlavor>(
gcfMarlinLegacy));
4671
4672 def = this->
add(
"gcode_skip_config_block",
coBool);
4673 def->label =
L(
"Skip G-code config block");
4674 def->tooltip =
L(
"Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. "
4675 "This can help with printers whose firmware crashes when parsing these comment lines "
4676 "(e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, "
4677 "so importing it back into OrcaSlicer will not restore the configuration.");
4679 def->set_default_value(new ConfigOptionBool(false));
4680
4681 def = this->
add(
"pellet_modded_printer",
coBool);
4682 def->label =
L(
"Pellet Modded Printer");
4683 def->tooltip =
L(
"Enable this option if your printer uses pellets instead of filaments.");
4685 def->set_default_value(new ConfigOptionBool(false));
4686
4687 def = this->
add(
"support_multi_bed_types",
coBool);
4688 def->label =
L(
"Support multi bed types");
4689 def->tooltip =
L(
"Enable this option if you want to use multiple bed types.");
4691 def->set_default_value(new ConfigOptionBool(false));
4692
4693 def = this->
add(
"gcode_label_objects",
coBool);
4694 def->label =
L(
"Label objects");
4695 def->tooltip =
L(
"Enable this to add comments into the G-code labeling print moves with what object they belong to,"
4696 " which is useful for the Octoprint CancelObject plug-in. This setting is NOT compatible with "
4697 "Single Extruder Multi Material setup and Wipe into Object / Wipe into Infill.");
4699 def->set_default_value(new ConfigOptionBool(1));
4700
4701 def = this->
add(
"exclude_object",
coBool);
4702 def->label =
L(
"Exclude objects");
4703 def->tooltip =
L(
"Enable this option to add EXCLUDE OBJECT command in G-code.");
4705 def->set_default_value(new ConfigOptionBool(false));
4706
4707 def = this->
add(
"exclude_object_tolerance",
coFloat);
4708 def->label =
L(
"Outline tolerance");
4709 def->tooltip =
L(
"Maximum deviation of the object outline written to EXCLUDE_OBJECT_DEFINE from the "
4710 "original outline. Larger values give fewer points, which helps firmware that stalls "
4711 "while parsing G-code with many objects. 0 keeps every point.");
4712 def->sidetext =
L(
"mm");
4713 def->min = 0;
4714 def->max = 5;
4717
4718 def = this->
add(
"gcode_comments",
coBool);
4719 def->label =
L(
"Verbose G-code");
4720 def->tooltip =
L(
"Enable this to get a commented G-code file, with each line explained by a descriptive text. "
4721 "If you print from SD card, the additional weight of the file could make your firmware "
4722 "slow down.");
4724 def->set_default_value(new ConfigOptionBool(0));
4725
4726 def = this->
add(
"high_precision_gcode",
coBool);
4727 def->label =
L(
"High precision G-code (experimental)");
4728 def->tooltip =
L(
"Write X, Y, Z, I and J with 4 decimal places instead of 3, and E with 6 instead of 5, to reduce "
4729 "rounding errors in the G-code. With relative E distances, the rounding error of each move is also "
4730 "carried over to the next one. Supports are removed after printing, so they keep the standard "
4731 "precision. This may help stabilize extrusion with small nozzles (e.g. 0.2 mm) and "
4732 "thin layers (e.g. 0.08 mm or less), where each move extrudes so little material that rounding errors "
4733 "matter most. The effect depends strongly on how well the rest of the settings are tuned and may be hard "
4734 "to notice unless the print profile is well calibrated. The G-code file becomes about 10 percent larger, "
4735 "which may slow down printers that parse G-code slowly.");
4737 def->set_default_value(new ConfigOptionBool(false));
4738
4739
4740 def = this->
add(
"infill_combination",
coBool);
4741 def->label =
L(
"Infill combination");
4742 def->category =
L(
"Strength");
4743 def->tooltip =
L(
"Automatically combine sparse infill of several layers to print together in order to reduce time. Walls are still printed with original layer height.");
4745 def->set_default_value(new ConfigOptionBool(false));
4746
4747 def = this->
add(
"infill_shift_step",
coFloat);
4748 def->label =
L(
"Infill shift step");
4749 def->category =
L(
"Strength");
4750 def->tooltip =
L(
"This parameter adds a slight displacement to each layer of infill to create a cross texture.");
4751 def->sidetext =
L(
"mm");
4752 def->min = 0;
4753 def->max = 10;
4756
4757
4758 def = this->
add(
"sparse_infill_rotate_template",
coString);
4759 def->label =
L(
"Sparse infill rotation template");
4760 def->category =
L(
"Strength");
4761 def->tooltip =
L(
"Rotate the sparse infill direction per layer using a template of angles. "
4762 "Enter comma-separated degrees (e.g., '0,30,60,90'). "
4763 "Angles are applied in order by layer and repeat when the list ends. "
4764 "Advanced syntax is supported: '+5' rotates +5° every layer; '+5#5' rotates +5° every 5 layers. See the Wiki for details. "
4765 "When a template is set, the standard infill direction setting is ignored. "
4766 "Note: some infill patterns (e.g., Gyroid) control rotation themselves; use with care.");
4767 def->sidetext = u8"°";
4770
4771
4772 def = this->
add(
"solid_infill_rotate_template",
coString);
4773 def->label =
L(
"Solid infill rotation template");
4774 def->category =
L(
"Strength");
4775 def->tooltip =
L(
"This parameter adds a rotation of solid infill direction to each layer according to the specified template. "
4776 "The template is a comma-separated list of angles in degrees, e.g. '0,90'. "
4777 "The first angle is applied to the first layer, the second angle to the second layer, and so on. "
4778 "If there are more layers than angles, the angles will be repeated. Note that not all solid infill patterns support rotation.");
4779 def->sidetext = u8"°";
4782
4784 def->label =
L(
"Skeleton infill density");
4785 def->category =
L(
"Strength");
4786 def->tooltip =
L(
"The remaining part of the model contour after removing a certain depth from the surface is called the skeleton. "
4787 "This parameter is used to adjust the density of this section. "
4788 "When two regions have the same sparse infill settings but different skeleton densities, their skeleton areas will develop overlapping sections. "
4789 "Default is as same as infill density.");
4790 def->sidetext = "%";
4791 def->min = 0;
4792 def->max = 100;
4794 def->set_default_value(new ConfigOptionPercent(25));
4795
4797 def->label =
L(
"Skin infill density");
4798 def->category =
L(
"Strength");
4799 def->tooltip =
L(
"The portion of the model's outer surface within a certain depth range is called the skin. "
4800 "This parameter is used to adjust the density of this section. "
4801 "When two regions have the same sparse infill settings but different skin densities, this area will not be split into two separate regions. "
4802 "Default is as same as infill density.");
4803 def->sidetext = "%";
4804 def->min = 0;
4805 def->max = 100;
4807 def->set_default_value(new ConfigOptionPercent(25));
4808
4809 def = this->
add(
"skin_infill_depth",
coFloat);
4810 def->label =
L(
"Skin infill depth");
4811 def->category =
L(
"Strength");
4812 def->tooltip =
L(
"The parameter sets the depth of skin.");
4813 def->sidetext =
L(
"mm");
4814 def->min = 0;
4815 def->max = 100;
4818
4819 def = this->
add(
"infill_lock_depth",
coFloat);
4820 def->label =
L(
"Infill lock depth");
4821 def->category =
L(
"Strength");
4822 def->tooltip =
L(
"The parameter sets the overlapping depth between the interior and skin.");
4823 def->sidetext =
L(
"mm");
4824 def->min = 0;
4825 def->max = 100;
4828
4830 def->label =
L(
"Skin line width");
4831 def->category =
L(
"Strength");
4832 def->tooltip =
L(
"Adjust the line width of the selected skin paths.");
4833 def->sidetext =
L(
"mm");
4834 def->ratio_over = "nozzle_diameter";
4835 def->min = 0;
4837 def->set_default_value(new ConfigOptionFloatOrPercent(100, true));
4838
4840 def->label =
L(
"Skeleton line width");
4841 def->category =
L(
"Strength");
4842 def->tooltip =
L(
"Adjust the line width of the selected skeleton paths.");
4843 def->sidetext =
L(
"mm");
4844 def->ratio_over = "nozzle_diameter";
4845 def->min = 0;
4847 def->set_default_value(new ConfigOptionFloatOrPercent(100, true));
4848
4849 def = this->
add(
"symmetric_infill_y_axis",
coBool);
4850 def->label =
L(
"Symmetric infill Y axis");
4851 def->category =
L(
"Strength");
4852 def->tooltip =
L(
"If the model has two parts that are symmetric about the Y axis,"
4853 " and you want these parts to have symmetric textures, please click this option on one of the parts.");
4855 def->set_default_value(new ConfigOptionBool(false));
4856
4857 def = this->
add(
"infill_complete_top",
coBool);
4858 def->label =
L(
"Fill pattern tops");
4859 def->category =
L(
"Strength");
4860 def->tooltip =
L(
"Choose this option if you want to completely fill in the tops of the infill pattern");
4862 def->set_default_value(new ConfigOptionBool(false));
4863
4864
4866 def->label =
L(
"Infill combination - Max layer height");
4867 def->category =
L(
"Strength");
4868 def->tooltip =
L(
"Maximum layer height for the combined sparse infill.\n\n"
4869 "Set it to 0 or 100% to use the nozzle diameter (for maximum reduction in print time) or a value of ~80% to maximize sparse infill strength.\n\n"
4870 "The number of layers over which infill is combined is derived by dividing this value with the layer height and rounded down to the nearest decimal.\n\n"
4871 "Use either absolute mm values (eg. 0.32mm for a 0.4mm nozzle) or % values (eg 80%). This value must not be larger "
4872 "than the nozzle diameter.");
4873 def->sidetext =
L(
"mm or %");
4874 def->min = 0;
4876 def->set_default_value(new ConfigOptionFloatOrPercent(100., true));
4877
4878
4879 def = this->
add(
"enable_wrapping_detection",
coBool);
4880 def->label =
L(
"Enable clumping detection");
4881 def->tooltip =
L(
"Enable clumping detection");
4883 def->set_default_value(new ConfigOptionBool(false));
4884
4885 def = this->
add(
"wrapping_detection_layers",
coInt);
4886 def->label =
L(
"Clumping detection layers");
4887 def->tooltip =
L(
"Clumping detection layers.");
4888 def->min = 0;
4890 def->set_default_value(new ConfigOptionInt(20));
4891
4892 def = this->
add(
"wrapping_exclude_area",
coPoints);
4893 def->label =
L(
"Probing exclude area of clumping");
4894 def->tooltip =
L(
"Probing exclude area of clumping.");
4897 def->set_default_value(new ConfigOptionPoints());
4898
4899 def = this->
add(
"lateral_lattice_angle_1",
coFloat);
4900 def->label =
L(
"Lateral lattice angle 1");
4901 def->category =
L(
"Strength");
4902 def->tooltip =
L(
"The angle of the first set of Lateral lattice elements in the Z direction. Zero is vertical.");
4903 def->sidetext = u8"°";
4904 def->min = -75;
4905 def->max = 75;
4908
4909 def = this->
add(
"lateral_lattice_angle_2",
coFloat);
4910 def->label =
L(
"Lateral lattice angle 2");
4911 def->category =
L(
"Strength");
4912 def->tooltip =
L(
"The angle of the second set of Lateral lattice elements in the Z direction. Zero is vertical.");
4913 def->sidetext = u8"°";
4914 def->min = -75;
4915 def->max = 75;
4918
4919 def = this->
add(
"infill_overhang_angle",
coFloat);
4920 def->label =
L(
"Infill overhang angle");
4921 def->category =
L(
"Strength");
4922 def->tooltip =
L(
"The angle of the infill angled lines. 60° will result in a pure honeycomb.");
4923 def->sidetext = u8"°";
4924 def->min = 15;
4925 def->max = 75;
4928
4929 def = this->
add(
"lightning_overhang_angle",
coFloat);
4930 def->label =
L(
"Lightning overhang angle");
4931 def->category =
L(
"Strength");
4932 def->tooltip =
L(
"Maximum overhang angle for Lightning infill support propagation.");
4933 def->sidetext = u8"°";
4934 def->min = 5;
4935 def->max = 85;
4938
4939 def = this->
add(
"lightning_prune_angle",
coFloat);
4940 def->label =
L(
"Prune angle");
4941 def->category =
L(
"Strength");
4942 def->tooltip =
L(
"Controls how aggressively short or unsupported Lightning branches are pruned.\n"
4943 "This angle is converted internally to a per-layer distance.");
4944 def->sidetext = u8"°";
4945 def->min = 5;
4946 def->max = 85;
4949
4950 def = this->
add(
"lightning_straightening_angle",
coFloat);
4951 def->label =
L(
"Straightening angle");
4952 def->category =
L(
"Strength");
4953 def->tooltip =
L(
"Maximum straightening angle used to simplify Lightning branches.");
4954 def->sidetext = u8"°";
4955 def->min = 5;
4956 def->max = 85;
4959
4961 def->label =
L(
"Sparse infill anchor length");
4962 def->category =
L(
"Strength");
4963 def->tooltip =
L(
"Connect an infill line to an internal perimeter with a short segment of an additional perimeter. "
4964 "If expressed as percentage (example: 15%) it is calculated over infill extrusion width. "
4965 "Orca Slicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment "
4966 "shorter than infill_anchor_max is found, the infill line is connected to a perimeter segment at just one side "
4967 "and the length of the perimeter segment taken is limited to this parameter, but no longer than anchor_length_max.\n"
4968 "Set this parameter to zero to disable anchoring perimeters connected to a single infill line.");
4969 def->sidetext =
L(
"mm or %");
4970 def->ratio_over = "sparse_infill_line_width";
4971 def->max_literal = 1000;
4973 def->enum_values.push_back("0");
4974 def->enum_values.push_back("1");
4975 def->enum_values.push_back("2");
4976 def->enum_values.push_back("5");
4977 def->enum_values.push_back("10");
4978 def->enum_values.push_back("1000");
4979 def->enum_labels.push_back(
L(
"0 (no open anchors)"));
4980 def->enum_labels.push_back("1 mm");
4981 def->enum_labels.push_back("2 mm");
4982 def->enum_labels.push_back("5 mm");
4983 def->enum_labels.push_back("10 mm");
4984 def->enum_labels.push_back(
L(
"1000 (unlimited)"));
4986 def->set_default_value(new ConfigOptionFloatOrPercent(400, true));
4987
4989 def->label =
L(
"Maximum length of the infill anchor");
4990 def->category =
L(
"Strength");
4991 def->tooltip =
L(
"Connect an infill line to an internal perimeter with a short segment of an additional perimeter. "
4992 "If expressed as percentage (example: 15%) it is calculated over infill extrusion width. "
4993 "Orca Slicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment "
4994 "shorter than this parameter is found, the infill line is connected to a perimeter segment at just one side "
4995 "and the length of the perimeter segment taken is limited to infill_anchor, but no longer than this parameter.\n"
4996 "If set to 0, the old algorithm for infill connection will be used, it should create the same result as with 1000 & 0.");
4997 def->sidetext = def_infill_anchor_min->sidetext;
4998 def->ratio_over = def_infill_anchor_min->ratio_over;
4999 def->gui_type = def_infill_anchor_min->gui_type;
5000 def->enum_values = def_infill_anchor_min->enum_values;
5001 def->max_literal = def_infill_anchor_min->max_literal;
5002 def->enum_labels.push_back(
L(
"0 (Simple connect)"));
5003 def->enum_labels.push_back("1 mm");
5004 def->enum_labels.push_back("2 mm");
5005 def->enum_labels.push_back("5 mm");
5006 def->enum_labels.push_back("10 mm");
5007 def->enum_labels.push_back(
L(
"1000 (unlimited)"));
5009 def->set_default_value(new ConfigOptionFloatOrPercent(20, false));
5010
5011 def = this->
add(
"sparse_infill_filament_id",
coInt);
5013 def->label =
L(
"Infill");
5014 def->category =
L(
"Extruders");
5015 def->tooltip =
L(
"Filament to print internal sparse infill.\n\"Default\" uses the active object/part filament.");
5016 def->min = 0;
5018 def->set_default_value(new ConfigOptionInt(0));
5019
5021 def->label =
L(
"Sparse infill");
5022 def->category =
L(
"Quality");
5023 def->tooltip =
L(
"Line width of internal sparse infill. If expressed as a %, it will be computed over the nozzle diameter.");
5024 def->sidetext =
L(
"mm or %");
5025 def->ratio_over = "nozzle_diameter";
5026 def->min = 0;
5027 def->max = 1000;
5028 def->max_literal = 10;
5030 def->set_default_value(new ConfigOptionFloatOrPercent(0., false));
5031
5033 def->label =
L(
"Infill/wall overlap");
5034 def->category =
L(
"Strength");
5035
5036 def->tooltip =
L(
"This allows the infill area to be enlarged slightly to overlap with walls for better bonding. The percentage value is relative to the inner wall line width. Set this value to ~10-15% to minimize potential over extrusion and accumulation of material resulting in rough top surfaces.");
5037 def->sidetext = "%";
5038 def->ratio_over = "inner_wall_line_width";
5040 def->set_default_value(new ConfigOptionPercent(15));
5041
5042 def = this->
add(
"top_bottom_infill_wall_overlap",
coPercent);
5043 def->label =
L(
"Top/Bottom solid infill/wall overlap");
5044 def->category =
L(
"Strength");
5045
5046 def->tooltip =
L(
"Top solid infill area is enlarged slightly to overlap with wall for better bonding "
5047 "and to minimize the appearance of pinholes where the top infill meets the walls. "
5048 "A value of 25-30% is a good starting point, minimizing the appearance of pinholes. "
5049 "The percentage value is relative to the inner wall line width.");
5050 def->sidetext = "%";
5051 def->ratio_over = "inner_wall_line_width";
5053 def->set_default_value(new ConfigOptionPercent(25));
5054
5056 def->label =
L(
"Sparse infill");
5057 def->category =
L(
"Speed");
5058 def->tooltip =
L(
"This is the speed for internal sparse infill.");
5059 def->sidetext =
L(
"mm/s");
5060 def->min = 1;
5062 def->nullable = true;
5064
5066 def->label =
L(
"Inherits profile");
5067 def->tooltip =
L(
"Name of parent profile.");
5068 def->full_width = true;
5069 def->height = 5;
5072
5073
5074
5076 def->set_default_value(new ConfigOptionStrings());
5078
5079 def = this->
add(
"interface_shells",
coBool);
5080 def->label =
L(
"Interface shells");
5081 def->tooltip =
L(
"Force the generation of solid shells between adjacent materials/volumes. "
5082 "Useful for multi-extruder prints with translucent materials or manual soluble "
5083 "support material.");
5084 def->category =
L(
"Quality");
5086 def->set_default_value(new ConfigOptionBool(false));
5087
5088 def = this->
add(
"mmu_segmented_region_max_width",
coFloat);
5089 def->label =
L(
"Maximum width of a segmented region");
5090 def->tooltip =
L(
"Maximum width of a segmented region. A value of 0 disables this feature.");
5091 def->sidetext =
L(
"mm");
5092 def->min = 0;
5093 def->category =
L(
"Advanced");
5096
5097 def = this->
add(
"mmu_segmented_region_interlocking_depth",
coFloat);
5098 def->label =
L(
"Interlocking depth of a segmented region");
5099 def->tooltip =
L(
"Interlocking depth of a segmented region. On every other layer, the segmented region "
5100 "is limited to this depth. It will be ignored if \"interlocking_beam\" is enabled. "
5101 "Zero disables this feature.");
5102 def->sidetext =
L(
"mm");
5103 def->min = 0;
5104 def->category =
L(
"Advanced");
5107
5108 def = this->
add(
"interlocking_beam",
coBool);
5109 def->label =
L(
"Use beam interlocking");
5110 def->tooltip =
L(
"Generate interlocking beam structure at the locations where different filaments touch. This improves the adhesion between filaments, especially models printed in different materials.");
5111 def->category =
L(
"Advanced");
5113 def->set_default_value(new ConfigOptionBool(false));
5114
5115 def = this->
add(
"interlocking_beam_width",
coFloat);
5116 def->label =
L(
"Interlocking beam width");
5117 def->tooltip =
L(
"The width of the interlocking structure beams.");
5118 def->sidetext =
L(
"mm");
5119 def->min = 0.01;
5120 def->category =
L(
"Advanced");
5123
5124 def = this->
add(
"interlocking_orientation",
coFloat);
5125 def->label =
L(
"Interlocking direction");
5126 def->tooltip =
L(
"Orientation of interlock beams.");
5127 def->sidetext = u8"°";
5128 def->min = 0;
5129 def->max = 360;
5130 def->category =
L(
"Advanced");
5133
5134 def = this->
add(
"interlocking_beam_layer_count",
coInt);
5135 def->label =
L(
"Interlocking beam layers");
5136 def->tooltip =
L(
"The height of the beams of the interlocking structure, measured in number of layers. Less layers is stronger, but more prone to defects.");
5137 def->min = 1;
5138 def->category =
L(
"Advanced");
5140 def->set_default_value(new ConfigOptionInt(2));
5141
5142 def = this->
add(
"interlocking_depth",
coInt);
5143 def->label =
L(
"Interlocking depth");
5144 def->tooltip =
L(
"The distance from the boundary between filaments to generate interlocking structure, measured in cells. Too few cells will result in poor adhesion.");
5145 def->min = 1;
5146 def->category =
L(
"Advanced");
5148 def->set_default_value(new ConfigOptionInt(2));
5149
5150 def = this->
add(
"interlocking_boundary_avoidance",
coInt);
5151 def->label =
L(
"Interlocking boundary avoidance");
5152 def->tooltip =
L(
"The distance from the outside of a model where interlocking structures will not be generated, measured in cells.");
5153 def->min = 0;
5154 def->category =
L(
"Advanced");
5156 def->set_default_value(new ConfigOptionInt(2));
5157
5158
5159 def = this->
add(
"calib_flowrate_topinfill_special_order",
coBool);
5161 def->set_default_value(new ConfigOptionBool(false));
5162
5163 def = this->
add(
"ironing_type",
coEnum);
5164 def->label =
L(
"Ironing type");
5165 def->category =
L(
"Quality");
5166 def->tooltip =
L(
"Ironing uses a small flow to print at the same height of a surface to make flat surfaces smoother. This setting controls which layers are being ironed.");
5168 def->enum_values.push_back("no ironing");
5169 def->enum_values.push_back("top");
5170 def->enum_values.push_back("topmost");
5171 def->enum_values.push_back("solid");
5172 def->enum_labels.push_back(
L(
"No ironing"));
5173 def->enum_labels.push_back(
L(
"All top surfaces"));
5174 def->enum_labels.push_back(
L(
"Topmost surface only"));
5175 def->enum_labels.push_back(
L(
"All solid layers"));
5178
5179 def = this->
add(
"ironing_pattern",
coEnum);
5180 def->label =
L(
"Ironing Pattern");
5181 def->tooltip =
L(
"The pattern that will be used when ironing.");
5182 def->category =
L(
"Quality");
5184 def->enum_values.push_back("rectilinear");
5185 def->enum_values.push_back("concentric");
5186 def->enum_labels.push_back(
L(
"Rectilinear"));
5187 def->enum_labels.push_back(
L(
"Concentric"));
5189 def->set_default_value(
new ConfigOptionEnum<InfillPattern>(
ipRectilinear));
5190
5192 def->label =
L(
"Ironing flow");
5193 def->category =
L(
"Quality");
5194 def->tooltip =
L(
"This is the amount of material to be extruded during ironing. It is relative to the flow of normal layer height. Too high a value will result in overextrusion on the surface.");
5195 def->sidetext = "%";
5196 def->ratio_over = "layer_height";
5197 def->min = 0;
5198 def->max = 100;
5200 def->set_default_value(new ConfigOptionPercent(10));
5201
5203 def->label =
L(
"Ironing line spacing");
5204 def->category =
L(
"Quality");
5205 def->tooltip =
L(
"This is the distance between the lines used for ironing.");
5206 def->sidetext =
L(
"mm");
5207 def->min = 0;
5208 def->max = 1;
5211
5213 def->label =
L(
"Ironing inset");
5214 def->category =
L(
"Quality");
5215 def->tooltip =
L(
"The distance to keep from the edges. A value of 0 sets this to half of the nozzle diameter.");
5216 def->sidetext =
L(
"mm");
5217 def->min = 0;
5218 def->max = 100;
5221
5223 def->label =
L(
"Ironing speed");
5224 def->category =
L(
"Quality");
5225 def->tooltip =
L(
"This is the print speed for ironing lines.");
5226 def->sidetext =
L(
"mm/s");
5227 def->min = 1;
5230
5232 def->label =
L(
"Ironing angle offset");
5233 def->category =
L(
"Quality");
5234 def->tooltip =
L(
"The angle of ironing lines offset from the top surface.");
5235 def->sidetext = u8"°";
5236 def->min = 0;
5237 def->max = 359;
5240
5241 def = this->
add(
"ironing_angle_fixed",
coBool);
5242 def->label =
L(
"Fixed ironing angle");
5243 def->category =
L(
"Quality");
5244 def->tooltip =
L(
"Use a fixed absolute angle for ironing.");
5246 def->set_default_value(new ConfigOptionBool(false));
5247
5248 def = this->
add(
"ironing_expansion",
coFloat);
5249 def->label =
L(
"Ironing expansion");
5250 def->category =
L(
"Quality");
5251 def->tooltip =
L(
"Expand or contract the ironing area.");
5252 def->sidetext =
L(
"mm");
5253 def->min = -100;
5254 def->max = 100;
5257
5259 def->label =
L(
"Z contouring enabled");
5260 def->category =
L(
"Quality");
5261 def->tooltip =
L(
"Enable Z-layer contouring (aka Z-layer anti-aliasing).");
5263 def->set_default_value(new ConfigOptionBool(false));
5264
5265 def = this->
add(
"zaa_minimize_perimeter_height",
coFloat);
5266 def->label =
L(
"Minimize wall height angle");
5267 def->category =
L(
"Quality");
5268 def->tooltip =
L(
"Reduce the height of top-surface perimeters to match the model edge height.\n"
5269 "Affects perimeters with a slope greater than this angle (degrees).\n"
5270 "A reasonable value is 35. Set to 0 to disable.");
5271 def->sidetext = u8"°";
5272 def->min = 0;
5273 def->max = 90;
5276
5277 def = this->
add(
"zaa_dont_alternate_fill_direction",
coBool);
5278 def->label =
L(
"Don't alternate fill direction");
5279 def->category =
L(
"Quality");
5280 def->tooltip =
L(
"Disable alternating fill direction when using Z contouring.");
5282 def->set_default_value(new ConfigOptionBool(false));
5283
5285 def->label =
L(
"Minimum Z height");
5286 def->category =
L(
"Quality");
5287 def->tooltip =
L(
"Minimum Z-layer height.\n"
5288 "Also controls the slicing plane.");
5289 def->sidetext =
L(
"mm");
5290 def->min = 0;
5291 def->max = 100;
5294
5296 def->label =
L(
"Layer change G-code");
5297 def->tooltip =
L(
"This G-code is inserted at every layer change after the Z lift.");
5298 def->multiline = true;
5299 def->full_width = true;
5300 def->height = 5;
5303
5305 def->label =
L(
"Timelapse G-code");
5306 def->multiline = true;
5307 def->full_width = true;
5308 def->height =5;
5311
5312 def = this->
add(
"wrapping_detection_gcode",
coString);
5313 def->label =
L(
"Clumping detection G-code");
5314 def->multiline = true;
5315 def->full_width = true;
5316 def->height = 5;
5319
5320 def = this->
add(
"emit_machine_limits_to_gcode",
coBool);
5321 def->label =
L(
"Emit limits to G-code");
5322 def->category =
L(
"Machine limits");
5323 def->tooltip =
L(
"If enabled, the machine limits will be emitted to G-code file.\nThis option will be ignored if the G-code flavor is "
5324 "set to Klipper.");
5326 def->set_default_value(new ConfigOptionBool(true));
5327
5329 def->label =
L(
"Pause G-code");
5330 def->tooltip =
L(
"This G-code will be used as a code for the pause print. Users can insert pause G-code in the G-code viewer.");
5331 def->multiline = true;
5332 def->full_width = true;
5333 def->height = 12;
5336
5337 def = this->
add(
"template_custom_gcode",
coString);
5338 def->label =
L(
"Custom G-code");
5339 def->tooltip =
L(
"This G-code will be used as a custom code.");
5340 def->multiline = true;
5341 def->full_width = true;
5342 def->height = 12;
5345
5346 def = this->
add(
"small_area_infill_flow_compensation",
coBool);
5347 def->label =
L(
"Small area flow compensation (beta)");
5348 def->category =
L(
"Quality");
5349 def->tooltip =
L(
"Enable flow compensation for small infill areas.");
5351 def->set_default_value(new ConfigOptionBool(false));
5352
5353 def = this->
add(
"small_area_infill_flow_compensation_model",
coStrings);
5354 def->label =
L(
"Flow Compensation Model");
5356 "Flow Compensation Model, used to adjust the flow for small infill "
5357 "areas. The model is expressed as a comma separated pair of values for "
5358 "extrusion length and flow correction factor. Each pair is on a "
5359 "separate line, followed by a semicolon, in the following format: \"1.234, 5.678;\"");
5361 def->gui_flags = "serialized";
5362 def->multiline = true;
5363 def->full_width = true;
5364 def->height = 15;
5365 def->set_default_value(new ConfigOptionStrings{"0,0", "\n0.2,0.4444", "\n0.4,0.6145", "\n0.6,0.7059", "\n0.8,0.7619", "\n1.5,0.8571", "\n2,0.8889", "\n3,0.9231", "\n5,0.9520", "\n10,1"});
5366
5367 def = this->
add(
"has_scarf_joint_seam",
coBool);
5369 def->set_default_value(new ConfigOptionBool(false));
5370
5371 {
5372 struct AxisDefault {
5373 std::string name;
5374 std::vector<double> max_feedrate;
5375 std::vector<double> max_acceleration;
5376 std::vector<double> max_jerk;
5377 };
5378 std::vector<AxisDefault> axes {
5379
5380 { "x", { 500., 200. }, { 1000., 1000. }, { 10. , 10. } },
5381 { "y", { 500., 200. }, { 1000., 1000. }, { 10. , 10. } },
5382 { "z", { 12., 12. }, { 500., 200. }, { 0.2, 0.4 } },
5383 { "e", { 120., 120. }, { 5000., 5000. }, { 2.5, 2.5 } }
5384 };
5385 for (const AxisDefault &axis : axes) {
5386 std::string axis_upper = boost::to_upper_copy<std::string>(axis.name);
5387
5388 def = this->
add(
"machine_max_speed_" + axis.name,
coFloats);
5389 def->full_label = (boost::format("Maximum speed %1%") % axis_upper).str();
5390 (void)
L(
"Maximum speed X");
5391 (void)
L(
"Maximum speed Y");
5392 (void)
L(
"Maximum speed Z");
5393 (void)
L(
"Maximum speed E");
5394 def->category =
L(
"Machine limits");
5395 def->readonly = false;
5396 def->tooltip = (boost::format("Maximum speed of the %1% axis") % axis_upper).str();
5397 (void)
L(
"Maximum speed of the X axis");
5398 (void)
L(
"Maximum speed of the Y axis");
5399 (void)
L(
"Maximum speed of the Z axis");
5400 (void)
L(
"Maximum speed of the E axis");
5401 def->sidetext =
L(
"mm/s");
5402 def->min = 0;
5405
5406 def = this->
add(
"machine_max_acceleration_" + axis.name,
coFloats);
5407 def->full_label = (boost::format("Maximum acceleration %1%") % axis_upper).str();
5408 (void)
L(
"Maximum acceleration X");
5409 (void)
L(
"Maximum acceleration Y");
5410 (void)
L(
"Maximum acceleration Z");
5411 (void)
L(
"Maximum acceleration E");
5412 def->category =
L(
"Machine limits");
5413 def->readonly = false;
5414 def->tooltip = (boost::format("Maximum acceleration of the %1% axis") % axis_upper).str();
5415 (void)
L(
"Maximum acceleration of the X axis");
5416 (void)
L(
"Maximum acceleration of the Y axis");
5417 (void)
L(
"Maximum acceleration of the Z axis");
5418 (void)
L(
"Maximum acceleration of the E axis");
5419 def->sidetext =
L(u8
"mm/s²");
5420 def->min = 0;
5423
5424 def = this->
add(
"machine_max_jerk_" + axis.name,
coFloats);
5425 def->full_label = (boost::format("Maximum jerk %1%") % axis_upper).str();
5426 (void)
L(
"Maximum jerk X");
5427 (void)
L(
"Maximum jerk Y");
5428 (void)
L(
"Maximum jerk Z");
5429 (void)
L(
"Maximum jerk E");
5430 def->category =
L(
"Machine limits");
5431 def->readonly = false;
5432 def->tooltip = (boost::format("Maximum jerk of the %1% axis") % axis_upper).str();
5433 (void)
L(
"Maximum jerk of the X axis");
5434 (void)
L(
"Maximum jerk of the Y axis");
5435 (void)
L(
"Maximum jerk of the Z axis");
5436 (void)
L(
"Maximum jerk of the E axis");
5437 def->sidetext =
L(
"mm/s");
5438 def->min = 0;
5441 }
5442 }
5443
5444 def = this->
add(
"machine_max_junction_deviation",
coFloats);
5445 def->full_label =
L(
"Maximum Junction Deviation");
5446 def->category =
L(
"Machine limits");
5447 def->tooltip =
L(
"Maximum junction deviation (M205 J, only apply if JD > 0 for Marlin Firmware\nIf your Marlin 2 printer uses Classic Jerk set this value to 0.)");
5448 def->sidetext =
L(
"mm");
5449 def->min = 0.f;
5450 def->max = 0.3f;
5453
5454
5455 def = this->
add(
"machine_min_extruding_rate",
coFloats);
5456 def->full_label =
L(
"Minimum speed for extruding");
5457 def->category =
L(
"Machine limits");
5458 def->tooltip =
L(
"Minimum speed for extruding (M205 S)");
5459 def->sidetext =
L(
"mm/s");
5460 def->min = 0;
5463
5464
5465 def = this->
add(
"machine_min_travel_rate",
coFloats);
5466 def->full_label =
L(
"Minimum travel speed");
5467 def->category =
L(
"Machine limits");
5468 def->tooltip =
L(
"Minimum travel speed (M205 T)");
5469 def->sidetext =
L(
"mm/s");
5470 def->min = 0;
5473
5474
5475
5476
5477 def = this->
add(
"machine_max_force_Y",
coFloat);
5478 def->full_label =
L(
"Maximum force of the Y axis");
5479 def->category =
L(
"Machine limits");
5480 def->readonly = false;
5481 def->tooltip =
L(
"The allowed maximum output force of Y axis");
5482 def->sidetext =
L_CONTEXT(
"N",
"Newton");
5483 def->min = 0;
5486
5487 def = this->
add(
"machine_bed_mass_Y",
coFloat);
5488 def->full_label =
L(
"Bed mass of the Y axis");
5489 def->category =
L(
"Machine limits");
5490 def->readonly = false;
5491 def->tooltip =
L(
"The machine bed mass load of Y axis");
5493 def->min = 0;
5496
5497 def = this->
add(
"machine_max_printed_mass",
coFloat);
5498 def->full_label =
L(
"The allowed max printed mass");
5499 def->category =
L(
"Machine limits");
5500 def->readonly = false;
5501 def->tooltip =
L(
"The allowed max printed mass on a plate");
5503 def->min = 0;
5506
5507
5508 def = this->
add(
"machine_max_acceleration_extruding",
coFloats);
5509 def->full_label =
L(
"Maximum acceleration for extruding");
5510 def->category =
L(
"Machine limits");
5511 def->tooltip =
L(
"Maximum acceleration for extruding (M204 P)");
5512
5513
5514 def->sidetext =
L(u8
"mm/s²");
5515 def->min = 0;
5516 def->readonly = false;
5519
5520
5521
5522 def = this->
add(
"machine_max_acceleration_retracting",
coFloats);
5523 def->full_label =
L(
"Maximum acceleration for retracting");
5524 def->category =
L(
"Machine limits");
5525 def->tooltip =
L(
"Maximum acceleration for retracting (M204 R)");
5526 def->sidetext =
L(u8
"mm/s²");
5527 def->min = 0;
5528 def->readonly = false;
5531
5532
5533 def = this->
add(
"machine_max_acceleration_travel",
coFloats);
5534 def->full_label =
L(
"Maximum acceleration for travel");
5535 def->category =
L(
"Machine limits");
5536 def->tooltip =
L(
"Maximum acceleration for travel (M204 T), it only applies to Marlin 2.");
5537 def->sidetext =
L(u8
"mm/s²");
5538 def->min = 0;
5539 def->readonly = false;
5542
5543
5544 def = this->
add(
"resonance_avoidance",
coBool);
5545 def->label =
L(
"Resonance avoidance");
5546 def->tooltip =
L(
"By reducing the speed of the outer wall to avoid the resonance zone of the printer, ringing on the surface of the "
5547 "model are avoided.\n"
5548 "Please turn this option off when testing ringing.");
5550 def->set_default_value(new ConfigOptionBool(false));
5551
5552 def = this->
add(
"min_resonance_avoidance_speed",
coFloat);
5553 def->label =
L(
"Min");
5554 def->tooltip =
L(
"Minimum speed of resonance avoidance.");
5555 def->sidetext =
L(
"mm/s");
5556 def->min = 0;
5559
5560 def = this->
add(
"max_resonance_avoidance_speed",
coFloat);
5561 def->label =
L(
"Max");
5562 def->tooltip =
L(
"Maximum speed of resonance avoidance.");
5563 def->sidetext =
L(
"mm/s");
5564 def->min = 0;
5567
5568
5569 def = this->
add(
"input_shaping_emit",
coBool);
5570 def->label =
L(
"Emit input shaping");
5571 def->tooltip =
L(
"Override firmware input shaping settings.\nIf disabled, firmware settings are used.");
5573 def->set_default_value(new ConfigOptionBool(false));
5574
5575 def = this->
add(
"input_shaping_type",
coEnum);
5576 def->label =
L(
"Input shaper type");
5577 def->tooltip =
L(
"Choose the input shaper algorithm.\nDefault uses the firmware default settings.\nDisable turns off input shaping in the firmware.");
5579 def->enum_values = {"Default", "MZV", "ZV", "ZVD", "ZVDD", "ZVDDD", "EI", "EI2", "2HUMP_EI", "EI3", "3HUMP_EI", "DAA", "Disable"};
5580 def->enum_labels = {
L(
"Default"),
L(
"MZV"),
L(
"ZV"),
L(
"ZVD"),
L(
"ZVDD"),
L(
"ZVDDD"),
L(
"EI"),
L(
"EI2"),
L(
"2HUMP_EI"),
L(
"EI3"),
L(
"3HUMP_EI"),
L(
"DAA"),
L(
"Disable")};
5583
5584 def = this->
add(
"input_shaping_freq_x",
coFloat);
5586 def->tooltip =
L(
"Resonant frequency for the X axis input shaper.\nZero will use the firmware frequency.\nTo disable input shaping, use the Disable type.\nRRF: X and Y values are equal.");
5587 def->sidetext =
L(
"Hz");
5588 def->min = 0;
5589 def->max = 1000;
5592
5593 def = this->
add(
"input_shaping_freq_y",
coFloat);
5595 def->tooltip =
L(
"Resonant frequency for the Y axis input shaper.\nZero will use the firmware frequency.\nTo disable input shaping, use the Disable type.");
5596 def->sidetext =
L(
"Hz");
5597 def->min = 0;
5598 def->max = 1000;
5601
5602 def = this->
add(
"input_shaping_damp_x",
coFloat);
5604 def->tooltip =
L(
"Damping ratio for the X axis input shaper.\nZero will use the firmware damping ratio.\nTo disable input shaping, use the Disable type.\nRRF: X and Y values are equal.");
5605 def->min = 0;
5606 def->max = 1;
5609
5610 def = this->
add(
"input_shaping_damp_y",
coFloat);
5612 def->tooltip =
L(
"Damping ratio for the Y axis input shaper.\nZero will use the firmware damping ratio.\nTo disable input shaping, use the Disable type.");
5613 def->min = 0;
5614 def->max = 1;
5617
5619 def->label =
L(
"Fan speed");
5620 def->tooltip =
L(
"The part cooling fan speed may be increased when auto cooling is enabled. This is the maximum speed for the part cooling fan.");
5621 def->sidetext = "%";
5622 def->min = 0;
5623 def->max = 100;
5626
5628 def->label =
L(
"Max");
5629 def->tooltip =
L(
"The highest printable layer height for the extruder. "
5630 "Used to limit the maximum layer height when enable adaptive layer height.");
5631 def->sidetext =
L(
"mm");
5632 def->min = 0;
5635
5636 def = this->
add(
"max_volumetric_extrusion_rate_slope",
coFloat);
5637 def->label =
L(
"Extrusion rate smoothing");
5638 def->tooltip =
L(
"This parameter smooths out sudden extrusion rate changes that happen when "
5639 "the printer transitions from printing a high flow (high speed/larger width) "
5640 "extrusion to a lower flow (lower speed/smaller width) extrusion and vice versa.\n\n"
5641 "It defines the maximum rate by which the extruded volumetric flow in mm³/s can change over time. "
5642 "Higher values mean higher extrusion rate changes are allowed, resulting in faster speed transitions.\n\n"
5643 "A value of 0 disables the feature.\n\n"
5644 "For a high speed, high flow direct drive printer (like the Bambu lab or Voron) this value is usually not needed. "
5645 "However it can provide some marginal benefit in certain cases where feature speeds vary greatly. For example, "
5646 "when there are aggressive slowdowns due to overhangs. In these cases a high value of around 300-350 mm³/s² is "
5647 "recommended as this allows for just enough smoothing to assist pressure advance achieve a smoother flow transition.\n\n"
5648 "For slower printers without pressure advance, the value should be set much lower. "
5649 "A value of 10-15 mm³/s² is a good starting point for direct drive extruders and 5-10 mm³/s² for Bowden style.\n\n"
5650 "This feature is known as Pressure Equalizer in Prusa slicer.\n\n"
5651 "Note: this parameter disables arc fitting.");
5652 def->sidetext =
L(u8
"mm³/s²");
5653 def->min = 0;
5656
5657 def = this->
add(
"max_volumetric_extrusion_rate_slope_segment_length",
coFloat);
5658 def->label =
L(
"Smoothing segment length");
5659 def->tooltip =
L(
"A lower value results in smoother extrusion rate transitions. "
5660 "However, this results in a significantly larger G-code file and more instructions for the printer to process.\n\n"
5661 "Default value of 3 works well for most cases. If your printer is stuttering, increase this value to reduce the number of adjustments made.\n\n"
5662 "Allowed values: 0.5-5");
5663 def->min = 0.5;
5664 def->max = 5;
5665 def->sidetext =
L(
"mm");
5668
5669 def = this->
add(
"extrusion_rate_smoothing_external_perimeter_only",
coBool);
5670 def->label =
L(
"Apply only on external features");
5671 def->tooltip =
L(
"Applies extrusion rate smoothing only on external perimeters and overhangs. This can help reduce artefacts due to sharp speed transitions on externally visible "
5672 "overhangs without impacting the print speed of features that will not be visible to the user.");
5674 def->set_default_value(new ConfigOptionBool(false));
5675
5676
5678 def->label =
L(
"Fan speed");
5679 def->tooltip =
L(
"Minimum speed for part cooling fan.");
5680 def->sidetext = "%";
5681 def->min = 0;
5682 def->max = 100;
5685
5686 def = this->
add(
"additional_cooling_fan_speed",
coInts);
5687 def->label =
L(
"Fan speed");
5688 def->tooltip =
L(
"Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed during printing except the first several layers "
5689 "which is defined by no cooling layers.\nPlease enable auxiliary_fan in printer settings to use this feature. G-code command: M106 P2 S(0-255)");
5690 def->sidetext = "%";
5691 def->min = 0;
5692 def->max = 100;
5695
5696 def = this->
add(
"close_additional_fan_first_x_layers",
coInts);
5697 def->label =
L(
"For the first");
5698 def->tooltip =
L(
"Set special auxiliary cooling fan for the first certain layers.");
5699 def->sidetext =
L(
"layers");
5700 def->min = 0;
5701 def->max = 1000;
5704
5705 def = this->
add(
"additional_fan_full_speed_layer",
coInts);
5706 def->label =
L(
"Full fan speed at layer");
5707 def->tooltip =
L(
"Auxiliary fan speed will be ramped up linearly from layer \"For the first\" to maximum at layer \"Full fan speed at layer\".\n"
5708 "\"Full fan speed at layer\" will be ignored if lower than \"For the first\", in which case the fan will run at maximum allowed speed at layer \"For the first\" + 1.");
5709 def->min = 0;
5710 def->max = 1000;
5713
5714 def = this->
add(
"first_x_layer_fan_speed",
coFloats);
5715 def->label =
L(
"Fan speed");
5716 def->tooltip =
L(
"Special auxiliary cooling fan speed, effective only for the first x layers.");
5717 def->sidetext = "%";
5718 def->min = 0;
5719 def->max = 100;
5722
5724 def->label =
L(
"Min");
5725 def->tooltip =
L(
"The lowest printable layer height for the extruder. "
5726 "Used to limit the minimum layer height when enable adaptive layer height.");
5727 def->sidetext =
L(
"mm");
5728 def->min = 0;
5731
5733 def->label =
L(
"Min print speed");
5734 def->tooltip =
L(
"The minimum print speed to which the printer slows down to maintain the minimum layer time defined above "
5735 "when the slowdown for better layer cooling is enabled.");
5736 def->sidetext =
L(
"mm/s");
5737 def->min = 0;
5740
5742 def->label =
L(
"Nozzle diameter");
5743 def->tooltip =
L(
"The diameter of nozzle.");
5744 def->sidetext =
L(
"mm");
5746 def->max = 100;
5748
5750 def->label =
L(
"Configuration notes");
5751 def->tooltip =
L(
"You can put here your personal notes. This text will be added to the G-code "
5752 "header comments.");
5753 def->multiline = true;
5754 def->full_width = true;
5755 def->height = 13;
5758
5760 def->label =
L(
"Host Type");
5761 def->tooltip =
L(
"Orca Slicer can upload G-code files to a printer host. This field must contain "
5762 "the kind of the host.");
5764 def->enum_values.push_back("prusalink");
5765 def->enum_values.push_back("prusaconnect");
5766 def->enum_values.push_back("octoprint");
5767 def->enum_values.push_back("duet");
5768 def->enum_values.push_back("ultimaker");
5769 def->enum_values.push_back("flashair");
5770 def->enum_values.push_back("astrobox");
5771 def->enum_values.push_back("repetier");
5772 def->enum_values.push_back("mks");
5773 def->enum_values.push_back("esp3d");
5774 def->enum_values.push_back("crealityprint");
5775 def->enum_values.push_back("obico");
5776 def->enum_values.push_back("flashforge");
5777 def->enum_values.push_back("simplyprint");
5778 def->enum_values.push_back("elegoolink");
5779 def->enum_values.push_back("3dprinteros");
5780 def->enum_values.push_back("moonraker");
5781 def->enum_labels.push_back("PrusaLink");
5782 def->enum_labels.push_back("PrusaConnect");
5783 def->enum_labels.push_back("Octo/Klipper");
5784 def->enum_labels.push_back("Duet");
5785 def->enum_labels.push_back("UltiMaker");
5786 def->enum_labels.push_back("FlashAir");
5787 def->enum_labels.push_back("AstroBox");
5788 def->enum_labels.push_back("Repetier");
5789 def->enum_labels.push_back("MKS");
5790 def->enum_labels.push_back("ESP3D");
5791 def->enum_labels.push_back("CrealityPrint");
5792 def->enum_labels.push_back("Obico");
5793 def->enum_labels.push_back("Flashforge");
5794 def->enum_labels.push_back("SimplyPrint");
5795 def->enum_labels.push_back("Elegoo Link");
5796 def->enum_labels.push_back("3DPrinterOS");
5797 def->enum_labels.push_back("Moonraker (Klipper)");
5800 def->set_default_value(
new ConfigOptionEnum<PrintHostType>(
htOctoPrint));
5801
5803 def->label =
L(
"Nozzle volume");
5804 def->tooltip =
L(
"Volume of nozzle between the filament cutter and the end of the nozzle");
5805 def->sidetext =
L(u8
"mm³");
5807 def->readonly = false;
5808 def->nullable = true;
5810
5811 def = this->
add(
"cooling_tube_retraction",
coFloat);
5812 def->label =
L(
"Cooling tube position");
5813 def->tooltip =
L(
"Distance of the center-point of the cooling tube from the extruder tip.");
5814 def->sidetext =
L(
"mm");
5815 def->min = 0;
5818
5819 def = this->
add(
"cooling_tube_length",
coFloat);
5820 def->label =
L(
"Cooling tube length");
5821 def->tooltip =
L(
"Length of the cooling tube to limit space for cooling moves inside it.");
5822 def->sidetext =
L(
"mm");
5823 def->min = 0;
5826
5827 def = this->
add(
"high_current_on_filament_swap",
coBool);
5828 def->label =
L(
"High extruder current on filament swap");
5829 def->tooltip =
L(
"It may be beneficial to increase the extruder motor current during the filament exchange"
5830 " sequence to allow for rapid ramming feed rates and to overcome resistance when loading"
5831 " a filament with an ugly shaped tip.");
5833 def->set_default_value(new ConfigOptionBool(0));
5834
5835 def = this->
add(
"parking_pos_retraction",
coFloat);
5836 def->label =
L(
"Filament parking position");
5837 def->tooltip =
L(
"Distance of the extruder tip from the position where the filament is parked "
5838 "when unloaded. This should match the value in printer firmware.");
5839 def->sidetext =
L(
"mm");
5840 def->min = 0;
5843
5844 def = this->
add(
"extra_loading_move",
coFloat);
5845 def->label =
L(
"Extra loading distance");
5846 def->tooltip =
L(
"When set to zero, the distance the filament is moved from parking position during load "
5847 "is exactly the same as it was moved back during unload. When positive, it is loaded further, "
5848 "if negative, the loading move is shorter than unloading.");
5849 def->sidetext =
L(
"mm");
5852
5854 def->label =
L(
"Start end points");
5855 def->tooltip =
L(
"The start and end points which are from the cutter area to the excess chute.");
5857 def->readonly = true;
5858
5859 def->set_default_value(
new ConfigOptionPoints{
Vec2d(30, -3),
Vec2d(54, 245)});
5860
5861 def = this->
add(
"reduce_infill_retraction",
coBool);
5862 def->label =
L(
"Reduce infill retraction");
5863 def->tooltip =
L(
"Don\'t retract when the travel is entirely within an infill area. That means the oozing can\'t been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped.");
5865 def->set_default_value(new ConfigOptionBool(false));
5866
5867 def = this->
add(
"ooze_prevention",
coBool);
5868 def->label =
L(
"Enable");
5869 def->tooltip =
L(
"This option will drop the temperature of the inactive extruders to prevent oozing.");
5871 def->set_default_value(new ConfigOptionBool(false));
5872
5874 def->label =
L(
"Filename format");
5875 def->tooltip =
L(
"Users can decide project file names when exporting.");
5876 def->full_width = true;
5878 def->set_default_value(
new ConfigOptionString(
"{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode"));
5879
5880 def = this->
add(
"make_overhang_printable",
coBool);
5881 def->label =
L(
"Make overhangs printable");
5882 def->category =
L(
"Quality");
5883 def->tooltip =
L(
"Modify the geometry to print overhangs without support material.");
5885 def->set_default_value(new ConfigOptionBool(false));
5886
5887 def = this->
add(
"make_overhang_printable_angle",
coFloat);
5888 def->label =
L(
"Make overhangs printable - Maximum angle");
5889 def->category =
L(
"Quality");
5890 def->tooltip =
L(
"Maximum angle of overhangs to allow after making more steep overhangs printable."
5891 "90° will not change the model at all and allow any overhang, while 0 will "
5892 "replace all overhangs with conical material.");
5893 def->sidetext = u8"°";
5895 def->min = 0.;
5896 def->max = 90.;
5898
5899 def = this->
add(
"make_overhang_printable_hole_size",
coFloat);
5900 def->label =
L(
"Make overhangs printable - Hole area");
5901 def->category =
L(
"Quality");
5902 def->tooltip =
L(
"Maximum area of a hole in the base of the model before it's filled by conical material. "
5903 "A value of 0 will fill all the holes in the model base.");
5904 def->sidetext =
L(u8
"mm²");
5906 def->min = 0.;
5908
5909 def = this->
add(
"detect_overhang_wall",
coBool);
5910 def->label =
L(
"Detect overhang walls");
5911 def->category =
L(
"Quality");
5912
5913 def->tooltip =
L(
"This detects the overhang percentage relative to line width and uses a different speed to print. For 100% overhang, bridging speed is used.");
5915 def->set_default_value(new ConfigOptionBool(true));
5916
5917 def = this->
add(
"unsupported_wall_last",
coBool);
5918 def->label =
L(
"Print unsupported walls last");
5919 def->category =
L(
"Quality");
5920 def->tooltip =
L(
"Wall loops that lie entirely in mid air are printed once something can hold them:\n"
5921 "they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n"
5922 "A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running "
5923 "alongside a supported wall keeps its place before the infill, which needs it as an anchor.");
5925 def->set_default_value(new ConfigOptionBool(false));
5926
5927 def = this->
add(
"outer_wall_filament_id",
coInt);
5929 def->label =
L(
"Outer walls");
5930 def->category =
L(
"Extruders");
5931 def->tooltip =
L(
"Filament to print outer walls.\n\"Default\" uses the active object/part filament.");
5932 def->min = 0;
5934 def->set_default_value(new ConfigOptionInt(0));
5935
5936 def = this->
add(
"inner_wall_filament_id",
coInt);
5938 def->label =
L(
"Inner walls");
5939 def->category =
L(
"Extruders");
5940 def->tooltip =
L(
"Filament to print inner walls.\n\"Default\" uses the active object/part filament.");
5941 def->min = 0;
5943 def->set_default_value(new ConfigOptionInt(0));
5944
5946 def->label =
L(
"Inner wall");
5947 def->category =
L(
"Quality");
5948 def->tooltip =
L(
"Line width of inner wall. If expressed as a %, it will be computed over the nozzle diameter.");
5949 def->sidetext =
L(
"mm or %");
5950 def->ratio_over = "nozzle_diameter";
5951 def->min = 0;
5952 def->max = 1000;
5953 def->max_literal = 10;
5955 def->set_default_value(new ConfigOptionFloatOrPercent(0., false));
5956
5958 def->label =
L(
"Inner wall");
5959 def->category =
L(
"Speed");
5960 def->tooltip =
L(
"This is the speed for inner walls.");
5961 def->sidetext =
L(
"mm/s");
5962 def->aliases = { "perimeter_feed_rate" };
5963 def->min = 1;
5965 def->nullable = true;
5967
5968 def = this->
add(
"wall_loops",
coInt);
5969 def->label =
L(
"Wall loops");
5970 def->category =
L(
"Strength");
5971 def->tooltip =
L(
"This is the number of walls per layer.");
5972 def->min = 0;
5973 def->max = 1000;
5974 def->set_default_value(new ConfigOptionInt(2));
5975
5976 def = this->
add(
"alternate_extra_wall",
coBool);
5977 def->label =
L(
"Alternate extra wall");
5978 def->category =
L(
"Strength");
5979 def->tooltip =
L(
"This setting adds an extra wall to every other layer. This way the infill gets wedged vertically between the walls, resulting in stronger prints.\n\n"
5980 "When this option is enabled, the ensure vertical shell thickness option needs to be disabled.\n\n"
5981 "Using lightning infill together with this option is not recommended as there is limited infill to anchor the extra perimeters to.");
5983 def->set_default_value(new ConfigOptionBool(false));
5984
5986 def->label =
L(
"Post-processing Scripts");
5987 def->tooltip =
L(
"If you want to process the output G-code through custom scripts, "
5988 "just list their absolute paths here. Separate multiple scripts with a semicolon. "
5989 "Scripts will be passed the absolute path to the G-code file as the first argument, "
5990 "and they can access the Orca Slicer config settings by reading environment variables.");
5991 def->gui_flags = "serialized";
5992 def->multiline = true;
5993 def->full_width = true;
5994 def->height = 6;
5996 def->set_default_value(new ConfigOptionStrings());
5997
5998 def = this->
add(
"process_change_extrusion_role_gcode",
coString);
5999 def->label =
L(
"Change extrusion role G-code (process)");
6000 def->tooltip =
L(
"This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code.");
6001 def->multiline = true;
6002 def->full_width = true;
6003 def->height = 5;
6006
6008 def->label =
L(
"Plugins Used");
6009 def->tooltip =
L(
"Plugin capabilities referenced by this preset, stored as name;uuid;capability.");
6011 def->set_default_value(new ConfigOptionStrings());
6012
6014 def->label =
L(
"Slicing Pipeline Plugin");
6015 def->tooltip =
L(
"Python plugins invoked at each slicing pipeline step to read and modify intermediate slicing data, "
6016 "including a final G-code post-processing step. Research/experimental.");
6018 def->plugin_type = "slicing-pipeline";
6019 def->full_width = true;
6021 def->set_default_value(new ConfigOptionStrings());
6022
6024 def->label =
L(
"Printer type");
6025 def->tooltip =
L(
"Type of the printer.");
6028
6030 def->label =
L(
"Printer notes");
6031 def->tooltip =
L(
"You can put your notes regarding the printer here.");
6032 def->multiline = true;
6033 def->full_width = true;
6034 def->height = 13;
6037
6039 def->label =
L(
"Printer variant");
6040
6043
6046
6047
6048
6051
6052
6053
6054 def = this->
add(
"raft_contact_distance",
coFloat);
6055 def->label =
L(
"Raft contact Z distance");
6056 def->category =
L(
"Support");
6057 def->tooltip =
L(
"Z gap between raft and object. If Support Top Z Distance is 0, this value is ignored and the object is printed in direct contact with the raft (no gap).");
6058 def->sidetext =
L(
"mm");
6059 def->min = 0;
6062
6064 def->label =
L(
"Raft expansion");
6065 def->category =
L(
"Support");
6066 def->tooltip =
L(
"This expands all raft layers in XY plane.");
6067 def->sidetext =
L(
"mm");
6068 def->min = 0;
6071
6072 def = this->
add(
"raft_first_layer_density",
coPercent);
6073 def->label =
L(
"First layer density");
6074 def->category =
L(
"Support");
6075 def->tooltip =
L(
"This is the density of the first raft or support layer.");
6076 def->sidetext = "%";
6077 def->min = 10;
6078 def->max = 100;
6080 def->set_default_value(new ConfigOptionPercent(90));
6081
6082 def = this->
add(
"raft_first_layer_expansion",
coFloat);
6083 def->label =
L(
"First layer expansion");
6084 def->category =
L(
"Support");
6085 def->tooltip =
L(
"This expands the first raft or support layer to improve bed adhesion.");
6086 def->sidetext =
L(
"mm");
6087 def->min = 0;
6089
6091
6092 def = this->
add(
"raft_layers",
coInt);
6093 def->label =
L(
"Raft layers");
6094 def->category =
L(
"Support");
6095 def->tooltip =
L(
"Object will be raised by this number of support layers. "
6096 "Use this function to avoid warping when printing ABS.");
6097 def->sidetext =
L(
"layers");
6098 def->min = 0;
6099 def->max = 100;
6102
6104 def->label =
L(
"Resolution");
6105 def->tooltip =
L(
"The G-code path is generated after simplifying the contour of models to avoid too many points and G-code lines. Smaller values mean higher resolution and more time required to slice.");
6106 def->sidetext =
L(
"mm");
6107 def->min = 0;
6110
6111 def = this->
add(
"retraction_minimum_travel",
coFloats);
6112 def->label =
L(
"Travel distance threshold");
6113 def->tooltip =
L(
"Only trigger retraction when the travel distance is longer than this threshold.");
6114 def->sidetext =
L(
"mm");
6117
6119 def->label =
L(
"Retract amount before wipe");
6120 def->tooltip =
L(
"This is the length of fast retraction before a wipe, relative to retraction length.");
6121 def->sidetext = "%";
6124
6125
6127 def->label =
L(
"Retract amount after wipe");
6128
6129 def->tooltip =
L(
"This is the length of fast retraction after wipe, relative to retraction length.\n"
6130 "The value will be clamped by 100% minus the retract amount before the wipe value.");
6131 def->sidetext = "%";
6134
6135 def = this->
add(
"retract_when_changing_layer",
coBools);
6136 def->label =
L(
"Retract on layer change");
6137 def->tooltip =
L(
"This forces a retraction on layer changes.");
6140
6142 def->label =
L(
"Length");
6143 def->full_label =
L(
"Retraction Length");
6144 def->tooltip =
L(
"Some amount of material in extruder is pulled back to avoid ooze during long travel. "
6145 "Set zero to disable retraction.");
6146 def->sidetext =
L(
"mm");
6149
6150 def = this->
add(
"enable_long_retraction_when_cut",
coInt);
6152 def->set_default_value(new ConfigOptionInt {0});
6153
6154 def = this->
add(
"long_retractions_when_cut",
coBools);
6155 def->label =
L(
"Long retraction when cut (beta)");
6156 def->tooltip =
L(
"Experimental feature: Retracting and cutting off the filament at a longer distance during changes to minimize purge. "
6157 "While this reduces flush significantly, it may also raise the risk of nozzle clogs or other printing problems.");
6160
6161 def = this->
add(
"retraction_distances_when_cut",
coFloats);
6162 def->label =
L(
"Retraction distance when cut");
6163 def->tooltip =
L(
"Experimental feature: Retraction length before cutting off during filament change.");
6165 def->min = 10;
6166 def->max = 18;
6168
6169 def = this->
add(
"long_retractions_when_ec",
coBools);
6170 def->label =
L(
"Long retraction when extruder change");
6172 def->nullable = true;
6174
6175 def = this->
add(
"retraction_distances_when_ec",
coFloats);
6176 def->label =
L(
"Retraction distance when extruder change");
6178 def->nullable = true;
6179 def->min = 0;
6180 def->max = 10;
6181 def->sidetext =
L(
"mm");
6183
6184 def = this->
add(
"retract_length_toolchange",
coFloats);
6185 def->label =
L(
"Retraction Length (Toolchange)");
6186 def->tooltip =
L(
"When retraction is triggered before changing tool, filament is pulled back "
6187 "by the specified amount (the length is measured on raw filament, before it enters "
6188 "the extruder).");
6189 def->sidetext =
L(
"mm");
6192
6194 def->label =
L(
"Z-hop height");
6195 def->tooltip =
L(
"Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing.");
6196 def->sidetext =
L(
"mm");
6198 def->min = 0;
6199 def->max = 5;
6201
6203 def->label =
L(
"Z-hop lower boundary");
6204 def->tooltip =
L(
"Z-hop will only come into effect when Z is above this value and is below the parameter: \"Z-hop upper boundary\".");
6205 def->sidetext =
L(
"mm");
6207 def->min = 0;
6209
6211 def->label =
L(
"Z-hop upper boundary");
6212 def->tooltip =
L(
"If this value is positive, Z-hop will only come into effect when Z is above the parameter: \"Z-hop lower boundary\" and is below this value.");
6213 def->sidetext =
L(
"mm");
6215 def->min = 0;
6217
6219 def->label =
L(
"Z-hop type");
6220 def->tooltip =
L(
"Type of Z-hop.");
6222 def->enum_values.push_back("Auto Lift");
6223 def->enum_values.push_back("Normal Lift");
6224 def->enum_values.push_back("Slope Lift");
6225 def->enum_values.push_back("Spiral Lift");
6226 def->enum_labels.push_back(
L(
"Auto"));
6227 def->enum_labels.push_back(
L(
"Normal"));
6228 def->enum_labels.push_back(
L(
"Slope"));
6229 def->enum_labels.push_back(
L(
"Spiral"));
6232
6234 def->label =
L(
"Traveling angle");
6235 def->tooltip =
L(
"Traveling angle for Slope and Spiral Z-hop type. Setting it to 90° results in Normal Lift.");
6236 def->sidetext = u8"°";
6238 def->min = 1;
6239 def->max = 90;
6241
6243 def->label =
L(
"Only lift Z above");
6244 def->tooltip =
L(
"If you set this to a positive value, Z lift will only take place above the specified absolute Z.");
6245 def->sidetext =
L(
"mm");
6248
6250 def->label =
L(
"Only lift Z below");
6251 def->tooltip =
L(
"If you set this to a positive value, Z lift will only take place below the specified absolute Z.");
6252 def->sidetext =
L(
"mm");
6255
6256 def = this->
add(
"retract_lift_enforce",
coEnums);
6257 def->label =
L(
"On surfaces");
6258 def->tooltip =
L(
"Enforce Z-Hop behavior. This setting is impacted by the above settings (Only lift Z above/below).");
6260 def->enum_values.push_back("All Surfaces");
6261 def->enum_values.push_back("Top Only");
6262 def->enum_values.push_back("Bottom Only");
6263 def->enum_values.push_back("Top and Bottom");
6264 def->enum_labels.push_back(
L(
"All Surfaces"));
6265 def->enum_labels.push_back(
L(
"Top Only"));
6266 def->enum_labels.push_back(
L(
"Bottom Only"));
6267 def->enum_labels.push_back(
L(
"Top and Bottom"));
6270
6272
6273 def->label = "Type";
6274 def->tooltip = "This setting is only used for initial value of manual calibration of pressure advance. Bowden extruder usually has larger PA value. This setting doesn't influence normal slicing.";
6276 def->enum_values.push_back("Direct Drive");
6277 def->enum_values.push_back("Bowden");
6278 def->enum_labels.push_back(
L(
"Direct Drive"));
6279 def->enum_labels.push_back(
L(
"Bowden"));
6282
6283
6284 def = this->
add(
"nozzle_volume_type",
coEnums);
6285
6286 def->label = "Nozzle Volume Type";
6287 def->tooltip = "Nozzle volume type for extruders.";
6289
6290
6291 def->enum_values.push_back(
L(
"Standard"));
6292 def->enum_values.push_back(
L(
"High Flow"));
6293 def->enum_values.push_back(
L(
"Hybrid"));
6294 def->enum_values.push_back(
L(
"TPU High Flow"));
6295 def->enum_values.push_back(
L(
"E3D High Flow"));
6296 def->enum_values.push_back(
L(
"Extra High Flow"));
6297 def->enum_labels.push_back(
L(
"Standard"));
6298 def->enum_labels.push_back(
L(
"High Flow"));
6299 def->enum_labels.push_back(
L(
"Hybrid"));
6300 def->enum_labels.push_back(
L(
"TPU High Flow"));
6301 def->enum_labels.push_back(
L(
"E3D High Flow"));
6302 def->enum_labels.push_back(
L(
"Extra High Flow"));
6305
6306 def = this->
add(
"default_nozzle_volume_type",
coEnums);
6307
6308 def->label = "Default Nozzle Volume Type.";
6309 def->tooltip = "Default Nozzle volume type for extruders in this printer.";
6311 def->enum_values.push_back(
L(
"Standard"));
6312 def->enum_values.push_back(
L(
"High Flow"));
6313 def->enum_values.push_back(
L(
"Hybrid"));
6314 def->enum_values.push_back(
L(
"TPU High Flow"));
6315 def->enum_values.push_back(
L(
"E3D High Flow"));
6316 def->enum_values.push_back(
L(
"Extra High Flow"));
6317 def->enum_labels.push_back(
L(
"Standard"));
6318 def->enum_labels.push_back(
L(
"High Flow"));
6319 def->enum_labels.push_back(
L(
"Hybrid"));
6320 def->enum_labels.push_back(
L(
"TPU High Flow"));
6321 def->enum_labels.push_back(
L(
"E3D High Flow"));
6322 def->enum_labels.push_back(
L(
"Extra High Flow"));
6325
6327
6328 def->label = "Extruder variant list";
6329 def->tooltip = "Extruder variant list.";
6330 def->set_default_value(new ConfigOptionStrings { "Direct Drive Standard" });
6332
6334
6335 def->label = "Extruder AMS count";
6336 def->tooltip = "AMS counts per extruder.";
6337 def->set_default_value(new ConfigOptionStrings { });
6338
6339
6340
6342 def->label = "Extruder nozzle stats";
6343 def->tooltip = "Physical nozzle counts per extruder, keyed by nozzle volume type.";
6344 def->set_default_value(new ConfigOptionStrings { });
6345
6346
6347
6348
6349
6350
6351
6352 def = this->
add(
"extruder_nozzle_count",
coInts);
6353 def->label = "extruder nozzle count";
6354 def->tooltip = "extruder nozzle count";
6357
6358
6359
6360
6361
6362
6363 def = this->
add(
"extruder_nozzle_volume_type",
coEnums);
6364 def->label = "Extruder nozzle volume type";
6365 def->tooltip = "Nozzle volume type per physical nozzle of an extruder.";
6367 def->enum_values.push_back("Standard");
6368 def->enum_values.push_back("High Flow");
6369 def->enum_values.push_back("TPU High Flow");
6370 def->enum_values.push_back("E3D High Flow");
6371 def->enum_values.push_back("Extra High Flow");
6372 def->enum_labels.push_back("Standard");
6373 def->enum_labels.push_back("High Flow");
6374 def->enum_labels.push_back("TPU High Flow");
6375 def->enum_labels.push_back("E3D High Flow");
6376 def->enum_labels.push_back("Extra High Flow");
6379
6380 def = this->
add(
"enable_filament_dynamic_map",
coBool);
6381 def->label =
L(
"Enable filament dynamic map");
6382 def->tooltip =
L(
"Enable dynamic filament mapping during print.");
6384 def->set_default_value(new ConfigOptionBool(false));
6385
6386 def = this->
add(
"has_filament_switcher",
coBool);
6387 def->label =
L(
"Has filament switcher");
6388 def->tooltip =
L(
"Printer has a filament switcher hardware (e.g., AMS).");
6390 def->set_default_value(new ConfigOptionBool(false));
6391
6392 def = this->
add(
"printer_extruder_id",
coInts);
6393
6394 def->label = "Printer extruder id";
6395 def->tooltip = "Printer extruder id.";
6398
6399 def = this->
add(
"printer_extruder_variant",
coStrings);
6400
6401 def->label = "Printer's extruder variant";
6402 def->tooltip = "Printer's extruder variant.";
6403 def->set_default_value(new ConfigOptionStrings { "Direct Drive Standard" });
6405
6406 def = this->
add(
"master_extruder_id",
coInt);
6407
6408 def->label = "Master extruder id";
6409 def->tooltip = "Default extruder id to place filament.";
6410 def->set_default_value(new ConfigOptionInt{ 1 });
6411
6412 def = this->
add(
"print_extruder_id",
coInts);
6413
6414 def->label = "Print extruder id";
6415 def->tooltip = "Print extruder id.";
6418
6420
6421 def->label = "Print's extruder variant";
6422 def->tooltip = "Print's extruder variant.";
6423 def->set_default_value(new ConfigOptionStrings { "Direct Drive Standard" });
6425
6426
6427
6428
6429
6430
6431
6432 def = this->
add(
"filament_extruder_variant",
coStrings);
6433
6434 def->label = "Filament's extruder variant";
6435 def->tooltip = "Filament's extruder variant.";
6436 def->set_default_value(new ConfigOptionStrings { "Direct Drive Standard" });
6438
6439 def = this->
add(
"filament_self_index",
coInts);
6440
6441 def->label = "Filament self index";
6442 def->tooltip = "Filament self index.";
6445
6446 def = this->
add(
"retract_restart_extra",
coFloats);
6447 def->label =
L(
"Extra length on restart");
6448 def->tooltip =
L(
"When the retraction is compensated after the travel move, the extruder will push "
6449 "this additional amount of filament. This setting is rarely needed.");
6450 def->sidetext =
L(
"mm");
6453
6454 def = this->
add(
"retract_restart_extra_toolchange",
coFloats);
6455 def->label =
L(
"Extra length on restart (Toolchange)");
6456 def->tooltip =
L(
"When the retraction is compensated after changing tool, the extruder will push "
6457 "this additional amount of filament.");
6458 def->sidetext =
L(
"mm");
6461
6463 def->label =
L(
"Retraction speed");
6464 def->full_label =
L(
"Retraction speed");
6465 def->tooltip =
L(
"Speed for retracting filament from the nozzle.");
6466 def->sidetext =
L(
"mm/s");
6469
6471 def->label =
L(
"Deretraction speed");
6472 def->full_label =
L(
"Deretraction speed");
6473 def->tooltip =
L(
"Speed for reloading filament into the nozzle. Zero means same speed of retraction.");
6474 def->sidetext =
L(
"mm/s");
6477
6478
6479
6480
6481
6482
6483 def = this->
add(
"deretract_speed_extruder_change",
coFloats);
6484 def->label =
L(
"Deretraction speed (extruder change)");
6485 def->tooltip =
L(
"Speed for reloading filament into the nozzle when switching extruder.");
6486 def->sidetext =
L(
"mm/s");
6488 def->nullable = true;
6490
6491 def = this->
add(
"use_firmware_retraction",
coBool);
6492 def->label =
L(
"Use firmware retraction");
6493 def->tooltip =
L(
"This experimental setting uses G10 and G11 commands to have the firmware "
6494 "handle the retraction. This is only supported in recent Marlin.");
6496 def->set_default_value(new ConfigOptionBool(false));
6497
6498 def = this->
add(
"bbl_calib_mark_logo",
coBool);
6499 def->label =
L(
"Show auto-calibration marks");
6500
6502 def->set_default_value(new ConfigOptionBool(true));
6503
6505 def->label =
L(
"Disable set remaining print time");
6506 def->tooltip =
L(
"Disable generating of the M73: Set remaining print time in the final G-code.");
6508 def->set_default_value(new ConfigOptionBool(false));
6509
6510 def = this->
add(
"seam_position",
coEnum);
6511 def->label =
L(
"Seam position");
6512 def->category =
L(
"Quality");
6513 def->tooltip =
L(
"This is the starting position for each part of the outer wall.");
6515 def->enum_values.push_back("nearest");
6516 def->enum_values.push_back("aligned");
6517 def->enum_values.push_back("aligned_back");
6518 def->enum_values.push_back("back");
6519 def->enum_values.push_back("random");
6520 def->enum_labels.push_back(
L(
"Nearest"));
6521 def->enum_labels.push_back(
L(
"Aligned"));
6522 def->enum_labels.push_back(
L(
"Aligned back"));
6523 def->enum_labels.push_back(
L(
"Back"));
6524 def->enum_labels.push_back(
L(
"Random"));
6526 def->set_default_value(
new ConfigOptionEnum<SeamPosition>(
spAligned));
6527
6528 def = this->
add(
"staggered_inner_seams",
coBool);
6529 def->label =
L(
"Staggered inner seams");
6530 def->category =
L(
"Quality");
6531 def->tooltip =
L(
"This option causes the inner seams to be shifted backwards based on their depth, forming a zigzag pattern.");
6533 def->set_default_value(new ConfigOptionBool(false));
6534
6536 def->label =
L(
"Seam gap");
6537 def->category =
L(
"Quality");
6538 def->tooltip =
L(
"In order to reduce the visibility of the seam in a closed loop extrusion, the loop is interrupted and shortened by a specified amount.\n"
6539 "This amount can be specified in millimeters or as a percentage of the nozzle diameter. The default value for this parameter is 10%.");
6540 def->sidetext =
L(
"mm or %");
6541 def->min = 0;
6543 def->set_default_value(new ConfigOptionFloatOrPercent(10,true));
6544
6545 def = this->
add(
"seam_slope_type",
coEnum);
6546 def->label =
L(
"Scarf joint seam (beta)");
6547 def->category =
L(
"Quality");
6548 def->tooltip =
L(
"Use scarf joint to minimize seam visibility and increase seam strength.");
6550 def->enum_values.push_back("none");
6551 def->enum_values.push_back("external");
6552 def->enum_values.push_back("all");
6553 def->enum_labels.push_back(
L(
"None"));
6554 def->enum_labels.push_back(
L(
"Contour"));
6555 def->enum_labels.push_back(
L(
"Contour and hole"));
6558
6559 def = this->
add(
"seam_slope_conditional",
coBool);
6560 def->label =
L(
"Conditional scarf joint");
6561 def->category =
L(
"Quality");
6562 def->tooltip =
L(
"Apply scarf joints only to smooth perimeters where traditional seams do not conceal the seams at sharp corners effectively.");
6564 def->set_default_value(new ConfigOptionBool(false));
6565
6566 def = this->
add(
"scarf_angle_threshold",
coInt);
6567 def->label =
L(
"Conditional angle threshold");
6568 def->category =
L(
"Quality");
6570 "This option sets the threshold angle for applying a conditional scarf joint seam.\nIf the maximum angle within the perimeter loop "
6571 "exceeds this value (indicating the absence of sharp corners), a scarf joint seam will be used. The default value is 155°.");
6573 def->sidetext = u8"°";
6574 def->min = 0;
6575 def->max = 180;
6576 def->set_default_value(new ConfigOptionInt(155));
6577
6578 def = this->
add(
"scarf_overhang_threshold",
coPercent);
6579 def->label =
L(
"Conditional overhang threshold");
6580 def->category =
L(
"Quality");
6581
6582 def->tooltip =
L(
"This option determines the overhang threshold for the application of scarf joint seams. If the unsupported portion "
6583 "of the perimeter is less than this threshold, scarf joint seams will be applied. The default threshold is set at 40% "
6584 "of the external wall's width. Due to performance considerations, the degree of overhang is estimated.");
6585 def->sidetext = "%";
6586 def->min = 0;
6588 def->set_default_value(new ConfigOptionPercent(40));
6589
6591 def->label =
L(
"Scarf joint speed");
6592 def->category =
L(
"Quality");
6594 "This option sets the printing speed for scarf joints. It is recommended to print scarf joints at a slow speed (less than 100 "
6595 "mm/s). It's also advisable to enable 'Extrusion rate smoothing' if the set speed varies significantly from the speed of the "
6596 "outer or inner walls. If the speed specified here is higher than the speed of the outer or inner walls, the printer will default "
6597 "to the slower of the two speeds. When specified as a percentage (e.g., 80%), the speed is calculated based on the respective "
6598 "outer or inner wall speed. The default value is set to 100%.");
6599 def->sidetext =
L(
"mm/s or %");
6600 def->min = 1;
6602 def->set_default_value(new ConfigOptionFloatOrPercent(100, true));
6603
6604 def = this->
add(
"scarf_joint_flow_ratio",
coFloat);
6605 def->label =
L(
"Scarf joint flow ratio");
6606 def->category =
L(
"Quality");
6607 def->tooltip =
L(
"This factor affects the amount of material for scarf joints.");
6609 def->min = 0;
6610 def->max = 2;
6612
6614 def->label =
L(
"Scarf start height");
6615 def->category =
L(
"Quality");
6616 def->tooltip =
L(
"Start height of the scarf.\n"
6617 "This amount can be specified in millimeters or as a percentage of the current layer height. The default value for this parameter is 0.");
6618 def->sidetext =
L(
"mm or %");
6619 def->ratio_over = "layer_height";
6620 def->min = 0;
6622 def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
6623
6624 def = this->
add(
"seam_slope_entire_loop",
coBool);
6625 def->label =
L(
"Scarf around entire wall");
6626 def->category =
L(
"Quality");
6627 def->tooltip =
L(
"The scarf extends to the entire length of the wall.");
6629 def->set_default_value(new ConfigOptionBool(false));
6630
6631 def = this->
add(
"seam_slope_min_length",
coFloat);
6632 def->label =
L(
"Scarf length");
6633 def->category =
L(
"Quality");
6634 def->tooltip =
L(
"Length of the scarf. Setting this parameter to zero effectively disables the scarf.");
6635 def->sidetext =
L(
"mm");
6636 def->min = 0;
6639
6640 def = this->
add(
"seam_slope_steps",
coInt);
6641 def->label =
L(
"Scarf steps");
6642 def->category =
L(
"Quality");
6643 def->tooltip =
L(
"Minimum number of segments of each scarf.");
6644 def->min = 1;
6646 def->set_default_value(new ConfigOptionInt(10));
6647
6648 def = this->
add(
"seam_slope_inner_walls",
coBool);
6649 def->label =
L(
"Scarf joint for inner walls");
6650 def->category =
L(
"Quality");
6651 def->tooltip =
L(
"Use scarf joint for inner walls as well.");
6653 def->set_default_value(new ConfigOptionBool(false));
6654
6655 def = this->
add(
"role_based_wipe_speed",
coBool);
6656 def->label =
L(
"Role based wipe speed");
6657 def->category =
L(
"Speed");
6658 def->tooltip =
L(
"The wipe speed is determined by the speed of the current extrusion role. "
6659 "e.g. if a wipe action is executed immediately following an outer wall extrusion, the speed of the outer wall extrusion will be utilized for the wipe action.");
6661 def->set_default_value(new ConfigOptionBool(true));
6662
6663 def = this->
add(
"wipe_on_loops",
coBool);
6664 def->label =
L(
"Wipe on loops");
6665 def->category =
L(
"Quality");
6666 def->tooltip =
L(
"To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop.");
6668 def->set_default_value(new ConfigOptionBool(false));
6669
6671 def->label =
L(
"Wipe inward");
6672 def->category =
L(
"Quality");
6673 def->tooltip =
L(
"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed "
6674 "inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n\n"
6675 "Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n\n"
6676 "Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or "
6677 "Outer/Inner wall order), or if no supported inward path can be found, for example at tight "
6678 "corners or seam gaps.");
6680 def->set_default_value(new ConfigOptionBool(false));
6681
6683 def->label =
L(
"Wipe inward distance");
6684 def->category =
L(
"Quality");
6685
6686 def->tooltip =
L(
"The distance the wipe path is shifted away from the external perimeter, specified in millimeters "
6687 "or as a percentage of the actual outer-wall extrusion width.\n\n"
6688 "For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited "
6689 "by both the actual outer-wall width and the available spacing to the adjacent wall, so values "
6690 "above 100% or an equivalent absolute distance have no additional effect. "
6691 "Set to 0 to disable the offset.");
6692 def->sidetext =
L(
"mm or %");
6693 def->ratio_over = "outer_wall_line_width";
6694 def->min = 0;
6695 def->max = 100;
6696 def->max_literal = 2;
6698 def->set_default_value(new ConfigOptionFloatOrPercent(50, true));
6699
6700 def = this->
add(
"wipe_before_external_loop",
coBool);
6701 def->label =
L(
"Wipe before external loop");
6702 def->category =
L(
"Quality");
6703 def->tooltip =
L(
"To minimize visibility of potential overextrusion at the start of an external perimeter when printing with "
6704 "Outer/Inner or Inner/Outer/Inner wall print order, the de-retraction is performed slightly on the inside from the "
6705 "start of the external perimeter. That way any potential over extrusion is hidden from the outside surface.\n\n"
6706 "This is useful when printing with Outer/Inner or Inner/Outer/Inner wall print order as in these modes it is more likely "
6707 "an external perimeter is printed immediately after a de-retraction move.");
6709 def->set_default_value(new ConfigOptionBool(false));
6710
6712 def->label =
L(
"Wipe speed");
6713 def->category =
L(
"Speed");
6714 def->tooltip =
L(
"The wipe speed is determined by the speed setting specified in this configuration. "
6715 "If the value is expressed as a percentage (e.g. 80%), it will be calculated based on the travel speed setting above. "
6716 "The default value for this parameter is 80%.");
6717 def->sidetext =
L(
"mm/s or %");
6718 def->ratio_over = "travel_speed";
6719 def->min = 0;
6721 def->set_default_value(new ConfigOptionFloatOrPercent(80,true));
6722
6724 def->label =
L(
"Skirt distance");
6725 def->tooltip =
L(
"This is the distance from the skirt to the brim or the object.");
6726 def->sidetext =
L(
"mm");
6727 def->min = 0;
6728 def->max = 60;
6731
6732 def = this->
add(
"skirt_start_angle",
coFloat);
6733 def->label =
L(
"Skirt start point");
6734 def->category =
L(
"Support");
6735 def->tooltip =
L(
"Angle from the object center to skirt start point. Zero is the most right position, counter clockwise is positive angle.");
6736 def->sidetext = u8"°";
6737 def->min = -180;
6738 def->max = 180;
6741
6742 def = this->
add(
"skirt_height",
coInt);
6743 def->label =
L(
"Skirt height");
6744 def->tooltip =
L(
"Number of skirt layers: usually only one");
6745 def->sidetext =
L(
"layers");
6747 def->max = 10000;
6748 def->set_default_value(new ConfigOptionInt(1));
6749
6750 def = this->
add(
"single_loop_draft_shield",
coBool);
6751 def->label =
L(
"Single loop after first layer");
6752 def->tooltip =
L(
"Limits the skirt/draft shield loops to one wall after the first layer. This is useful, on occasion, to conserve filament but may cause the draft shield/skirt to warp / crack.");
6754 def->set_default_value(new ConfigOptionBool(false));
6755
6756 def = this->
add(
"draft_shield",
coEnum);
6757 def->label =
L(
"Draft shield");
6758 def->tooltip =
L(
"A draft shield is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft. "
6759 "It is usually needed only with open frame printers, i.e. without an enclosure.\n\n"
6760 "Enabled = skirt is as tall as the highest printed object. Otherwise 'Skirt height' is used.");
6762 def->enum_values.push_back("disabled");
6763 def->enum_values.push_back("enabled");
6764 def->enum_labels.push_back(
L(
"Disabled"));
6765 def->enum_labels.push_back(
L(
"Enabled"));
6767 def->set_default_value(
new ConfigOptionEnum<DraftShield>(
dsDisabled));
6768
6770 def->label =
L(
"Skirt type");
6771 def->full_label =
L(
"Skirt type");
6772 def->tooltip =
L(
"Combined - single skirt for all objects, Per object - individual object skirt.");
6774 def->enum_values.push_back("combined");
6775 def->enum_values.push_back("perobject");
6776 def->enum_labels.push_back(
L(
"Combined"));
6777 def->enum_labels.push_back(
L(
"Per object"));
6779 def->set_default_value(
new ConfigOptionEnum<SkirtType>(
stCombined));
6780
6781 def = this->
add(
"skirt_loops",
coInt);
6782 def->label =
L(
"Skirt loops");
6783 def->full_label =
L(
"Skirt loops");
6784 def->tooltip =
L(
"This is the number of loops for the skirt. 0 means the skirt is disabled.");
6785 def->min = 0;
6786 def->max = 10;
6788 def->set_default_value(new ConfigOptionInt(1));
6789
6791 def->label =
L(
"Skirt speed");
6792 def->full_label =
L(
"Skirt speed");
6793 def->tooltip =
L(
"Speed of skirt, in mm/s. Zero means use default layer extrusion speed.");
6794 def->min = 0;
6795 def->sidetext =
L(
"mm/s");
6798
6799 def = this->
add(
"min_skirt_length",
coFloat);
6800 def->label =
L(
"Skirt minimum extrusion length");
6801 def->full_label =
L(
"Skirt minimum extrusion length");
6802 def->tooltip =
L(
"Minimum filament extrusion length in mm when printing the skirt. Zero means this feature is disabled.\n\n"
6803 "Using a non-zero value is useful if the printer is set up to print without a prime line.\n"
6804 "Final number of loops is not taking into account while arranging or validating objects distance. Increase loop number in such case.");
6805 def->min = 0;
6806 def->sidetext =
L(
"mm");
6809
6810 def = this->
add(
"slow_down_layer_time",
coFloats);
6811 def->label =
L(
"Layer time");
6812 def->tooltip =
L(
"The printing speed in exported G-code will be slowed down when the estimated layer time is "
6813 "shorter than this value in order to get better cooling for these layers.");
6814 def->sidetext =
L_CONTEXT(
"s",
"second");
6815 def->min = 0;
6816 def->max = 1000;
6819
6820 def = this->
add(
"minimum_sparse_infill_area",
coFloat);
6821 def->label =
L(
"Minimum sparse infill threshold");
6822 def->category =
L(
"Strength");
6823 def->tooltip =
L(
"Sparse infill areas which are smaller than this threshold value are replaced by internal solid infill.");
6824 def->sidetext =
L(u8
"mm²");
6825 def->min = 0;
6828
6829 def = this->
add(
"internal_solid_filament_id",
coInt);
6831 def->label =
L(
"Internal solid infill");
6832 def->category =
L(
"Extruders");
6833 def->tooltip =
L(
"Filament to print internal solid infill.\n\"Default\" uses the active object/part filament.");
6834 def->min = 0;
6836 def->set_default_value(new ConfigOptionInt(0));
6837
6838 def = this->
add(
"top_surface_filament_id",
coInt);
6840 def->label =
L(
"Top surface");
6841 def->category =
L(
"Extruders");
6842 def->tooltip =
L(
"Filament to print top surface.\n\"Default\" uses the active object/part filament.");
6843 def->min = 0;
6845 def->set_default_value(new ConfigOptionInt(0));
6846
6847 def = this->
add(
"bottom_surface_filament_id",
coInt);
6849 def->label =
L(
"Bottom surface");
6850 def->category =
L(
"Extruders");
6851 def->tooltip =
L(
"Filament to print bottom surface.\n\"Default\" uses the active object/part filament.");
6852 def->min = 0;
6854 def->set_default_value(new ConfigOptionInt(0));
6855
6857 def->label =
L(
"Internal solid infill");
6858 def->category =
L(
"Quality");
6859 def->tooltip =
L(
"Line width of internal solid infill. If expressed as a %, it will be computed over the nozzle diameter.");
6860 def->sidetext =
L(
"mm or %");
6861 def->ratio_over = "nozzle_diameter";
6862 def->min = 0;
6863 def->max = 1000;
6864 def->max_literal = 10;
6866 def->set_default_value(new ConfigOptionFloatOrPercent(0., false));
6867
6868 def = this->
add(
"internal_solid_infill_speed",
coFloats);
6869 def->label =
L(
"Internal solid infill");
6870 def->category =
L(
"Speed");
6871 def->tooltip =
L(
"This is the speed for internal solid infill, not including the top or bottom surface.");
6872 def->sidetext =
L(
"mm/s");
6873 def->min = 1;
6875 def->nullable = true;
6877
6879 def->label =
L(
"Spiral vase");
6880 def->tooltip =
L(
"This enables spiraling, which smooths out the Z moves of the outer contour and turns a solid model into a single walled print with solid bottom layers. The final generated model has no seam.");
6882 def->set_default_value(new ConfigOptionBool(false));
6883
6884 def = this->
add(
"spiral_mode_smooth",
coBool);
6885 def->label =
L(
"Smooth Spiral");
6886 def->tooltip =
L(
"Smooth Spiral smooths out X and Y moves as well, "
6887 "resulting in no visible seam at all, even in the XY directions on walls that are not vertical.");
6889 def->set_default_value(new ConfigOptionBool(false));
6890
6892 def->label =
L(
"Max XY Smoothing");
6893
6894 def->tooltip =
L(
"Maximum distance to move points in XY to try to achieve a smooth spiral. "
6895 "If expressed as a %, it will be computed over nozzle diameter.");
6896 def->sidetext =
L(
"mm or %");
6897 def->ratio_over = "nozzle_diameter";
6898 def->min = 0;
6899 def->max = 1000;
6900 def->max_literal = 10;
6902 def->set_default_value(new ConfigOptionFloatOrPercent(200, true));
6903
6904 def = this->
add(
"spiral_starting_flow_ratio",
coFloat);
6905 def->label =
L(
"Spiral starting flow ratio");
6906
6907 def->tooltip =
L(
"Sets the starting flow ratio while transitioning from the last bottom layer to the spiral. "
6908 "Normally the spiral transition scales the flow ratio from 0% to 100% during the first loop "
6909 "which can in some cases lead to under extrusion at the start of the spiral.");
6910 def->min = 0;
6911 def->max = 1;
6914
6915 def = this->
add(
"spiral_finishing_flow_ratio",
coFloat);
6916 def->label =
L(
"Spiral finishing flow ratio");
6917
6918 def->tooltip =
L(
"Sets the finishing flow ratio while ending the spiral. "
6919 "Normally the spiral transition scales the flow ratio from 100% to 0% during the last loop "
6920 "which can in some cases lead to under extrusion at the end of the spiral.");
6921 def->min = 0;
6922 def->max = 1;
6925
6926 def = this->
add(
"timelapse_type",
coEnum);
6927 def->label =
L(
"Timelapse");
6928 def->tooltip =
L(
"If smooth or traditional mode is selected, a timelapse video will be generated for each print. After each layer is printed, a snapshot is taken with the chamber camera. All of these snapshots are composed into a timelapse video when printing completes. If smooth mode is selected, the toolhead will move to the excess chute after each layer is printed and then take a snapshot. Since the melt filament may leak from the nozzle during the process of taking a snapshot, a prime tower is required for smooth mode to wipe the nozzle.");
6930 def->enum_values.emplace_back("0");
6931 def->enum_values.emplace_back("1");
6932 def->enum_labels.emplace_back(
L(
"Traditional"));
6933 def->enum_labels.emplace_back(
L(
"Smooth"));
6935 def->set_default_value(
new ConfigOptionEnum<TimelapseType>(
tlTraditional));
6936
6937
6938
6939
6940
6941
6942
6943 def = this->
add(
"farthest_point_timelapse",
coBool);
6944 def->label =
L(
"Farthest point timelapse");
6945 def->tooltip =
L(
"When enabled, the timelapse snapshot is taken at the farthest point from camera "
6946 "instead of traveling to the wipe tower or excess chute. "
6947 "Only effective in traditional timelapse mode on non-I3 printers.");
6949 def->set_default_value(new ConfigOptionBool(false));
6950
6951 def = this->
add(
"standby_temperature_delta",
coInt);
6952 def->label =
L(
"Temperature variation");
6953
6954 def->tooltip =
L(
"Temperature difference to be applied when an extruder is not active. "
6955 "The value is not used when 'idle_temperature' in filament settings "
6956 "is set to non-zero value.");
6957 def->sidetext =
L(u8
"\u2206\u2103" );
6958 def->min = -max_temp;
6959 def->max = max_temp;
6961 def->set_default_value(new ConfigOptionInt(-5));
6962
6964 def->label =
L(
"Preheat time");
6965 def->tooltip =
L(
"To reduce the waiting time after tool change, Orca can preheat the next tool while the current tool is still in use. "
6966 "This setting specifies the time in seconds to preheat the next tool. Orca will insert a M104 command to preheat the tool in advance.");
6967 def->sidetext =
L_CONTEXT(
"s",
"second");
6968 def->min = 0;
6969 def->max = 120;
6972
6973 def = this->
add(
"preheat_steps",
coInt);
6974 def->label =
L(
"Preheat steps");
6975 def->tooltip =
L(
"Insert multiple preheat commands (e.g. M104.1). Only useful for Prusa XL. For other printers, please set it to 1.");
6976
6977 def->min = 1;
6978 def->max = 10;
6980 def->set_default_value(new ConfigOptionInt(1));
6981
6982
6984 def->label =
L(
"File header G-code");
6985 def->tooltip =
L(
"G-code written at the very top of the output file, before any other content. "
6986 "Useful for adding metadata that printer firmware reads from the first lines of the file "
6987 "(e.g. estimated print time, filament usage). "
6988 "Supports placeholders like {print_time_total_sec}, {print_time_day}, {print_time_hour}, {print_time_minute}, {print_time_sec} and {used_filament_length}.");
6989 def->multiline = true;
6990 def->full_width = true;
6991 def->height = 8;
6994
6996 def->label =
L(
"Start G-code");
6997 def->tooltip =
L(
"G-code added when starting a print.");
6998 def->multiline = true;
6999 def->full_width = true;
7000 def->height = 12;
7002 def->set_default_value(
new ConfigOptionString(
"G28 ; home all axes\nG1 Z5 F5000 ; lift nozzle\n"));
7003
7005 def->label =
L(
"Start G-code");
7006 def->tooltip =
L(
"G-code added when the printer starts using this filament");
7007 def->multiline = true;
7008 def->full_width = true;
7009 def->height = 12;
7011 def->set_default_value(new ConfigOptionStrings { " " });
7012
7013 def = this->
add(
"single_extruder_multi_material",
coBool);
7014 def->label =
L(
"Single Extruder Multi Material");
7015 def->tooltip =
L(
"Use single nozzle to print multi filament.");
7017 def->set_default_value(new ConfigOptionBool(true));
7018
7019
7020
7021
7022
7023
7024
7026 def->label =
L(
"IDEX/IQEX Printer");
7027 def->tooltip =
L(
"Enable parallel printing for printers with multiple independent carriages (IDEX, IQEX, and similar).");
7029 def->set_default_value(new ConfigOptionBool(false));
7030
7031
7032
7033
7034
7035 def = this->
add(
"imex_firmware_managed_zones",
coBool);
7036 def->label =
L(
"Firmware-managed zones");
7037 def->tooltip =
L(
"When enabled, the slicer emits G-code with the primary zone's "
7038 "contents centered on bed origin (0,0). The printer firmware is "
7039 "responsible for placing copies/mirrors at each physical zone "
7040 "position. Enable only on printers whose firmware applies its own "
7041 "zone offsets in copy/mirror mode (e.g. RepRapFirmware IDEX "
7042 "duplication mode). Has no effect in Primary mode.");
7044 def->set_default_value(new ConfigOptionBool(false));
7045
7046 def = this->
add(
"imex_gantry_count",
coInt);
7047 def->label =
L(
"Gantry Count");
7048 def->tooltip =
L(
"Number of independent Y-axis gantries. 1 for IDEX/single-rail IQEX. 2 for dual-gantry systems (divides bed into rows).");
7049 def->min = 1;
7050 def->max = 2;
7052 def->set_default_value(new ConfigOptionInt(1));
7053
7054 def = this->
add(
"imex_tools_per_gantry",
coInt);
7055 def->label =
L(
"Tools per Gantry");
7056 def->tooltip =
L(
"Number of independent toolheads per gantry along X. 2 for IDEX-style.");
7057 def->min = 1;
7058 def->max = 4;
7060 def->set_default_value(new ConfigOptionInt(2));
7061
7062 def = this->
add(
"imex_tool_layout",
coEnum);
7063 def->label =
L(
"Tool 0 Position");
7064 def->tooltip =
L(
"Physical position on the bed where tool T0 (index 0) is located. "
7065 "Determines how tool indices map to bed zones. "
7066 "For single-gantry setups (IDEX) only left/right matters; "
7067 "for dual-gantry setups (IQEX) all four corners are selectable "
7068 "(front = lower Y / near the operator, rear = higher Y / back of machine).");
7071 def->enum_values.push_back("front-left");
7072 def->enum_values.push_back("front-right");
7073 def->enum_values.push_back("rear-left");
7074 def->enum_values.push_back("rear-right");
7075 def->enum_labels.push_back(
L(
"Front-left"));
7076 def->enum_labels.push_back(
L(
"Front-right"));
7077 def->enum_labels.push_back(
L(
"Rear-left"));
7078 def->enum_labels.push_back(
L(
"Rear-right"));
7080
7081 def = this->
add(
"imex_nozzle_clearance_x",
coFloat);
7082 def->label =
L(
"Nozzle Clearance X");
7083 def->tooltip =
L(
"Distance (mm) from the nozzle to the collision-side carriage edge in X. Used to calculate the width of the collision exclusion strip at each X boundary.");
7084 def->sidetext =
L(
"mm");
7085 def->min = 0;
7088
7089 def = this->
add(
"imex_nozzle_clearance_y",
coFloat);
7090 def->label =
L(
"Nozzle Clearance Y");
7091 def->tooltip =
L(
"Distance (mm) from the nozzle to the collision-side carriage edge in Y. Used to calculate the width of the collision exclusion strip at each Y boundary.");
7092 def->sidetext =
L(
"mm");
7093 def->min = 0;
7096
7097 def = this->
add(
"imex_carriage_margin",
coFloat);
7098 def->label =
L(
"Safety Margin");
7099 def->tooltip =
L(
"Non-blocking advisory clearance strip (mm) drawn inside the primary zone at each carriage boundary. Parts placed within this strip will still slice; it is a visual reminder to leave extra clearance near the zone edge.");
7100 def->sidetext =
L(
"mm");
7101 def->min = 0;
7102 def->max = 200;
7105
7106 def = this->
add(
"imex_viz_theme",
coEnum);
7107 def->label =
L(
"Visualization Theme");
7108 def->tooltip =
L(
"Color theme for IDEX/IQEX bed zone visualization. Choose a colorblind-friendly theme if needed.");
7111 def->enum_values.push_back("standard");
7112 def->enum_values.push_back("deuteranopia");
7113 def->enum_values.push_back("tritanopia");
7114 def->enum_values.push_back("high_contrast");
7115 def->enum_labels.push_back(
L(
"Standard"));
7116 def->enum_labels.push_back(
L(
"Deuteranopia / Protanopia (red-green)"));
7117 def->enum_labels.push_back(
L(
"Tritanopia (blue-yellow)"));
7118 def->enum_labels.push_back(
L(
"High Contrast"));
7120
7122 def->label =
L(
"IDEX/IQEX Print Mode");
7123 def->tooltip =
L(
"Name of the active IDEX/IQEX parallel print mode, or \"primary\" for single-carriage printing. Requires IDEX/IQEX Printer enabled in the Printer preset (Printer \u2192 Multimaterial \u2192 IDEX/IQEX Configuration).");
7126
7127 def = this->
add(
"imex_head_filament_map",
coString);
7128 def->label =
L(
"IDEX/IQEX head filament map");
7129 def->tooltip =
L(
"Per-plate override mapping physical heads to filament slots "
7130 "(1-based). Empty means each head uses the first filament that the "
7131 "printer's physical extruder map routes to it.");
7134
7136 def->label =
L(
"IDEX/IQEX Mode Names");
7137 def->tooltip =
L(
"Display names for each user-defined IDEX/IQEX parallel print mode.");
7139 def->set_default_value(new ConfigOptionStrings());
7140
7142 def->label =
L(
"IDEX/IQEX Mode Active Tools");
7143 def->tooltip =
L(
"Tool role assignments for each mode. Format: \"idx:P,idx:C,idx:M\" where P=Primary, C=Copy, M=Mirror (e.g. \"0:P,1:C,2:M,3:M\"). Managed by the IDEX/IQEX Modes editor in the Printer preset.");
7145 def->set_default_value(new ConfigOptionStrings());
7146
7148 def->label =
L(
"IDEX/IQEX Mode G-codes");
7149 def->tooltip =
L(
"G-code or macro call to inject at print start for each mode.");
7151 def->set_default_value(new ConfigOptionStrings());
7152
7153 def = this->
add(
"manual_filament_change",
coBool);
7154 def->label =
L(
"Manual Filament Change");
7155 def->tooltip =
L(
"Enable this option to omit the custom Change filament G-code only at the beginning of the print. "
7156 "The tool change command (e.g., T0) will be skipped throughout the entire print. "
7157 "This is useful for manual multi-material printing, where we use M600/PAUSE to trigger the manual filament change action.");
7159 def->set_default_value(new ConfigOptionBool(false));
7160
7161 def = this->
add(
"wipe_tower_type",
coEnum);
7162 def->label =
L(
"Wipe tower type");
7163 def->tooltip =
L(
"Choose the wipe tower implementation for multi-material prints. Type 1 is recommended for Bambu and Qidi printers with a filament cutter. Type 2 offers better compatibility with multi-tool and MMU printers and provide overall better compatibility.");
7165 def->enum_values.emplace_back("type1");
7166 def->enum_values.emplace_back("type2");
7167 def->enum_labels.emplace_back(
L(
"Type 1"));
7168 def->enum_labels.emplace_back(
L(
"Type 2"));
7171
7172 def = this->
add(
"purge_in_prime_tower",
coBool);
7173 def->label =
L(
"Purge in prime tower");
7174 def->tooltip =
L(
"Purge remaining filament into prime tower.");
7176 def->set_default_value(new ConfigOptionBool(true));
7177
7178 def = this->
add(
"enable_filament_ramming",
coBool);
7179 def->label =
L(
"Enable filament ramming");
7180 def->tooltip =
L(
"Enable filament ramming");
7182 def->set_default_value(new ConfigOptionBool(true));
7183
7184 def = this->
add(
"tool_change_on_wipe_tower",
coBool);
7185 def->label =
L(
"Tool change on wipe tower");
7186 def->tooltip =
L(
"Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). "
7187 "Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. "
7188 "By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, "
7189 "which can result in the Tx command being issued above the printed part. "
7190 "Enable this option if you want the tool change to always be issued above the wipe tower instead.");
7192 def->set_default_value(new ConfigOptionBool(false));
7193
7194 def = this->
add(
"wait_for_temp_on_wipe_tower",
coBool);
7195 def->label =
L(
"Wait for temperature on wipe tower");
7196 def->tooltip =
L(
"Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe "
7197 "tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on "
7198 "the tower instead of the model, and the travel overlaps with the heating. "
7199 "Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. "
7200 "The firmware or tool change macro must not wait for the temperature itself. "
7201 "When disabled, the temperature wait is issued right after the tool change command.");
7203 def->set_default_value(new ConfigOptionBool(false));
7204
7205
7206 def = this->
add(
"wipe_tower_no_sparse_layers",
coBool);
7207 def->label =
L(
"No sparse layers (beta)");
7208 def->tooltip =
L(
"If enabled, the wipe tower will not be printed on layers with no tool changes. "
7209 "On layers with a tool change, extruder will travel downward to print the wipe tower, "
7210 "so the tower ends up below the model and the toolhead has to reach down to it. "
7211 "Layouts where that would collide with an already printed object are rejected. "
7212 "Has no effect with smooth timelapse or clumping detection, which need a tower on every layer.");
7214 def->set_default_value(new ConfigOptionBool(false));
7215
7216 def = this->
add(
"wipe_tower_sparse_layers_combination",
coBool);
7217 def->label =
L(
"Combine sparse layers");
7218 def->tooltip =
L(
"If enabled, consecutive layers on which the prime tower has no filament change are printed as a single "
7219 "thicker tower layer instead of one thin layer each, the same way infill combination merges sparse infill. "
7220 "The merged layer is printed at the top of the run, at the height of everything it covers.\n\n"
7221 "Only whole layers are merged, and never past the maximum layer height of the nozzle printing the tower "
7222 "(three quarters of the nozzle diameter when that is left at 0). Two or more layers therefore have to fit "
7223 "under that limit before anything changes at all: at a 0.2 mm layer height under a 0.3 mm maximum nothing "
7224 "is merged, while at 0.1 mm three layers become one.\n\n"
7225 "Unlike \"No sparse layers\" the tower keeps following the model, so the toolhead never has to reach down to it. "
7226 "Has no effect with \"No sparse layers\", smooth timelapse or clumping detection, which need a tower on every layer.");
7228 def->set_default_value(new ConfigOptionBool(false));
7229
7230 def = this->
add(
"single_extruder_multi_material_priming",
coBool);
7231 def->label =
L(
"Prime all printing extruders");
7232 def->tooltip =
L(
"If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print.");
7234 def->set_default_value(new ConfigOptionBool(false));
7235
7236 def = this->
add(
"toolchange_ordering",
coEnum);
7237 def->label =
L(
"Toolchange ordering");
7238 def->category =
L(
"Advanced");
7240 "Determines the order of tool changes on each layer.\n"
7241 "- Default: Starts with the last used extruder to minimize tool changes.\n"
7242 "- Cyclic: Uses a fixed tool sequence each layer. This sacrifices speed for better surface quality, as the extra toolchanges allow layers more time to cool."
7243 );
7246 def->enum_values.emplace_back("default");
7247 def->enum_values.emplace_back("cyclic");
7248 def->enum_labels.emplace_back(
L(
"Default"));
7249 def->enum_labels.emplace_back(
L(
"Cyclic"));
7251
7252 def = this->
add(
"toolchange_cyclic_order",
coString);
7253 def->label =
L(
"Cyclic order");
7254 def->category =
L(
"Advanced");
7256 "Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n"
7257 "Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n"
7258 "Leave empty to cycle through the filaments in ascending order."
7259 );
7262
7263 def = this->
add(
"toolchange_cyclic_first_layer",
coBool);
7264 def->label =
L(
"Apply cyclic order to first layer");
7265 def->category =
L(
"Advanced");
7267 "Applies the cyclic toolchange order to the first layer as well.\n"
7268 "By default this is disabled, because the first layer is instead ordered for the best bed "
7269 "adhesion: filaments that print small, fragile first-layer features are printed last, so the "
7270 "following tool changes and travel moves are less likely to knock those weakly anchored parts "
7271 "loose. This first-layer order also honors a custom first layer filament sequence when one is set. "
7272 "The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply "
7273 "to the first layer, which is printed slowly and hot for adhesion.\n"
7274 "Enable this only if you need the exact same tool sequence on every layer, including the first, at "
7275 "the cost of that adhesion optimization."
7276 );
7278 def->set_default_value(new ConfigOptionBool(false));
7279
7280 def = this->
add(
"slice_closing_radius",
coFloat);
7281 def->label =
L(
"Slice gap closing radius");
7282 def->category =
L(
"Quality");
7283 def->tooltip =
L(
"Cracks smaller than 2x gap closing radius are being filled during the triangle mesh slicing. "
7284 "The gap closing operation may reduce the final print resolution, therefore it is advisable to keep the value reasonably low.");
7285 def->sidetext =
L(
"mm");
7286 def->min = 0;
7289
7290 def = this->
add(
"slicing_mode",
coEnum);
7291 def->label =
L(
"Slicing Mode");
7292 def->category =
L(
"Others");
7293 def->tooltip =
L(
"Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model.");
7295 def->enum_values.push_back("regular");
7296 def->enum_values.push_back("even_odd");
7297 def->enum_values.push_back("close_holes");
7298 def->enum_labels.push_back(
L(
"Regular"));
7299 def->enum_labels.push_back(
L(
"Even-odd"));
7300 def->enum_labels.push_back(
L(
"Close holes"));
7303
7305 def->label =
L(
"Z offset");
7306 def->tooltip =
L(
"This value will be added (or subtracted) from all the Z coordinates "
7307 "in the output G-code. It is used to compensate for bad Z endstop position: "
7308 "for example, if your endstop zero actually leaves the nozzle 0.3mm far "
7309 "from the print bed, set this to -0.3 (or fix your endstop).");
7310 def->sidetext =
L(
"mm");
7313
7314 def = this->
add(
"enable_support",
coBool);
7315
7316 def->label =
L(
"Enable support");
7317 def->category =
L(
"Support");
7318 def->tooltip =
L(
"This enables support generation.");
7319 def->set_default_value(new ConfigOptionBool(false));
7320
7321 def = this->
add(
"support_type",
coEnum);
7322 def->label =
L(
"Type");
7323 def->category =
L(
"Support");
7324 def->tooltip =
L(
"Normal (auto) and Tree (auto) are used to generate support automatically. "
7325 "If Normal (manual) or Tree (manual) is selected, only support enforcers are generated.");
7327 def->enum_values.push_back("normal(auto)");
7328 def->enum_values.push_back("tree(auto)");
7329 def->enum_values.push_back("normal(manual)");
7330 def->enum_values.push_back("tree(manual)");
7331 def->enum_labels.push_back(
L(
"Normal (auto)"));
7332 def->enum_labels.push_back(
L(
"Tree (auto)"));
7333 def->enum_labels.push_back(
L(
"Normal (manual)"));
7334 def->enum_labels.push_back(
L(
"Tree (manual)"));
7336 def->set_default_value(
new ConfigOptionEnum<SupportType>(
stNormalAuto));
7337
7338 def = this->
add(
"support_object_xy_distance",
coFloat);
7339 def->label =
L(
"Support/object XY distance");
7340 def->category =
L(
"Support");
7341 def->tooltip =
L(
"This controls the XY separation between an object and its support.");
7342 def->sidetext =
L(
"mm");
7343 def->min = 0;
7344 def->max = 10;
7346
7348
7349 def = this->
add(
"support_object_first_layer_gap",
coFloat);
7350 def->label =
L(
"Support/object first layer gap");
7351 def->category =
L(
"Support");
7352 def->tooltip =
L(
"XY separation between an object and its support at the first layer.");
7353 def->sidetext =
L(
"mm");
7354 def->min = 0;
7355 def->max = 10;
7357
7359
7361 def->label =
L(
"Pattern angle");
7362 def->category =
L(
"Support");
7363 def->tooltip =
L(
"Use this setting to rotate the support pattern on the horizontal plane.");
7364 def->sidetext = u8"°";
7365 def->min = 0;
7366 def->max = 359;
7369
7370 def = this->
add(
"support_on_build_plate_only",
coBool);
7371 def->label =
L(
"On build plate only");
7372 def->category =
L(
"Support");
7373 def->tooltip =
L(
"This setting only generates supports that begin on the build plate.");
7375 def->set_default_value(new ConfigOptionBool(false));
7376
7377
7378 def = this->
add(
"support_critical_regions_only",
coBool);
7379 def->label =
L(
"Support critical regions only");
7380 def->category =
L(
"Support");
7381 def->tooltip =
L(
"Only create support for critical regions including sharp tail, cantilever, etc.");
7383 def->set_default_value(new ConfigOptionBool(false));
7384
7385 def = this->
add(
"support_remove_small_overhang",
coBool);
7386 def->label =
L(
"Ignore small overhangs");
7387 def->category =
L(
"Support");
7388 def->tooltip =
L(
"Ignore small overhangs that possibly don't require support.");
7390 def->set_default_value(new ConfigOptionBool(true));
7391
7392
7393
7394 def = this->
add(
"support_top_z_distance",
coFloat);
7395
7396 def->label =
L(
"Top Z distance");
7397 def->min = 0;
7398 def->category =
L(
"Support");
7399 def->tooltip =
L(
"Z gap between the support\'s top and object.");
7400 def->sidetext =
L(
"mm");
7401
7402#if 0
7403
7404
7405
7406
7407
7408
7409#endif
7412
7413 def = this->
add(
"support_bottom_z_distance",
coFloat);
7414 def->label =
L(
"Bottom Z distance");
7415 def->category =
L(
"Support");
7416 def->tooltip =
L(
"Z gap between the object and the support bottom. If Support Top Z Distance is 0 and the bottom has interface layers, this value is ignored and the support is printed in direct contact with the object (no gap).");
7417 def->sidetext =
L(
"mm");
7418 def->min = 0;
7421
7422 def = this->
add(
"enforce_support_layers",
coInt);
7423
7424 def->category =
L(
"Support");
7425
7426
7427
7428
7429 def->sidetext =
L(
"layers");
7430
7431 def->min = 0;
7432 def->max = 5000;
7434 def->set_default_value(new ConfigOptionInt(0));
7435
7436 def = this->
add(
"support_filament",
coInt);
7438 def->label =
L(
"Support/raft base");
7439 def->category =
L(
"Support");
7440 def->tooltip =
L(
"Filament to print support base and raft.\n\"Default\" means no specific filament for support and current filament is used.");
7441 def->min = 0;
7443 def->set_default_value(new ConfigOptionInt(0));
7444
7445 def = this->
add(
"support_interface_not_for_body",
coBool);
7446 def->label =
L(
"Avoid interface filament for base");
7447 def->category =
L(
"Support");
7448 def->tooltip =
L(
"Avoid using support interface filament to print support base if possible.");
7450 def->set_default_value(new ConfigOptionBool(true));
7451
7453 def->label =
L(
"Support");
7454 def->category =
L(
"Quality");
7455 def->tooltip =
L(
"Line width of support. If expressed as a %, it will be computed over the nozzle diameter.");
7456 def->sidetext =
L(
"mm or %");
7457 def->ratio_over = "nozzle_diameter";
7458 def->min = 0;
7459 def->max = 1000;
7460 def->max_literal = 10;
7462 def->set_default_value(new ConfigOptionFloatOrPercent(0., false));
7463
7464 def = this->
add(
"support_interface_loop_pattern",
coBool);
7465 def->label =
L(
"Loop pattern interface");
7466 def->category =
L(
"Support");
7467 def->tooltip =
L(
"This covers the top contact layer of the supports with loops. It is disabled by default.");
7469 def->set_default_value(new ConfigOptionBool(false));
7470
7471 def = this->
add(
"support_interface_filament",
coInt);
7473 def->label =
L(
"Support/raft interface");
7474 def->category =
L(
"Support");
7475 def->tooltip =
L(
"Filament to print support interface.\n\"Default\" means no specific filament for support interface and current filament is used.");
7476 def->min = 0;
7477
7479 def->set_default_value(new ConfigOptionInt(0));
7480
7481 auto support_interface_top_layers = def = this->
add(
"support_interface_top_layers",
coInt);
7483 def->label =
L(
"Top interface layers");
7484 def->category =
L(
"Support");
7485 def->tooltip =
L(
"This is the number of top interface layers.");
7486 def->sidetext =
L(
"layers");
7487 def->min = 0;
7488 def->enum_values.push_back("0");
7489 def->enum_values.push_back("1");
7490 def->enum_values.push_back("2");
7491 def->enum_values.push_back("3");
7492 def->enum_labels.push_back("0");
7493 def->enum_labels.push_back("1");
7494 def->enum_labels.push_back("2");
7495 def->enum_labels.push_back("3");
7497 def->set_default_value(new ConfigOptionInt(3));
7498
7499 def = this->
add(
"support_interface_bottom_layers",
coInt);
7501 def->label =
L(
"Bottom interface layers");
7502 def->category =
L(
"Support");
7503 def->tooltip =
L(
"Number of bottom interface layers.");
7504 def->sidetext =
L(
"layers");
7505 def->min = -1;
7506 def->enum_values.push_back("-1");
7507 append(def->enum_values, support_interface_top_layers->enum_values);
7508 def->enum_labels.push_back(
L(
"Same as top"));
7509 append(def->enum_labels, support_interface_top_layers->enum_labels);
7511 def->set_default_value(new ConfigOptionInt(0));
7512
7513 def = this->
add(
"support_interface_spacing",
coFloat);
7514 def->label =
L(
"Top interface spacing");
7515 def->category =
L(
"Support");
7516 def->tooltip =
L(
"Spacing of interface lines. Zero means solid interface.\n"
7517 "Force using solid interface when support ironing is enabled.");
7518 def->sidetext =
L(
"mm");
7519 def->min = 0;
7522
7523
7524 def = this->
add(
"support_bottom_interface_spacing",
coFloat);
7525 def->label =
L(
"Bottom interface spacing");
7526 def->category =
L(
"Support");
7527 def->tooltip =
L(
"This is the spacing of bottom interface lines. 0 means solid interface.");
7528 def->sidetext =
L(
"mm");
7529 def->min = 0;
7532
7533 def = this->
add(
"support_interface_speed",
coFloats);
7534 def->label =
L(
"Support interface");
7535 def->category =
L(
"Speed");
7536 def->tooltip =
L(
"This is the speed for support interfaces.");
7537 def->sidetext =
L(
"mm/s");
7538 def->min = 1;
7540 def->nullable = true;
7542
7543 def = this->
add(
"support_base_pattern",
coEnum);
7544 def->label =
L(
"Base pattern");
7545 def->category =
L(
"Support");
7546 def->tooltip =
L(
"Line pattern of support.\n\n"
7547 "The Default option for Tree supports is Hollow, which means no base pattern. "
7548 "For other support types, the Default option is the Rectilinear pattern.\n\n"
7549 "NOTE: For Organic supports, the two walls are supported only with the Hollow/Default base pattern. "
7550 "The Lightning base pattern is supported only by Tree Slim/Strong/Hybrid supports. "
7551 "For the other support types, the Rectilinear will be used instead of Lightning.");
7553 def->enum_values.push_back("default");
7554 def->enum_values.push_back("rectilinear");
7555 def->enum_values.push_back("rectilinear-grid");
7556 def->enum_values.push_back("honeycomb");
7557 def->enum_values.push_back("lightning");
7558 def->enum_values.push_back("hollow");
7559 def->enum_labels.push_back(
L(
"Default"));
7560 def->enum_labels.push_back(
L(
"Rectilinear"));
7561 def->enum_labels.push_back(
L(
"Rectilinear grid"));
7562 def->enum_labels.push_back(
L(
"Honeycomb"));
7563 def->enum_labels.push_back(
L(
"Lightning"));
7564 def->enum_labels.push_back(
L(
"Hollow"));
7566 def->set_default_value(
new ConfigOptionEnum<SupportMaterialPattern>(
smpDefault));
7567
7568 def = this->
add(
"support_interface_pattern",
coEnum);
7569 def->label =
L(
"Interface pattern");
7570 def->category =
L(
"Support");
7571 def->tooltip =
L(
"This is the line pattern for support interfaces. The default pattern for non-soluble support interfaces is Rectilinear while the default pattern for soluble support interfaces is Concentric.");
7573 def->enum_values.push_back("auto");
7574 def->enum_values.push_back("rectilinear");
7575 def->enum_values.push_back("concentric");
7576 def->enum_values.push_back("spiralinset");
7577 def->enum_values.push_back("rectilinear_interlaced");
7578 def->enum_values.push_back("grid");
7579 def->enum_labels.push_back(
L(
"Default"));
7580 def->enum_labels.push_back(
L(
"Rectilinear"));
7581 def->enum_labels.push_back(
L(
"Concentric"));
7582 def->enum_labels.push_back(
L(
"Spiral Inset"));
7583 def->enum_labels.push_back(
L(
"Rectilinear Interlaced"));
7584 def->enum_labels.push_back(
L(
"Grid"));
7586 def->set_default_value(
new ConfigOptionEnum<SupportMaterialInterfacePattern>(
smipAuto));
7587
7588 def = this->
add(
"support_base_pattern_spacing",
coFloat);
7589 def->label =
L(
"Base pattern spacing");
7590 def->category =
L(
"Support");
7591 def->tooltip =
L(
"This determines the spacing between support lines.");
7592 def->sidetext =
L(
"mm");
7593 def->min = 0;
7596
7597 def = this->
add(
"support_expansion",
coFloat);
7598 def->label =
L(
"Normal support expansion");
7599 def->category =
L(
"Support");
7600 def->tooltip =
L(
"Expand (+) or shrink (-) the horizontal span of normal support.");
7601 def->sidetext =
L(
"mm");
7604
7606 def->label =
L(
"Support");
7607 def->category =
L(
"Speed");
7608 def->tooltip =
L(
"This is the speed for support.");
7609 def->sidetext =
L(
"mm/s");
7610 def->min = 1;
7612 def->nullable = true;
7614
7615 def = this->
add(
"support_style",
coEnum);
7616 def->label =
L(
"Style");
7617 def->category =
L(
"Support");
7618 def->tooltip =
L(
"Style and shape of the support. For normal support, projecting the supports into a regular grid "
7619 "will create more stable supports (default), while snug support towers will save material and reduce "
7620 "object scarring.\n"
7621 "For tree support, slim and organic style will merge branches more aggressively and save "
7622 "a lot of material (default organic), while hybrid style will create similar structure to normal support "
7623 "under large flat overhangs.");
7625 def->enum_values.push_back("default");
7626 def->enum_values.push_back("grid");
7627 def->enum_values.push_back("snug");
7628 def->enum_values.push_back("organic");
7629 def->enum_values.push_back("tree_slim");
7630 def->enum_values.push_back("tree_strong");
7631 def->enum_values.push_back("tree_hybrid");
7632 def->enum_labels.push_back(
L(
"Default (Grid/Organic)"));
7633 def->enum_labels.push_back(
L(
"Grid"));
7634 def->enum_labels.push_back(
L(
"Snug"));
7635 def->enum_labels.push_back(
L(
"Organic"));
7636 def->enum_labels.push_back(
L(
"Tree Slim"));
7637 def->enum_labels.push_back(
L(
"Tree Strong"));
7638 def->enum_labels.push_back(
L(
"Tree Hybrid"));
7639
7641 def->set_default_value(
new ConfigOptionEnum<SupportMaterialStyle>(
smsDefault));
7642
7643 def = this->
add(
"independent_support_layer_height",
coBool);
7644 def->label =
L(
"Independent support layer height");
7645 def->category =
L(
"Support");
7646 def->tooltip =
L(
"Support layer uses layer height independent with object layer. This is to support customizing Z-gap and save print time. "
7647 "This option will be invalid when the prime tower is enabled.");
7649 def->set_default_value(new ConfigOptionBool(true));
7650
7651 def = this->
add(
"support_threshold_angle",
coInt);
7652 def->label =
L(
"Threshold angle");
7653 def->category =
L(
"Support");
7654 def->tooltip =
L(
"Support will be generated for overhangs whose slope angle is below the threshold. The smaller this value is, the steeper the overhang that can be printed without support.\nNote: If set to 0, normal supports use the Threshold overlap instead, while tree supports fall back to a default value of 30.");
7655 def->sidetext = u8"°";
7656 def->min = 0;
7657 def->max = 90;
7659 def->set_default_value(new ConfigOptionInt(30));
7660
7662 def->label =
L(
"Threshold overlap");
7663 def->category =
L(
"Support");
7664 def->tooltip =
L(
"If threshold angle is zero, support will be generated for overhangs whose overlap is below the threshold. The smaller this value is, the steeper the overhang that can be printed without support.");
7665 def->sidetext =
L(
"mm or %");
7666 def->min = 0;
7667 def->max = 100;
7668 def->max_literal = 0.5;
7670 def->set_default_value(new ConfigOptionFloatOrPercent(50., true));
7671
7672 def = this->
add(
"build_plate_tilt_x",
coFloat);
7673 def->label =
L(
"Build plate tilt X");
7674 def->category =
L(
"Support");
7675 def->tooltip =
L(
"Tilt angle of the build plate along the X axis. "
7676 "A positive value tilts the plate so the +X side is higher, shifting gravity toward -X and increasing overhangs on the +X side. "
7677 "A negative value tilts the -X side higher. Set to 0 for no X-axis tilt. "
7678 "In belt printer mode, this is automatically synced to the belt angle.");
7679 def->sidetext = u8"\u00B0";
7680 def->min = -89;
7681 def->max = 89;
7684
7685 def = this->
add(
"build_plate_tilt_y",
coFloat);
7686 def->label =
L(
"Build plate tilt Y");
7687 def->category =
L(
"Support");
7688 def->tooltip =
L(
"Tilt angle of the build plate along the Y axis. "
7689 "A positive value tilts the plate so the +Y side is higher, shifting gravity toward -Y and increasing overhangs on the +Y side. "
7690 "A negative value tilts the -Y side higher. Set to 0 for no Y-axis tilt.");
7691 def->sidetext = u8"\u00B0";
7692 def->min = -89;
7693 def->max = 89;
7696
7697 def = this->
add(
"belt_printer",
coBool);
7698 def->label =
L(
"Enable belt printing");
7699 def->category =
L(
"Printable space");
7700 def->tooltip =
L(
"Enable belt printer mode. Belt printers use a conveyor belt as the build surface, "
7701 "tilted at an angle (typically 45 degrees). The slicer will rotate the slicing plane "
7702 "and transform G-code coordinates for the tilted build surface.");
7704 def->set_default_value(new ConfigOptionBool(false));
7705
7706 def = this->
add(
"belt_printer_infinite_y",
coBool);
7707 def->label =
L(
"Infinite Y axis");
7708 def->category =
L(
"Printable space");
7709 def->tooltip =
L(
"Enable infinite Y axis for belt printers. "
7710 "When enabled, the Y axis build volume limit is effectively removed, "
7711 "allowing objects of any length to be printed along the belt direction.");
7713 def->set_default_value(new ConfigOptionBool(true));
7714
7715
7716
7717
7718 def = this->
add(
"belt_slice_rotation",
coEnum);
7719 def->label =
L(
"Belt tilt axis");
7720 def->category =
L(
"Printable space");
7721 def->tooltip =
L(
"Axis the mesh is rotated about before slicing. This is the belt "
7722 "printer's tilt: an isometric (no distortion) rotation that also "
7723 "drives bed rendering and support gravity tilt, and that the G-code "
7724 "back-transform inverts before the machine-frame shear/scale and remap. "
7725 "X is the typical gantry tilt (belt travels along Y).");
7727 def->enum_values = {"none", "x", "y", "z"};
7728 def->enum_labels = {
L(
"None"),
L(
"X"),
L(
"Y"),
L(
"Z")};
7731
7732 def = this->
add(
"belt_slice_rotation_angle",
coFloat);
7733 def->label =
L(
"Belt tilt angle");
7734 def->category =
L(
"Printable space");
7735 def->tooltip =
L(
"Tilt angle of the belt surface, in degrees. Most belt printers use "
7736 "45°. Positive values rotate counter-clockwise looking down the "
7737 "positive tilt axis; the magnitude is also the physical belt tilt "
7738 "used for bed rendering and support gravity.");
7739 def->sidetext =
L(
"°");
7740 def->min = -180.;
7741 def->max = 180.;
7744
7745 def = this->
add(
"belt_frame_tilt_decouple",
coBool);
7746 def->label =
L(
"Decouple machine-frame tilt");
7747 def->category =
L(
"Printable space");
7748 def->tooltip =
L(
"Expert override: set the machine-frame (G-code shear/scale) tilt angle "
7749 "independently of the pre-slice rotation angle. When disabled, the "
7750 "machine-frame transform is derived from the belt tilt angle, so a single "
7751 "angle drives both stages. Enable only to compensate for a machine whose "
7752 "physical gantry tilt differs from the slicing rotation.");
7754 def->set_default_value(new ConfigOptionBool(false));
7755
7756 def = this->
add(
"belt_frame_tilt_angle",
coFloat);
7757 def->label =
L(
"Machine-frame tilt angle");
7758 def->category =
L(
"Printable space");
7759 def->tooltip =
L(
"Tilt angle (degrees) used to derive the machine-frame shear (cot) and "
7760 "scale (1/|sin|) applied to G-code. Only used when 'Decouple machine-frame "
7761 "tilt' is enabled; otherwise the belt tilt angle is used.");
7762 def->sidetext =
L(
"°");
7763 def->min = -89.9;
7764 def->max = 89.9;
7767
7768
7769
7770 auto add_belt_remap = [this](const char *key, const std::string &label, const std::string &tooltip,
7773 def->label = label;
7774 def->category =
L(
"Printable space");
7775 def->tooltip = tooltip;
7777 def->enum_values = {"pos_x", "pos_y", "pos_z", "neg_x", "neg_y", "neg_z", "rev_x", "rev_y", "rev_z"};
7778 def->enum_labels = {
L(
"+X"),
L(
"+Y"),
L(
"+Z"),
L(
"-X"),
L(
"-Y"),
L(
"-Z"),
L(
"Rev X"),
L(
"Rev Y"),
L(
"Rev Z")};
7779 def->mode = mode;
7780 def->set_default_value(new ConfigOptionEnum<RemapAxis>(default_axis));
7781 };
7782 add_belt_remap(
"gcode_remap_x",
L(
"G-code remap X"),
7783 L(
"Which slicing axis maps to machine X in G-code output. Applied AFTER slicing, during G-code generation."),
7785 add_belt_remap(
"gcode_remap_y",
L(
"G-code remap Y"),
7786 L(
"Which slicing axis maps to machine Y in G-code output. Applied AFTER slicing, during G-code generation."),
7788 add_belt_remap(
"gcode_remap_z",
L(
"G-code remap Z"),
7789 L(
"Which slicing axis maps to machine Z in G-code output. Applied AFTER slicing, during G-code generation."),
7791
7792
7793
7794
7795
7796
7797 def = this->
add(
"belt_support_floor_offset",
coFloat);
7798 def->label =
L(
"Support Floor Z offset");
7799 def->category =
L(
"Printable space");
7800 def->tooltip =
L(
"Shifts the computed belt floor up or down (mm). Negative values lower the floor, allowing more supports to survive. Use this to diagnose belt floor formula issues.");
7801 def->sidetext =
L(
"mm");
7802 def->min = -500;
7803 def->max = 500;
7806
7807 def = this->
add(
"enable_belt_purge_tower",
coBool);
7808 def->label =
L(
"Enable belt purge tower");
7809 def->category =
L(
"Multimaterial");
7810 def->tooltip =
L(
"Belt-printer replacement for the wipe/prime tower. When enabled on a belt "
7811 "printer, a purge prism is automatically generated next to the printed parts "
7812 "and filament-change purging is routed into it (the classic wipe tower cannot "
7813 "be used on belt printers because its G-code bypasses the belt transform). "
7814 "Only available on belt printers.");
7816 def->set_default_value(new ConfigOptionBool(false));
7817
7818 def = this->
add(
"belt_purge_tower_width",
coFloat);
7819 def->label =
L(
"Belt purge tower width");
7820 def->category =
L(
"Printable space");
7821 def->tooltip =
L(
"Width (machine X, across the belt) of the purge prism that is automatically "
7822 "generated on belt printers when the belt purge tower is enabled and multiple "
7823 "filaments are used. Filament-change purging is routed into this prism's "
7824 "extrusions instead of a classic wipe tower. Its height is computed "
7825 "automatically from the worst-case purge volume per layer: a wider prism "
7826 "results in a shorter one.");
7827 def->sidetext =
L(
"mm");
7828 def->min = 1.;
7831
7832 def = this->
add(
"tree_support_branch_angle",
coFloat);
7833 def->label =
L(
"Tree support branch angle");
7834 def->category =
L(
"Support");
7835 def->tooltip =
L(
"This setting determines the maximum overhang angle that the branches of tree support are allowed to make. "
7836 "If the angle is increased, the branches can be printed more horizontally, allowing them to reach farther.");
7837 def->sidetext = u8"°";
7838 def->min = 0;
7839 def->max = 60;
7842
7843 def = this->
add(
"tree_support_branch_angle_organic",
coFloat);
7844 def->label =
L(
"Tree support branch angle");
7845 def->category =
L(
"Support");
7846 def->tooltip =
L(
"This setting determines the maximum overhang angle that the branches of tree support are allowed to make. "
7847 "If the angle is increased, the branches can be printed more horizontally, allowing them to reach farther.");
7848 def->sidetext = u8"°";
7849 def->min = 0;
7850 def->max = 60;
7853
7854 def = this->
add(
"tree_support_angle_slow",
coFloat);
7855 def->label =
L(
"Preferred Branch Angle");
7856 def->category =
L(
"Support");
7857
7858 def->tooltip =
L(
"The preferred angle of the branches, when they do not have to avoid the model. "
7859 "Use a lower angle to make them more vertical and more stable. Use a higher angle for branches to merge faster.");
7860 def->sidetext = u8"°";
7861 def->min = 10;
7862 def->max = 85;
7865
7866 def = this->
add(
"tree_support_branch_distance",
coFloat);
7867 def->label =
L(
"Tree support branch distance");
7868 def->category =
L(
"Support");
7869 def->tooltip =
L(
"This setting determines the distance between neighboring tree support nodes.");
7870 def->sidetext =
L(
"mm");
7871 def->min = 1.0;
7872 def->max = 10;
7875
7876 def = this->
add(
"tree_support_branch_distance_organic",
coFloat);
7877 def->label =
L(
"Tree support branch distance");
7878 def->category =
L(
"Support");
7879 def->tooltip =
L(
"This setting determines the distance between neighboring tree support nodes.");
7880 def->sidetext =
L(
"mm");
7881 def->min = 1.0;
7882 def->max = 10;
7885
7887 def->label =
L(
"Branch Density");
7888 def->category =
L(
"Support");
7889
7890 def->tooltip =
L(
"Adjusts the density of the support structure used to generate the tips of the branches. "
7891 "A higher value results in better overhangs but the supports are harder to remove, "
7892 "thus it is recommended to enable top support interfaces instead of a high branch density value "
7893 "if dense interfaces are needed.");
7894 def->sidetext = "%";
7895 def->min = 5;
7896 def->max_literal = 35;
7898 def->set_default_value(new ConfigOptionPercent(30));
7899
7900 def = this->
add(
"tree_support_auto_brim",
coBool);
7901 def->label =
L(
"Auto brim width");
7902 def->category =
L(
"Quality");
7903 def->tooltip =
L(
"Enabling this option means the width of the brim for tree support will be automatically calculated.");
7904 def->set_default_value(new ConfigOptionBool(1));
7905
7906 def = this->
add(
"tree_support_brim_width",
coFloat);
7907 def->label =
L(
"Tree support brim width");
7908 def->category =
L(
"Quality");
7909 def->min = 0.0;
7910 def->tooltip =
L(
"Distance from tree branch to the outermost brim line.");
7912
7913 def = this->
add(
"tree_support_tip_diameter",
coFloat);
7914 def->label =
L(
"Tip Diameter");
7915 def->category =
L(
"Support");
7916
7917 def->tooltip =
L(
"Branch tip diameter for organic supports.");
7918 def->sidetext =
L(
"mm");
7919 def->min = 0.1f;
7920 def->max = 100.f;
7923
7924 def = this->
add(
"tree_support_branch_diameter",
coFloat);
7925 def->label =
L(
"Tree support branch diameter");
7926 def->category =
L(
"Support");
7927 def->tooltip =
L(
"This setting determines the initial diameter of support nodes.");
7928 def->sidetext =
L(
"mm");
7929 def->min = 1.0;
7930 def->max = 10;
7933
7934 def = this->
add(
"tree_support_branch_diameter_angle",
coFloat);
7935
7936 def->label =
L(
"Branch Diameter Angle");
7937 def->category =
L(
"Support");
7938
7939 def->tooltip =
L(
"The angle of the branches' diameter as they gradually become thicker towards the bottom. "
7940 "An angle of 0 will cause the branches to have uniform thickness over their length. "
7941 "A bit of an angle can increase stability of the organic support.");
7942 def->sidetext = u8"°";
7943 def->min = 0;
7944 def->max = 15;
7947
7948 def = this->
add(
"tree_support_branch_diameter_organic",
coFloat);
7949 def->label =
L(
"Tree support branch diameter");
7950 def->category =
L(
"Support");
7951 def->tooltip =
L(
"This setting determines the initial diameter of support nodes.");
7952 def->sidetext =
L(
"mm");
7953 def->min = 1.0;
7954 def->max = 10;
7957
7958 def = this->
add(
"tree_support_wall_count",
coInt);
7959 def->label =
L(
"Support wall loops");
7960 def->category =
L(
"Support");
7961 def->tooltip =
L(
"This setting specifies the count of support walls in the range of [0,2]. 0 means auto.");
7962 def->min = 0;
7963 def->max = 2;
7965 def->set_default_value(new ConfigOptionInt(0));
7966
7967 def = this->
add(
"tree_support_with_infill",
coBool);
7968 def->label =
L(
"Tree support with infill");
7969 def->category =
L(
"Support");
7970 def->tooltip =
L(
"This setting specifies whether to add infill inside large hollows of tree support.");
7972 def->set_default_value(new ConfigOptionBool(false));
7973
7974 def = this->
add(
"support_ironing",
coBool);
7975 def->label =
L(
"Ironing Support Interface");
7976 def->category =
L(
"Support");
7977 def->tooltip =
L(
"Ironing is using small flow to print on same height of support interface again to make it more smooth. "
7978 "This setting controls whether support interface being ironed. When enabled, support interface will be extruded as solid too.");
7980 def->set_default_value(new ConfigOptionBool(false));
7981
7982 def = this->
add(
"support_ironing_pattern",
coEnum);
7983 def->label =
L(
"Support Ironing Pattern");
7984 def->tooltip =
L(
"The pattern that will be used when ironing.");
7985 def->category =
L(
"Support");
7987 def->enum_values.push_back("rectilinear");
7988 def->enum_values.push_back("concentric");
7989 def->enum_labels.push_back(
L(
"Rectilinear"));
7990 def->enum_labels.push_back(
L(
"Concentric"));
7992 def->set_default_value(
new ConfigOptionEnum<InfillPattern>(
ipRectilinear));
7993
7995 def->label =
L(
"Support Ironing flow");
7996 def->category =
L(
"Support");
7997 def->tooltip =
L(
"The amount of material to extrude during ironing. Relative to flow of normal support interface layer height. "
7998 "Too high value results in overextrusion on the surface.");
7999 def->sidetext = "%";
8000 def->ratio_over = "layer_height";
8001 def->min = 0;
8002 def->max = 100;
8004 def->set_default_value(new ConfigOptionPercent(10));
8005
8006 def = this->
add(
"support_ironing_spacing",
coFloat);
8007 def->label =
L(
"Support Ironing line spacing");
8008 def->category =
L(
"Support");
8009 def->tooltip =
L(
"This is the distance between the lines used for ironing.");
8010 def->sidetext =
L(
"mm");
8011 def->min = 0;
8012 def->max = 1;
8015
8016 def = this->
add(
"activate_chamber_temp_control",
coBools);
8017 def->label =
L(
"Activate temperature control");
8018 def->tooltip =
L(
"Enable this option for automated chamber temperature control. "
8019 "This option activates the emitting of an M191 command before the \"machine_start_gcode\"\n which sets the chamber temperature and waits until it is reached. "
8020 "In addition, it emits an M141 command at the end of the print to turn off the chamber heater, if present.\n\n"
8021 "This option relies on the firmware supporting the M191 and M141 commands either via macros or natively and is usually used when an active chamber heater is installed.");
8024
8025 def = this->
add(
"chamber_temperature",
coInts);
8026 def->label =
L(
"Chamber temperature");
8027 def->tooltip =
L(
"For high-temperature materials like ABS, ASA, PC, and PA, a higher chamber temperature can help "
8028 "suppress or reduce warping and potentially lead to higher interlayer bonding strength. "
8029 "However, at the same time, a higher chamber temperature will reduce the efficiency of air "
8030 "filtration for ABS and ASA.\n\n"
8031 "For PLA, PETG, TPU, PVA, and other low-temperature materials, this option should be disabled "
8032 "(set to 0) as the chamber temperature should be low to avoid extruder clogging caused by "
8033 "material softening at the heat break.\n\n"
8034 "If enabled, this parameter also sets a G-code variable named chamber_temperature, which can be "
8035 "used to pass the desired chamber temperature to your print start macro, or a heat soak macro "
8036 "like this: PRINT_START (other variables) CHAMBER_TEMP=[chamber_temperature]. "
8037 "This may be useful if your printer does not support M141/M191 commands, or if you desire "
8038 "to handle heat soaking in the print start macro if no active chamber heater is installed."
8039 );
8040 def->sidetext =
L(u8
"\u2103" );
8041 def->full_label =
L(
"Chamber temperature");
8042 def->min = 0;
8043 def->max = max_temp;
8045
8046 def = this->
add(
"chamber_minimal_temperature",
coInts);
8047 def->label =
L(
"Minimal");
8048 def->tooltip =
L(
"This is the chamber temperature at which printing should start, while the chamber continues heating "
8049 "toward the \"Target\" chamber temperature. For example, set the Target to 60 and the Minimal to 50 to "
8050 "begin printing once the chamber reaches 50℃, without waiting for the full 60℃.\n\n"
8051 "It sets a G-code variable named chamber_minimal_temperature, which can be passed to your print start macro "
8052 "or a heat soak macro, like this: PRINT_START (other variables) CHAMBER_MIN_TEMP=[chamber_minimal_temperature].\n\n"
8053 "Unlike the \"Target\" chamber temperature, this option does not emit any M141/M191 commands; it only exposes "
8054 "the value to your custom G-code. It should not exceed the \"Target\" chamber temperature.");
8055 def->sidetext =
L(u8
"\u2103" );
8056 def->full_label =
L(
"Chamber minimal temperature");
8057 def->min = 0;
8058 def->max = max_temp;
8060
8061 def = this->
add(
"nozzle_temperature",
coInts);
8062 def->label =
L(
"Other layers");
8063 def->tooltip =
L(
"Nozzle temperature after the first layer");
8064 def->sidetext =
L(u8
"\u2103" );
8065 def->full_label =
L(
"Nozzle temperature");
8066 def->min = 0;
8067 def->max = max_temp;
8069
8070 def = this->
add(
"nozzle_temperature_range_low",
coInts);
8071 def->label =
L(
"Min");
8072
8073 def->sidetext =
L(u8
"\u2103" );
8074 def->min = 0;
8075 def->max = max_temp;
8077
8078 def = this->
add(
"nozzle_temperature_range_high",
coInts);
8079 def->label =
L(
"Max");
8080
8081 def->sidetext =
L(u8
"\u2103" );
8082 def->min = 0;
8083 def->max = max_temp;
8085
8086 def = this->
add(
"head_wrap_detect_zone",
coPoints);
8087 def->label = "Head wrap detect zone";
8089 def->set_default_value(new ConfigOptionPoints{});
8090
8091 def = this->
add(
"detect_thin_wall",
coBool);
8092 def->label =
L(
"Detect thin walls");
8093 def->category =
L(
"Strength");
8094 def->tooltip =
L(
"This detects thin walls which can\u2019t contain two lines and uses a single line to print. It may not print as well because it\u2019s not a closed loop.");
8096 def->set_default_value(new ConfigOptionBool(false));
8097
8098 def = this->
add(
"change_filament_gcode",
coString);
8099 def->label =
L(
"Change filament G-code");
8100 def->tooltip =
L(
"This G-code is inserted when filament is changed, including T commands to trigger tool change.");
8101 def->multiline = true;
8102 def->full_width = true;
8103 def->height = 5;
8106
8107 def = this->
add(
"change_extrusion_role_gcode",
coString);
8108 def->label =
L(
"Change extrusion role G-code");
8109 def->tooltip =
L(
"This G-code is inserted when the extrusion role is changed.");
8110 def->multiline = true;
8111 def->full_width = true;
8112 def->height = 5;
8115
8116 def = this->
add(
"filament_change_extrusion_role_gcode",
coStrings);
8117 def->label =
L(
"Change extrusion role G-code (filament)");
8118 def->tooltip =
L(
"This G-code is inserted when the extrusion role is changed for the active filament.");
8119 def->multiline = true;
8120 def->full_width = true;
8121 def->height = 5;
8123 def->set_default_value(new ConfigOptionStrings{ "" });
8124
8126 def->label =
L(
"Top surface");
8127 def->category =
L(
"Quality");
8128 def->tooltip =
L(
"Line width for top surfaces. If expressed as a %, it will be computed over the nozzle diameter.");
8129 def->sidetext =
L(
"mm or %");
8130 def->ratio_over = "nozzle_diameter";
8131 def->min = 0;
8132 def->max = 1000;
8133 def->max_literal = 10;
8135 def->set_default_value(new ConfigOptionFloatOrPercent(0., false));
8136
8138 def->label =
L(
"Top surface");
8139 def->category =
L(
"Speed");
8140 def->tooltip =
L(
"This is the speed for solid top surface infill.");
8141 def->sidetext =
L(
"mm/s");
8142 def->min = 1;
8144 def->nullable = true;
8146
8147 def = this->
add(
"top_shell_layers",
coInt);
8148 def->label =
L(
"Top shell layers");
8149 def->category =
L(
"Strength");
8150 def->sidetext =
L(
"layers");
8151 def->tooltip =
L(
"This is the number of solid layers of top shell, including the top surface layer. When the thickness calculated by this value is thinner than the top shell thickness, the top shell layers will be increased");
8152 def->full_label =
L(
"Top solid layers");
8153 def->min = 0;
8154 def->set_default_value(new ConfigOptionInt(4));
8155
8156 def = this->
add(
"top_shell_thickness",
coFloat);
8157 def->label =
L(
"Top shell thickness");
8158 def->category =
L(
"Strength");
8159 def->tooltip =
L(
"The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers.");
8160 def->full_label =
L(
"Top shell thickness");
8161 def->sidetext =
L(
"mm");
8162 def->min = 0;
8164
8165 def = this->
add(
"top_color_penetration_layers",
coInt);
8166 def->label =
L(
"Top paint penetration layers");
8167 def->category =
L(
"Strength");
8168 def->sidetext =
L(
"layers");
8169 def->tooltip =
L(
"The number of layers, including the top surface layer, that take the color painted on a top surface. "
8170 "Set to 0 to use the top shell layers. A value larger than the top shell also colors the sparse "
8171 "infill below the painted area.");
8172 def->min = 0;
8174 def->set_default_value(new ConfigOptionInt(0));
8175
8176 def = this->
add(
"separated_infills",
coBool);
8177 def->label =
L(
"Separated infills");
8178 def->category =
L(
"Strength");
8179 def->tooltip =
L(
"Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the "
8180 "whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts "
8181 "(or distinct 3D objects) each get their own.\n"
8182 "Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n"
8183 "Adaptive Cubic and Support Cubic always center each part on itself, and Lightning infill is generated for "
8184 "the whole object and is unaffected.");
8186 def->set_default_value(new ConfigOptionBool(false));
8187
8188 def = this->
add(
"center_of_surface_pattern",
coEnum);
8189 def->label =
L(
"Center surface pattern on");
8190 def->category =
L(
"Strength");
8191 def->tooltip =
L(
"Chooses where the centering point of centered top/bottom surface patterns (Archimedean Chords, "
8192 "Octagram Spiral) is placed.\n"
8193 " - Each Surface: centers the pattern on every individual surface region, so each island is symmetric on its own.\n"
8194 " - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; "
8195 "parts detached from the rest each get their own.\n"
8196 " - Each Assembly: uses a single shared center for the whole object or assembly.");
8198 def->enum_values.push_back("each_surface");
8199 def->enum_values.push_back("each_model");
8200 def->enum_values.push_back("each_assembly");
8201 def->enum_labels.push_back(
L(
"Each Surface"));
8202 def->enum_labels.push_back(
L(
"Each Model"));
8203 def->enum_labels.push_back(
L(
"Each Assembly"));
8206
8208 def->label =
L(
"Travel");
8209 def->tooltip =
L(
"This is the speed at which traveling is done.");
8210 def->sidetext =
L(
"mm/s");
8211 def->min = 1;
8213 def->nullable = true;
8215
8217
8218
8219
8220
8221 def->sidetext =
L(
"mm/s");
8222 def->min = 0;
8224 def->nullable = true;
8226
8228 def->label =
L(
"Wipe while retracting");
8229 def->tooltip =
L(
"This moves the nozzle along the last extrusion path when retracting to clean any leaked material on the nozzle. This can minimize blobs when printing a new part after traveling.");
8232
8234 def->label =
L(
"Wipe distance");
8235 def->tooltip =
L(
"Describe how long the nozzle will move along the last path when retracting.\n\n"
8236 "Depending on how long the wipe operation lasts, how fast and long the extruder/filament retraction settings are, "
8237 "a retraction move may be needed to retract the remaining filament.\n\n"
8238 "Setting a value in the retract amount before wipe setting below will perform any excess retraction before the wipe, else it will be performed after.");
8239 def->sidetext =
L(
"mm");
8240 def->min = 0;
8243
8244 def = this->
add(
"enable_mixed_color_sublayer",
coBool);
8245 def->label =
L(
"Mixed color sublayer");
8246 def->tooltip =
L(
"Enable mixed color sublayer splitting. When enabled, layers containing mixed color "
8247 "filaments will be split into sub-layers to achieve color mixing effects.");
8248 def->category =
L(
"Quality");
8250 def->set_default_value(new ConfigOptionBool(false));
8251
8252 def = this->
add(
"enable_prime_tower",
coBool);
8253 def->label =
L(
"Enable");
8254 def->tooltip =
L(
"The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects.");
8256 def->set_default_value(new ConfigOptionBool(false));
8257
8258 def = this->
add(
"prime_tower_enable_framework",
coBool);
8259 def->label =
L(
"Internal ribs");
8260 def->tooltip =
L(
"Enable internal ribs to increase the stability of the prime tower.");
8262 def->set_default_value(new ConfigOptionBool(false));
8263
8264 def = this->
add(
"flush_volumes_vector",
coFloats);
8265
8266 def->label = ("Purging volumes - load/unload volumes");
8267
8268
8269
8270
8271
8272 def->set_default_value(
new ConfigOptionFloats { 140.f, 140.f, 140.f, 140.f, 140.f, 140.f, 140.f, 140.f });
8273
8274 def = this->
add(
"flush_volumes_matrix",
coFloats);
8275 def->label =
L(
"Purging volumes");
8276
8277
8278
8280 280.f, 0.f, 280.f, 280.f,
8281 280.f, 280.f, 0.f, 280.f,
8282 280.f, 280.f, 280.f, 0.f });
8283
8285 def->label =
L(
"Flush multiplier");
8286 def->tooltip =
L(
"The actual flushing volumes is equal to the flush multiplier value multiplied by the flushing volumes in the table.");
8287
8289
8290
8291
8292
8293 def = this->
add(
"flush_multiplier_fast",
coFloats);
8294 def->label =
L(
"Flush multiplier (Fast mode)");
8295 def->tooltip =
L(
"The flush multiplier used in fast purge mode.");
8297
8298
8300 def->label =
L(
"Prime volume");
8301 def->tooltip =
L(
"This is the volume of material to prime the extruder with on the tower.");
8302 def->sidetext =
L(u8
"mm³");
8303 def->min = 1.0;
8306
8307
8308
8309
8310 def = this->
add(
"prime_volume_mode",
coEnum);
8311 def->label =
L(
"Prime volume mode");
8312 def->tooltip =
L(
"Selects how the wipe-tower prime and flush volumes are computed on multi-extruder printers.");
8314 def->enum_values.push_back("Default");
8315 def->enum_values.push_back("Saving");
8316 def->enum_values.push_back("Fast");
8317 def->enum_labels.push_back(
L(
"Default"));
8318 def->enum_labels.push_back(
L(
"Saving"));
8319 def->enum_labels.push_back(
L(
"Fast"));
8321 def->set_default_value(
new ConfigOptionEnum<PrimeVolumeMode>(
pvmDefault));
8322
8324
8325
8326
8328
8330
8332
8333
8334
8336
8338
8339 def = this->
add(
"prime_tower_width",
coFloat);
8340 def->label =
L(
"Width");
8341 def->tooltip =
L(
"This is the width of prime towers.");
8342 def->sidetext =
L(
"mm");
8343 def->min = 2.0;
8346
8347 def = this->
add(
"wipe_tower_rotation_angle",
coFloat);
8348 def->label =
L(
"Wipe tower rotation angle");
8349 def->tooltip =
L(
"Wipe tower rotation angle with respect to X axis.");
8350 def->sidetext = u8"°";
8353
8354 def = this->
add(
"prime_tower_brim_width",
coFloat);
8356 def->label =
L(
"Brim width");
8357 def->tooltip =
L(
"Brim width of prime tower, negative number means auto calculated width based on the height of prime tower.");
8358 def->sidetext =
L(
"mm");
8360 def->min = -1;
8361 def->enum_values.push_back("-1");
8362 def->enum_labels.push_back(
L(
"Auto"));
8364
8365 def = this->
add(
"wipe_tower_cone_angle",
coFloat);
8366 def->label =
L(
"Stabilization cone apex angle");
8367 def->tooltip =
L(
"Angle at the apex of the cone that is used to stabilize the wipe tower. "
8368 "Larger angle means wider base.");
8369 def->sidetext = u8"°";
8371 def->min = 0.;
8372 def->max = 90.;
8374
8375 def = this->
add(
"wipe_tower_max_purge_speed",
coFloat);
8376 def->label =
L(
"Maximum wipe tower print speed");
8377 def->tooltip =
L(
"The maximum print speed when purging in the wipe tower and printing the wipe tower sparse layers. "
8378 "When purging, if the sparse infill speed or calculated speed from the filament max volumetric speed is lower, the lowest will be used instead.\n\n"
8379 "When printing the sparse layers, if the sparse infill speed or calculated speed from the filament max volumetric speed is lower, the lowest will be used instead.\n\n"
8380 "Increasing this speed may affect the tower's stability as well as increase the force with which the nozzle collides with any blobs that may have formed on the wipe tower.\n\n"
8381 "Before increasing this parameter beyond the default of 90 mm/s, make sure your printer can reliably bridge at the increased speeds and that ooze when tool changing is well controlled.\n\n"
8382 "For the wipe tower external perimeters the internal perimeter speed is used, also limited by this setting.");
8383 def->sidetext =
L(
"mm/s");
8385 def->min = 10;
8387
8388 def = this->
add(
"wipe_tower_wall_type",
coEnum);
8389 def->label =
L(
"Wall type");
8390 def->tooltip =
L(
"Wipe tower outer wall type.\n"
8391 "1. Rectangle: A rectangle with fixed width and height.\n"
8392 "2. Cone: A cone with a fillet at the bottom to help stabilize the wipe tower.\n"
8393 "3. Rib: The default wall type, which adds four ribs to the tower wall for enhanced stability.");
8395 def->enum_values.emplace_back("rectangle");
8396 def->enum_values.emplace_back("cone");
8397 def->enum_values.emplace_back("rib");
8398 def->enum_labels.emplace_back(
L(
"Rectangle"));
8399 def->enum_labels.emplace_back(
L(
"Cone"));
8400 def->enum_labels.emplace_back(
L(
"Rib"));
8402 def->set_default_value(
new ConfigOptionEnum<WipeTowerWallType>(
wtwRib));
8403
8404 def = this->
add(
"wipe_tower_extra_rib_length",
coFloat);
8405 def->label =
L(
"Extra rib length");
8406 def->tooltip =
L(
"Positive values can increase the size of the rib wall, while negative values can reduce the size. "
8407 "However, the size of the rib wall can not be smaller than that determined by the cleaning volume.");
8408 def->sidetext =
L(
"mm");
8409 def->max = 300;
8412
8413 def = this->
add(
"wipe_tower_rib_width",
coFloat);
8414 def->label =
L(
"Rib width");
8415 def->tooltip =
L(
"Rib width is always less than half the prime tower side length.");
8416 def->sidetext =
L(
"mm");
8418 def->min = 0;
8419 def->max = 300;
8421
8422 def = this->
add(
"wipe_tower_fillet_wall",
coBool);
8423 def->label =
L(
"Fillet wall");
8424 def->tooltip =
L(
"The wall of prime tower will fillet.");
8426 def->set_default_value(new ConfigOptionBool(true));
8427
8428
8429 def = this->
add(
"wipe_tower_filament",
coInt);
8431 def->label =
L(
"Wipe tower");
8432 def->category =
L(
"Extruders");
8433 def->tooltip =
L(
"The extruder to use when printing perimeter of the wipe tower. "
8434 "Set to 0 to use the one that is available (non-soluble would be preferred).");
8435 def->min = 0;
8437 def->set_default_value(new ConfigOptionInt(0));
8438
8439 def = this->
add(
"wiping_volumes_extruders",
coFloats);
8440 def->label =
L(
"Purging volumes - load/unload volumes");
8441 def->tooltip =
L(
"This vector saves required volumes to change from/to each tool used on the "
8442 "wipe tower. These values are used to simplify creation of the full purging "
8443 "volumes below.");
8444 def->set_default_value(
new ConfigOptionFloats { 70., 70., 70., 70., 70., 70., 70., 70., 70., 70. });
8445
8446 def = this->
add(
"prime_tower_skip_points",
coBool);
8447 def->label =
L(
"Skip points");
8448 def->tooltip =
L(
"The wall of prime tower will skip the start points of wipe path.");
8450 def->set_default_value(new ConfigOptionBool(true));
8451
8452 def = this->
add(
"prime_tower_flat_ironing",
coBool);
8454 def->set_default_value(new ConfigOptionBool(false));
8455
8456 def = this->
add(
"enable_tower_interface_features",
coBool);
8457 def->label =
L(
"Enable tower interface features");
8458 def->tooltip =
L(
"Enable optimized prime tower interface behavior when different materials meet.");
8460 def->set_default_value(new ConfigOptionBool(false));
8461
8462 def = this->
add(
"enable_tower_interface_cooldown_during_tower",
coBool);
8463 def->label =
L(
"Cool down from interface boost during prime tower");
8464 def->tooltip =
L(
"When interface-layer temperature boost is active, set the nozzle back to print temperature at the start of the prime tower so it cools down during the tower.");
8466 def->set_default_value(new ConfigOptionBool(false));
8467
8469 def->label =
L(
"Infill gap");
8470 def->tooltip =
L(
"Infill gap.");
8471 def->sidetext = "%";
8473 def->min = 100;
8474 def->set_default_value(new ConfigOptionPercent(150));
8475
8476 def = this->
add(
"flush_into_infill",
coBool);
8477 def->category =
L(
"Flush options");
8478 def->label =
L(
"Flush into objects' infill");
8479 def->tooltip =
L(
"Purging after filament change will be done inside objects\' infills. This may lower the amount of waste and decrease the print time. If the walls are printed with transparent filament, the mixed color infill will be visible. It will not take effect unless the prime tower is enabled.");
8480 def->set_default_value(new ConfigOptionBool(false));
8481
8482 def = this->
add(
"flush_into_support",
coBool);
8483 def->category =
L(
"Flush options");
8484 def->label =
L(
"Flush into objects' support");
8485 def->tooltip =
L(
"Purging after filament change will be done inside objects\' support. This may lower the amount of waste and decrease the print time. It will not take effect unless a prime tower is enabled.");
8486 def->set_default_value(new ConfigOptionBool(true));
8487
8488 def = this->
add(
"flush_into_objects",
coBool);
8489 def->category =
L(
"Flush options");
8490 def->label =
L(
"Flush into this object");
8491 def->tooltip =
L(
"This object will be used to purge the nozzle after a filament change to save filament and decrease the print time. "
8492 "Colors of the objects will be mixed as a result. "
8493 "It will not take effect unless the prime tower is enabled.");
8494 def->set_default_value(new ConfigOptionBool(false));
8495
8496
8497
8498
8499 def = this->
add(
"belt_purge_tower_object",
coBool);
8500 def->category =
L(
"Flush options");
8501 def->label =
L(
"Belt purge tower object");
8502 def->tooltip =
L(
"Marks the auto-generated belt purge prism. Managed automatically; do not set manually.");
8504 def->set_default_value(new ConfigOptionBool(false));
8505
8506 def = this->
add(
"wipe_tower_bridging",
coFloat);
8507 def->label =
L(
"Maximal bridging distance");
8508 def->tooltip =
L(
"Maximal distance between supports on sparse infill sections.");
8509 def->sidetext =
L(
"mm");
8512
8513 def = this->
add(
"wipe_tower_extra_spacing",
coPercent);
8514 def->label =
L(
"Wipe tower purge lines spacing");
8515 def->tooltip =
L(
"Spacing of purge lines on the wipe tower.");
8516 def->sidetext = "%";
8518 def->min = 100.;
8519 def->max = 300.;
8520 def->set_default_value(new ConfigOptionPercent(100.));
8521
8523 def->label =
L(
"Extra flow for purging");
8524 def->tooltip =
L(
"Extra flow used for the purging lines on the wipe tower. This makes the purging lines thicker "
8525 "than they normally would be. The spacing is adjusted automatically.");
8526 def->sidetext = "%";
8528 def->min = 100.;
8529 def->max = 300.;
8530 def->set_default_value(new ConfigOptionPercent(100.));
8531
8532 def = this->
add(
"idle_temperature",
coInts);
8533 def->label =
L(
"Idle temperature");
8534 def->tooltip =
L(
"Nozzle temperature when the tool is currently not used in multi-tool setups. "
8535 "This is only used when 'Ooze prevention' is active in Print Settings. Set to 0 to disable.");
8536 def->sidetext =
L(u8
"\u2103" );
8537 def->min = 0;
8538 def->max = max_temp;
8540
8541 def = this->
add(
"xy_hole_compensation",
coFloat);
8542 def->label =
L(
"X-Y hole compensation");
8543 def->category =
L(
"Quality");
8544 def->tooltip =
L(
"Holes in objects will expand or contract in the XY plane by the set value. Positive values make holes bigger and negative values make holes smaller. This function is used to adjust sizes slightly when objects have assembly issues.");
8545 def->sidetext =
L(
"mm");
8548
8549 def = this->
add(
"xy_contour_compensation",
coFloat);
8550 def->label =
L(
"X-Y contour compensation");
8551 def->category =
L(
"Quality");
8552 def->tooltip =
L(
"Contours of objects will expand or contract in the XY plane by the set value. Positive values make contours bigger and negative values make contours smaller. This function is used to adjust sizes slightly when objects have assembly issues.");
8553 def->sidetext =
L(
"mm");
8556
8557 def = this->
add(
"hole_to_polyhole",
coBool);
8558 def->label =
L(
"Convert holes to polyholes");
8559 def->category =
L(
"Quality");
8560 def->tooltip =
L(
"Search for almost-circular holes that span more than one layer and convert the geometry to polyholes."
8561 " Use the nozzle size and the (biggest) diameter to compute the polyhole."
8562 "\nSee http://hydraraptor.blogspot.com/2011/02/polyholes.html");
8564 def->set_default_value(new ConfigOptionBool(false));
8565
8567 def->label =
L(
"Polyhole detection margin");
8568 def->category =
L(
"Quality");
8569
8570 def->tooltip =
L(
"Maximum defection of a point to the estimated radius of the circle."
8571 "\nAs cylinders are often exported as triangles of varying size, points may not be on the circle circumference."
8572 " This setting allows you some leeway to broaden the detection."
8573 "\nIn mm or in % of the radius.");
8574 def->sidetext =
L(
"mm or %");
8575 def->max_literal = 10;
8577 def->set_default_value(new ConfigOptionFloatOrPercent(0.01, false));
8578
8579 def = this->
add(
"hole_to_polyhole_twisted",
coBool);
8580 def->label =
L(
"Polyhole twist");
8581 def->category =
L(
"Quality");
8582 def->tooltip =
L(
"Rotate the polyhole every layer.");
8584 def->set_default_value(new ConfigOptionBool(true));
8585
8586 def = this->
add(
"hole_to_polyhole_max_edges",
coInt);
8587 def->label =
L(
"Maximum Polyhole edge count");
8588 def->category =
L(
"Quality");
8589 def->tooltip =
L(
"Maximum number of polyhole edges"
8590 "\nThis setting limits the amount of edges a polyhole can have");
8592 def->min = 3;
8593 def->set_default_value(new ConfigOptionInt(50));
8594
8596 def->label =
L(
"G-code thumbnails");
8597 def->tooltip =
L(
"Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the following format: \"XxY, XxY, ...\"");
8601
8602 def = this->
add(
"thumbnails_format",
coEnum);
8603 def->label =
L(
"Format of G-code thumbnails");
8604 def->tooltip =
L(
"Format of G-code thumbnails: PNG for best quality, JPG for smallest size, QOI for low memory firmware.");
8607 def->enum_values.push_back("PNG");
8608 def->enum_values.push_back("JPG");
8609 def->enum_values.push_back("QOI");
8610 def->enum_values.push_back("BTT_TFT");
8611 def->enum_values.push_back("COLPIC");
8612 def->enum_labels.push_back("PNG");
8613 def->enum_labels.push_back("JPG");
8614 def->enum_labels.push_back("QOI");
8615 def->enum_labels.push_back("BTT TT");
8616 def->enum_labels.push_back("ColPic");
8618
8619 def = this->
add(
"use_relative_e_distances",
coBool);
8620 def->label =
L(
"Use relative E distances");
8621 def->tooltip =
L(
"Relative extrusion is recommended when using \"label_objects\" option. "
8622 "Some extruders work better with this option unchecked (absolute extrusion mode). "
8623 "Wipe tower is only compatible with relative mode. It is recommended on "
8624 "most printers. Default is checked.");
8626 def->set_default_value(new ConfigOptionBool(true));
8627
8628 def = this->
add(
"wall_generator",
coEnum);
8629 def->label =
L(
"Wall generator");
8630 def->category =
L(
"Quality");
8631 def->tooltip =
L(
"The classic wall generator produces walls with constant extrusion width and for very thin areas, gap-fill is used. The Arachne engine produces walls with variable extrusion width.");
8633 def->enum_values.push_back("classic");
8634 def->enum_values.push_back("arachne");
8635 def->enum_labels.push_back(
L(
"Classic"));
8636 def->enum_labels.push_back(
L(
"Arachne"));
8639
8641 def->label =
L(
"Wall transition length");
8642 def->category =
L(
"Quality");
8643 def->tooltip =
L(
"When transitioning between different numbers of walls as the part becomes thinner, a certain amount of space is allotted to split or join the wall segments. It\'s expressed as a percentage over nozzle diameter.");
8644 def->sidetext = "%";
8646 def->min = 0;
8647 def->set_default_value(new ConfigOptionPercent(100));
8648
8649 def = this->
add(
"wall_transition_filter_deviation",
coPercent);
8650 def->label =
L(
"Wall transitioning filter margin");
8651 def->category =
L(
"Quality");
8652 def->tooltip =
L(
"Prevent transitioning back and forth between one extra wall and one less. This "
8653 "margin extends the range of extrusion widths which follow to [Minimum wall width "
8654 "- margin, 2 * Minimum wall width + margin]. Increasing this margin "
8655 "reduces the number of transitions, which reduces the number of extrusion "
8656 "starts/stops and travel time. However, large extrusion width variation can lead to "
8657 "under- or overextrusion problems. "
8658 "It's expressed as a percentage over nozzle diameter.");
8659 def->sidetext = "%";
8661 def->min = 0;
8662 def->set_default_value(new ConfigOptionPercent(25));
8663
8664 def = this->
add(
"wall_transition_angle",
coFloat);
8665 def->label =
L(
"Wall transitioning threshold angle");
8666 def->category =
L(
"Quality");
8667 def->tooltip =
L(
"When to create transitions between even and odd numbers of walls. A wedge shape with"
8668 " an angle greater than this setting will not have transitions and no walls will be "
8669 "printed in the center to fill the remaining space. Reducing this setting reduces "
8670 "the number and length of these center walls, but may leave gaps or overextrude.");
8671 def->sidetext = u8"°";
8673 def->min = 1.;
8674 def->max = 59.;
8676
8677 def = this->
add(
"wall_distribution_count",
coInt);
8678 def->label =
L(
"Wall distribution count");
8679 def->category =
L(
"Quality");
8680 def->tooltip =
L(
"The number of walls, counted from the center, over which the variation needs to be "
8681 "spread. Lower values mean that the outer walls don't change in width.");
8683 def->min = 1;
8684 def->set_default_value(new ConfigOptionInt(1));
8685
8687 def->label =
L(
"Minimum feature size");
8688 def->category =
L(
"Quality");
8689 def->tooltip =
L(
"Minimum thickness of thin features. Model features that are thinner than this value will not be printed, "
8690 "while features thicker than than this value will be widened to the minimum wall width. "
8691 "It's expressed as a percentage over nozzle diameter.");
8692 def->sidetext = "%";
8694 def->min = 0;
8695 def->set_default_value(new ConfigOptionPercent(25));
8696
8697 def = this->
add(
"min_length_factor",
coFloat);
8698 def->label =
L(
"Minimum wall length");
8699 def->category =
L(
"Quality");
8700 def->tooltip =
L(
"Adjust this value to prevent short, unclosed walls from being printed, which could increase print time. "
8701 "The value is a multiple of the wall width. Higher values remove more and longer walls.\n\n"
8702 "NOTE: Bottom and top surfaces will not be affected by this value to prevent visual gaps on the outside of the model. "
8703 "Adjust 'One wall threshold' in the 'Walls and surfaces' settings below to adjust the sensitivity of what is considered a top-surface. "
8704 "'One wall threshold' is only visible if this setting is set above the default value of 0.5, or if single-wall top surfaces is enabled.");
8706 def->min = 0.0;
8707 def->max = 25.0;
8709
8710 def = this->
add(
"wall_maximum_resolution",
coFloat);
8711 def->label =
L(
"Maximum wall resolution");
8712 def->category =
L(
"Quality");
8713 def->tooltip =
L(
"This value determines the smallest wall line segment length in mm. "
8714 "The smaller you set this value, the more accurate and precise the walls will be.");
8715 def->sidetext =
L(
"mm");
8717 def->min = 0.005;
8718 def->max = 0.5f;
8720
8721 def = this->
add(
"wall_maximum_deviation",
coFloat);
8722 def->label =
L(
"Maximum wall deviation");
8723 def->category =
L(
"Quality");
8724 def->tooltip =
L(
"The maximum deviation allowed when reducing the resolution for the 'Maximum wall resolution' setting. If you increase this, "
8725 "the print will be less accurate, but the G-code will be smaller. 'Maximum wall deviation' limits 'Maximum wall resolution', "
8726 "so if the two conflict, 'Maximum wall deviation' takes precedence.");
8727 def->sidetext =
L(
"mm");
8729 def->min = 0.005f;
8730 def->max = 0.05f;
8732
8733 def = this->
add(
"initial_layer_min_bead_width",
coPercent);
8734 def->label =
L(
"First layer minimum wall width");
8735 def->category =
L(
"Quality");
8736 def->tooltip =
L(
"The minimum wall width that should be used for the first layer is recommended to be set "
8737 "to the same size as the nozzle. This adjustment is expected to enhance adhesion.");
8738 def->sidetext = "%";
8740 def->min = 0;
8741 def->set_default_value(new ConfigOptionPercent(85));
8742
8744 def->label =
L(
"Minimum wall width");
8745 def->category =
L(
"Quality");
8746 def->tooltip =
L(
"Width of the wall that will replace thin features (according to the Minimum feature size) "
8747 "of the model. If the Minimum wall width is thinner than the thickness of the feature,"
8748 " the wall will become as thick as the feature itself. "
8749 "It's expressed as a percentage over nozzle diameter.");
8750 def->sidetext = "%";
8752 def->min = 0;
8753 def->set_default_value(new ConfigOptionPercent(85));
8754
8755 def = this->
add(
"filament_dev_ams_drying_ams_limitations",
coStrings);
8756 def->set_default_value(new ConfigOptionStrings{""});
8757
8758 def = this->
add(
"filament_dev_ams_drying_temperature",
coFloats);
8760
8761 def = this->
add(
"filament_dev_ams_drying_time",
coFloats);
8763
8764 def = this->
add(
"filament_dev_ams_drying_heat_distortion_temperature",
coFloats);
8766
8767 def = this->
add(
"filament_dev_chamber_drying_bed_temperature",
coFloats);
8769
8770 def = this->
add(
"filament_dev_chamber_drying_time",
coFloats);
8772
8773 def = this->
add(
"filament_dev_drying_softening_temperature",
coFloats);
8775
8776 def = this->
add(
"filament_dev_drying_cooling_temperature",
coFloats);
8778
8779
8781 const std::string filament_prefix = "filament_";
8782 std::string extruder_raw_key = opt_key.substr(opt_key.find(filament_prefix) + filament_prefix.length());
8783 auto it_opt =
options.find(extruder_raw_key);
8784 assert(it_opt !=
options.end());
8785 def = this->
add_nullable(opt_key, it_opt->second.type);
8786 def->label = it_opt->second.label;
8787 def->full_label = it_opt->second.full_label;
8788 def->tooltip = it_opt->second.tooltip;
8789 def->sidetext = it_opt->second.sidetext;
8790 def->enum_keys_map = it_opt->second.enum_keys_map;
8791 def->enum_labels = it_opt->second.enum_labels;
8792 def->enum_values = it_opt->second.enum_values;
8793 def->min = it_opt->second.min;
8794 def->max = it_opt->second.max;
8795
8796 if (opt_key =="filament_retraction_length"||
8797 opt_key=="filament_z_hop" ||
8798 opt_key== "filament_long_retractions_when_cut" ||
8799 opt_key=="filament_retraction_distances_when_cut")
8801 else
8803 switch (def->type) {
8808 default: assert(false);
8809 }
8810 }
8811
8812
8813
8814
8815
8816 def = this->
add(
"machine_hotend_change_time",
coFloat);
8817 def->label =
L(
"Hotend change time");
8818 def->tooltip =
L(
"Time to change hotend.");
8819 def->sidetext =
L_CONTEXT(
"s",
"second");
8820 def->min = 0;
8823
8824
8825
8826
8827
8828
8829 def = this->
add(
"group_algo_with_time",
coBool);
8831 def->set_default_value(new ConfigOptionBool(false));
8832
8833 def = this->
add(
"machine_prepare_compensation_time",
coFloat);
8836
8837 def = this->
add(
"enable_pre_heating",
coBool);
8838 def->set_default_value(new ConfigOptionBool(false));
8839
8840
8841
8842 def = this->
add(
"handle_hotend_as_extruder",
coBool);
8844 def->set_default_value(new ConfigOptionBool(false));
8845
8846
8847
8848
8849 def = this->
add(
"filament_max_temperature_drop_when_ec",
coFloats);
8852
8854 def->nullable = true;
8856
8858 def->nullable = true;
8860
8861 def = this->
add(
"filament_change_length_nc",
coFloats);
8862 def->label =
L(
"Hotend change");
8863 def->tooltip =
L(
"When changing the hotend, it is recommended to extrude a certain length of filament from the original nozzle. This helps minimize nozzle oozing.");
8864 def->sidetext =
L(
"mm");
8865 def->min = 0;
8868
8869 def = this->
add(
"filament_ramming_travel_time",
coFloats);
8870 def->label =
L(
"Extruder change");
8871 def->tooltip =
L(
"To prevent oozing, the nozzle will perform a reverse travel movement for a certain period after "
8872 "the ramming is complete. The setting define the travel time.");
8874 def->sidetext = "s";
8875 def->min = 0;
8876 def->nullable = true;
8878
8879 def = this->
add(
"filament_pre_cooling_temperature",
coInts);
8880 def->label =
L(
"Extruder change");
8881 def->tooltip =
L(
"To prevent oozing, the nozzle temperature will be cooled during ramming. Therefore, the ramming time must be greater than the cooldown time. 0 means disabled.");
8883 def->sidetext =
L(u8
"\u2103" );
8884 def->min = 0;
8885 def->nullable = true;
8887
8888 def = this->
add(
"filament_ramming_volumetric_speed",
coFloats);
8889 def->label =
L(
"Extruder change");
8890 def->tooltip =
L(
"The maximum volumetric speed for ramming before extruder change, where -1 means using the maximum volumetric speed.");
8891 def->sidetext =
L(
"mm³/s");
8892 def->min = -1;
8893 def->max = 200;
8895 def->nullable = true;
8897
8898 def = this->
add(
"filament_ramming_travel_time_nc",
coFloats);
8899 def->label =
L(
"Hotend change");
8900 def->tooltip =
L(
"To prevent oozing, the nozzle will perform a reverse travel movement for a certain period after "
8901 "the ramming is complete. The setting define the travel time.");
8903 def->sidetext = "s";
8904 def->min = 0;
8905 def->nullable = true;
8907
8908 def = this->
add(
"filament_pre_cooling_temperature_nc",
coInts);
8909 def->label =
L(
"Hotend change");
8911 "To prevent oozing, the nozzle temperature will be cooled during ramming. Note: only a cooldown command and fan activation are triggered, reaching the target temperature is not guaranteed. 0 means disabled.");
8913 def->sidetext =
L(u8
"\u2103" );
8914 def->min = 0;
8915 def->nullable = true;
8917
8918 def = this->
add(
"filament_ramming_volumetric_speed_nc",
coFloats);
8919 def->label =
L(
"Hotend change");
8920 def->tooltip =
L(
"The maximum volumetric speed for ramming before a hotend change, where -1 means using the maximum volumetric speed.");
8921 def->sidetext =
L(
"mm³/s");
8922 def->min = -1;
8923 def->max = 200;
8925 def->nullable = true;
8927
8928 def = this->
add(
"filament_retract_length_nc",
coFloats);
8929 def->label =
L(
"length when change hotend");
8930 def->tooltip =
L(
"When this retraction value is modified, it will be used as the amount of filament retracted "
8931 "inside the hotend before changing hotends.");
8932 def->sidetext =
L(
"mm");
8934 def->nullable = true;
8935 def->min = 0;
8936 def->max = 18;
8938
8939 def = this->
add(
"extruder_max_nozzle_count",
coInts);
8941 def->nullable = true;
8943
8944
8945
8946
8947 def = this->
add(
"support_fast_purge_mode",
coBool);
8948 def->label =
L(
"Support fast purge mode");
8949 def->tooltip =
L(
"Whether this printer supports fast purge mode with optimized temperature and multiplier.");
8951 def->set_default_value(new ConfigOptionBool(false));
8952
8953
8954
8955 def = this->
add(
"filament_prime_volume",
coFloats);
8956 def->label =
L(
"Filament change");
8957 def->tooltip =
L(
"The volume of material required to prime the extruder on the tower, excluding a hotend change.");
8958 def->sidetext =
L(
"mm³");
8959 def->min = 1.0;
8962
8963 def = this->
add(
"filament_prime_volume_nc",
coFloats);
8964 def->label =
L(
"Hotend change");
8965 def->tooltip =
L(
"The volume of material required to prime the extruder for a hotend change on the tower.");
8966 def->sidetext =
L(
"mm³");
8967 def->min = 1.0;
8970
8971 def = this->
add(
"filament_preheat_temperature_delta",
coFloats);
8972 def->label =
L(
"Preheat temperature delta");
8973 def->tooltip =
L(
"Temperature delta applied during pre-heating before tool change.");
8974 def->sidetext =
L(u8
"\u2103" );
8976 def->nullable = true;
8978
8979 def = this->
add(
"detect_narrow_internal_solid_infill",
coBool);
8980 def->label =
L(
"Detect narrow internal solid infills");
8981 def->category =
L(
"Strength");
8982 def->tooltip =
L(
"This option will auto-detect narrow internal solid infill areas. "
8983 "If enabled, the concentric pattern will be used for the area to speed up printing. "
8984 "Otherwise, the rectilinear pattern will be used by default.");
8986 def->set_default_value(new ConfigOptionBool(true));
8987}
#define L_CONTEXT(s, context)
Definition DesignOffer.hpp:17
#define INITIAL_RAFT_LAYERS
Definition PrintConfigConstants.hpp:6
#define INITIAL_REDUCE_CROSSING_WALL
Definition PrintConfigConstants.hpp:7
ConfigOptionDef * add_nullable(const t_config_option_key &opt_key, ConfigOptionType type)
Definition Config.cpp:374
@ f_enum_open
Definition Config.hpp:2323
@ i_enum_open
Definition Config.hpp:2321
@ color
Definition Config.hpp:2325
@ plugin_picker
Definition Config.hpp:2334
static double nil_value()
Definition Config.hpp:899
std::vector< double > values
Definition Config.hpp:418
static const std::vector< MaterialTypeInfo > & all()
Definition MaterialType.cpp:18
@ gcfMarlinLegacy
Definition PrintConfig.hpp:52
ConfigOptionMode
Definition Config.hpp:221
@ btAutoBrim
Definition PrintConfig.hpp:455
@ ipMonotonic
Definition PrintConfig.hpp:127
@ ipMonotonicLine
Definition PrintConfig.hpp:127
@ ipRectilinear
Definition PrintConfig.hpp:128
@ ipCrossHatch
Definition PrintConfig.hpp:133
@ spAligned
Definition PrintConfig.hpp:395
ConfigOptionBoolsTempl< true > ConfigOptionBoolsNullable
Definition Config.hpp:2067
@ nvtStandard
Definition PrintConfig.hpp:619
@ flsAuto
Definition PrintConfig.hpp:527
@ stCombined
Definition PrintConfig.hpp:474
@ PrinterConfiguration
Definition PrintConfig.hpp:232
@ smipAuto
Definition PrintConfig.hpp:374
@ Regular
Definition PrintConfig.hpp:329
ConfigOptionEnumsGenericTempl< false > ConfigOptionEnumsGeneric
Definition Config.hpp:2311
@ X
Definition PrintConfig.hpp:343
@ zhtSlope
Definition PrintConfig.hpp:585
ConfigOptionPercentsTempl< true > ConfigOptionPercentsNullable
Definition Config.hpp:1335
@ CounterClockwise
Definition PrintConfig.hpp:255
@ Disabled
Definition PrintConfig.hpp:239
@ btPC
Definition PrintConfig.hpp:509
ConfigOptionIntsTempl< true > ConfigOptionIntsNullable
Definition Config.hpp:1155
@ Disabled
Definition PrintConfig.hpp:291
@ chbNone
Definition PrintConfig.hpp:602
@ Overhang_threshold_bridge
Definition PrintConfig.hpp:503
@ gftNowhere
Definition PrintConfig.hpp:425
@ eblDisabled
Definition PrintConfig.hpp:420
@ ibfDisabled
Definition PrintConfig.hpp:415
@ tlTraditional
Definition PrintConfig.hpp:469
@ htOctoPrint
Definition PrintConfig.hpp:119
@ Displacement
Definition PrintConfig.hpp:86
@ pvmDefault
Definition PrintConfig.hpp:657
@ ntUndefine
Definition CommonDefs.hpp:14
@ ByLayer
Definition PrintConfig.hpp:311
@ smpDefault
Definition PrintConfig.hpp:356
@ Each_Surface
Definition PrintConfig.hpp:99
ConfigOptionIntsTempl< false > ConfigOptionInts
Definition Config.hpp:1154
@ Disabled_fuzzy
Definition PrintConfig.hpp:82
@ etDirectDrive
Definition PrintConfig.hpp:613
@ Linear
Definition PrintConfig.hpp:304
ConfigOptionBoolsTempl< false > ConfigOptionBools
Definition Config.hpp:2066
@ Type2
Definition PrintConfig.hpp:115
@ Default
Definition PrintConfig.hpp:492
@ Default
Definition PrintConfig.hpp:283
ConfigOptionFloatsOrPercentsTempl< true > ConfigOptionFloatsOrPercentsNullable
Definition Config.hpp:1532
@ Default
Definition PrintConfig.hpp:319
ConfigOptionPercentsTempl< false > ConfigOptionPercents
Definition Config.hpp:1334
@ stNormalAuto
Definition PrintConfig.hpp:379
@ NoIroning
Definition PrintConfig.hpp:203
@ fmmAutoForFlush
Definition PrintConfig.hpp:633
@ PNG
Definition PrintConfig.hpp:598
@ FrontLeft
Definition PrintConfig.hpp:263
@ evstAll
Definition PrintConfig.hpp:410
@ InnerOuter
Definition PrintConfig.hpp:246
const std::vector< std::string > filament_extruder_override_keys
Definition PrintConfig.cpp:97
@ psUndefine
Definition PrintConfig.hpp:558
static const t_config_enum_values s_keys_map_BedType
Definition PrintConfig.cpp:606
@ Default
Definition PrintConfig.hpp:566
@ smsDefault
Definition PrintConfig.hpp:363
@ btfHighestTemp
Definition PrintConfig.hpp:226
ConfigOptionEnumsGenericTempl< true > ConfigOptionEnumsGenericNullable
Definition Config.hpp:2312
RemapAxis
Definition PrintConfig.hpp:349
@ PosX
Definition PrintConfig.hpp:350
@ PosY
Definition PrintConfig.hpp:350
@ PosZ
Definition PrintConfig.hpp:350
@ coFloatsOrPercents
Definition Config.hpp:202
@ coPoint
Definition Config.hpp:204
@ coBools
Definition Config.hpp:212
@ coPercents
Definition Config.hpp:198
@ coInts
Definition Config.hpp:190
@ coEnums
Definition Config.hpp:216
@ coFloatOrPercent
Definition Config.hpp:200
void append(std::vector< T, Alloc > &dest, const std::vector< T, Alloc2 > &src)
Definition libslic3r.h:157
@ Standard
Definition PrintConfig.hpp:273
@ wtwRib
Definition PrintConfig.hpp:608
@ fdUndefine
Definition PrintConfig.hpp:532
@ dsDisabled
Definition PrintConfig.hpp:478
@ InwardAndOutward
Definition PrintConfig.hpp:93
@ None
Definition PrintConfig.hpp:400
@ Classic
Definition PrintConfig.hpp:105
@ Arachne
Definition PrintConfig.hpp:487