mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-08-07 14:04:03 -06:00
Merge remote-tracking branch 'origin/main' into optimized-prime-tower
This commit is contained in:
commit
8d0329f284
87 changed files with 375 additions and 160 deletions
|
@ -6,7 +6,6 @@ requirements:
|
|||
- "fdm_materials/(latest)@ultimaker/testing"
|
||||
- "curaengine_plugin_gradual_flow/(latest)@ultimaker/stable"
|
||||
- "dulcificum/latest@ultimaker/testing"
|
||||
- "pyarcus/5.3.0"
|
||||
- "pysavitar/5.3.0"
|
||||
- "pynest2d/5.3.0"
|
||||
- "curaengine_grpc_definitions/(latest)@ultimaker/testing"
|
||||
|
|
|
@ -242,7 +242,7 @@ class CuraConan(ConanFile):
|
|||
self.output.warning(f"Source path for binary {binary['binary']} does not exist")
|
||||
continue
|
||||
|
||||
for bin in Path(src_path).glob(binary["binary"] + "*[.exe|.dll|.so|.dylib|.so.|.pdb]*"):
|
||||
for bin in Path(src_path).glob(binary["binary"] + "*[.exe|.dll|.so|.dylib|.so.]*"):
|
||||
binaries.append((str(bin), binary["dst"]))
|
||||
for bin in Path(src_path).glob(binary["binary"]):
|
||||
binaries.append((str(bin), binary["dst"]))
|
||||
|
@ -320,6 +320,8 @@ class CuraConan(ConanFile):
|
|||
self.options["openssl"].shared = True
|
||||
if self.conf.get("user.curaengine:sentry_url", "", check_type=str) != "":
|
||||
self.options["curaengine"].enable_sentry = True
|
||||
self.options["arcus"].enable_sentry = True
|
||||
self.options["clipper"].enable_sentry = True
|
||||
|
||||
def validate(self):
|
||||
version = self.conf.get("user.cura:version", default = self.version, check_type = str)
|
||||
|
@ -335,6 +337,7 @@ class CuraConan(ConanFile):
|
|||
for req in self.conan_data["requirements_internal"]:
|
||||
self.requires(req)
|
||||
self.requires("cpython/3.10.4@ultimaker/stable")
|
||||
self.requires("clipper/6.4.2@ultimaker/stable")
|
||||
self.requires("openssl/3.2.0")
|
||||
self.requires("boost/1.82.0")
|
||||
self.requires("spdlog/1.12.0")
|
||||
|
@ -518,7 +521,8 @@ echo "CURA_APP_NAME={{ cura_app_name }}" >> ${{ env_prefix }}GITHUB_ENV
|
|||
del self.info.options.cloud_api_version
|
||||
del self.info.options.display_name
|
||||
del self.info.options.cura_debug_mode
|
||||
self.options.rm_safe("enable_i18n")
|
||||
if self.options.get_safe("enable_i18n", False):
|
||||
del self.info.options.enable_i18n
|
||||
|
||||
# TODO: Use the hash of requirements.txt and requirements-ultimaker.txt, Because changing these will actually result in a different
|
||||
# Cura. This is needed because the requirements.txt aren't managed by Conan and therefor not resolved in the package_id. This isn't
|
||||
|
|
|
@ -3,10 +3,11 @@
|
|||
|
||||
from typing import List, cast
|
||||
|
||||
from PyQt6.QtCore import QObject, QUrl, QMimeData
|
||||
from PyQt6.QtCore import QObject, QUrl, pyqtSignal, pyqtProperty
|
||||
from PyQt6.QtGui import QDesktopServices
|
||||
from PyQt6.QtWidgets import QApplication
|
||||
|
||||
from UM.Application import Application
|
||||
from UM.Event import CallFunctionEvent
|
||||
from UM.FlameProfiler import pyqtSlot
|
||||
from UM.Math.Vector import Vector
|
||||
|
@ -37,6 +38,10 @@ class CuraActions(QObject):
|
|||
def __init__(self, parent: QObject = None) -> None:
|
||||
super().__init__(parent)
|
||||
|
||||
self._operation_stack = Application.getInstance().getOperationStack()
|
||||
self._operation_stack.changed.connect(self._onUndoStackChanged)
|
||||
|
||||
undoStackChanged = pyqtSignal()
|
||||
@pyqtSlot()
|
||||
def openDocumentation(self) -> None:
|
||||
# Starting a web browser from a signal handler connected to a menu will crash on windows.
|
||||
|
@ -45,6 +50,25 @@ class CuraActions(QObject):
|
|||
event = CallFunctionEvent(self._openUrl, [QUrl("https://ultimaker.com/en/resources/manuals/software?utm_source=cura&utm_medium=software&utm_campaign=dropdown-documentation")], {})
|
||||
cura.CuraApplication.CuraApplication.getInstance().functionEvent(event)
|
||||
|
||||
@pyqtProperty(bool, notify=undoStackChanged)
|
||||
def canUndo(self):
|
||||
return self._operation_stack.canUndo()
|
||||
|
||||
@pyqtProperty(bool, notify=undoStackChanged)
|
||||
def canRedo(self):
|
||||
return self._operation_stack.canRedo()
|
||||
|
||||
@pyqtSlot()
|
||||
def undo(self):
|
||||
self._operation_stack.undo()
|
||||
|
||||
@pyqtSlot()
|
||||
def redo(self):
|
||||
self._operation_stack.redo()
|
||||
|
||||
def _onUndoStackChanged(self):
|
||||
self.undoStackChanged.emit()
|
||||
|
||||
@pyqtSlot()
|
||||
def openBugReportPage(self) -> None:
|
||||
event = CallFunctionEvent(self._openUrl, [QUrl("https://github.com/Ultimaker/Cura/issues/new/choose")], {})
|
||||
|
|
|
@ -15,13 +15,13 @@ import numpy
|
|||
from PyQt6.QtCore import QObject, QTimer, QUrl, QUrlQuery, pyqtSignal, pyqtProperty, QEvent, pyqtEnum, QCoreApplication, \
|
||||
QByteArray
|
||||
from PyQt6.QtGui import QColor, QIcon
|
||||
from PyQt6.QtQml import qmlRegisterUncreatableType, qmlRegisterUncreatableMetaObject, qmlRegisterSingletonType, qmlRegisterType
|
||||
from PyQt6.QtQml import qmlRegisterUncreatableMetaObject, qmlRegisterSingletonType, qmlRegisterType
|
||||
from PyQt6.QtWidgets import QMessageBox
|
||||
|
||||
import UM.Util
|
||||
import cura.Settings.cura_empty_instance_containers
|
||||
from UM.Application import Application
|
||||
from UM.Decorators import override
|
||||
from UM.Decorators import override, deprecated
|
||||
from UM.FlameProfiler import pyqtSlot
|
||||
from UM.Logger import Logger
|
||||
from UM.Math.AxisAlignedBox import AxisAlignedBox
|
||||
|
@ -191,7 +191,7 @@ class CuraApplication(QtApplication):
|
|||
self.empty_container = None # type: EmptyInstanceContainer
|
||||
self.empty_definition_changes_container = None # type: EmptyInstanceContainer
|
||||
self.empty_variant_container = None # type: EmptyInstanceContainer
|
||||
self.empty_intent_container = None # type: EmptyInstanceContainer
|
||||
self.empty_intent_container = None # type: EmptyInstanceContainer
|
||||
self.empty_material_container = None # type: EmptyInstanceContainer
|
||||
self.empty_quality_container = None # type: EmptyInstanceContainer
|
||||
self.empty_quality_changes_container = None # type: EmptyInstanceContainer
|
||||
|
@ -1138,6 +1138,10 @@ class CuraApplication(QtApplication):
|
|||
|
||||
return cast(MachineActionManager.MachineActionManager, self._machine_action_manager)
|
||||
|
||||
@pyqtSlot(result = QObject)
|
||||
def getMachineActionManagerQml(self)-> MachineActionManager.MachineActionManager:
|
||||
return cast(QObject, self._machine_action_manager)
|
||||
|
||||
@pyqtSlot(result = QObject)
|
||||
def getMaterialManagementModel(self) -> MaterialManagementModel:
|
||||
if not self._material_management_model:
|
||||
|
@ -1150,7 +1154,8 @@ class CuraApplication(QtApplication):
|
|||
self._quality_management_model = QualityManagementModel(parent = self)
|
||||
return self._quality_management_model
|
||||
|
||||
def getSimpleModeSettingsManager(self, *args):
|
||||
@pyqtSlot(result=QObject)
|
||||
def getSimpleModeSettingsManager(self)-> SimpleModeSettingsManager:
|
||||
if self._simple_mode_settings_manager is None:
|
||||
self._simple_mode_settings_manager = SimpleModeSettingsManager()
|
||||
return self._simple_mode_settings_manager
|
||||
|
@ -1193,16 +1198,43 @@ class CuraApplication(QtApplication):
|
|||
|
||||
return self._print_information
|
||||
|
||||
def getQualityProfilesDropDownMenuModel(self, *args, **kwargs):
|
||||
@pyqtSlot(result=QObject)
|
||||
def getQualityProfilesDropDownMenuModel(self, *args, **kwargs)-> QualityProfilesDropDownMenuModel:
|
||||
if self._quality_profile_drop_down_menu_model is None:
|
||||
self._quality_profile_drop_down_menu_model = QualityProfilesDropDownMenuModel(self)
|
||||
return self._quality_profile_drop_down_menu_model
|
||||
|
||||
def getCustomQualityProfilesDropDownMenuModel(self, *args, **kwargs):
|
||||
@pyqtSlot(result=QObject)
|
||||
def getCustomQualityProfilesDropDownMenuModel(self, *args, **kwargs)->CustomQualityProfilesDropDownMenuModel:
|
||||
if self._custom_quality_profile_drop_down_menu_model is None:
|
||||
self._custom_quality_profile_drop_down_menu_model = CustomQualityProfilesDropDownMenuModel(self)
|
||||
return self._custom_quality_profile_drop_down_menu_model
|
||||
|
||||
@deprecated("SimpleModeSettingsManager is deprecated and will be removed in major SDK release, Use getSimpleModeSettingsManager() instead", since = "5.7.0")
|
||||
def getSimpleModeSettingsManagerWrapper(self, *args, **kwargs):
|
||||
return self.getSimpleModeSettingsManager()
|
||||
|
||||
@deprecated("MachineActionManager is deprecated and will be removed in major SDK release, Use getMachineActionManager() instead", since="5.7.0")
|
||||
def getMachineActionManagerWrapper(self, *args, **kwargs):
|
||||
return self.getMachineActionManager()
|
||||
|
||||
@deprecated("QualityManagementModel is deprecated and will be removed in major SDK release, Use getQualityManagementModel() instead", since="5.7.0")
|
||||
def getQualityManagementModelWrapper(self, *args, **kwargs):
|
||||
return self.getQualityManagementModel()
|
||||
|
||||
@deprecated("MaterialManagementModel is deprecated and will be removed in major SDK release, Use getMaterialManagementModel() instead", since = "5.7.0")
|
||||
def getMaterialManagementModelWrapper(self, *args, **kwargs):
|
||||
return self.getMaterialManagementModel()
|
||||
|
||||
@deprecated("QualityProfilesDropDownMenuModel is deprecated and will be removed in major SDK release, Use getQualityProfilesDropDownMenuModel() instead", since = "5.7.0")
|
||||
def getQualityProfilesDropDownMenuModelWrapper(self, *args, **kwargs):
|
||||
return self.getQualityProfilesDropDownMenuModel()
|
||||
|
||||
@deprecated("CustomQualityProfilesDropDownMenuModel is deprecated and will be removed in major SDK release, Use getCustomQualityProfilesDropDownMenuModel() instead", since = "5.7.0")
|
||||
def getCustomQualityProfilesDropDownMenuModelWrapper(self, *args, **kwargs):
|
||||
return self.getCustomQualityProfilesDropDownMenuModel()
|
||||
|
||||
|
||||
def getCuraAPI(self, *args, **kwargs) -> "CuraAPI":
|
||||
return self._cura_API
|
||||
|
||||
|
@ -1231,8 +1263,8 @@ class CuraApplication(QtApplication):
|
|||
qmlRegisterSingletonType(MachineManager, "Cura", 1, 0, self.getMachineManager, "MachineManager")
|
||||
qmlRegisterSingletonType(IntentManager, "Cura", 1, 6, self.getIntentManager, "IntentManager")
|
||||
qmlRegisterSingletonType(SettingInheritanceManager, "Cura", 1, 0, self.getSettingInheritanceManager, "SettingInheritanceManager")
|
||||
qmlRegisterSingletonType(SimpleModeSettingsManager, "Cura", 1, 0, self.getSimpleModeSettingsManager, "SimpleModeSettingsManager")
|
||||
qmlRegisterSingletonType(MachineActionManager.MachineActionManager, "Cura", 1, 0, self.getMachineActionManager, "MachineActionManager")
|
||||
qmlRegisterSingletonType(SimpleModeSettingsManager, "Cura", 1, 0, self.getSimpleModeSettingsManagerWrapper, "SimpleModeSettingsManager")
|
||||
qmlRegisterSingletonType(MachineActionManager.MachineActionManager, "Cura", 1, 0, self.getMachineActionManagerWrapper, "MachineActionManager")
|
||||
|
||||
self.processEvents()
|
||||
qmlRegisterType(NetworkingUtil, "Cura", 1, 5, "NetworkingUtil")
|
||||
|
@ -1257,16 +1289,14 @@ class CuraApplication(QtApplication):
|
|||
qmlRegisterType(FavoriteMaterialsModel, "Cura", 1, 0, "FavoriteMaterialsModel")
|
||||
qmlRegisterType(GenericMaterialsModel, "Cura", 1, 0, "GenericMaterialsModel")
|
||||
qmlRegisterType(MaterialBrandsModel, "Cura", 1, 0, "MaterialBrandsModel")
|
||||
qmlRegisterSingletonType(QualityManagementModel, "Cura", 1, 0, self.getQualityManagementModel, "QualityManagementModel")
|
||||
qmlRegisterSingletonType(MaterialManagementModel, "Cura", 1, 5, self.getMaterialManagementModel, "MaterialManagementModel")
|
||||
qmlRegisterSingletonType(QualityManagementModel, "Cura", 1, 0, self.getQualityManagementModelWrapper,"QualityManagementModel")
|
||||
qmlRegisterSingletonType(MaterialManagementModel, "Cura", 1, 5, self.getMaterialManagementModelWrapper,"MaterialManagementModel")
|
||||
|
||||
self.processEvents()
|
||||
qmlRegisterType(DiscoveredPrintersModel, "Cura", 1, 0, "DiscoveredPrintersModel")
|
||||
qmlRegisterType(DiscoveredCloudPrintersModel, "Cura", 1, 7, "DiscoveredCloudPrintersModel")
|
||||
qmlRegisterSingletonType(QualityProfilesDropDownMenuModel, "Cura", 1, 0,
|
||||
self.getQualityProfilesDropDownMenuModel, "QualityProfilesDropDownMenuModel")
|
||||
qmlRegisterSingletonType(CustomQualityProfilesDropDownMenuModel, "Cura", 1, 0,
|
||||
self.getCustomQualityProfilesDropDownMenuModel, "CustomQualityProfilesDropDownMenuModel")
|
||||
qmlRegisterSingletonType(QualityProfilesDropDownMenuModel, "Cura", 1, 0, self.getQualityProfilesDropDownMenuModelWrapper, "QualityProfilesDropDownMenuModel")
|
||||
qmlRegisterSingletonType(CustomQualityProfilesDropDownMenuModel, "Cura", 1, 0, self.getCustomQualityProfilesDropDownMenuModelWrapper, "CustomQualityProfilesDropDownMenuModel")
|
||||
qmlRegisterType(NozzleModel, "Cura", 1, 0, "NozzleModel")
|
||||
qmlRegisterType(IntentModel, "Cura", 1, 6, "IntentModel")
|
||||
qmlRegisterType(IntentCategoryModel, "Cura", 1, 6, "IntentCategoryModel")
|
||||
|
|
|
@ -227,7 +227,7 @@ class ExtrudersModel(ListModel):
|
|||
"material_brand": "",
|
||||
"color_name": "",
|
||||
"material_type": "",
|
||||
"material_label": ""
|
||||
"material_name": ""
|
||||
}
|
||||
items.append(item)
|
||||
if self._items != items:
|
||||
|
|
|
@ -15,6 +15,10 @@ if "" in sys.path:
|
|||
import argparse
|
||||
import faulthandler
|
||||
import os
|
||||
|
||||
# set the environment variable QT_QUICK_FLICKABLE_WHEEL_DECELERATION to 5000 as mentioned in qt6.6 update log to overcome scroll related issues
|
||||
os.environ["QT_QUICK_FLICKABLE_WHEEL_DECELERATION"] = str(int(os.environ.get("QT_QUICK_FLICKABLE_WHEEL_DECELERATION", "5000")))
|
||||
|
||||
if sys.platform != "linux": # Turns out the Linux build _does_ use this, but we're not making an Enterprise release for that system anyway.
|
||||
os.environ["QT_PLUGIN_PATH"] = "" # Security workaround: Don't need it, and introduces an attack vector, so set to nul.
|
||||
os.environ["QML2_IMPORT_PATH"] = "" # Security workaround: Don't need it, and introduces an attack vector, so set to nul.
|
||||
|
|
|
@ -35,6 +35,8 @@ message Slice
|
|||
repeated EnginePlugin engine_plugins = 5;
|
||||
string sentry_id = 6; // The anonymized Sentry user id that requested the slice
|
||||
string cura_version = 7; // The version of Cura that requested the slice
|
||||
optional string project_name = 8; // The name of the project that requested the slice
|
||||
optional string user_name = 9; // The Digital Factory account name of the user that requested the slice
|
||||
}
|
||||
|
||||
message Extruder
|
||||
|
|
|
@ -164,6 +164,7 @@ class CuraEngineBackend(QObject, Backend):
|
|||
|
||||
application.getPreferences().addPreference("general/auto_slice", False)
|
||||
application.getPreferences().addPreference("info/send_engine_crash", True)
|
||||
application.getPreferences().addPreference("info/anonymous_engine_crash_report", True)
|
||||
|
||||
self._use_timer: bool = False
|
||||
|
||||
|
@ -1094,14 +1095,14 @@ class CuraEngineBackend(QObject, Backend):
|
|||
self._change_timer.timeout.disconnect(self.slice)
|
||||
|
||||
def _onPreferencesChanged(self, preference: str) -> None:
|
||||
if preference != "general/auto_slice" and preference != "info/send_engine_crash":
|
||||
if preference != "general/auto_slice" and preference != "info/send_engine_crash" and preference != "info/anonymous_engine_crash_report":
|
||||
return
|
||||
if preference == "general/auto_slice":
|
||||
auto_slice = self.determineAutoSlicing()
|
||||
if auto_slice:
|
||||
self._change_timer.start()
|
||||
elif preference == "info/send_engine_crash":
|
||||
os.environ["use_sentry"] = "1" if CuraApplication.getInstance().getPreferences().getValue("info/send_engine_crash") else "0"
|
||||
os.environ["USE_SENTRY"] = "1" if CuraApplication.getInstance().getPreferences().getValue("info/send_engine_crash") else "0"
|
||||
|
||||
def tickle(self) -> None:
|
||||
"""Tickle the backend so in case of auto slicing, it starts the timer."""
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright (c) 2023 UltiMaker
|
||||
# Copyright (c) 2024 UltiMaker
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
import uuid
|
||||
|
||||
|
@ -63,13 +63,12 @@ class GcodeStartEndFormatter(Formatter):
|
|||
# will be used. Alternatively, if the expression is formatted as "{[expression], [extruder_nr]}",
|
||||
# then the expression will be evaluated with the extruder stack of the specified extruder_nr.
|
||||
|
||||
_extruder_regex = re.compile(r"^\s*(?P<expression>.*)\s*,\s*(?P<extruder_nr>\d+)\s*$")
|
||||
_extruder_regex = re.compile(r"^\s*(?P<expression>.*)\s*,\s*(?P<extruder_nr_expr>.*)\s*$")
|
||||
|
||||
def __init__(self, default_extruder_nr: int = -1, *,
|
||||
additional_per_extruder_settings: Optional[Dict[str, Dict[str, any]]] = None) -> None:
|
||||
def __init__(self, all_extruder_settings: Dict[str, Any], default_extruder_nr: int = -1) -> None:
|
||||
super().__init__()
|
||||
self._all_extruder_settings: Dict[str, Any] = all_extruder_settings
|
||||
self._default_extruder_nr: int = default_extruder_nr
|
||||
self._additional_per_extruder_settings: Optional[Dict[str, Dict[str, any]]] = additional_per_extruder_settings
|
||||
|
||||
def get_field(self, field_name, args: [str], kwargs: dict) -> Tuple[str, str]:
|
||||
# get_field method parses all fields in the format-string and parses them individually to the get_value method.
|
||||
|
@ -88,22 +87,32 @@ class GcodeStartEndFormatter(Formatter):
|
|||
if expression in post_slice_data_variables:
|
||||
return f"{{{expression}}}"
|
||||
|
||||
extruder_nr = self._default_extruder_nr
|
||||
extruder_nr = str(self._default_extruder_nr)
|
||||
|
||||
# The settings may specify a specific extruder to use. This is done by
|
||||
# formatting the expression as "{expression}, {extruder_nr}". If the
|
||||
# formatting the expression as "{expression}, {extruder_nr_expr}". If the
|
||||
# expression is formatted like this, we extract the extruder_nr and use
|
||||
# it to get the value from the correct extruder stack.
|
||||
match = self._extruder_regex.match(expression)
|
||||
if match:
|
||||
expression = match.group("expression")
|
||||
extruder_nr = int(match.group("extruder_nr"))
|
||||
extruder_nr_expr = match.group("extruder_nr_expr")
|
||||
|
||||
if self._additional_per_extruder_settings is not None and str(
|
||||
extruder_nr) in self._additional_per_extruder_settings:
|
||||
additional_variables = self._additional_per_extruder_settings[str(extruder_nr)]
|
||||
if extruder_nr_expr.isdigit():
|
||||
extruder_nr = extruder_nr_expr
|
||||
else:
|
||||
# We get the value of the extruder_nr_expr from `_all_extruder_settings` dictionary
|
||||
# rather than the global container stack. The `_all_extruder_settings["-1"]` is a
|
||||
# dict-representation of the global container stack, with additional properties such
|
||||
# as `initial_extruder_nr`. As users may enter such expressions we can't use the
|
||||
# global container stack.
|
||||
extruder_nr = str(self._all_extruder_settings["-1"].get(extruder_nr_expr, "-1"))
|
||||
|
||||
if extruder_nr in self._all_extruder_settings:
|
||||
additional_variables = self._all_extruder_settings[extruder_nr].copy()
|
||||
else:
|
||||
additional_variables = dict()
|
||||
Logger.warning(f"Extruder {extruder_nr} does not exist, using global settings")
|
||||
additional_variables = self._all_extruder_settings["-1"].copy()
|
||||
|
||||
# Add the arguments and keyword arguments to the additional settings. These
|
||||
# are currently _not_ used, but they are added for consistency with the
|
||||
|
@ -113,15 +122,17 @@ class GcodeStartEndFormatter(Formatter):
|
|||
for key, value in kwargs.items():
|
||||
additional_variables[key] = value
|
||||
|
||||
if extruder_nr == -1:
|
||||
if extruder_nr == "-1":
|
||||
container_stack = CuraApplication.getInstance().getGlobalContainerStack()
|
||||
else:
|
||||
container_stack = ExtruderManager.getInstance().getExtruderStack(extruder_nr)
|
||||
if not container_stack:
|
||||
Logger.warning(f"Extruder {extruder_nr} does not exist, using global settings")
|
||||
container_stack = CuraApplication.getInstance().getGlobalContainerStack()
|
||||
|
||||
setting_function = SettingFunction(expression)
|
||||
value = setting_function(container_stack, additional_variables=additional_variables)
|
||||
|
||||
|
||||
return value
|
||||
|
||||
|
||||
|
@ -131,12 +142,13 @@ class StartSliceJob(Job):
|
|||
def __init__(self, slice_message: Arcus.PythonMessage) -> None:
|
||||
super().__init__()
|
||||
|
||||
self._scene = CuraApplication.getInstance().getController().getScene() #type: Scene
|
||||
self._scene: Scene = CuraApplication.getInstance().getController().getScene()
|
||||
self._slice_message: Arcus.PythonMessage = slice_message
|
||||
self._is_cancelled = False #type: bool
|
||||
self._build_plate_number = None #type: Optional[int]
|
||||
self._is_cancelled: bool = False
|
||||
self._build_plate_number: Optional[int] = None
|
||||
|
||||
self._all_extruders_settings = None #type: Optional[Dict[str, Any]] # cache for all setting values from all stacks (global & extruder) for the current machine
|
||||
# cache for all setting values from all stacks (global & extruder) for the current machine
|
||||
self._all_extruders_settings: Optional[Dict[str, Any]] = None
|
||||
|
||||
def getSliceMessage(self) -> Arcus.PythonMessage:
|
||||
return self._slice_message
|
||||
|
@ -340,6 +352,12 @@ class StartSliceJob(Job):
|
|||
self._slice_message.sentry_id = f"{user_id}"
|
||||
self._slice_message.cura_version = CuraVersion
|
||||
|
||||
# Add the project name to the message if the user allows for non-anonymous crash data collection.
|
||||
account = CuraApplication.getInstance().getCuraAPI().account
|
||||
if account and account.isLoggedIn and not CuraApplication.getInstance().getPreferences().getValue("info/anonymous_engine_crash_report"):
|
||||
self._slice_message.project_name = CuraApplication.getInstance().getPrintInformation().baseName
|
||||
self._slice_message.user_name = account.userName
|
||||
|
||||
# Build messages for extruder stacks
|
||||
for extruder_stack in global_stack.extruderList:
|
||||
self._buildExtruderMessage(extruder_stack)
|
||||
|
@ -471,10 +489,7 @@ class StartSliceJob(Job):
|
|||
# Get "replacement-keys" for the extruders. In the formatter the settings stack is used to get the
|
||||
# replacement values for the setting-keys. However, the values for `material_id`, `material_type`,
|
||||
# etc are not in the settings stack.
|
||||
additional_per_extruder_settings = self._all_extruders_settings.copy()
|
||||
additional_per_extruder_settings["default_extruder_nr"] = default_extruder_nr
|
||||
fmt = GcodeStartEndFormatter(default_extruder_nr=default_extruder_nr,
|
||||
additional_per_extruder_settings=additional_per_extruder_settings)
|
||||
fmt = GcodeStartEndFormatter(self._all_extruders_settings, default_extruder_nr=default_extruder_nr)
|
||||
return str(fmt.format(value))
|
||||
except:
|
||||
Logger.logException("w", "Unable to do token replacement on start/end g-code")
|
||||
|
|
|
@ -25,7 +25,7 @@ UM.TooltipArea
|
|||
onClicked:
|
||||
{
|
||||
addedSettingsModel.setVisible(model.key, checked);
|
||||
UM.ActiveTool.forceUpdate();
|
||||
UM.Controller.forceUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ Item
|
|||
readonly property string infillMeshType: "infill_mesh"
|
||||
readonly property string antiOverhangMeshType: "anti_overhang_mesh"
|
||||
|
||||
property var currentMeshType: UM.ActiveTool.properties.getValue("MeshType")
|
||||
property var currentMeshType: UM.Controller.properties.getValue("MeshType")
|
||||
|
||||
// Update the view every time the currentMeshType changes
|
||||
onCurrentMeshTypeChanged:
|
||||
|
@ -56,7 +56,7 @@ Item
|
|||
|
||||
function setMeshType(type)
|
||||
{
|
||||
UM.ActiveTool.setProperty("MeshType", type)
|
||||
UM.Controller.setProperty("MeshType", type)
|
||||
updateMeshTypeCheckedState(type)
|
||||
}
|
||||
|
||||
|
@ -224,7 +224,7 @@ Item
|
|||
visibilityHandler: Cura.PerObjectSettingVisibilityHandler
|
||||
{
|
||||
id: visibility_handler
|
||||
selectedObjectId: UM.ActiveTool.properties.getValue("SelectedObjectId")
|
||||
selectedObjectId: UM.Controller.properties.getValue("SelectedObjectId")
|
||||
}
|
||||
|
||||
// For some reason the model object is updated after removing him from the memory and
|
||||
|
@ -320,7 +320,7 @@ Item
|
|||
{
|
||||
id: provider
|
||||
|
||||
containerStackId: UM.ActiveTool.properties.getValue("ContainerID")
|
||||
containerStackId: UM.Controller.properties.getValue("ContainerID")
|
||||
key: model.key
|
||||
watchedProperties: [ "value", "enabled", "validationState" ]
|
||||
storeIndex: 0
|
||||
|
@ -330,7 +330,7 @@ Item
|
|||
UM.SettingPropertyProvider
|
||||
{
|
||||
id: inheritStackProvider
|
||||
containerStackId: UM.ActiveTool.properties.getValue("ContainerID")
|
||||
containerStackId: UM.Controller.properties.getValue("ContainerID")
|
||||
key: model.key
|
||||
watchedProperties: [ "limit_to_extruder" ]
|
||||
}
|
||||
|
@ -381,22 +381,22 @@ Item
|
|||
|
||||
Connections
|
||||
{
|
||||
target: UM.ActiveTool
|
||||
target: UM.Controller
|
||||
function onPropertiesChanged()
|
||||
{
|
||||
// the values cannot be bound with UM.ActiveTool.properties.getValue() calls,
|
||||
// the values cannot be bound with UM.Controller.properties.getValue() calls,
|
||||
// so here we connect to the signal and update the those values.
|
||||
if (typeof UM.ActiveTool.properties.getValue("SelectedObjectId") !== "undefined")
|
||||
if (typeof UM.Controller.properties.getValue("SelectedObjectId") !== "undefined")
|
||||
{
|
||||
const selectedObjectId = UM.ActiveTool.properties.getValue("SelectedObjectId")
|
||||
const selectedObjectId = UM.Controller.properties.getValue("SelectedObjectId")
|
||||
if (addedSettingsModel.visibilityHandler.selectedObjectId != selectedObjectId)
|
||||
{
|
||||
addedSettingsModel.visibilityHandler.selectedObjectId = selectedObjectId
|
||||
}
|
||||
}
|
||||
if (typeof UM.ActiveTool.properties.getValue("ContainerID") !== "undefined")
|
||||
if (typeof UM.Controller.properties.getValue("ContainerID") !== "undefined")
|
||||
{
|
||||
const containerId = UM.ActiveTool.properties.getValue("ContainerID")
|
||||
const containerId = UM.Controller.properties.getValue("ContainerID")
|
||||
if (provider.containerStackId !== containerId)
|
||||
{
|
||||
provider.containerStackId = containerId
|
||||
|
|
|
@ -0,0 +1,95 @@
|
|||
# Copyright (c) 2024 UltiMaker
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import configparser
|
||||
from typing import Tuple, List
|
||||
import io
|
||||
from UM.VersionUpgrade import VersionUpgrade
|
||||
|
||||
_REMOVED_SETTINGS = {
|
||||
"support_interface_skip_height",
|
||||
}
|
||||
_NEW_SETTING_VERSION = "23"
|
||||
|
||||
|
||||
class VersionUpgrade56to57(VersionUpgrade):
|
||||
def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
|
||||
"""
|
||||
Upgrades preferences to remove from the visibility list the settings that were removed in this version.
|
||||
It also changes the preferences to have the new version number.
|
||||
|
||||
This removes any settings that were removed in the new Cura version.
|
||||
:param serialized: The original contents of the preferences file.
|
||||
:param filename: The file name of the preferences file.
|
||||
:return: A list of new file names, and a list of the new contents for
|
||||
those files.
|
||||
"""
|
||||
parser = configparser.ConfigParser(interpolation = None)
|
||||
parser.read_string(serialized)
|
||||
|
||||
# Update version number.
|
||||
parser["metadata"]["setting_version"] = _NEW_SETTING_VERSION
|
||||
|
||||
# Remove deleted settings from the visible settings list.
|
||||
if "general" in parser and "visible_settings" in parser["general"]:
|
||||
visible_settings = set(parser["general"]["visible_settings"].split(";"))
|
||||
for removed in _REMOVED_SETTINGS:
|
||||
if removed in visible_settings:
|
||||
visible_settings.remove(removed)
|
||||
|
||||
parser["general"]["visible_settings"] = ";".join(visible_settings)
|
||||
|
||||
result = io.StringIO()
|
||||
parser.write(result)
|
||||
return [filename], [result.getvalue()]
|
||||
|
||||
def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
|
||||
"""
|
||||
Upgrades instance containers to remove the settings that were removed in this version.
|
||||
It also changes the instance containers to have the new version number.
|
||||
|
||||
This removes any settings that were removed in the new Cura version and updates settings that need to be updated
|
||||
with a new value.
|
||||
|
||||
:param serialized: The original contents of the instance container.
|
||||
:param filename: The original file name of the instance container.
|
||||
:return: A list of new file names, and a list of the new contents for
|
||||
those files.
|
||||
"""
|
||||
parser = configparser.ConfigParser(interpolation = None, comment_prefixes = ())
|
||||
parser.read_string(serialized)
|
||||
|
||||
# Update version number.
|
||||
parser["metadata"]["setting_version"] = _NEW_SETTING_VERSION
|
||||
|
||||
if "values" in parser:
|
||||
# Remove deleted settings from the instance containers.
|
||||
for removed in _REMOVED_SETTINGS:
|
||||
if removed in parser["values"]:
|
||||
del parser["values"][removed]
|
||||
|
||||
result = io.StringIO()
|
||||
parser.write(result)
|
||||
return [filename], [result.getvalue()]
|
||||
|
||||
def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
|
||||
"""
|
||||
Upgrades stacks to have the new version number.
|
||||
|
||||
:param serialized: The original contents of the stack.
|
||||
:param filename: The original file name of the stack.
|
||||
:return: A list of new file names, and a list of the new contents for
|
||||
those files.
|
||||
"""
|
||||
parser = configparser.ConfigParser(interpolation = None)
|
||||
parser.read_string(serialized)
|
||||
|
||||
# Update version number.
|
||||
if "metadata" not in parser:
|
||||
parser["metadata"] = {}
|
||||
|
||||
parser["metadata"]["setting_version"] = _NEW_SETTING_VERSION
|
||||
|
||||
result = io.StringIO()
|
||||
parser.write(result)
|
||||
return [filename], [result.getvalue()]
|
61
plugins/VersionUpgrade/VersionUpgrade56to57/__init__.py
Normal file
61
plugins/VersionUpgrade/VersionUpgrade56to57/__init__.py
Normal file
|
@ -0,0 +1,61 @@
|
|||
# Copyright (c) 2024 UltiMaker
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from typing import Any, Dict, TYPE_CHECKING
|
||||
|
||||
from . import VersionUpgrade56to57
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from UM.Application import Application
|
||||
|
||||
upgrade = VersionUpgrade56to57.VersionUpgrade56to57()
|
||||
|
||||
|
||||
def getMetaData() -> Dict[str, Any]:
|
||||
return {
|
||||
"version_upgrade": {
|
||||
# From To Upgrade function
|
||||
("preferences", 7000022): ("preferences", 7000023, upgrade.upgradePreferences),
|
||||
("machine_stack", 6000022): ("machine_stack", 6000023, upgrade.upgradeStack),
|
||||
("extruder_train", 6000022): ("extruder_train", 6000023, upgrade.upgradeStack),
|
||||
("definition_changes", 4000022): ("definition_changes", 4000023, upgrade.upgradeInstanceContainer),
|
||||
("quality_changes", 4000022): ("quality_changes", 4000023, upgrade.upgradeInstanceContainer),
|
||||
("quality", 4000022): ("quality", 4000023, upgrade.upgradeInstanceContainer),
|
||||
("user", 4000022): ("user", 4000023, upgrade.upgradeInstanceContainer),
|
||||
("intent", 4000022): ("intent", 4000023, upgrade.upgradeInstanceContainer),
|
||||
},
|
||||
"sources": {
|
||||
"preferences": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"."}
|
||||
},
|
||||
"machine_stack": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./machine_instances"}
|
||||
},
|
||||
"extruder_train": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./extruders"}
|
||||
},
|
||||
"definition_changes": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./definition_changes"}
|
||||
},
|
||||
"quality_changes": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./quality_changes"}
|
||||
},
|
||||
"quality": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./quality"}
|
||||
},
|
||||
"user": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./user"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def register(app: "Application") -> Dict[str, Any]:
|
||||
return {"version_upgrade": upgrade}
|
8
plugins/VersionUpgrade/VersionUpgrade56to57/plugin.json
Normal file
8
plugins/VersionUpgrade/VersionUpgrade56to57/plugin.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"name": "Version Upgrade 5.6 to 5.7",
|
||||
"author": "UltiMaker",
|
||||
"version": "1.0.0",
|
||||
"description": "Upgrades configurations from Cura 5.6 to Cura 5.7.",
|
||||
"api": 8,
|
||||
"i18n-catalog": "cura"
|
||||
}
|
|
@ -112,7 +112,6 @@
|
|||
"support_interface_density": { "value": 33.333 },
|
||||
"support_interface_enable": { "value": true },
|
||||
"support_interface_pattern": { "value": "'grid'" },
|
||||
"support_interface_skip_height": { "value": 0.2 },
|
||||
"support_roof_enable": { "value": true },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
"support_xy_distance_overhang": { "value": "wall_line_width_0" },
|
||||
|
|
|
@ -114,7 +114,6 @@
|
|||
"support_interface_enable": { "value": true },
|
||||
"support_interface_height": { "value": "layer_height * 4" },
|
||||
"support_interface_pattern": { "value": "'grid'" },
|
||||
"support_interface_skip_height": { "value": 0.2 },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
"support_xy_distance_overhang": { "value": "wall_line_width_0" },
|
||||
"support_xy_overrides_z": { "value": "'xy_overrides_z'" },
|
||||
|
|
|
@ -154,7 +154,6 @@
|
|||
"support_infill_rate": { "value": "20" },
|
||||
"support_interface_enable": { "value": "True" },
|
||||
"support_interface_height": { "value": "1" },
|
||||
"support_interface_skip_height": { "value": "layer_height" },
|
||||
"support_join_distance": { "value": "1" },
|
||||
"support_offset": { "value": "1.5" },
|
||||
"support_pattern": { "default_value": "zigzag" },
|
||||
|
|
|
@ -108,7 +108,6 @@
|
|||
"support_interface_enable": { "value": true },
|
||||
"support_interface_height": { "value": "layer_height * 4" },
|
||||
"support_interface_pattern": { "value": "'grid'" },
|
||||
"support_interface_skip_height": { "value": 0.2 },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_wall_count": { "value": 1 },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
|
|
|
@ -97,7 +97,6 @@
|
|||
"support_interface_enable": { "value": true },
|
||||
"support_interface_height": { "value": "layer_height * 4" },
|
||||
"support_interface_pattern": { "value": "'grid'" },
|
||||
"support_interface_skip_height": { "value": 0.2 },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
"support_xy_distance_overhang": { "value": "wall_line_width_0" },
|
||||
|
|
|
@ -5423,20 +5423,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"support_interface_skip_height":
|
||||
{
|
||||
"label": "Support Interface Resolution",
|
||||
"description": "When checking where there's model above and below the support, take steps of the given height. Lower values will slice slower, while higher values may cause normal support to be printed in some places where there should have been support interface.",
|
||||
"unit": "mm",
|
||||
"type": "float",
|
||||
"default_value": 0.2,
|
||||
"value": "layer_height",
|
||||
"minimum_value": "0",
|
||||
"maximum_value_warning": "support_interface_height",
|
||||
"limit_to_extruder": "support_interface_extruder_nr",
|
||||
"enabled": "support_interface_enable and (support_enable or support_meshes_present)",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"support_interface_density":
|
||||
{
|
||||
"label": "Support Interface Density",
|
||||
|
|
|
@ -92,7 +92,6 @@
|
|||
"support_interface_height": { "value": "layer_height * 4" },
|
||||
"support_interface_line_width": { "value": "line_width - 0.1" },
|
||||
"support_interface_pattern": { "value": "'grid'" },
|
||||
"support_interface_skip_height": { "value": 0.2 },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_wall_count": { "value": 1 },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
|
|
|
@ -112,7 +112,6 @@
|
|||
"support_interface_density": { "value": 33.333 },
|
||||
"support_interface_height": { "value": "layer_height * 4" },
|
||||
"support_interface_pattern": { "value": "'grid'" },
|
||||
"support_interface_skip_height": { "value": 0.2 },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_wall_count": { "value": 0 },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 3" },
|
||||
|
|
|
@ -133,7 +133,6 @@
|
|||
"support_interface_enable": { "value": true },
|
||||
"support_interface_height": { "value": "layer_height * 4" },
|
||||
"support_interface_pattern": { "value": "'grid'" },
|
||||
"support_interface_skip_height": { "value": 0.2 },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_wall_count": { "value": 1 },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
|
|
|
@ -70,7 +70,6 @@
|
|||
"support_interface_enable": { "value": true },
|
||||
"support_interface_height": { "value": "layer_height * 4" },
|
||||
"support_interface_pattern": { "value": "'grid'" },
|
||||
"support_interface_skip_height": { "value": 0.2 },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_wall_count": { "value": 1 },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
|
|
|
@ -88,7 +88,6 @@
|
|||
"support_interface_enable": { "value": true },
|
||||
"support_interface_height": { "value": "layer_height * 4" },
|
||||
"support_interface_pattern": { "value": "'grid'" },
|
||||
"support_interface_skip_height": { "value": 0.2 },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_wall_count": { "value": 1 },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
|
|
|
@ -88,7 +88,6 @@
|
|||
"support_interface_enable": { "value": true },
|
||||
"support_interface_height": { "value": "layer_height * 4" },
|
||||
"support_interface_pattern": { "value": "'grid'" },
|
||||
"support_interface_skip_height": { "value": 0.2 },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_wall_count": { "value": 1 },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
|
|
|
@ -109,7 +109,6 @@
|
|||
"support_interface_enable": { "value": true },
|
||||
"support_interface_height": { "value": "layer_height * 4" },
|
||||
"support_interface_pattern": { "value": "'grid'" },
|
||||
"support_interface_skip_height": { "value": 0.2 },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_wall_count": { "value": 1 },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
|
|
|
@ -119,7 +119,6 @@
|
|||
"support_interface_enable": { "value": true },
|
||||
"support_interface_height": { "value": "layer_height * 4" },
|
||||
"support_interface_pattern": { "value": "'grid'" },
|
||||
"support_interface_skip_height": { "value": 0.2 },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_wall_count": { "value": 1 },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
|
|
|
@ -70,7 +70,6 @@
|
|||
"support_interface_enable": { "value": true },
|
||||
"support_interface_height": { "value": "layer_height * 4" },
|
||||
"support_interface_pattern": { "value": "'grid'" },
|
||||
"support_interface_skip_height": { "value": 0.2 },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_wall_count": { "value": 1 },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
|
|
|
@ -111,7 +111,6 @@
|
|||
"support_interface_density": { "value": 33.333 },
|
||||
"support_interface_height": { "value": "layer_height * 4" },
|
||||
"support_interface_pattern": { "value": "'grid'" },
|
||||
"support_interface_skip_height": { "value": 0.2 },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_wall_count": { "value": "1 if (support_structure == 'tree') else 0" },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 3" },
|
||||
|
|
|
@ -68,7 +68,6 @@
|
|||
"support_interface_density": { "value": 33.333 },
|
||||
"support_interface_height": { "value": "layer_height * 4" },
|
||||
"support_interface_pattern": { "value": "'grid'" },
|
||||
"support_interface_skip_height": { "value": 0.2 },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_wall_count": { "value": "1 if (support_structure == 'tree') else 0" },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
|
|
|
@ -99,7 +99,7 @@
|
|||
"acceleration_print":
|
||||
{
|
||||
"enabled": false,
|
||||
"value": 300
|
||||
"value": 800
|
||||
},
|
||||
"acceleration_print_layer_0":
|
||||
{
|
||||
|
@ -234,7 +234,7 @@
|
|||
"jerk_print":
|
||||
{
|
||||
"enabled": false,
|
||||
"value": 12.5
|
||||
"value": 6.25
|
||||
},
|
||||
"jerk_print_layer_0":
|
||||
{
|
||||
|
@ -279,7 +279,7 @@
|
|||
"jerk_travel":
|
||||
{
|
||||
"enabled": false,
|
||||
"value": 12.5
|
||||
"value": "jerk_print"
|
||||
},
|
||||
"jerk_travel_enabled":
|
||||
{
|
||||
|
|
|
@ -99,7 +99,6 @@
|
|||
"support_interface_enable": { "value": true },
|
||||
"support_interface_height": { "value": "layer_height * 4" },
|
||||
"support_interface_pattern": { "value": "'grid'" },
|
||||
"support_interface_skip_height": { "value": 0.2 },
|
||||
"support_pattern": { "value": "'zigzag'" },
|
||||
"support_wall_count": { "value": 1 },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
|
||||
|
|
|
@ -14,8 +14,9 @@
|
|||
"default_value": 0,
|
||||
"maximum_value": "1"
|
||||
},
|
||||
"machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S255\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" },
|
||||
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM109 S{material_final_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed*255/100}" },
|
||||
"machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S1.0\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" },
|
||||
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed/100}" },
|
||||
"machine_extruder_start_code_duration": { "default_value": 8 },
|
||||
"machine_nozzle_offset_x": { "default_value": 0 },
|
||||
"machine_nozzle_offset_y": { "default_value": 0 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
|
|
|
@ -14,8 +14,9 @@
|
|||
"default_value": 1,
|
||||
"maximum_value": "1"
|
||||
},
|
||||
"machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S255\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" },
|
||||
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM109 S{material_final_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed*255/100}" },
|
||||
"machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S1.0\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" },
|
||||
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed/100}" },
|
||||
"machine_extruder_start_code_duration": { "default_value": 8 },
|
||||
"machine_nozzle_offset_x": { "default_value": 0 },
|
||||
"machine_nozzle_offset_y": { "default_value": 0 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
|
|
|
@ -14,8 +14,9 @@
|
|||
"default_value": 0,
|
||||
"maximum_value": "1"
|
||||
},
|
||||
"machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S255\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" },
|
||||
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM109 S{material_final_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed*255/100}" },
|
||||
"machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S1.0\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" },
|
||||
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed/100}" },
|
||||
"machine_extruder_start_code_duration": { "default_value": 10 },
|
||||
"machine_nozzle_offset_x": { "default_value": 0 },
|
||||
"machine_nozzle_offset_y": { "default_value": 0 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
|
|
|
@ -14,8 +14,9 @@
|
|||
"default_value": 1,
|
||||
"maximum_value": "1"
|
||||
},
|
||||
"machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S255\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" },
|
||||
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM109 S{material_final_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed*255/100}" },
|
||||
"machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S1.0\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" },
|
||||
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed/100}" },
|
||||
"machine_extruder_start_code_duration": { "default_value": 10 },
|
||||
"machine_nozzle_offset_x": { "default_value": 0 },
|
||||
"machine_nozzle_offset_y": { "default_value": 0 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
|
|
|
@ -3548,14 +3548,6 @@ msgctxt "support_bottom_height description"
|
|||
msgid "The thickness of the support floors. This controls the number of dense layers that are printed on top of places of a model on which support rests."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "support_interface_skip_height label"
|
||||
msgid "Support Interface Resolution"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "support_interface_skip_height description"
|
||||
msgid "When checking where there's model above and below the support, take steps of the given height. Lower values will slice slower, while higher values may cause normal support to be printed in some places where there should have been support interface."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "support_interface_density label"
|
||||
msgid "Support Interface Density"
|
||||
msgstr ""
|
||||
|
|
|
@ -120,8 +120,8 @@ Item
|
|||
text: catalog.i18nc("@action:inmenu menubar:edit", "&Undo")
|
||||
icon.name: "edit-undo"
|
||||
shortcut: StandardKey.Undo
|
||||
onTriggered: UM.OperationStack.undo()
|
||||
enabled: UM.OperationStack.canUndo
|
||||
onTriggered: CuraActions.undo()
|
||||
enabled: CuraActions.canUndo
|
||||
}
|
||||
|
||||
Action
|
||||
|
@ -130,8 +130,8 @@ Item
|
|||
text: catalog.i18nc("@action:inmenu menubar:edit", "&Redo")
|
||||
icon.name: "edit-redo"
|
||||
shortcut: StandardKey.Redo
|
||||
onTriggered: UM.OperationStack.redo()
|
||||
enabled: UM.OperationStack.canRedo
|
||||
onTriggered: CuraActions.redo()
|
||||
enabled: CuraActions.canRedo
|
||||
}
|
||||
|
||||
Action
|
||||
|
|
|
@ -58,7 +58,7 @@ UM.Dialog
|
|||
UM.Label
|
||||
{
|
||||
id: version
|
||||
text: catalog.i18nc("@label","version: %1").arg(UM.Application.version)
|
||||
text: catalog.i18nc("@label","version: %1").arg(CuraApplication.version())
|
||||
font: UM.Theme.getFont("large_bold")
|
||||
color: UM.Theme.getColor("button_text")
|
||||
anchors.right : logo.right
|
||||
|
|
|
@ -124,6 +124,9 @@ UM.PreferencesPage
|
|||
UM.Preferences.resetPreference("info/send_engine_crash")
|
||||
sendEngineCrashCheckbox.checked = boolCheck(UM.Preferences.getValue("info/send_engine_crash"))
|
||||
|
||||
UM.Preferences.resetPreference("info/anonymous_engine_crash_report")
|
||||
sendEngineCrashCheckboxAnonymous.checked = boolCheck(UM.Preferences.getValue("info/anonymous_engine_crash_report"))
|
||||
|
||||
UM.Preferences.resetPreference("info/automatic_update_check")
|
||||
checkUpdatesCheckbox.checked = boolCheck(UM.Preferences.getValue("info/automatic_update_check"))
|
||||
|
||||
|
@ -859,21 +862,63 @@ UM.PreferencesPage
|
|||
font: UM.Theme.getFont("medium_bold")
|
||||
text: catalog.i18nc("@label", "Privacy")
|
||||
}
|
||||
|
||||
UM.TooltipArea
|
||||
{
|
||||
width: childrenRect.width
|
||||
height: visible ? childrenRect.height : 0
|
||||
text: catalog.i18nc("@info:tooltip", "Should slicing crashes be automatically reported to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored.")
|
||||
text: catalog.i18nc("@info:tooltip", "Should slicing crashes be automatically reported to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored, unless you give explicit permission.")
|
||||
|
||||
UM.CheckBox
|
||||
{
|
||||
id: sendEngineCrashCheckbox
|
||||
text: catalog.i18nc("@option:check","Send (anonymous) engine crash reports")
|
||||
text: catalog.i18nc("@option:check","Send engine crash reports")
|
||||
checked: boolCheck(UM.Preferences.getValue("info/send_engine_crash"))
|
||||
onCheckedChanged: UM.Preferences.setValue("info/send_engine_crash", checked)
|
||||
}
|
||||
}
|
||||
|
||||
ButtonGroup
|
||||
{
|
||||
id: curaCrashGroup
|
||||
buttons: [sendEngineCrashCheckboxAnonymous, sendEngineCrashCheckboxUser]
|
||||
}
|
||||
|
||||
UM.TooltipArea
|
||||
{
|
||||
width: childrenRect.width
|
||||
height: visible ? childrenRect.height : 0
|
||||
text: catalog.i18nc("@info:tooltip", "Send crash reports without any personally identifiable information or models data to UltiMaker.")
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
||||
Cura.RadioButton
|
||||
{
|
||||
id: sendEngineCrashCheckboxAnonymous
|
||||
text: catalog.i18nc("@option:radio", "Anonymous crash reports")
|
||||
enabled: sendEngineCrashCheckbox.checked && Cura.API.account.isLoggedIn
|
||||
checked: boolCheck(UM.Preferences.getValue("info/anonymous_engine_crash_report"))
|
||||
onClicked: UM.Preferences.setValue("info/anonymous_engine_crash_report", true)
|
||||
}
|
||||
}
|
||||
UM.TooltipArea
|
||||
{
|
||||
width: childrenRect.width
|
||||
height: visible ? childrenRect.height : 0
|
||||
text: Cura.API.account.isLoggedIn ?
|
||||
catalog.i18nc("@info:tooltip", "Send crash reports with your registered UltiMaker account name and the project name to UltiMaker Sentry. No actual model data is being send.") :
|
||||
catalog.i18nc("@info:tooltip", "Please sign in to your UltiMaker account to allow sending non-anonymous data.")
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
||||
Cura.RadioButton
|
||||
{
|
||||
id: sendEngineCrashCheckboxUser
|
||||
text: catalog.i18nc("@option:radio", "Include UltiMaker account name")
|
||||
enabled: sendEngineCrashCheckbox.checked && Cura.API.account.isLoggedIn
|
||||
checked: !boolCheck(UM.Preferences.getValue("info/anonymous_engine_crash_report")) && Cura.API.account.isLoggedIn
|
||||
onClicked: UM.Preferences.setValue("info/anonymous_engine_crash_report", false)
|
||||
}
|
||||
}
|
||||
|
||||
UM.TooltipArea
|
||||
{
|
||||
width: childrenRect.width
|
||||
|
|
|
@ -12,6 +12,7 @@ import Cura 1.0 as Cura
|
|||
UM.ManagementPage
|
||||
{
|
||||
id: base
|
||||
property var machineActionManager: CuraApplication.getMachineActionManagerQml()
|
||||
Item { enabled: false; UM.I18nCatalog { id: catalog; name: "cura"} }
|
||||
|
||||
title: catalog.i18nc("@title:tab", "Printers")
|
||||
|
@ -58,10 +59,11 @@ UM.ManagementPage
|
|||
anchors.fill: parent
|
||||
spacing: UM.Theme.getSize("default_margin").height
|
||||
|
||||
|
||||
Repeater
|
||||
{
|
||||
id: machineActionRepeater
|
||||
model: base.currentItem ? Cura.MachineActionManager.getSupportedActions(Cura.MachineManager.getDefinitionByMachineId(base.currentItem.id)) : null
|
||||
model: base.currentItem ? machineActionManager.getSupportedActions(Cura.MachineManager.getDefinitionByMachineId(base.currentItem.id)) : null
|
||||
|
||||
Item
|
||||
{
|
||||
|
|
|
@ -160,7 +160,7 @@ Item
|
|||
ProfileWarningReset
|
||||
{
|
||||
id: profileWarningReset
|
||||
width: childrenRect.width
|
||||
width: parent.width
|
||||
anchors.right: parent.right
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
fullWarning: false
|
||||
|
|
|
@ -187,7 +187,7 @@ Popup
|
|||
//Add all the custom profiles.
|
||||
Repeater
|
||||
{
|
||||
model: Cura.CustomQualityProfilesDropDownMenuModel
|
||||
model: CuraApplication.getCustomQualityProfilesDropDownMenuModel()
|
||||
MenuButton
|
||||
{
|
||||
onClicked: Cura.MachineManager.setQualityChangesGroup(model.quality_changes_group)
|
||||
|
|
|
@ -11,7 +11,7 @@ import "../Dialogs"
|
|||
Item
|
||||
{
|
||||
property bool fullWarning: true // <- Can you see the warning icon and the text, or is it just the buttons?
|
||||
|
||||
property var simpleModeSettingsManager :CuraApplication.getSimpleModeSettingsManager()
|
||||
height: visible ? UM.Theme.getSize("action_button_icon").height : 0
|
||||
width: visible ? childrenRect.width: 0
|
||||
visible: Cura.MachineManager.hasUserSettings || (fullWarning && Cura.MachineManager.hasCustomQuality)
|
||||
|
@ -96,7 +96,7 @@ Item
|
|||
State
|
||||
{
|
||||
name: "custom settings changed"
|
||||
when: Cura.SimpleModeSettingsManager.isProfileCustomized
|
||||
when: simpleModeSettingsManager.isProfileCustomized
|
||||
PropertyChanges
|
||||
{
|
||||
target: warning
|
||||
|
|
|
@ -223,7 +223,7 @@ SettingItem
|
|||
|
||||
cursorShape: Qt.IBeamCursor
|
||||
|
||||
onPressed: {
|
||||
onPressed:(mouse)=> {
|
||||
if (!input.activeFocus)
|
||||
{
|
||||
base.focusGainedByClick = true
|
||||
|
|
|
@ -203,7 +203,7 @@ Item
|
|||
x: UM.Theme.getSize("default_margin").width
|
||||
y: UM.Theme.getSize("default_margin").height
|
||||
|
||||
source: UM.ActiveTool.valid ? UM.ActiveTool.activeToolPanel : ""
|
||||
source: UM.Controller.valid ? UM.Controller.activeToolPanel : ""
|
||||
enabled: UM.Controller.toolsEnabled
|
||||
}
|
||||
}
|
||||
|
@ -222,7 +222,7 @@ Item
|
|||
UM.Label
|
||||
{
|
||||
id: toolHint
|
||||
text: UM.ActiveTool.properties.getValue("ToolHint") != undefined ? UM.ActiveTool.properties.getValue("ToolHint") : ""
|
||||
text: UM.Controller.properties.getValue("ToolHint") != undefined ? UM.ActiveTool.properties.getValue("ToolHint") : ""
|
||||
color: UM.Theme.getColor("tooltip_text")
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
|
|
|
@ -33,7 +33,6 @@ support_infill_rate = 20
|
|||
support_interface_enable = True
|
||||
support_interface_height = 0.60
|
||||
support_interface_pattern = zigzag
|
||||
support_interface_skip_height = 0.30
|
||||
support_offset = 0.8
|
||||
support_z_distance = 0.4
|
||||
wall_thickness = 1.6
|
||||
|
|
|
@ -33,7 +33,6 @@ support_infill_rate = 20
|
|||
support_interface_enable = True
|
||||
support_interface_height = 0.60
|
||||
support_interface_pattern = zigzag
|
||||
support_interface_skip_height = 0.20
|
||||
support_offset = 0.8
|
||||
support_z_distance = 0.3
|
||||
wall_thickness = 1.6
|
||||
|
|
|
@ -33,7 +33,6 @@ support_infill_rate = 20
|
|||
support_interface_enable = True
|
||||
support_interface_height = 0.30
|
||||
support_interface_pattern = zigzag
|
||||
support_interface_skip_height = 0.06
|
||||
support_offset = 0.8
|
||||
support_z_distance = 0.12
|
||||
wall_thickness = 1.6
|
||||
|
|
|
@ -33,7 +33,6 @@ support_infill_rate = 20
|
|||
support_interface_enable = True
|
||||
support_interface_height = 0.30
|
||||
support_interface_pattern = zigzag
|
||||
support_interface_skip_height = 0.10
|
||||
support_offset = 0.8
|
||||
support_z_distance = 0.2
|
||||
wall_thickness = 1.6
|
||||
|
|
|
@ -33,7 +33,6 @@ support_infill_rate = 20
|
|||
support_interface_enable = True
|
||||
support_interface_height = 0.45
|
||||
support_interface_pattern = zigzag
|
||||
support_interface_skip_height = 0.15
|
||||
support_offset = 0.8
|
||||
support_z_distance = 0.25
|
||||
wall_thickness = 1.6
|
||||
|
|
|
@ -33,7 +33,6 @@ support_infill_rate = 20
|
|||
support_interface_enable = True
|
||||
support_interface_height = 0.60
|
||||
support_interface_pattern = zigzag
|
||||
support_interface_skip_height = 0.30
|
||||
support_offset = 0.8
|
||||
support_z_distance = 0.2
|
||||
wall_thickness = 0.8
|
||||
|
|
|
@ -33,7 +33,6 @@ support_infill_rate = 20
|
|||
support_interface_enable = True
|
||||
support_interface_height = 0.40
|
||||
support_interface_pattern = zigzag
|
||||
support_interface_skip_height = 0.20
|
||||
support_offset = 0.8
|
||||
support_z_distance = 0.2
|
||||
wall_thickness = 0.8
|
||||
|
|
|
@ -33,7 +33,6 @@ support_infill_rate = 20
|
|||
support_interface_enable = True
|
||||
support_interface_height = 0.30
|
||||
support_interface_pattern = zigzag
|
||||
support_interface_skip_height = 0.06
|
||||
support_offset = 0.8
|
||||
support_z_distance = 0.2
|
||||
wall_thickness = 0.8
|
||||
|
|
|
@ -33,7 +33,6 @@ support_infill_rate = 20
|
|||
support_interface_enable = True
|
||||
support_interface_height = 0.30
|
||||
support_interface_pattern = zigzag
|
||||
support_interface_skip_height = 0.10
|
||||
support_offset = 0.8
|
||||
support_z_distance = 0.2
|
||||
wall_thickness = 0.8
|
||||
|
|
|
@ -33,7 +33,6 @@ support_infill_rate = 20
|
|||
support_interface_enable = True
|
||||
support_interface_height = 0.45
|
||||
support_interface_pattern = zigzag
|
||||
support_interface_skip_height = 0.15
|
||||
support_offset = 0.8
|
||||
support_z_distance = 0.2
|
||||
wall_thickness = 0.8
|
||||
|
|
|
@ -65,7 +65,6 @@ support_interface_density = 60
|
|||
support_interface_enable = True
|
||||
support_interface_height = 0.96
|
||||
support_interface_pattern = grid
|
||||
support_interface_skip_height = 0.12
|
||||
support_roof_density = 60
|
||||
support_type = everywhere
|
||||
support_wall_count = 1
|
||||
|
|
|
@ -65,7 +65,6 @@ support_interface_density = 60
|
|||
support_interface_enable = True
|
||||
support_interface_height = 0.6
|
||||
support_interface_pattern = grid
|
||||
support_interface_skip_height = 0.2
|
||||
support_roof_density = 60
|
||||
support_type = everywhere
|
||||
support_wall_count = 1
|
||||
|
|
|
@ -100,7 +100,6 @@ support_interface_density = 70
|
|||
support_interface_enable = True
|
||||
support_interface_height = 0.6
|
||||
support_interface_pattern = lines
|
||||
support_interface_skip_height = 0.2
|
||||
support_pattern = zigzag
|
||||
support_roof_density = 70
|
||||
support_type = everywhere
|
||||
|
|
|
@ -65,7 +65,6 @@ support_interface_density = 70
|
|||
support_interface_enable = True
|
||||
support_interface_height = 2
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = 0.1
|
||||
support_type = everywhere
|
||||
support_use_towers = False
|
||||
support_xy_distance = 0.8
|
||||
|
|
|
@ -65,7 +65,6 @@ support_interface_density = 70
|
|||
support_interface_enable = True
|
||||
support_interface_height = 2
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = 0.1
|
||||
support_type = everywhere
|
||||
support_use_towers = False
|
||||
support_xy_distance = 0.8
|
||||
|
|
|
@ -65,7 +65,6 @@ support_interface_density = 70
|
|||
support_interface_enable = True
|
||||
support_interface_height = 2
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = 0.1
|
||||
support_type = everywhere
|
||||
support_use_towers = False
|
||||
support_xy_distance = 0.8
|
||||
|
|
|
@ -65,7 +65,6 @@ support_interface_density = 70
|
|||
support_interface_enable = True
|
||||
support_interface_height = 2
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = 0.1
|
||||
support_type = everywhere
|
||||
support_use_towers = False
|
||||
support_xy_distance = 0.8
|
||||
|
|
|
@ -65,7 +65,6 @@ support_interface_density = 70
|
|||
support_interface_enable = True
|
||||
support_interface_height = 2
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = 0.1
|
||||
support_type = everywhere
|
||||
support_use_towers = False
|
||||
support_xy_distance = 0.8
|
||||
|
|
|
@ -65,7 +65,6 @@ support_interface_density = 70
|
|||
support_interface_enable = True
|
||||
support_interface_height = 2
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = 0.1
|
||||
support_type = everywhere
|
||||
support_use_towers = False
|
||||
support_xy_distance = 0.8
|
||||
|
|
|
@ -65,7 +65,6 @@ support_interface_density = 70
|
|||
support_interface_enable = True
|
||||
support_interface_height = 2
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = 0.1
|
||||
support_type = everywhere
|
||||
support_use_towers = False
|
||||
support_xy_distance = 0.8
|
||||
|
|
|
@ -65,7 +65,6 @@ support_interface_density = 70
|
|||
support_interface_enable = True
|
||||
support_interface_height = 2
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = 0.1
|
||||
support_type = everywhere
|
||||
support_use_towers = False
|
||||
support_xy_distance = 0.8
|
||||
|
|
|
@ -293,7 +293,6 @@ support_bottom_wall_count
|
|||
support_interface_height
|
||||
support_roof_height
|
||||
support_bottom_height
|
||||
support_interface_skip_height
|
||||
support_interface_density
|
||||
support_roof_density
|
||||
support_bottom_density
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
|
@ -21,7 +21,6 @@ support_interface_density = 100
|
|||
support_interface_enable = True
|
||||
support_interface_height = =layer_height * 5
|
||||
support_interface_pattern = concentric
|
||||
support_interface_skip_height = =layer_height
|
||||
support_join_distance = 3
|
||||
support_offset = 3
|
||||
support_pattern = triangles
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue