mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-14 20:15:54 +08:00
Merge branch 'master' of github.com:Ultimaker/Cura
This commit is contained in:
commit
d063741d7a
@ -260,20 +260,16 @@ class CuraApplication(QtApplication):
|
|||||||
self._files_to_open.append(os.path.abspath(filename))
|
self._files_to_open.append(os.path.abspath(filename))
|
||||||
|
|
||||||
def initialize(self) -> None:
|
def initialize(self) -> None:
|
||||||
|
self.__addExpectedResourceDirsAndSearchPaths() # Must be added before init of super
|
||||||
|
|
||||||
super().initialize()
|
super().initialize()
|
||||||
|
|
||||||
self.__sendCommandToSingleInstance()
|
self.__sendCommandToSingleInstance()
|
||||||
self.__addExpectedResourceDirsAndSearchPaths()
|
|
||||||
self.__initializeSettingDefinitionsAndFunctions()
|
self.__initializeSettingDefinitionsAndFunctions()
|
||||||
self.__addAllResourcesAndContainerResources()
|
self.__addAllResourcesAndContainerResources()
|
||||||
self.__addAllEmptyContainers()
|
self.__addAllEmptyContainers()
|
||||||
self.__setLatestResouceVersionsForVersionUpgrade()
|
self.__setLatestResouceVersionsForVersionUpgrade()
|
||||||
|
|
||||||
# Initialize the package manager to remove and install scheduled packages.
|
|
||||||
from cura.CuraPackageManager import CuraPackageManager
|
|
||||||
self._cura_package_manager = CuraPackageManager(self)
|
|
||||||
self._cura_package_manager.initialize()
|
|
||||||
|
|
||||||
self._machine_action_manager = MachineActionManager.MachineActionManager(self)
|
self._machine_action_manager = MachineActionManager.MachineActionManager(self)
|
||||||
self._machine_action_manager.initialize()
|
self._machine_action_manager.initialize()
|
||||||
|
|
||||||
@ -408,6 +404,43 @@ class CuraApplication(QtApplication):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
"""
|
||||||
|
self._currently_loading_files = []
|
||||||
|
self._non_sliceable_extensions = []
|
||||||
|
|
||||||
|
self._machine_action_manager = MachineActionManager.MachineActionManager()
|
||||||
|
self._machine_manager = None # This is initialized on demand.
|
||||||
|
self._extruder_manager = None
|
||||||
|
self._material_manager = None
|
||||||
|
self._quality_manager = None
|
||||||
|
self._object_manager = None
|
||||||
|
self._build_plate_model = None
|
||||||
|
self._multi_build_plate_model = None
|
||||||
|
self._setting_visibility_presets_model = None
|
||||||
|
self._setting_inheritance_manager = None
|
||||||
|
self._simple_mode_settings_manager = None
|
||||||
|
self._cura_scene_controller = None
|
||||||
|
self._machine_error_checker = None
|
||||||
|
self._auto_save = None
|
||||||
|
self._save_data_enabled = True
|
||||||
|
|
||||||
|
self._additional_components = {} # Components to add to certain areas in the interface
|
||||||
|
|
||||||
|
super().__init__(name = "cura",
|
||||||
|
version = CuraVersion,
|
||||||
|
buildtype = CuraBuildType,
|
||||||
|
is_debug_mode = CuraDebugMode,
|
||||||
|
tray_icon_name = "cura-icon-32.png",
|
||||||
|
**kwargs)
|
||||||
|
|
||||||
|
# FOR TESTING ONLY
|
||||||
|
if kwargs["parsed_command_line"].get("trigger_early_crash", False):
|
||||||
|
assert not "This crash is triggered by the trigger_early_crash command line argument."
|
||||||
|
|
||||||
|
self._variant_manager = None
|
||||||
|
|
||||||
|
self.default_theme = "cura-light"
|
||||||
|
"""
|
||||||
# Runs preparations that needs to be done before the starting process.
|
# Runs preparations that needs to be done before the starting process.
|
||||||
def startSplashWindowPhase(self):
|
def startSplashWindowPhase(self):
|
||||||
super().startSplashWindowPhase()
|
super().startSplashWindowPhase()
|
||||||
@ -788,10 +821,6 @@ class CuraApplication(QtApplication):
|
|||||||
self._extruder_manager = ExtruderManager()
|
self._extruder_manager = ExtruderManager()
|
||||||
return self._extruder_manager
|
return self._extruder_manager
|
||||||
|
|
||||||
@pyqtSlot(result = QObject)
|
|
||||||
def getCuraPackageManager(self, *args):
|
|
||||||
return self._cura_package_manager
|
|
||||||
|
|
||||||
def getVariantManager(self, *args):
|
def getVariantManager(self, *args):
|
||||||
return self._variant_manager
|
return self._variant_manager
|
||||||
|
|
||||||
|
@ -1,372 +1,14 @@
|
|||||||
# Copyright (c) 2018 Ultimaker B.V.
|
# Copyright (c) 2018 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
from typing import Optional, Dict, Any
|
from cura.CuraApplication import CuraApplication #To find some resource types.
|
||||||
import json
|
from UM.PackageManager import PackageManager #The class we're extending.
|
||||||
import os
|
from UM.Resources import Resources #To find storage paths for some resource types.
|
||||||
import shutil
|
|
||||||
import zipfile
|
|
||||||
import tempfile
|
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtSlot, QObject, pyqtSignal, QUrl
|
|
||||||
|
|
||||||
from UM.Application import Application
|
|
||||||
from UM.Logger import Logger
|
|
||||||
from UM.Resources import Resources
|
|
||||||
from UM.Version import Version
|
|
||||||
|
|
||||||
|
|
||||||
class CuraPackageManager(QObject):
|
class CuraPackageManager(PackageManager):
|
||||||
Version = 1
|
|
||||||
|
|
||||||
def __init__(self, parent = None):
|
def __init__(self, parent = None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
|
|
||||||
self._application = Application.getInstance()
|
self._installation_dirs_dict["materials"] = Resources.getStoragePath(CuraApplication.ResourceTypes.MaterialInstanceContainer)
|
||||||
self._container_registry = self._application.getContainerRegistry()
|
self._installation_dirs_dict["qualities"] = Resources.getStoragePath(CuraApplication.ResourceTypes.QualityInstanceContainer)
|
||||||
self._plugin_registry = self._application.getPluginRegistry()
|
|
||||||
|
|
||||||
#JSON files that keep track of all installed packages.
|
|
||||||
self._user_package_management_file_path = None #type: str
|
|
||||||
self._bundled_package_management_file_path = None #type: str
|
|
||||||
for search_path in Resources.getSearchPaths():
|
|
||||||
candidate_bundled_path = os.path.join(search_path, "bundled_packages.json")
|
|
||||||
if os.path.exists(candidate_bundled_path):
|
|
||||||
self._bundled_package_management_file_path = candidate_bundled_path
|
|
||||||
for search_path in (Resources.getDataStoragePath(), Resources.getConfigStoragePath()):
|
|
||||||
candidate_user_path = os.path.join(search_path, "packages.json")
|
|
||||||
if os.path.exists(candidate_user_path):
|
|
||||||
self._user_package_management_file_path = candidate_user_path
|
|
||||||
if self._user_package_management_file_path is None: #Doesn't exist yet.
|
|
||||||
self._user_package_management_file_path = os.path.join(Resources.getDataStoragePath(), "packages.json")
|
|
||||||
|
|
||||||
self._bundled_package_dict = {} # A dict of all bundled packages
|
|
||||||
self._installed_package_dict = {} # A dict of all installed packages
|
|
||||||
self._to_remove_package_set = set() # A set of packages that need to be removed at the next start
|
|
||||||
self._to_install_package_dict = {} # A dict of packages that need to be installed at the next start
|
|
||||||
|
|
||||||
installedPackagesChanged = pyqtSignal() # Emitted whenever the installed packages collection have been changed.
|
|
||||||
|
|
||||||
def initialize(self):
|
|
||||||
self._loadManagementData()
|
|
||||||
self._removeAllScheduledPackages()
|
|
||||||
self._installAllScheduledPackages()
|
|
||||||
|
|
||||||
# (for initialize) Loads the package management file if exists
|
|
||||||
def _loadManagementData(self) -> None:
|
|
||||||
# The bundles package management file should always be there
|
|
||||||
if not os.path.exists(self._bundled_package_management_file_path):
|
|
||||||
Logger.log("w", "Bundled package management file could not be found!")
|
|
||||||
return
|
|
||||||
# Load the bundled packages:
|
|
||||||
with open(self._bundled_package_management_file_path, "r", encoding = "utf-8") as f:
|
|
||||||
self._bundled_package_dict = json.load(f, encoding = "utf-8")
|
|
||||||
Logger.log("i", "Loaded bundled packages data from %s", self._bundled_package_management_file_path)
|
|
||||||
|
|
||||||
# Load the user package management file
|
|
||||||
if not os.path.exists(self._user_package_management_file_path):
|
|
||||||
Logger.log("i", "User package management file %s doesn't exist, do nothing", self._user_package_management_file_path)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Need to use the file lock here to prevent concurrent I/O from other processes/threads
|
|
||||||
container_registry = self._application.getContainerRegistry()
|
|
||||||
with container_registry.lockFile():
|
|
||||||
|
|
||||||
# Load the user packages:
|
|
||||||
with open(self._user_package_management_file_path, "r", encoding="utf-8") as f:
|
|
||||||
management_dict = json.load(f, encoding="utf-8")
|
|
||||||
self._installed_package_dict = management_dict.get("installed", {})
|
|
||||||
self._to_remove_package_set = set(management_dict.get("to_remove", []))
|
|
||||||
self._to_install_package_dict = management_dict.get("to_install", {})
|
|
||||||
Logger.log("i", "Loaded user packages management file from %s", self._user_package_management_file_path)
|
|
||||||
|
|
||||||
def _saveManagementData(self) -> None:
|
|
||||||
# Need to use the file lock here to prevent concurrent I/O from other processes/threads
|
|
||||||
container_registry = self._application.getContainerRegistry()
|
|
||||||
with container_registry.lockFile():
|
|
||||||
with open(self._user_package_management_file_path, "w", encoding = "utf-8") as f:
|
|
||||||
data_dict = {"version": CuraPackageManager.Version,
|
|
||||||
"installed": self._installed_package_dict,
|
|
||||||
"to_remove": list(self._to_remove_package_set),
|
|
||||||
"to_install": self._to_install_package_dict}
|
|
||||||
json.dump(data_dict, f, sort_keys = True, indent = 4)
|
|
||||||
Logger.log("i", "Package management file %s was saved", self._user_package_management_file_path)
|
|
||||||
|
|
||||||
# (for initialize) Removes all packages that have been scheduled to be removed.
|
|
||||||
def _removeAllScheduledPackages(self) -> None:
|
|
||||||
for package_id in self._to_remove_package_set:
|
|
||||||
self._purgePackage(package_id)
|
|
||||||
del self._installed_package_dict[package_id]
|
|
||||||
self._to_remove_package_set.clear()
|
|
||||||
self._saveManagementData()
|
|
||||||
|
|
||||||
# (for initialize) Installs all packages that have been scheduled to be installed.
|
|
||||||
def _installAllScheduledPackages(self) -> None:
|
|
||||||
while self._to_install_package_dict:
|
|
||||||
package_id, package_info = list(self._to_install_package_dict.items())[0]
|
|
||||||
self._installPackage(package_info)
|
|
||||||
del self._to_install_package_dict[package_id]
|
|
||||||
self._saveManagementData()
|
|
||||||
|
|
||||||
def getBundledPackageInfo(self, package_id: str) -> Optional[dict]:
|
|
||||||
package_info = None
|
|
||||||
if package_id in self._bundled_package_dict:
|
|
||||||
package_info = self._bundled_package_dict[package_id]["package_info"]
|
|
||||||
return package_info
|
|
||||||
|
|
||||||
# Checks the given package is installed. If so, return a dictionary that contains the package's information.
|
|
||||||
def getInstalledPackageInfo(self, package_id: str) -> Optional[dict]:
|
|
||||||
if package_id in self._to_remove_package_set:
|
|
||||||
return None
|
|
||||||
|
|
||||||
if package_id in self._to_install_package_dict:
|
|
||||||
package_info = self._to_install_package_dict[package_id]["package_info"]
|
|
||||||
return package_info
|
|
||||||
|
|
||||||
if package_id in self._installed_package_dict:
|
|
||||||
package_info = self._installed_package_dict[package_id]["package_info"]
|
|
||||||
return package_info
|
|
||||||
|
|
||||||
if package_id in self._bundled_package_dict:
|
|
||||||
package_info = self._bundled_package_dict[package_id]["package_info"]
|
|
||||||
return package_info
|
|
||||||
|
|
||||||
return None
|
|
||||||
|
|
||||||
def getAllInstalledPackageIDs(self) -> set:
|
|
||||||
# Add bundled, installed, and to-install packages to the set of installed package IDs
|
|
||||||
all_installed_ids = set()
|
|
||||||
|
|
||||||
if self._bundled_package_dict.keys():
|
|
||||||
all_installed_ids = all_installed_ids.union(set(self._bundled_package_dict.keys()))
|
|
||||||
if self._installed_package_dict.keys():
|
|
||||||
all_installed_ids = all_installed_ids.union(set(self._installed_package_dict.keys()))
|
|
||||||
all_installed_ids = all_installed_ids.difference(self._to_remove_package_set)
|
|
||||||
# If it's going to be installed and to be removed, then the package is being updated and it should be listed.
|
|
||||||
if self._to_install_package_dict.keys():
|
|
||||||
all_installed_ids = all_installed_ids.union(set(self._to_install_package_dict.keys()))
|
|
||||||
|
|
||||||
return all_installed_ids
|
|
||||||
|
|
||||||
def getAllInstalledPackagesInfo(self) -> dict:
|
|
||||||
|
|
||||||
all_installed_ids = self.getAllInstalledPackageIDs()
|
|
||||||
|
|
||||||
# map of <package_type> -> <package_id> -> <package_info>
|
|
||||||
installed_packages_dict = {}
|
|
||||||
for package_id in all_installed_ids:
|
|
||||||
# Skip required plugins as they should not be tampered with
|
|
||||||
if package_id in Application.getInstance().getRequiredPlugins():
|
|
||||||
continue
|
|
||||||
|
|
||||||
package_info = None
|
|
||||||
# Add bundled plugins
|
|
||||||
if package_id in self._bundled_package_dict:
|
|
||||||
package_info = self._bundled_package_dict[package_id]["package_info"]
|
|
||||||
package_info["is_installed"] = True
|
|
||||||
|
|
||||||
# Add installed plugins
|
|
||||||
if package_id in self._installed_package_dict:
|
|
||||||
package_info = self._installed_package_dict[package_id]["package_info"]
|
|
||||||
package_info["is_installed"] = True
|
|
||||||
|
|
||||||
# Add to install plugins
|
|
||||||
if package_id in self._to_install_package_dict:
|
|
||||||
package_info = self._to_install_package_dict[package_id]["package_info"]
|
|
||||||
package_info["is_installed"] = False
|
|
||||||
|
|
||||||
if package_info is None:
|
|
||||||
continue
|
|
||||||
|
|
||||||
# We also need to get information from the plugin registry such as if a plugin is active
|
|
||||||
package_info["is_active"] = self._plugin_registry.isActivePlugin(package_id)
|
|
||||||
|
|
||||||
# If the package ID is in bundled, label it as such
|
|
||||||
package_info["is_bundled"] = package_info["package_id"] in self._bundled_package_dict.keys() and not self.isUserInstalledPackage(package_info["package_id"])
|
|
||||||
|
|
||||||
# If there is not a section in the dict for this type, add it
|
|
||||||
if package_info["package_type"] not in installed_packages_dict:
|
|
||||||
installed_packages_dict[package_info["package_type"]] = []
|
|
||||||
|
|
||||||
# Finally, add the data
|
|
||||||
installed_packages_dict[package_info["package_type"]].append(package_info)
|
|
||||||
|
|
||||||
return installed_packages_dict
|
|
||||||
|
|
||||||
# Checks if the given package is installed (at all).
|
|
||||||
def isPackageInstalled(self, package_id: str) -> bool:
|
|
||||||
return self.getInstalledPackageInfo(package_id) is not None
|
|
||||||
|
|
||||||
# This is called by drag-and-dropping curapackage files.
|
|
||||||
@pyqtSlot(QUrl)
|
|
||||||
def installPackageViaDragAndDrop(self, file_url: str) -> None:
|
|
||||||
filename = QUrl(file_url).toLocalFile()
|
|
||||||
return self.installPackage(filename)
|
|
||||||
|
|
||||||
# Schedules the given package file to be installed upon the next start.
|
|
||||||
@pyqtSlot(str)
|
|
||||||
def installPackage(self, filename: str) -> None:
|
|
||||||
has_changes = False
|
|
||||||
try:
|
|
||||||
# Get package information
|
|
||||||
package_info = self.getPackageInfo(filename)
|
|
||||||
if not package_info:
|
|
||||||
return
|
|
||||||
package_id = package_info["package_id"]
|
|
||||||
|
|
||||||
# Check if it is installed
|
|
||||||
installed_package_info = self.getInstalledPackageInfo(package_info["package_id"])
|
|
||||||
to_install_package = installed_package_info is None # Install if the package has not been installed
|
|
||||||
if installed_package_info is not None:
|
|
||||||
# Compare versions and only schedule the installation if the given package is newer
|
|
||||||
new_version = package_info["package_version"]
|
|
||||||
installed_version = installed_package_info["package_version"]
|
|
||||||
if Version(new_version) > Version(installed_version):
|
|
||||||
Logger.log("i", "Package [%s] version [%s] is newer than the installed version [%s], update it.",
|
|
||||||
package_id, new_version, installed_version)
|
|
||||||
to_install_package = True
|
|
||||||
|
|
||||||
if to_install_package:
|
|
||||||
# Need to use the lock file to prevent concurrent I/O issues.
|
|
||||||
with self._container_registry.lockFile():
|
|
||||||
Logger.log("i", "Package [%s] version [%s] is scheduled to be installed.",
|
|
||||||
package_id, package_info["package_version"])
|
|
||||||
# Copy the file to cache dir so we don't need to rely on the original file to be present
|
|
||||||
package_cache_dir = os.path.join(os.path.abspath(Resources.getCacheStoragePath()), "cura_packages")
|
|
||||||
if not os.path.exists(package_cache_dir):
|
|
||||||
os.makedirs(package_cache_dir, exist_ok=True)
|
|
||||||
|
|
||||||
target_file_path = os.path.join(package_cache_dir, package_id + ".curapackage")
|
|
||||||
shutil.copy2(filename, target_file_path)
|
|
||||||
|
|
||||||
self._to_install_package_dict[package_id] = {"package_info": package_info,
|
|
||||||
"filename": target_file_path}
|
|
||||||
has_changes = True
|
|
||||||
except:
|
|
||||||
Logger.logException("c", "Failed to install package file '%s'", filename)
|
|
||||||
finally:
|
|
||||||
self._saveManagementData()
|
|
||||||
if has_changes:
|
|
||||||
self.installedPackagesChanged.emit()
|
|
||||||
|
|
||||||
# Schedules the given package to be removed upon the next start.
|
|
||||||
# \param package_id id of the package
|
|
||||||
# \param force_add is used when updating. In that case you actually want to uninstall & install
|
|
||||||
@pyqtSlot(str)
|
|
||||||
def removePackage(self, package_id: str, force_add: bool = False) -> None:
|
|
||||||
# Check the delayed installation and removal lists first
|
|
||||||
if not self.isPackageInstalled(package_id):
|
|
||||||
Logger.log("i", "Attempt to remove package [%s] that is not installed, do nothing.", package_id)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Extra safety check
|
|
||||||
if package_id not in self._installed_package_dict and package_id in self._bundled_package_dict:
|
|
||||||
Logger.log("i", "Not uninstalling [%s] because it is a bundled package.")
|
|
||||||
return
|
|
||||||
|
|
||||||
if package_id not in self._to_install_package_dict or force_add:
|
|
||||||
# Schedule for a delayed removal:
|
|
||||||
self._to_remove_package_set.add(package_id)
|
|
||||||
else:
|
|
||||||
if package_id in self._to_install_package_dict:
|
|
||||||
# Remove from the delayed installation list if present
|
|
||||||
del self._to_install_package_dict[package_id]
|
|
||||||
|
|
||||||
self._saveManagementData()
|
|
||||||
self.installedPackagesChanged.emit()
|
|
||||||
|
|
||||||
## Is the package an user installed package?
|
|
||||||
def isUserInstalledPackage(self, package_id: str):
|
|
||||||
return package_id in self._installed_package_dict
|
|
||||||
|
|
||||||
# Removes everything associated with the given package ID.
|
|
||||||
def _purgePackage(self, package_id: str) -> None:
|
|
||||||
# Iterate through all directories in the data storage directory and look for sub-directories that belong to
|
|
||||||
# the package we need to remove, that is the sub-dirs with the package_id as names, and remove all those dirs.
|
|
||||||
data_storage_dir = os.path.abspath(Resources.getDataStoragePath())
|
|
||||||
|
|
||||||
for root, dir_names, _ in os.walk(data_storage_dir):
|
|
||||||
for dir_name in dir_names:
|
|
||||||
package_dir = os.path.join(root, dir_name, package_id)
|
|
||||||
if os.path.exists(package_dir):
|
|
||||||
Logger.log("i", "Removing '%s' for package [%s]", package_dir, package_id)
|
|
||||||
shutil.rmtree(package_dir)
|
|
||||||
break
|
|
||||||
|
|
||||||
# Installs all files associated with the given package.
|
|
||||||
def _installPackage(self, installation_package_data: dict):
|
|
||||||
package_info = installation_package_data["package_info"]
|
|
||||||
filename = installation_package_data["filename"]
|
|
||||||
|
|
||||||
package_id = package_info["package_id"]
|
|
||||||
|
|
||||||
if not os.path.exists(filename):
|
|
||||||
Logger.log("w", "Package [%s] file '%s' is missing, cannot install this package", package_id, filename)
|
|
||||||
return
|
|
||||||
|
|
||||||
Logger.log("i", "Installing package [%s] from file [%s]", package_id, filename)
|
|
||||||
|
|
||||||
# remove it first and then install
|
|
||||||
self._purgePackage(package_id)
|
|
||||||
|
|
||||||
# Install the package
|
|
||||||
with zipfile.ZipFile(filename, "r") as archive:
|
|
||||||
|
|
||||||
temp_dir = tempfile.TemporaryDirectory()
|
|
||||||
archive.extractall(temp_dir.name)
|
|
||||||
|
|
||||||
from cura.CuraApplication import CuraApplication
|
|
||||||
installation_dirs_dict = {
|
|
||||||
"materials": Resources.getStoragePath(CuraApplication.ResourceTypes.MaterialInstanceContainer),
|
|
||||||
"qualities": Resources.getStoragePath(CuraApplication.ResourceTypes.QualityInstanceContainer),
|
|
||||||
"plugins": os.path.abspath(Resources.getStoragePath(Resources.Plugins)),
|
|
||||||
}
|
|
||||||
|
|
||||||
for sub_dir_name, installation_root_dir in installation_dirs_dict.items():
|
|
||||||
src_dir_path = os.path.join(temp_dir.name, "files", sub_dir_name)
|
|
||||||
dst_dir_path = os.path.join(installation_root_dir, package_id)
|
|
||||||
|
|
||||||
if not os.path.exists(src_dir_path):
|
|
||||||
continue
|
|
||||||
self.__installPackageFiles(package_id, src_dir_path, dst_dir_path)
|
|
||||||
|
|
||||||
# Remove the file
|
|
||||||
os.remove(filename)
|
|
||||||
# Move the info to the installed list of packages only when it succeeds
|
|
||||||
self._installed_package_dict[package_id] = self._to_install_package_dict[package_id]
|
|
||||||
|
|
||||||
def __installPackageFiles(self, package_id: str, src_dir: str, dst_dir: str) -> None:
|
|
||||||
Logger.log("i", "Moving package {package_id} from {src_dir} to {dst_dir}".format(package_id=package_id, src_dir=src_dir, dst_dir=dst_dir))
|
|
||||||
shutil.move(src_dir, dst_dir)
|
|
||||||
|
|
||||||
# Gets package information from the given file.
|
|
||||||
def getPackageInfo(self, filename: str) -> Dict[str, Any]:
|
|
||||||
with zipfile.ZipFile(filename) as archive:
|
|
||||||
try:
|
|
||||||
# All information is in package.json
|
|
||||||
with archive.open("package.json") as f:
|
|
||||||
package_info_dict = json.loads(f.read().decode("utf-8"))
|
|
||||||
return package_info_dict
|
|
||||||
except Exception as e:
|
|
||||||
Logger.logException("w", "Could not get package information from file '%s': %s" % (filename, e))
|
|
||||||
return {}
|
|
||||||
|
|
||||||
# Gets the license file content if present in the given package file.
|
|
||||||
# Returns None if there is no license file found.
|
|
||||||
def getPackageLicense(self, filename: str) -> Optional[str]:
|
|
||||||
license_string = None
|
|
||||||
with zipfile.ZipFile(filename) as archive:
|
|
||||||
# Go through all the files and use the first successful read as the result
|
|
||||||
for file_info in archive.infolist():
|
|
||||||
if file_info.filename.endswith("LICENSE"):
|
|
||||||
Logger.log("d", "Found potential license file '%s'", file_info.filename)
|
|
||||||
try:
|
|
||||||
with archive.open(file_info.filename, "r") as f:
|
|
||||||
data = f.read()
|
|
||||||
license_string = data.decode("utf-8")
|
|
||||||
break
|
|
||||||
except:
|
|
||||||
Logger.logException("e", "Failed to load potential license file '%s' as text file.",
|
|
||||||
file_info.filename)
|
|
||||||
license_string = None
|
|
||||||
return license_string
|
|
||||||
|
@ -254,7 +254,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice):
|
|||||||
self._last_manager_create_time = time()
|
self._last_manager_create_time = time()
|
||||||
self._manager.authenticationRequired.connect(self._onAuthenticationRequired)
|
self._manager.authenticationRequired.connect(self._onAuthenticationRequired)
|
||||||
|
|
||||||
if b'temporary' not in self._properties:
|
if self._properties.get(b"temporary", b"false") != b"true":
|
||||||
Application.getInstance().getMachineManager().checkCorrectGroupName(self.getId(), self.name)
|
Application.getInstance().getMachineManager().checkCorrectGroupName(self.getId(), self.name)
|
||||||
|
|
||||||
def _registerOnFinishedCallback(self, reply: QNetworkReply, onFinished: Optional[Callable[[Any, QNetworkReply], None]]) -> None:
|
def _registerOnFinishedCallback(self, reply: QNetworkReply, onFinished: Optional[Callable[[Any, QNetworkReply], None]]) -> None:
|
||||||
|
@ -1243,7 +1243,7 @@ class MachineManager(QObject):
|
|||||||
## Given a printer definition name, select the right machine instance. In case it doesn't exist, create a new
|
## Given a printer definition name, select the right machine instance. In case it doesn't exist, create a new
|
||||||
# instance with the same network key.
|
# instance with the same network key.
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def switchPrinterType(self, machine_name: str):
|
def switchPrinterType(self, machine_name: str) -> None:
|
||||||
# Don't switch if the user tries to change to the same type of printer
|
# Don't switch if the user tries to change to the same type of printer
|
||||||
if self.activeMachineDefinitionName == machine_name:
|
if self.activeMachineDefinitionName == machine_name:
|
||||||
return
|
return
|
||||||
@ -1254,6 +1254,8 @@ class MachineManager(QObject):
|
|||||||
# If there is no machine, then create a new one and set it to the non-hidden instance
|
# If there is no machine, then create a new one and set it to the non-hidden instance
|
||||||
if not new_machine:
|
if not new_machine:
|
||||||
new_machine = CuraStackBuilder.createMachine(machine_definition_id + "_sync", machine_definition_id)
|
new_machine = CuraStackBuilder.createMachine(machine_definition_id + "_sync", machine_definition_id)
|
||||||
|
if not new_machine:
|
||||||
|
return
|
||||||
new_machine.addMetaDataEntry("um_network_key", self.activeMachineNetworkKey)
|
new_machine.addMetaDataEntry("um_network_key", self.activeMachineNetworkKey)
|
||||||
new_machine.addMetaDataEntry("connect_group_name", self.activeMachineNetworkGroupName)
|
new_machine.addMetaDataEntry("connect_group_name", self.activeMachineNetworkGroupName)
|
||||||
new_machine.addMetaDataEntry("hidden", False)
|
new_machine.addMetaDataEntry("hidden", False)
|
||||||
|
@ -86,7 +86,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
|||||||
|
|
||||||
MimeTypeDatabase.addMimeType(
|
MimeTypeDatabase.addMimeType(
|
||||||
MimeType(
|
MimeType(
|
||||||
name="application/x-cura-project-file",
|
name="application/x-curaproject+xml",
|
||||||
comment="Cura Project File",
|
comment="Cura Project File",
|
||||||
suffixes=["curaproject.3mf"]
|
suffixes=["curaproject.3mf"]
|
||||||
)
|
)
|
||||||
@ -606,6 +606,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
|||||||
machine_name = self._container_registry.uniqueName(self._machine_info.name)
|
machine_name = self._container_registry.uniqueName(self._machine_info.name)
|
||||||
|
|
||||||
global_stack = CuraStackBuilder.createMachine(machine_name, self._machine_info.definition_id)
|
global_stack = CuraStackBuilder.createMachine(machine_name, self._machine_info.definition_id)
|
||||||
|
if global_stack: #Only switch if creating the machine was successful.
|
||||||
extruder_stack_dict = global_stack.extruders
|
extruder_stack_dict = global_stack.extruders
|
||||||
|
|
||||||
self._container_registry.addContainer(global_stack)
|
self._container_registry.addContainer(global_stack)
|
||||||
|
@ -6,11 +6,13 @@ from PyQt5.QtGui import QDesktopServices
|
|||||||
|
|
||||||
from UM.Extension import Extension
|
from UM.Extension import Extension
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
|
from UM.Logger import Logger
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
|
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||||
|
|
||||||
from cura.Settings.GlobalStack import GlobalStack
|
from cura.Settings.GlobalStack import GlobalStack
|
||||||
|
|
||||||
from .FirmwareUpdateCheckerJob import FirmwareUpdateCheckerJob
|
from .FirmwareUpdateCheckerJob import FirmwareUpdateCheckerJob
|
||||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
|
||||||
|
|
||||||
i18n_catalog = i18nCatalog("cura")
|
i18n_catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
@ -35,6 +37,7 @@ class FirmwareUpdateChecker(Extension):
|
|||||||
ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded)
|
ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded)
|
||||||
|
|
||||||
self._download_url = None
|
self._download_url = None
|
||||||
|
self._check_job = None
|
||||||
|
|
||||||
## Callback for the message that is spawned when there is a new version.
|
## Callback for the message that is spawned when there is a new version.
|
||||||
def _onActionTriggered(self, message, action):
|
def _onActionTriggered(self, message, action):
|
||||||
@ -50,6 +53,9 @@ class FirmwareUpdateChecker(Extension):
|
|||||||
if isinstance(container, GlobalStack):
|
if isinstance(container, GlobalStack):
|
||||||
self.checkFirmwareVersion(container, True)
|
self.checkFirmwareVersion(container, True)
|
||||||
|
|
||||||
|
def _onJobFinished(self, *args, **kwargs):
|
||||||
|
self._check_job = None
|
||||||
|
|
||||||
## Connect with software.ultimaker.com, load latest.version and check version info.
|
## Connect with software.ultimaker.com, load latest.version and check version info.
|
||||||
# If the version info is different from the current version, spawn a message to
|
# If the version info is different from the current version, spawn a message to
|
||||||
# allow the user to download it.
|
# allow the user to download it.
|
||||||
@ -57,7 +63,13 @@ class FirmwareUpdateChecker(Extension):
|
|||||||
# \param silent type(boolean) Suppresses messages other than "new version found" messages.
|
# \param silent type(boolean) Suppresses messages other than "new version found" messages.
|
||||||
# This is used when checking for a new firmware version at startup.
|
# This is used when checking for a new firmware version at startup.
|
||||||
def checkFirmwareVersion(self, container = None, silent = False):
|
def checkFirmwareVersion(self, container = None, silent = False):
|
||||||
job = FirmwareUpdateCheckerJob(container = container, silent = silent, url = self.JEDI_VERSION_URL,
|
# Do not run multiple check jobs in parallel
|
||||||
|
if self._check_job is not None:
|
||||||
|
Logger.log("i", "A firmware update check is already running, do nothing.")
|
||||||
|
return
|
||||||
|
|
||||||
|
self._check_job = FirmwareUpdateCheckerJob(container = container, silent = silent, url = self.JEDI_VERSION_URL,
|
||||||
callback = self._onActionTriggered,
|
callback = self._onActionTriggered,
|
||||||
set_download_url_callback = self._onSetDownloadUrl)
|
set_download_url_callback = self._onSetDownloadUrl)
|
||||||
job.start()
|
self._check_job.start()
|
||||||
|
self._check_job.finished.connect(self._onJobFinished)
|
||||||
|
@ -156,7 +156,7 @@ class Toolbox(QObject, Extension):
|
|||||||
# This is a plugin, so most of the components required are not ready when
|
# This is a plugin, so most of the components required are not ready when
|
||||||
# this is initialized. Therefore, we wait until the application is ready.
|
# this is initialized. Therefore, we wait until the application is ready.
|
||||||
def _onAppInitialized(self) -> None:
|
def _onAppInitialized(self) -> None:
|
||||||
self._package_manager = Application.getInstance().getCuraPackageManager()
|
self._package_manager = Application.getInstance().getPackageManager()
|
||||||
self._sdk_version = self._getSDKVersion()
|
self._sdk_version = self._getSDKVersion()
|
||||||
self._cloud_api_version = self._getCloudAPIVersion()
|
self._cloud_api_version = self._getCloudAPIVersion()
|
||||||
self._cloud_api_root = self._getCloudAPIRoot()
|
self._cloud_api_root = self._getCloudAPIRoot()
|
||||||
|
@ -518,9 +518,10 @@ class XmlMaterialProfile(InstanceContainer):
|
|||||||
meta_data["name"] = label.text
|
meta_data["name"] = label.text
|
||||||
else:
|
else:
|
||||||
meta_data["name"] = self._profile_name(material.text, color.text)
|
meta_data["name"] = self._profile_name(material.text, color.text)
|
||||||
meta_data["brand"] = brand.text
|
|
||||||
meta_data["material"] = material.text
|
meta_data["brand"] = brand.text if brand.text is not None else "Unknown Brand"
|
||||||
meta_data["color_name"] = color.text
|
meta_data["material"] = material.text if material.text is not None else "Unknown Type"
|
||||||
|
meta_data["color_name"] = color.text if color.text is not None else "Unknown Color"
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# setting_version is derived from the "version" tag in the schema earlier, so don't set it here
|
# setting_version is derived from the "version" tag in the schema earlier, so don't set it here
|
||||||
@ -811,9 +812,10 @@ class XmlMaterialProfile(InstanceContainer):
|
|||||||
base_metadata["name"] = label.text
|
base_metadata["name"] = label.text
|
||||||
else:
|
else:
|
||||||
base_metadata["name"] = cls._profile_name(material.text, color.text)
|
base_metadata["name"] = cls._profile_name(material.text, color.text)
|
||||||
base_metadata["brand"] = brand.text
|
|
||||||
base_metadata["material"] = material.text
|
base_metadata["brand"] = brand.text if brand.text is not None else "Unknown Brand"
|
||||||
base_metadata["color_name"] = color.text
|
base_metadata["material"] = material.text if material.text is not None else "Unknown Type"
|
||||||
|
base_metadata["color_name"] = color.text if color.text is not None else "Unknown Color"
|
||||||
continue
|
continue
|
||||||
|
|
||||||
#Setting_version is derived from the "version" tag in the schema earlier, so don't set it here.
|
#Setting_version is derived from the "version" tag in the schema earlier, so don't set it here.
|
||||||
@ -976,6 +978,8 @@ class XmlMaterialProfile(InstanceContainer):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _profile_name(cls, material_name, color_name):
|
def _profile_name(cls, material_name, color_name):
|
||||||
|
if material_name is None:
|
||||||
|
return "Unknown Material"
|
||||||
if color_name != "Generic":
|
if color_name != "Generic":
|
||||||
return "%s %s" % (color_name, material_name)
|
return "%s %s" % (color_name, material_name)
|
||||||
else:
|
else:
|
||||||
|
@ -5394,7 +5394,6 @@
|
|||||||
"type": "bool",
|
"type": "bool",
|
||||||
"default_value": false,
|
"default_value": false,
|
||||||
"value": "machine_gcode_flavor==\"RepRap (RepRap)\"",
|
"value": "machine_gcode_flavor==\"RepRap (RepRap)\"",
|
||||||
"enabled": true,
|
|
||||||
"settable_per_mesh": false,
|
"settable_per_mesh": false,
|
||||||
"settable_per_extruder": false
|
"settable_per_extruder": false
|
||||||
}
|
}
|
||||||
|
@ -139,13 +139,15 @@ UM.MainWindow
|
|||||||
text: catalog.i18nc("@title:menu menubar:file","Save &Project...")
|
text: catalog.i18nc("@title:menu menubar:file","Save &Project...")
|
||||||
onTriggered:
|
onTriggered:
|
||||||
{
|
{
|
||||||
|
var args = { "filter_by_machine": false, "file_type": "workspace", "preferred_mimetype": "application/x-curaproject+xml" };
|
||||||
if(UM.Preferences.getValue("cura/dialog_on_project_save"))
|
if(UM.Preferences.getValue("cura/dialog_on_project_save"))
|
||||||
{
|
{
|
||||||
|
saveWorkspaceDialog.args = args;
|
||||||
saveWorkspaceDialog.open()
|
saveWorkspaceDialog.open()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UM.OutputDeviceManager.requestWriteToDevice("local_file", PrintInformation.jobName, { "filter_by_machine": false, "file_type": "workspace" })
|
UM.OutputDeviceManager.requestWriteToDevice("local_file", PrintInformation.jobName, args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -331,7 +333,7 @@ UM.MainWindow
|
|||||||
if (filename.endsWith(".curapackage"))
|
if (filename.endsWith(".curapackage"))
|
||||||
{
|
{
|
||||||
// Try to install plugin & close.
|
// Try to install plugin & close.
|
||||||
CuraApplication.getCuraPackageManager().installPackageViaDragAndDrop(filename);
|
CuraApplication.getPackageManager().installPackageViaDragAndDrop(filename);
|
||||||
packageInstallDialog.text = catalog.i18nc("@label", "This package will be installed after restarting.");
|
packageInstallDialog.text = catalog.i18nc("@label", "This package will be installed after restarting.");
|
||||||
packageInstallDialog.icon = StandardIcon.Information;
|
packageInstallDialog.icon = StandardIcon.Information;
|
||||||
packageInstallDialog.open();
|
packageInstallDialog.open();
|
||||||
@ -557,7 +559,8 @@ UM.MainWindow
|
|||||||
WorkspaceSummaryDialog
|
WorkspaceSummaryDialog
|
||||||
{
|
{
|
||||||
id: saveWorkspaceDialog
|
id: saveWorkspaceDialog
|
||||||
onYes: UM.OutputDeviceManager.requestWriteToDevice("local_file", PrintInformation.jobName, { "filter_by_machine": false, "file_type": "workspace" })
|
property var args
|
||||||
|
onYes: UM.OutputDeviceManager.requestWriteToDevice("local_file", PrintInformation.jobName, args)
|
||||||
}
|
}
|
||||||
|
|
||||||
Connections
|
Connections
|
||||||
|
@ -482,7 +482,7 @@ Item
|
|||||||
{
|
{
|
||||||
var currentItem = materialsModel.getItem(materialListView.currentIndex);
|
var currentItem = materialsModel.getItem(materialListView.currentIndex);
|
||||||
|
|
||||||
materialProperties.name = currentItem.name;
|
materialProperties.name = currentItem.name ? currentItem.name : "Unknown";
|
||||||
materialProperties.guid = currentItem.guid;
|
materialProperties.guid = currentItem.guid;
|
||||||
|
|
||||||
materialProperties.brand = currentItem.brand ? currentItem.brand : "Unknown";
|
materialProperties.brand = currentItem.brand ? currentItem.brand : "Unknown";
|
||||||
|
@ -17,6 +17,6 @@ top_bottom_thickness = 0.8
|
|||||||
infill_sparse_density = 20
|
infill_sparse_density = 20
|
||||||
speed_print = 80
|
speed_print = 80
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 80)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -17,6 +17,6 @@ top_bottom_thickness = 0.8
|
|||||||
infill_sparse_density = 20
|
infill_sparse_density = 20
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -17,6 +17,6 @@ top_bottom_thickness = 0.8
|
|||||||
infill_sparse_density = 20
|
infill_sparse_density = 20
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -17,6 +17,6 @@ top_bottom_thickness = 0.8
|
|||||||
infill_sparse_density = 20
|
infill_sparse_density = 20
|
||||||
speed_print = 80
|
speed_print = 80
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 80)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -17,6 +17,6 @@ top_bottom_thickness = 0.8
|
|||||||
infill_sparse_density = 20
|
infill_sparse_density = 20
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -17,6 +17,6 @@ top_bottom_thickness = 0.8
|
|||||||
infill_sparse_density = 20
|
infill_sparse_density = 20
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -17,6 +17,6 @@ top_bottom_thickness = 0.8
|
|||||||
infill_sparse_density = 20
|
infill_sparse_density = 20
|
||||||
speed_print = 80
|
speed_print = 80
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 80)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -17,6 +17,6 @@ top_bottom_thickness = 0.8
|
|||||||
infill_sparse_density = 20
|
infill_sparse_density = 20
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -17,6 +17,6 @@ top_bottom_thickness = 0.8
|
|||||||
infill_sparse_density = 20
|
infill_sparse_density = 20
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -41,13 +41,13 @@ retraction_speed = 40
|
|||||||
skirt_brim_speed = 40
|
skirt_brim_speed = 40
|
||||||
skirt_gap = 5
|
skirt_gap = 5
|
||||||
skirt_line_count = 3
|
skirt_line_count = 3
|
||||||
speed_infill = 60
|
speed_infill = =speed_print
|
||||||
speed_print = 60
|
speed_print = 60
|
||||||
speed_support = 60
|
speed_support = 60
|
||||||
speed_topbottom = 30
|
speed_topbottom = =math.ceil(speed_print * 30 / 60)
|
||||||
speed_travel = 100
|
speed_travel = 100
|
||||||
speed_wall = 60
|
speed_wall = =speed_print
|
||||||
speed_wall_x = 60
|
speed_wall_x = =speed_print
|
||||||
support_angle = 60
|
support_angle = 60
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_interface_enable = True
|
support_interface_enable = True
|
||||||
|
@ -41,13 +41,13 @@ retraction_speed = 40
|
|||||||
skirt_brim_speed = 40
|
skirt_brim_speed = 40
|
||||||
skirt_gap = 5
|
skirt_gap = 5
|
||||||
skirt_line_count = 3
|
skirt_line_count = 3
|
||||||
speed_infill = 50
|
speed_infill = =speed_print
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_support = 30
|
speed_support = 30
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
speed_travel = 50
|
speed_travel = 50
|
||||||
speed_wall = 50
|
speed_wall = =speed_print
|
||||||
speed_wall_x = 50
|
speed_wall_x = =speed_print
|
||||||
support_angle = 60
|
support_angle = 60
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_interface_enable = True
|
support_interface_enable = True
|
||||||
|
@ -41,13 +41,13 @@ retraction_speed = 40
|
|||||||
skirt_brim_speed = 40
|
skirt_brim_speed = 40
|
||||||
skirt_gap = 5
|
skirt_gap = 5
|
||||||
skirt_line_count = 3
|
skirt_line_count = 3
|
||||||
speed_infill = 50
|
speed_infill = =speed_print
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_support = 30
|
speed_support = 30
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
speed_travel = 100
|
speed_travel = 100
|
||||||
speed_wall = 50
|
speed_wall = =speed_print
|
||||||
speed_wall_x = 50
|
speed_wall_x = =speed_print
|
||||||
support_angle = 60
|
support_angle = 60
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_interface_enable = True
|
support_interface_enable = True
|
||||||
|
@ -43,11 +43,11 @@ skirt_brim_minimal_length = 75
|
|||||||
skirt_gap = 1.5
|
skirt_gap = 1.5
|
||||||
skirt_line_count = 5
|
skirt_line_count = 5
|
||||||
speed_infill = =speed_print
|
speed_infill = =speed_print
|
||||||
speed_layer_0 = 25
|
speed_layer_0 = =math.ceil(speed_print * 25 / 50)
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_topbottom = 40
|
speed_topbottom = =math.ceil(speed_print * 40 / 50)
|
||||||
speed_travel = 200
|
speed_travel = 200
|
||||||
speed_wall_0 = 40
|
speed_wall_0 = =math.ceil(speed_print * 40 / 50)
|
||||||
speed_wall_x = =speed_print
|
speed_wall_x = =speed_print
|
||||||
support_angle = 70
|
support_angle = 70
|
||||||
support_type = buildplate
|
support_type = buildplate
|
||||||
|
@ -43,11 +43,11 @@ skirt_brim_minimal_length = 75
|
|||||||
skirt_gap = 1.5
|
skirt_gap = 1.5
|
||||||
skirt_line_count = 5
|
skirt_line_count = 5
|
||||||
speed_infill = =speed_print
|
speed_infill = =speed_print
|
||||||
speed_layer_0 = 25
|
speed_layer_0 = =math.ceil(speed_print * 25 / 50)
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_topbottom = 40
|
speed_topbottom = =math.ceil(speed_print * 40 / 50)
|
||||||
speed_travel = 200
|
speed_travel = 200
|
||||||
speed_wall_0 = 40
|
speed_wall_0 = =math.ceil(speed_print * 40 / 50)
|
||||||
speed_wall_x = =speed_print
|
speed_wall_x = =speed_print
|
||||||
support_angle = 70
|
support_angle = 70
|
||||||
support_type = buildplate
|
support_type = buildplate
|
||||||
|
@ -43,11 +43,11 @@ skirt_brim_minimal_length = 75
|
|||||||
skirt_gap = 1.5
|
skirt_gap = 1.5
|
||||||
skirt_line_count = 5
|
skirt_line_count = 5
|
||||||
speed_infill = =speed_print
|
speed_infill = =speed_print
|
||||||
speed_layer_0 = 25
|
speed_layer_0 = =math.ceil(speed_print * 25 / 50)
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_topbottom = 40
|
speed_topbottom = =math.ceil(speed_print * 40 / 50)
|
||||||
speed_travel = 200
|
speed_travel = 200
|
||||||
speed_wall_0 = 40
|
speed_wall_0 = =math.ceil(speed_print * 40 / 50)
|
||||||
speed_wall_x = =speed_print
|
speed_wall_x = =speed_print
|
||||||
support_angle = 70
|
support_angle = 70
|
||||||
support_type = buildplate
|
support_type = buildplate
|
||||||
|
@ -43,11 +43,11 @@ skirt_brim_minimal_length = 75
|
|||||||
skirt_gap = 1.5
|
skirt_gap = 1.5
|
||||||
skirt_line_count = 5
|
skirt_line_count = 5
|
||||||
speed_infill = =speed_print
|
speed_infill = =speed_print
|
||||||
speed_layer_0 = 25
|
speed_layer_0 = =math.ceil(speed_print * 25 / 30)
|
||||||
speed_print = 30
|
speed_print = 30
|
||||||
speed_topbottom = 40
|
speed_topbottom = =math.ceil(speed_print * 40 / 30)
|
||||||
speed_travel = 200
|
speed_travel = 200
|
||||||
speed_wall_0 = 40
|
speed_wall_0 = =math.ceil(speed_print * 40 / 30)
|
||||||
speed_wall_x = =speed_print
|
speed_wall_x = =speed_print
|
||||||
support_angle = 70
|
support_angle = 70
|
||||||
support_type = buildplate
|
support_type = buildplate
|
||||||
|
@ -43,11 +43,11 @@ skirt_brim_minimal_length = 75
|
|||||||
skirt_gap = 1.5
|
skirt_gap = 1.5
|
||||||
skirt_line_count = 5
|
skirt_line_count = 5
|
||||||
speed_infill = =speed_print
|
speed_infill = =speed_print
|
||||||
speed_layer_0 = 25
|
speed_layer_0 = =math.ceil(speed_print * 25 / 30)
|
||||||
speed_print = 30
|
speed_print = 30
|
||||||
speed_topbottom = 40
|
speed_topbottom = =math.ceil(speed_print * 40 / 30)
|
||||||
speed_travel = 200
|
speed_travel = 200
|
||||||
speed_wall_0 = 40
|
speed_wall_0 = =math.ceil(speed_print * 40 / 30)
|
||||||
speed_wall_x = =speed_print
|
speed_wall_x = =speed_print
|
||||||
support_angle = 70
|
support_angle = 70
|
||||||
support_type = buildplate
|
support_type = buildplate
|
||||||
|
@ -43,11 +43,11 @@ skirt_brim_minimal_length = 75
|
|||||||
skirt_gap = 1.5
|
skirt_gap = 1.5
|
||||||
skirt_line_count = 5
|
skirt_line_count = 5
|
||||||
speed_infill = =speed_print
|
speed_infill = =speed_print
|
||||||
speed_layer_0 = 25
|
speed_layer_0 = =math.ceil(speed_print * 25 / 30)
|
||||||
speed_print = 30
|
speed_print = 30
|
||||||
speed_topbottom = 40
|
speed_topbottom = =math.ceil(speed_print * 40 / 30)
|
||||||
speed_travel = 200
|
speed_travel = 200
|
||||||
speed_wall_0 = 40
|
speed_wall_0 = =math.ceil(speed_print * 40 / 30)
|
||||||
speed_wall_x = =speed_print
|
speed_wall_x = =speed_print
|
||||||
support_angle = 70
|
support_angle = 70
|
||||||
support_type = buildplate
|
support_type = buildplate
|
||||||
|
@ -14,8 +14,8 @@ global_quality = True
|
|||||||
infill_sparse_density = 10
|
infill_sparse_density = 10
|
||||||
layer_height = 0.15
|
layer_height = 0.15
|
||||||
cool_min_layer_time = 3
|
cool_min_layer_time = 3
|
||||||
speed_wall_0 = 40
|
speed_wall_0 = =math.ceil(speed_print * 40 / 60)
|
||||||
speed_wall_x = 80
|
speed_wall_x = =math.ceil(speed_print * 80 / 60)
|
||||||
speed_infill = 100
|
speed_infill = =math.ceil(speed_print * 100 / 60)
|
||||||
wall_thickness = 1
|
wall_thickness = 1
|
||||||
speed_topbottom = 30
|
speed_topbottom = =math.ceil(speed_print * 30 / 60)
|
||||||
|
@ -12,5 +12,5 @@ global_quality = True
|
|||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.06
|
layer_height = 0.06
|
||||||
speed_topbottom = 15
|
speed_topbottom = =math.ceil(speed_print * 15 / 60)
|
||||||
speed_infill = 80
|
speed_infill = =math.ceil(speed_print * 80 / 60)
|
||||||
|
@ -43,13 +43,13 @@ skin_no_small_gaps_heuristic = False
|
|||||||
skirt_brim_minimal_length = 100
|
skirt_brim_minimal_length = 100
|
||||||
skirt_brim_speed = 25
|
skirt_brim_speed = 25
|
||||||
skirt_line_count = 2
|
skirt_line_count = 2
|
||||||
speed_layer_0 = 14
|
speed_layer_0 = =math.ceil(speed_print * 14 / 40)
|
||||||
speed_print = 40
|
speed_print = 40
|
||||||
speed_slowdown_layers = 1
|
speed_slowdown_layers = 1
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 40)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
speed_travel_layer_0 = 60
|
speed_travel_layer_0 = 60
|
||||||
speed_wall = 25
|
speed_wall = =math.ceil(speed_print * 25 / 40)
|
||||||
speed_wall_x = 35
|
speed_wall_x = =math.ceil(speed_print * 35 / 40)
|
||||||
top_thickness = =top_bottom_thickness
|
top_thickness = =top_bottom_thickness
|
||||||
wall_thickness = 0.8
|
wall_thickness = 0.8
|
||||||
|
@ -43,13 +43,13 @@ skin_no_small_gaps_heuristic = False
|
|||||||
skirt_brim_minimal_length = 100
|
skirt_brim_minimal_length = 100
|
||||||
skirt_brim_speed = 25
|
skirt_brim_speed = 25
|
||||||
skirt_line_count = 2
|
skirt_line_count = 2
|
||||||
speed_layer_0 = 14
|
speed_layer_0 = =math.ceil(speed_print * 14 / 40)
|
||||||
speed_print = 40
|
speed_print = 40
|
||||||
speed_slowdown_layers = 1
|
speed_slowdown_layers = 1
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 40)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
speed_travel_layer_0 = 60
|
speed_travel_layer_0 = 60
|
||||||
speed_wall = 25
|
speed_wall = =math.ceil(speed_print * 25 / 40)
|
||||||
speed_wall_x = 35
|
speed_wall_x = =math.ceil(speed_print * 35 / 40)
|
||||||
top_thickness = =top_bottom_thickness
|
top_thickness = =top_bottom_thickness
|
||||||
wall_thickness = 0.8
|
wall_thickness = 0.8
|
||||||
|
@ -43,13 +43,13 @@ skin_no_small_gaps_heuristic = False
|
|||||||
skirt_brim_minimal_length = 100
|
skirt_brim_minimal_length = 100
|
||||||
skirt_brim_speed = 25
|
skirt_brim_speed = 25
|
||||||
skirt_line_count = 2
|
skirt_line_count = 2
|
||||||
speed_layer_0 = 14
|
speed_layer_0 = =math.ceil(speed_print * 14 / 40)
|
||||||
speed_print = 40
|
speed_print = 40
|
||||||
speed_slowdown_layers = 1
|
speed_slowdown_layers = 1
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 40)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
speed_travel_layer_0 = 60
|
speed_travel_layer_0 = 60
|
||||||
speed_wall = 25
|
speed_wall = =math.ceil(speed_print * 25 / 40)
|
||||||
speed_wall_x = 35
|
speed_wall_x = =math.ceil(speed_print * 35 / 40)
|
||||||
top_thickness = =top_bottom_thickness
|
top_thickness = =top_bottom_thickness
|
||||||
wall_thickness = 0.8
|
wall_thickness = 0.8
|
||||||
|
@ -43,13 +43,13 @@ skin_no_small_gaps_heuristic = False
|
|||||||
skirt_brim_minimal_length = 100
|
skirt_brim_minimal_length = 100
|
||||||
skirt_brim_speed = 25
|
skirt_brim_speed = 25
|
||||||
skirt_line_count = 2
|
skirt_line_count = 2
|
||||||
speed_layer_0 = 14
|
speed_layer_0 = =math.ceil(speed_print * 14 / 40)
|
||||||
speed_print = 40
|
speed_print = 40
|
||||||
speed_slowdown_layers = 1
|
speed_slowdown_layers = 1
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 40)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
speed_travel_layer_0 = 60
|
speed_travel_layer_0 = 60
|
||||||
speed_wall = 25
|
speed_wall = =math.ceil(speed_print * 25 / 40)
|
||||||
speed_wall_x = 35
|
speed_wall_x = =math.ceil(speed_print * 35 / 40)
|
||||||
top_thickness = =top_bottom_thickness
|
top_thickness = =top_bottom_thickness
|
||||||
wall_thickness = 0.8
|
wall_thickness = 0.8
|
||||||
|
@ -41,13 +41,13 @@ skin_no_small_gaps_heuristic = False
|
|||||||
skirt_brim_minimal_length = 100
|
skirt_brim_minimal_length = 100
|
||||||
skirt_brim_speed = 20
|
skirt_brim_speed = 20
|
||||||
skirt_line_count = 3
|
skirt_line_count = 3
|
||||||
speed_layer_0 = 20
|
speed_layer_0 = =math.ceil(speed_print * 20 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_slowdown_layers = 1
|
speed_slowdown_layers = 1
|
||||||
speed_topbottom = 25
|
speed_topbottom = =math.ceil(speed_print * 25 / 45)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
speed_travel_layer_0 = 60
|
speed_travel_layer_0 = 60
|
||||||
speed_wall = 25
|
speed_wall = =math.ceil(speed_print * 25 / 45)
|
||||||
speed_wall_x = 35
|
speed_wall_x = =math.ceil(speed_print * 35 / 45)
|
||||||
top_thickness = 0.8
|
top_thickness = 0.8
|
||||||
wall_thickness = 0.8
|
wall_thickness = 0.8
|
||||||
|
@ -41,13 +41,13 @@ skin_no_small_gaps_heuristic = False
|
|||||||
skirt_brim_minimal_length = 100
|
skirt_brim_minimal_length = 100
|
||||||
skirt_brim_speed = 20
|
skirt_brim_speed = 20
|
||||||
skirt_line_count = 3
|
skirt_line_count = 3
|
||||||
speed_layer_0 = 20
|
speed_layer_0 = =math.ceil(speed_print * 20 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_slowdown_layers = 1
|
speed_slowdown_layers = 1
|
||||||
speed_topbottom = 25
|
speed_topbottom = =math.ceil(speed_print * 25 / 45)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
speed_travel_layer_0 = 60
|
speed_travel_layer_0 = 60
|
||||||
speed_wall = 25
|
speed_wall = =math.ceil(speed_print * 25 / 45)
|
||||||
speed_wall_x = 35
|
speed_wall_x = =math.ceil(speed_print * 35 / 45)
|
||||||
top_thickness = 0.8
|
top_thickness = 0.8
|
||||||
wall_thickness = 0.8
|
wall_thickness = 0.8
|
||||||
|
@ -42,13 +42,13 @@ skin_no_small_gaps_heuristic = False
|
|||||||
skirt_brim_minimal_length = 100
|
skirt_brim_minimal_length = 100
|
||||||
skirt_brim_speed = 20
|
skirt_brim_speed = 20
|
||||||
skirt_line_count = 3
|
skirt_line_count = 3
|
||||||
speed_layer_0 = 20
|
speed_layer_0 = =math.ceil(speed_print * 20 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_slowdown_layers = 1
|
speed_slowdown_layers = 1
|
||||||
speed_topbottom = 25
|
speed_topbottom = =math.ceil(speed_print * 25 / 45)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
speed_travel_layer_0 = 60
|
speed_travel_layer_0 = 60
|
||||||
speed_wall = 25
|
speed_wall = =math.ceil(speed_print * 25 / 45)
|
||||||
speed_wall_x = 35
|
speed_wall_x = =math.ceil(speed_print * 35 / 45)
|
||||||
top_thickness = 0.8
|
top_thickness = 0.8
|
||||||
wall_thickness = 0.8
|
wall_thickness = 0.8
|
||||||
|
@ -42,13 +42,13 @@ skin_no_small_gaps_heuristic = False
|
|||||||
skirt_brim_minimal_length = 100
|
skirt_brim_minimal_length = 100
|
||||||
skirt_brim_speed = 20
|
skirt_brim_speed = 20
|
||||||
skirt_line_count = 3
|
skirt_line_count = 3
|
||||||
speed_layer_0 = 20
|
speed_layer_0 = =math.ceil(speed_print * 20 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_slowdown_layers = 1
|
speed_slowdown_layers = 1
|
||||||
speed_topbottom = 25
|
speed_topbottom = =math.ceil(speed_print * 25 / 45)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
speed_travel_layer_0 = 60
|
speed_travel_layer_0 = 60
|
||||||
speed_wall = 25
|
speed_wall = =math.ceil(speed_print * 25 / 45)
|
||||||
speed_wall_x = 35
|
speed_wall_x = =math.ceil(speed_print * 35 / 45)
|
||||||
top_thickness = 0.8
|
top_thickness = 0.8
|
||||||
wall_thickness = 0.8
|
wall_thickness = 0.8
|
||||||
|
@ -41,13 +41,13 @@ skin_no_small_gaps_heuristic = False
|
|||||||
skirt_brim_minimal_length = 100
|
skirt_brim_minimal_length = 100
|
||||||
skirt_brim_speed = 20
|
skirt_brim_speed = 20
|
||||||
skirt_line_count = 3
|
skirt_line_count = 3
|
||||||
speed_layer_0 = 20
|
speed_layer_0 = =math.ceil(speed_print * 20 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_slowdown_layers = 1
|
speed_slowdown_layers = 1
|
||||||
speed_topbottom = 25
|
speed_topbottom = =math.ceil(speed_print * 25 / 45)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
speed_travel_layer_0 = 60
|
speed_travel_layer_0 = 60
|
||||||
speed_wall = 25
|
speed_wall = =math.ceil(speed_print * 25 / 45)
|
||||||
speed_wall_x = 35
|
speed_wall_x = =math.ceil(speed_print * 35 / 45)
|
||||||
top_thickness = 0.8
|
top_thickness = 0.8
|
||||||
wall_thickness = 0.8
|
wall_thickness = 0.8
|
||||||
|
@ -41,13 +41,13 @@ skin_no_small_gaps_heuristic = False
|
|||||||
skirt_brim_minimal_length = 100
|
skirt_brim_minimal_length = 100
|
||||||
skirt_brim_speed = 20
|
skirt_brim_speed = 20
|
||||||
skirt_line_count = 3
|
skirt_line_count = 3
|
||||||
speed_layer_0 = 20
|
speed_layer_0 = =math.ceil(speed_print * 20 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_slowdown_layers = 1
|
speed_slowdown_layers = 1
|
||||||
speed_topbottom = 25
|
speed_topbottom = =math.ceil(speed_print * 25 / 45)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
speed_travel_layer_0 = 60
|
speed_travel_layer_0 = 60
|
||||||
speed_wall = 25
|
speed_wall = =math.ceil(speed_print * 25 / 45)
|
||||||
speed_wall_x = 35
|
speed_wall_x = =math.ceil(speed_print * 35 / 45)
|
||||||
top_thickness = 0.8
|
top_thickness = 0.8
|
||||||
wall_thickness = 0.8
|
wall_thickness = 0.8
|
||||||
|
@ -43,13 +43,13 @@ skin_no_small_gaps_heuristic = False
|
|||||||
skirt_brim_minimal_length = 100
|
skirt_brim_minimal_length = 100
|
||||||
skirt_brim_speed = 20
|
skirt_brim_speed = 20
|
||||||
skirt_line_count = 3
|
skirt_line_count = 3
|
||||||
speed_layer_0 = 20
|
speed_layer_0 = =math.ceil(speed_print * 20 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_slowdown_layers = 1
|
speed_slowdown_layers = 1
|
||||||
speed_topbottom = 25
|
speed_topbottom = =math.ceil(speed_print * 25 / 45)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
speed_travel_layer_0 = 60
|
speed_travel_layer_0 = 60
|
||||||
speed_wall = 25
|
speed_wall = =math.ceil(speed_print * 25 / 45)
|
||||||
speed_wall_x = 35
|
speed_wall_x = =math.ceil(speed_print * 35 / 45)
|
||||||
top_thickness = 0.8
|
top_thickness = 0.8
|
||||||
wall_thickness = 0.8
|
wall_thickness = 0.8
|
||||||
|
@ -43,13 +43,13 @@ skin_no_small_gaps_heuristic = False
|
|||||||
skirt_brim_minimal_length = 100
|
skirt_brim_minimal_length = 100
|
||||||
skirt_brim_speed = 20
|
skirt_brim_speed = 20
|
||||||
skirt_line_count = 3
|
skirt_line_count = 3
|
||||||
speed_layer_0 = 20
|
speed_layer_0 = =math.ceil(speed_print * 20 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_slowdown_layers = 1
|
speed_slowdown_layers = 1
|
||||||
speed_topbottom = 25
|
speed_topbottom = =math.ceil(speed_print * 25 / 45)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
speed_travel_layer_0 = 60
|
speed_travel_layer_0 = 60
|
||||||
speed_wall = 25
|
speed_wall = =math.ceil(speed_print * 25 / 45)
|
||||||
speed_wall_x = 35
|
speed_wall_x = =math.ceil(speed_print * 35 / 45)
|
||||||
top_thickness = 0.8
|
top_thickness = 0.8
|
||||||
wall_thickness = 0.8
|
wall_thickness = 0.8
|
||||||
|
@ -15,11 +15,11 @@ layer_height = 0.35
|
|||||||
layer_height_0 = 0.3
|
layer_height_0 = 0.3
|
||||||
|
|
||||||
speed_print = 70
|
speed_print = 70
|
||||||
speed_infill = 60
|
speed_infill = =math.ceil(speed_print * 60 / 70)
|
||||||
speed_layer_0 = 20
|
speed_layer_0 = =math.ceil(speed_print * 20 / 70)
|
||||||
speed_wall_0 = 30
|
speed_wall_0 = =math.ceil(speed_print * 30 / 70)
|
||||||
speed_wall_x = 50
|
speed_wall_x = =math.ceil(speed_print * 50 / 70)
|
||||||
speed_topbottom = 30
|
speed_topbottom = =math.ceil(speed_print * 30 / 70)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
|
|
||||||
material_print_temperature = 246
|
material_print_temperature = 246
|
||||||
|
@ -15,11 +15,11 @@ layer_height = 0.06
|
|||||||
layer_height_0 = 0.3
|
layer_height_0 = 0.3
|
||||||
|
|
||||||
speed_print = 40
|
speed_print = 40
|
||||||
speed_infill = 50
|
speed_infill = =math.ceil(speed_print * 50 / 40)
|
||||||
speed_layer_0 = 15
|
speed_layer_0 = =math.ceil(speed_print * 15 / 40)
|
||||||
speed_wall_0 = 20
|
speed_wall_0 = =math.ceil(speed_print * 20 / 40)
|
||||||
speed_wall_x = 40
|
speed_wall_x = =speed_print
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 40)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
|
|
||||||
material_print_temperature = 246
|
material_print_temperature = 246
|
||||||
|
@ -15,11 +15,11 @@ layer_height = 0.1
|
|||||||
layer_height_0 = 0.3
|
layer_height_0 = 0.3
|
||||||
|
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_infill = 60
|
speed_infill = =math.ceil(speed_print * 60 / 50)
|
||||||
speed_layer_0 = 20
|
speed_layer_0 = =math.ceil(speed_print * 20 / 50)
|
||||||
speed_wall_0 = 25
|
speed_wall_0 = =math.ceil(speed_print * 25 / 50)
|
||||||
speed_wall_x = 45
|
speed_wall_x = =math.ceil(speed_print * 45 / 50)
|
||||||
speed_topbottom = 30
|
speed_topbottom = =math.ceil(speed_print * 30 / 50)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
|
|
||||||
material_print_temperature = 246
|
material_print_temperature = 246
|
||||||
|
@ -15,11 +15,11 @@ layer_height = 0.2
|
|||||||
layer_height_0 = 0.3
|
layer_height_0 = 0.3
|
||||||
|
|
||||||
speed_print = 70
|
speed_print = 70
|
||||||
speed_infill = 60
|
speed_infill = =math.ceil(speed_print * 60 / 70)
|
||||||
speed_layer_0 = 20
|
speed_layer_0 = =math.ceil(speed_print * 20 / 70)
|
||||||
speed_wall_0 = 30
|
speed_wall_0 = =math.ceil(speed_print * 30 / 70)
|
||||||
speed_wall_x = 50
|
speed_wall_x = =math.ceil(speed_print * 50 / 70)
|
||||||
speed_topbottom = 30
|
speed_topbottom = =math.ceil(speed_print * 30 / 70)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
|
|
||||||
material_print_temperature = 246
|
material_print_temperature = 246
|
||||||
|
@ -15,11 +15,11 @@ layer_height = 0.15
|
|||||||
layer_height_0 = 0.3
|
layer_height_0 = 0.3
|
||||||
|
|
||||||
speed_print = 60
|
speed_print = 60
|
||||||
speed_infill = 50
|
speed_infill = =math.ceil(speed_print * 50 / 60)
|
||||||
speed_layer_0 = 15
|
speed_layer_0 = =math.ceil(speed_print * 15 / 60)
|
||||||
speed_wall_0 = 20
|
speed_wall_0 = =math.ceil(speed_print * 20 / 60)
|
||||||
speed_wall_x = 40
|
speed_wall_x = =math.ceil(speed_print * 40 / 60)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 60)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
|
|
||||||
material_print_temperature = 246
|
material_print_temperature = 246
|
||||||
|
@ -15,11 +15,11 @@ layer_height = 0.06
|
|||||||
adhesion_type = skirt
|
adhesion_type = skirt
|
||||||
|
|
||||||
speed_print = 40
|
speed_print = 40
|
||||||
speed_infill = 50
|
speed_infill = =math.ceil(speed_print * 50 / 40)
|
||||||
speed_layer_0 = 15
|
speed_layer_0 = =math.ceil(speed_print * 15 / 40)
|
||||||
speed_wall_0 = 20
|
speed_wall_0 = =math.ceil(speed_print * 20 / 40)
|
||||||
speed_wall_x = 40
|
speed_wall_x = =speed_print
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 40)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
|
|
||||||
material_print_temperature = 214
|
material_print_temperature = 214
|
||||||
|
@ -15,11 +15,11 @@ layer_height = 0.1
|
|||||||
adhesion_type = skirt
|
adhesion_type = skirt
|
||||||
|
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_infill = 60
|
speed_infill = =math.ceil(speed_print * 60 / 50)
|
||||||
speed_layer_0 = 20
|
speed_layer_0 = =math.ceil(speed_print * 20 / 50)
|
||||||
speed_wall_0 = 25
|
speed_wall_0 = =math.ceil(speed_print * 25 / 50)
|
||||||
speed_wall_x = 45
|
speed_wall_x = =math.ceil(speed_print * 45 / 50)
|
||||||
speed_topbottom = 30
|
speed_topbottom = =math.ceil(speed_print * 30 / 50)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
|
|
||||||
material_print_temperature = 214
|
material_print_temperature = 214
|
||||||
|
@ -15,11 +15,11 @@ layer_height = 0.15
|
|||||||
adhesion_type = skirt
|
adhesion_type = skirt
|
||||||
|
|
||||||
speed_print = 60
|
speed_print = 60
|
||||||
speed_infill = 50
|
speed_infill = =math.ceil(speed_print * 50 / 60)
|
||||||
speed_layer_0 = 15
|
speed_layer_0 = =math.ceil(speed_print * 15 / 60)
|
||||||
speed_wall_0 = 20
|
speed_wall_0 = =math.ceil(speed_print * 20 / 60)
|
||||||
speed_wall_x = 40
|
speed_wall_x = =math.ceil(speed_print * 40 / 60)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 60)
|
||||||
speed_travel = 120
|
speed_travel = 120
|
||||||
|
|
||||||
material_print_temperature = 214
|
material_print_temperature = 214
|
||||||
|
@ -18,6 +18,6 @@ top_bottom_thickness = 0.72
|
|||||||
infill_sparse_density = 22
|
infill_sparse_density = 22
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -18,6 +18,6 @@ top_bottom_thickness = 0.72
|
|||||||
infill_sparse_density = 22
|
infill_sparse_density = 22
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -18,6 +18,6 @@ top_bottom_thickness = 0.72
|
|||||||
infill_sparse_density = 22
|
infill_sparse_density = 22
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -18,6 +18,6 @@ top_bottom_thickness = 0.72
|
|||||||
infill_sparse_density = 22
|
infill_sparse_density = 22
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -18,6 +18,6 @@ top_bottom_thickness = 0.72
|
|||||||
infill_sparse_density = 22
|
infill_sparse_density = 22
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -18,6 +18,6 @@ top_bottom_thickness = 0.72
|
|||||||
infill_sparse_density = 22
|
infill_sparse_density = 22
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -18,6 +18,6 @@ top_bottom_thickness = 0.72
|
|||||||
infill_sparse_density = 22
|
infill_sparse_density = 22
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -18,6 +18,6 @@ top_bottom_thickness = 0.72
|
|||||||
infill_sparse_density = 22
|
infill_sparse_density = 22
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -18,6 +18,6 @@ top_bottom_thickness = 0.72
|
|||||||
infill_sparse_density = 22
|
infill_sparse_density = 22
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -18,6 +18,6 @@ top_bottom_thickness = 0.72
|
|||||||
infill_sparse_density = 22
|
infill_sparse_density = 22
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -18,6 +18,6 @@ top_bottom_thickness = 0.72
|
|||||||
infill_sparse_density = 22
|
infill_sparse_density = 22
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -18,6 +18,6 @@ top_bottom_thickness = 0.72
|
|||||||
infill_sparse_density = 22
|
infill_sparse_density = 22
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -18,6 +18,6 @@ top_bottom_thickness = 0.72
|
|||||||
infill_sparse_density = 22
|
infill_sparse_density = 22
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -18,6 +18,6 @@ top_bottom_thickness = 0.72
|
|||||||
infill_sparse_density = 22
|
infill_sparse_density = 22
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -18,6 +18,6 @@ top_bottom_thickness = 0.72
|
|||||||
infill_sparse_density = 22
|
infill_sparse_density = 22
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -18,6 +18,6 @@ top_bottom_thickness = 0.72
|
|||||||
infill_sparse_density = 22
|
infill_sparse_density = 22
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
cool_min_layer_time = 5
|
cool_min_layer_time = 5
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
|
@ -14,13 +14,13 @@ brim_width = 4.0
|
|||||||
infill_pattern = zigzag
|
infill_pattern = zigzag
|
||||||
layer_height = 0.3
|
layer_height = 0.3
|
||||||
material_diameter = 1.75
|
material_diameter = 1.75
|
||||||
speed_infill = 50
|
speed_infill = =speed_print
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_support = 30
|
speed_support = 30
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
speed_travel = 100
|
speed_travel = 100
|
||||||
speed_wall = 50
|
speed_wall = =speed_print
|
||||||
speed_wall_x = 50
|
speed_wall_x = =speed_print
|
||||||
support_angle = 60
|
support_angle = 60
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_interface_enable = True
|
support_interface_enable = True
|
||||||
|
@ -14,13 +14,13 @@ brim_width = 4.0
|
|||||||
infill_pattern = zigzag
|
infill_pattern = zigzag
|
||||||
layer_height = 0.1
|
layer_height = 0.1
|
||||||
material_diameter = 1.75
|
material_diameter = 1.75
|
||||||
speed_infill = 50
|
speed_infill = =speed_print
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_support = 30
|
speed_support = 30
|
||||||
speed_topbottom = 15
|
speed_topbottom = =math.ceil(speed_print * 15 / 50)
|
||||||
speed_travel = 100
|
speed_travel = 100
|
||||||
speed_wall = 50
|
speed_wall = =speed_print
|
||||||
speed_wall_x = 50
|
speed_wall_x = =speed_print
|
||||||
support_angle = 60
|
support_angle = 60
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_interface_enable = True
|
support_interface_enable = True
|
||||||
|
@ -14,13 +14,13 @@ brim_width = 4.0
|
|||||||
infill_pattern = zigzag
|
infill_pattern = zigzag
|
||||||
layer_height = 0.2
|
layer_height = 0.2
|
||||||
material_diameter = 1.75
|
material_diameter = 1.75
|
||||||
speed_infill = 60
|
speed_infill = =math.ceil(speed_print * 60 / 50)
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_support = 30
|
speed_support = 30
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
speed_travel = 100
|
speed_travel = 100
|
||||||
speed_wall = 50
|
speed_wall = =speed_print
|
||||||
speed_wall_x = 50
|
speed_wall_x = =speed_print
|
||||||
support_angle = 60
|
support_angle = 60
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_interface_enable = True
|
support_interface_enable = True
|
||||||
|
@ -14,8 +14,8 @@ global_quality = True
|
|||||||
infill_sparse_density = 10
|
infill_sparse_density = 10
|
||||||
layer_height = 0.15
|
layer_height = 0.15
|
||||||
cool_min_layer_time = 3
|
cool_min_layer_time = 3
|
||||||
speed_wall_0 = 40
|
speed_wall_0 = =math.ceil(speed_print * 40 / 60)
|
||||||
speed_wall_x = 80
|
speed_wall_x = =math.ceil(speed_print * 80 / 60)
|
||||||
speed_infill = 100
|
speed_infill = =math.ceil(speed_print * 100 / 60)
|
||||||
wall_thickness = 1
|
wall_thickness = 1
|
||||||
speed_topbottom = 30
|
speed_topbottom = =math.ceil(speed_print * 30 / 60)
|
||||||
|
@ -12,5 +12,5 @@ global_quality = True
|
|||||||
|
|
||||||
[values]
|
[values]
|
||||||
layer_height = 0.06
|
layer_height = 0.06
|
||||||
speed_topbottom = 15
|
speed_topbottom = =math.ceil(speed_print * 15 / 60)
|
||||||
speed_infill = 80
|
speed_infill = =math.ceil(speed_print * 80 / 60)
|
||||||
|
@ -18,8 +18,8 @@ infill_sparse_density = 18
|
|||||||
layer_height = 0.15
|
layer_height = 0.15
|
||||||
speed_layer_0 = =round(speed_print * 30 / 60)
|
speed_layer_0 = =round(speed_print * 30 / 60)
|
||||||
speed_print = 60
|
speed_print = 60
|
||||||
speed_topbottom = 30
|
speed_topbottom = =math.ceil(speed_print * 30 / 60)
|
||||||
speed_travel = 150
|
speed_travel = 150
|
||||||
speed_wall = 50
|
speed_wall = =math.ceil(speed_print * 50 / 60)
|
||||||
top_bottom_thickness = 0.75
|
top_bottom_thickness = 0.75
|
||||||
wall_thickness = 0.7
|
wall_thickness = 0.7
|
||||||
|
@ -18,6 +18,6 @@ infill_sparse_density = 22
|
|||||||
layer_height = 0.06
|
layer_height = 0.06
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
top_bottom_thickness = 0.72
|
top_bottom_thickness = 0.72
|
||||||
wall_thickness = 1.05
|
wall_thickness = 1.05
|
||||||
|
@ -18,6 +18,6 @@ infill_sparse_density = 20
|
|||||||
layer_height = 0.1
|
layer_height = 0.1
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_print = 50
|
speed_print = 50
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 50)
|
||||||
top_bottom_thickness = 0.8
|
top_bottom_thickness = 0.8
|
||||||
wall_thickness = 1.05
|
wall_thickness = 1.05
|
||||||
|
@ -18,8 +18,8 @@ infill_sparse_density = 20
|
|||||||
layer_height = 0.15
|
layer_height = 0.15
|
||||||
speed_layer_0 = =round(speed_print * 30 / 55)
|
speed_layer_0 = =round(speed_print * 30 / 55)
|
||||||
speed_print = 55
|
speed_print = 55
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 55)
|
||||||
speed_wall = 40
|
speed_wall = =math.ceil(speed_print * 40 / 55)
|
||||||
speed_wall_0 = 25
|
speed_wall_0 = =math.ceil(speed_print * 25 / 55)
|
||||||
top_bottom_thickness = 1.2
|
top_bottom_thickness = 1.2
|
||||||
wall_thickness = 1.59
|
wall_thickness = 1.59
|
||||||
|
@ -18,6 +18,6 @@ infill_sparse_density = 20
|
|||||||
layer_height = 0.2
|
layer_height = 0.2
|
||||||
speed_layer_0 = =round(speed_print * 30 / 40)
|
speed_layer_0 = =round(speed_print * 30 / 40)
|
||||||
speed_print = 40
|
speed_print = 40
|
||||||
speed_wall_0 = 25
|
speed_wall_0 = =math.ceil(speed_print * 25 / 40)
|
||||||
top_bottom_thickness = 1.2
|
top_bottom_thickness = 1.2
|
||||||
wall_thickness = 2.1
|
wall_thickness = 2.1
|
||||||
|
@ -20,8 +20,8 @@ infill_sparse_density = 18
|
|||||||
layer_height = 0.15
|
layer_height = 0.15
|
||||||
speed_layer_0 = =round(speed_print * 30 / 55)
|
speed_layer_0 = =round(speed_print * 30 / 55)
|
||||||
speed_print = 55
|
speed_print = 55
|
||||||
speed_topbottom = 30
|
speed_topbottom = =math.ceil(speed_print * 30 / 55)
|
||||||
speed_travel = 150
|
speed_travel = 150
|
||||||
speed_wall = 40
|
speed_wall = =math.ceil(speed_print * 40 / 55)
|
||||||
top_bottom_thickness = 0.75
|
top_bottom_thickness = 0.75
|
||||||
wall_thickness = 0.7
|
wall_thickness = 0.7
|
||||||
|
@ -20,6 +20,6 @@ infill_sparse_density = 22
|
|||||||
layer_height = 0.06
|
layer_height = 0.06
|
||||||
speed_layer_0 = =round(speed_print * 30 / 45)
|
speed_layer_0 = =round(speed_print * 30 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_wall = 30
|
speed_wall = =math.ceil(speed_print * 30 / 45)
|
||||||
top_bottom_thickness = 0.72
|
top_bottom_thickness = 0.72
|
||||||
wall_thickness = 1.05
|
wall_thickness = 1.05
|
||||||
|
@ -20,6 +20,6 @@ infill_sparse_density = 20
|
|||||||
layer_height = 0.1
|
layer_height = 0.1
|
||||||
speed_layer_0 = =round(speed_print * 30 / 45)
|
speed_layer_0 = =round(speed_print * 30 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_wall = 30
|
speed_wall = =math.ceil(speed_print * 30 / 45)
|
||||||
top_bottom_thickness = 0.8
|
top_bottom_thickness = 0.8
|
||||||
wall_thickness = 1.05
|
wall_thickness = 1.05
|
||||||
|
@ -18,7 +18,7 @@ cool_min_layer_time_fan_speed_max = 20
|
|||||||
cool_min_speed = 20
|
cool_min_speed = 20
|
||||||
infill_sparse_density = 20
|
infill_sparse_density = 20
|
||||||
layer_height = 0.15
|
layer_height = 0.15
|
||||||
speed_infill = 55
|
speed_infill = =math.ceil(speed_print * 55 / 40)
|
||||||
speed_layer_0 = =round(speed_print * 30 / 40)
|
speed_layer_0 = =round(speed_print * 30 / 40)
|
||||||
speed_print = 40
|
speed_print = 40
|
||||||
top_bottom_thickness = 1.2
|
top_bottom_thickness = 1.2
|
||||||
|
@ -21,6 +21,6 @@ layer_height = 0.15
|
|||||||
speed_layer_0 = =round(speed_print * 30 / 45)
|
speed_layer_0 = =round(speed_print * 30 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_travel = 150
|
speed_travel = 150
|
||||||
speed_wall = 40
|
speed_wall = =math.ceil(speed_print * 40 / 45)
|
||||||
top_bottom_thickness = 0.75
|
top_bottom_thickness = 0.75
|
||||||
wall_thickness = 0.7
|
wall_thickness = 0.7
|
||||||
|
@ -20,6 +20,6 @@ infill_sparse_density = 22
|
|||||||
layer_height = 0.06
|
layer_height = 0.06
|
||||||
speed_layer_0 = =round(speed_print * 30 / 45)
|
speed_layer_0 = =round(speed_print * 30 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_wall = 30
|
speed_wall = =math.ceil(speed_print * 30 / 45)
|
||||||
top_bottom_thickness = 0.72
|
top_bottom_thickness = 0.72
|
||||||
wall_thickness = 1.05
|
wall_thickness = 1.05
|
||||||
|
@ -20,6 +20,6 @@ infill_sparse_density = 20
|
|||||||
layer_height = 0.1
|
layer_height = 0.1
|
||||||
speed_layer_0 = =round(speed_print * 30 / 45)
|
speed_layer_0 = =round(speed_print * 30 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_wall = 30
|
speed_wall = =math.ceil(speed_print * 30 / 45)
|
||||||
top_bottom_thickness = 0.8
|
top_bottom_thickness = 0.8
|
||||||
wall_thickness = 1.05
|
wall_thickness = 1.05
|
||||||
|
@ -29,11 +29,11 @@ raft_interface_line_spacing = 1
|
|||||||
raft_interface_line_width = 0.8
|
raft_interface_line_width = 0.8
|
||||||
raft_margin = 15
|
raft_margin = 15
|
||||||
raft_surface_line_width = 0.38
|
raft_surface_line_width = 0.38
|
||||||
speed_layer_0 = 15
|
speed_layer_0 = =math.ceil(speed_print * 15 / 25)
|
||||||
speed_print = 25
|
speed_print = 25
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 25)
|
||||||
speed_wall_0 = 20
|
speed_wall_0 = =math.ceil(speed_print * 20 / 25)
|
||||||
speed_wall_x = 25
|
speed_wall_x = =speed_print
|
||||||
support_angle = 45
|
support_angle = 45
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_infill_rate = 20
|
support_infill_rate = 20
|
||||||
|
@ -29,11 +29,11 @@ raft_interface_line_spacing = 1
|
|||||||
raft_interface_line_width = 0.8
|
raft_interface_line_width = 0.8
|
||||||
raft_margin = 15
|
raft_margin = 15
|
||||||
raft_surface_line_width = 0.38
|
raft_surface_line_width = 0.38
|
||||||
speed_layer_0 = 15
|
speed_layer_0 = =math.ceil(speed_print * 15 / 35)
|
||||||
speed_print = 35
|
speed_print = 35
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 35)
|
||||||
speed_wall_0 = 20
|
speed_wall_0 = =math.ceil(speed_print * 20 / 35)
|
||||||
speed_wall_x = 30
|
speed_wall_x = =math.ceil(speed_print * 30 / 35)
|
||||||
support_angle = 45
|
support_angle = 45
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_infill_rate = 20
|
support_infill_rate = 20
|
||||||
|
@ -32,10 +32,10 @@ raft_surface_line_width = 0.57
|
|||||||
raft_surface_thickness = 0.2
|
raft_surface_thickness = 0.2
|
||||||
speed_layer_0 = =round(speed_print * 30 / 50)
|
speed_layer_0 = =round(speed_print * 30 / 50)
|
||||||
speed_print = 25
|
speed_print = 25
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 25)
|
||||||
speed_travel = 150
|
speed_travel = 150
|
||||||
speed_wall_0 = 20
|
speed_wall_0 = =math.ceil(speed_print * 20 / 25)
|
||||||
speed_wall_x = 25
|
speed_wall_x = =speed_print
|
||||||
support_angle = 45
|
support_angle = 45
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_infill_rate = 20
|
support_infill_rate = 20
|
||||||
|
@ -30,12 +30,12 @@ raft_interface_line_width = 1.2
|
|||||||
raft_margin = 15
|
raft_margin = 15
|
||||||
raft_surface_line_width = 0.57
|
raft_surface_line_width = 0.57
|
||||||
raft_surface_thickness = 0.2
|
raft_surface_thickness = 0.2
|
||||||
speed_layer_0 = 30
|
speed_layer_0 = =math.ceil(speed_print * 30 / 35)
|
||||||
speed_print = 35
|
speed_print = 35
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 35)
|
||||||
speed_travel = 150
|
speed_travel = 150
|
||||||
speed_wall_0 = 30
|
speed_wall_0 = =math.ceil(speed_print * 30 / 35)
|
||||||
speed_wall_x = 35
|
speed_wall_x = =speed_print
|
||||||
support_angle = 45
|
support_angle = 45
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_infill_rate = 20
|
support_infill_rate = 20
|
||||||
|
@ -30,9 +30,9 @@ raft_surface_line_width = 0.7
|
|||||||
raft_surface_thickness = 0.2
|
raft_surface_thickness = 0.2
|
||||||
speed_layer_0 = =round(speed_print * 30 / 25)
|
speed_layer_0 = =round(speed_print * 30 / 25)
|
||||||
speed_print = 25
|
speed_print = 25
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 25)
|
||||||
speed_wall_0 = 20
|
speed_wall_0 = =math.ceil(speed_print * 20 / 25)
|
||||||
speed_wall_x = 25
|
speed_wall_x = =speed_print
|
||||||
support_angle = 45
|
support_angle = 45
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_infill_rate = 20
|
support_infill_rate = 20
|
||||||
|
@ -30,9 +30,9 @@ raft_surface_line_width = 0.7
|
|||||||
raft_surface_thickness = 0.2
|
raft_surface_thickness = 0.2
|
||||||
speed_layer_0 = =round(speed_print * 30 / 30)
|
speed_layer_0 = =round(speed_print * 30 / 30)
|
||||||
speed_print = 30
|
speed_print = 30
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 30)
|
||||||
speed_wall_0 = 20
|
speed_wall_0 = =math.ceil(speed_print * 20 / 30)
|
||||||
speed_wall_x = 30
|
speed_wall_x = =speed_print
|
||||||
support_angle = 45
|
support_angle = 45
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_infill_rate = 20
|
support_infill_rate = 20
|
||||||
|
@ -28,13 +28,13 @@ raft_interface_line_width = 0.5
|
|||||||
raft_margin = 15
|
raft_margin = 15
|
||||||
raft_surface_line_width = 0.2
|
raft_surface_line_width = 0.2
|
||||||
retraction_hop_enabled = 0.2
|
retraction_hop_enabled = 0.2
|
||||||
speed_layer_0 = 30
|
speed_layer_0 = =math.ceil(speed_print * 30 / 40)
|
||||||
speed_print = 40
|
speed_print = 40
|
||||||
speed_support = 40
|
speed_support = 40
|
||||||
speed_topbottom = 35
|
speed_topbottom = =math.ceil(speed_print * 35 / 40)
|
||||||
speed_travel = 150
|
speed_travel = 150
|
||||||
speed_wall_0 = 20
|
speed_wall_0 = =math.ceil(speed_print * 20 / 40)
|
||||||
speed_wall_x = 40
|
speed_wall_x = =speed_print
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_infill_rate = 20
|
support_infill_rate = 20
|
||||||
support_pattern = lines
|
support_pattern = lines
|
||||||
|
@ -28,13 +28,13 @@ raft_interface_line_width = 0.5
|
|||||||
raft_margin = 15
|
raft_margin = 15
|
||||||
raft_surface_line_width = 0.2
|
raft_surface_line_width = 0.2
|
||||||
retraction_hop_enabled = 0.2
|
retraction_hop_enabled = 0.2
|
||||||
speed_layer_0 = 30
|
speed_layer_0 = =math.ceil(speed_print * 30 / 40)
|
||||||
speed_print = 40
|
speed_print = 40
|
||||||
speed_support = 40
|
speed_support = 40
|
||||||
speed_topbottom = 35
|
speed_topbottom = =math.ceil(speed_print * 35 / 40)
|
||||||
speed_travel = 150
|
speed_travel = 150
|
||||||
speed_wall_0 = 20
|
speed_wall_0 = =math.ceil(speed_print * 20 / 40)
|
||||||
speed_wall_x = 40
|
speed_wall_x = =speed_print
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_infill_rate = 20
|
support_infill_rate = 20
|
||||||
support_pattern = lines
|
support_pattern = lines
|
||||||
|
@ -28,11 +28,11 @@ raft_interface_line_width = 0.8
|
|||||||
raft_margin = 15
|
raft_margin = 15
|
||||||
raft_surface_line_width = 0.5
|
raft_surface_line_width = 0.5
|
||||||
raft_surface_thickness = 0.15
|
raft_surface_thickness = 0.15
|
||||||
speed_layer_0 = 30
|
speed_layer_0 = =math.ceil(speed_print * 30 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_topbottom = 20
|
speed_topbottom = =math.ceil(speed_print * 20 / 45)
|
||||||
speed_travel = 150
|
speed_travel = 150
|
||||||
speed_wall = 40
|
speed_wall = =math.ceil(speed_print * 40 / 45)
|
||||||
support_angle = 45
|
support_angle = 45
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_infill_rate = 25
|
support_infill_rate = 25
|
||||||
|
@ -28,10 +28,10 @@ raft_interface_line_width = 0.8
|
|||||||
raft_margin = 15
|
raft_margin = 15
|
||||||
raft_surface_line_width = 0.5
|
raft_surface_line_width = 0.5
|
||||||
raft_surface_thickness = 0.15
|
raft_surface_thickness = 0.15
|
||||||
speed_layer_0 = 30
|
speed_layer_0 = =math.ceil(speed_print * 30 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_travel = 150
|
speed_travel = 150
|
||||||
speed_wall = 40
|
speed_wall = =math.ceil(speed_print * 40 / 45)
|
||||||
support_angle = 45
|
support_angle = 45
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_infill_rate = 25
|
support_infill_rate = 25
|
||||||
|
@ -29,13 +29,13 @@ raft_margin = 15
|
|||||||
raft_surface_line_width = 0.6
|
raft_surface_line_width = 0.6
|
||||||
raft_surface_thickness = 0.15
|
raft_surface_thickness = 0.15
|
||||||
retraction_hop_enabled = 0.2
|
retraction_hop_enabled = 0.2
|
||||||
speed_layer_0 = 30
|
speed_layer_0 = =math.ceil(speed_print * 30 / 55)
|
||||||
speed_print = 55
|
speed_print = 55
|
||||||
speed_support = 40
|
speed_support = 40
|
||||||
speed_topbottom = 35
|
speed_topbottom = =math.ceil(speed_print * 35 / 55)
|
||||||
speed_travel = 150
|
speed_travel = 150
|
||||||
speed_wall_0 = 15
|
speed_wall_0 = =math.ceil(speed_print * 15 / 55)
|
||||||
speed_wall_x = 40
|
speed_wall_x = =math.ceil(speed_print * 40 / 55)
|
||||||
support_angle = 45
|
support_angle = 45
|
||||||
support_bottom_distance = 0.55
|
support_bottom_distance = 0.55
|
||||||
support_enable = True
|
support_enable = True
|
||||||
|
@ -29,13 +29,13 @@ raft_margin = 15
|
|||||||
raft_surface_line_width = 0.6
|
raft_surface_line_width = 0.6
|
||||||
raft_surface_thickness = 0.15
|
raft_surface_thickness = 0.15
|
||||||
retraction_hop_enabled = 0.2
|
retraction_hop_enabled = 0.2
|
||||||
speed_layer_0 = 30
|
speed_layer_0 = =math.ceil(speed_print * 30 / 55)
|
||||||
speed_print = 55
|
speed_print = 55
|
||||||
speed_support = 40
|
speed_support = 40
|
||||||
speed_topbottom = 35
|
speed_topbottom = =math.ceil(speed_print * 35 / 55)
|
||||||
speed_travel = 150
|
speed_travel = 150
|
||||||
speed_wall_0 = 15
|
speed_wall_0 = =math.ceil(speed_print * 15 / 55)
|
||||||
speed_wall_x = 40
|
speed_wall_x = =math.ceil(speed_print * 40 / 55)
|
||||||
support_angle = 45
|
support_angle = 45
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_infill_rate = 25
|
support_infill_rate = 25
|
||||||
|
@ -28,13 +28,13 @@ raft_margin = 15
|
|||||||
raft_surface_line_width = 0.7
|
raft_surface_line_width = 0.7
|
||||||
raft_surface_thickness = 0.2
|
raft_surface_thickness = 0.2
|
||||||
retraction_hop_enabled = 0.2
|
retraction_hop_enabled = 0.2
|
||||||
speed_layer_0 = 30
|
speed_layer_0 = =math.ceil(speed_print * 30 / 55)
|
||||||
speed_print = 55
|
speed_print = 55
|
||||||
speed_support = 40
|
speed_support = 40
|
||||||
speed_topbottom = 35
|
speed_topbottom = =math.ceil(speed_print * 35 / 55)
|
||||||
speed_travel = 150
|
speed_travel = 150
|
||||||
speed_wall_0 = 15
|
speed_wall_0 = =math.ceil(speed_print * 15 / 55)
|
||||||
speed_wall_x = 40
|
speed_wall_x = =math.ceil(speed_print * 40 / 55)
|
||||||
support_angle = 45
|
support_angle = 45
|
||||||
support_bottom_distance = 0.65
|
support_bottom_distance = 0.65
|
||||||
support_enable = True
|
support_enable = True
|
||||||
|
@ -31,10 +31,10 @@ retraction_hop_enabled = 0.2
|
|||||||
speed_layer_0 = =round(speed_print * 30 / 55)
|
speed_layer_0 = =round(speed_print * 30 / 55)
|
||||||
speed_print = 55
|
speed_print = 55
|
||||||
speed_support = 40
|
speed_support = 40
|
||||||
speed_topbottom = 35
|
speed_topbottom = =math.ceil(speed_print * 35 / 55)
|
||||||
speed_travel = 150
|
speed_travel = 150
|
||||||
speed_wall_0 = 15
|
speed_wall_0 = =math.ceil(speed_print * 15 / 55)
|
||||||
speed_wall_x = 40
|
speed_wall_x = =math.ceil(speed_print * 40 / 55)
|
||||||
support_angle = 45
|
support_angle = 45
|
||||||
support_bottom_distance = 0.65
|
support_bottom_distance = 0.65
|
||||||
support_enable = True
|
support_enable = True
|
||||||
|
@ -29,8 +29,8 @@ raft_interface_line_width = 0.8
|
|||||||
raft_margin = 15
|
raft_margin = 15
|
||||||
speed_layer_0 = =round(speed_print * 30 / 45)
|
speed_layer_0 = =round(speed_print * 30 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_wall_0 = 20
|
speed_wall_0 = =math.ceil(speed_print * 20 / 45)
|
||||||
speed_wall_x = 30
|
speed_wall_x = =math.ceil(speed_print * 30 / 45)
|
||||||
support_angle = 45
|
support_angle = 45
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_infill_rate = 20
|
support_infill_rate = 20
|
||||||
|
@ -29,8 +29,8 @@ raft_interface_line_width = 0.8
|
|||||||
raft_margin = 15
|
raft_margin = 15
|
||||||
speed_layer_0 = =round(speed_print * 30 / 45)
|
speed_layer_0 = =round(speed_print * 30 / 45)
|
||||||
speed_print = 45
|
speed_print = 45
|
||||||
speed_wall_0 = 20
|
speed_wall_0 = =math.ceil(speed_print * 20 / 45)
|
||||||
speed_wall_x = 30
|
speed_wall_x = =math.ceil(speed_print * 30 / 45)
|
||||||
support_angle = 45
|
support_angle = 45
|
||||||
support_enable = True
|
support_enable = True
|
||||||
support_infill_rate = 20
|
support_infill_rate = 20
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user