mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Merge remote-tracking branch 'origin/master' into refactoring_machine_manager
This commit is contained in:
commit
9a354efd19
15 changed files with 197 additions and 30 deletions
|
@ -14,8 +14,9 @@ import urllib.request
|
||||||
import urllib.error
|
import urllib.error
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, QFile
|
from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, QUrl
|
||||||
from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QTextEdit, QGroupBox, QCheckBox, QPushButton
|
from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QTextEdit, QGroupBox, QCheckBox, QPushButton
|
||||||
|
from PyQt5.QtGui import QDesktopServices
|
||||||
|
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
|
@ -91,7 +92,7 @@ class CrashHandler:
|
||||||
label = QLabel()
|
label = QLabel()
|
||||||
label.setText(catalog.i18nc("@label crash message", """<p><b>A fatal error has occurred.</p></b>
|
label.setText(catalog.i18nc("@label crash message", """<p><b>A fatal error has occurred.</p></b>
|
||||||
<p>Unfortunately, Cura encountered an unrecoverable error during start up. It was possibly caused by some incorrect configuration files. We suggest to backup and reset your configuration.</p>
|
<p>Unfortunately, Cura encountered an unrecoverable error during start up. It was possibly caused by some incorrect configuration files. We suggest to backup and reset your configuration.</p>
|
||||||
<p>Your backup can be found in your Configuration folder.</p>
|
<p>Backups can be found in the configuration folder.</p>
|
||||||
<p>Please send us this Crash Report to fix the problem.</p>
|
<p>Please send us this Crash Report to fix the problem.</p>
|
||||||
"""))
|
"""))
|
||||||
label.setWordWrap(True)
|
label.setWordWrap(True)
|
||||||
|
@ -105,8 +106,13 @@ class CrashHandler:
|
||||||
show_details_button.setMaximumWidth(200)
|
show_details_button.setMaximumWidth(200)
|
||||||
show_details_button.clicked.connect(self._showDetailedReport)
|
show_details_button.clicked.connect(self._showDetailedReport)
|
||||||
|
|
||||||
|
show_configuration_folder_button = QPushButton(catalog.i18nc("@action:button", "Show configuration folder"), dialog)
|
||||||
|
show_configuration_folder_button.setMaximumWidth(200)
|
||||||
|
show_configuration_folder_button.clicked.connect(self._showConfigurationFolder)
|
||||||
|
|
||||||
layout.addWidget(self._send_report_checkbox)
|
layout.addWidget(self._send_report_checkbox)
|
||||||
layout.addWidget(show_details_button)
|
layout.addWidget(show_details_button)
|
||||||
|
layout.addWidget(show_configuration_folder_button)
|
||||||
|
|
||||||
# "backup and start clean" and "close" buttons
|
# "backup and start clean" and "close" buttons
|
||||||
buttons = QDialogButtonBox()
|
buttons = QDialogButtonBox()
|
||||||
|
@ -182,6 +188,10 @@ class CrashHandler:
|
||||||
|
|
||||||
self.early_crash_dialog.close()
|
self.early_crash_dialog.close()
|
||||||
|
|
||||||
|
def _showConfigurationFolder(self):
|
||||||
|
path = Resources.getConfigStoragePath();
|
||||||
|
QDesktopServices.openUrl(QUrl.fromLocalFile( path ))
|
||||||
|
|
||||||
def _showDetailedReport(self):
|
def _showDetailedReport(self):
|
||||||
self.dialog.exec_()
|
self.dialog.exec_()
|
||||||
|
|
||||||
|
|
|
@ -1596,9 +1596,17 @@ class CuraApplication(QtApplication):
|
||||||
for original_node in nodes:
|
for original_node in nodes:
|
||||||
|
|
||||||
# Create a CuraSceneNode just if the original node is not that type
|
# Create a CuraSceneNode just if the original node is not that type
|
||||||
node = original_node if isinstance(original_node, CuraSceneNode) else CuraSceneNode()
|
if isinstance(original_node, CuraSceneNode):
|
||||||
|
node = original_node
|
||||||
|
else:
|
||||||
|
node = CuraSceneNode()
|
||||||
node.setMeshData(original_node.getMeshData())
|
node.setMeshData(original_node.getMeshData())
|
||||||
|
|
||||||
|
#Setting meshdata does not apply scaling.
|
||||||
|
if(original_node.getScale() != Vector(1.0, 1.0, 1.0)):
|
||||||
|
node.scale(original_node.getScale())
|
||||||
|
|
||||||
|
|
||||||
node.setSelectable(True)
|
node.setSelectable(True)
|
||||||
node.setName(os.path.basename(filename))
|
node.setName(os.path.basename(filename))
|
||||||
self.getBuildVolume().checkBoundsAndUpdate(node)
|
self.getBuildVolume().checkBoundsAndUpdate(node)
|
||||||
|
|
|
@ -208,19 +208,12 @@ class CuraContainerRegistry(ContainerRegistry):
|
||||||
Logger.log("e", "Incorrect profile [%s]. Could not find global profile", file_name)
|
Logger.log("e", "Incorrect profile [%s]. Could not find global profile", file_name)
|
||||||
return { "status": "error",
|
return { "status": "error",
|
||||||
"message": catalog.i18nc("@info:status Don't translate the XML tags <filename> or <message>!", "This profile <filename>{0}</filename> contains incorrect data, could not import it.", file_name)}
|
"message": catalog.i18nc("@info:status Don't translate the XML tags <filename> or <message>!", "This profile <filename>{0}</filename> contains incorrect data, could not import it.", file_name)}
|
||||||
|
|
||||||
# In a profile we can have the quality_definition metadata, but if not, we get the definition
|
|
||||||
profile_definition = global_profile.getMetaDataEntry("quality_definition")
|
|
||||||
if not profile_definition:
|
|
||||||
profile_definition = global_profile.getMetaDataEntry("definition")
|
profile_definition = global_profile.getMetaDataEntry("definition")
|
||||||
|
expected_machine_definition = "fdmprinter"
|
||||||
# The expected machine definition may be the quality_definition if defined or the current definition id
|
|
||||||
expected_machine_definition = None
|
|
||||||
if parseBool(global_container_stack.getMetaDataEntry("has_machine_quality", "False")):
|
if parseBool(global_container_stack.getMetaDataEntry("has_machine_quality", "False")):
|
||||||
expected_machine_definition = global_container_stack.getMetaDataEntry("quality_definition")
|
expected_machine_definition = global_container_stack.getMetaDataEntry("quality_definition")
|
||||||
if not expected_machine_definition:
|
if not expected_machine_definition:
|
||||||
expected_machine_definition = global_container_stack.definition.getId()
|
expected_machine_definition = global_container_stack.definition.getId()
|
||||||
|
|
||||||
if expected_machine_definition is not None and profile_definition is not None and profile_definition != expected_machine_definition:
|
if expected_machine_definition is not None and profile_definition is not None and profile_definition != expected_machine_definition:
|
||||||
Logger.log("e", "Profile [%s] is for machine [%s] but the current active machine is [%s]. Will not import the profile", file_name, profile_definition, expected_machine_definition)
|
Logger.log("e", "Profile [%s] is for machine [%s] but the current active machine is [%s]. Will not import the profile", file_name, profile_definition, expected_machine_definition)
|
||||||
return { "status": "error",
|
return { "status": "error",
|
||||||
|
|
|
@ -10,7 +10,7 @@ class MaterialSettingsVisibilityHandler(UM.Settings.Models.SettingVisibilityHand
|
||||||
|
|
||||||
material_settings = {
|
material_settings = {
|
||||||
"default_material_print_temperature",
|
"default_material_print_temperature",
|
||||||
"material_bed_temperature",
|
"default_material_bed_temperature",
|
||||||
"material_standby_temperature",
|
"material_standby_temperature",
|
||||||
#"material_flow_temp_graph",
|
#"material_flow_temp_graph",
|
||||||
"cool_fan_speed",
|
"cool_fan_speed",
|
||||||
|
|
|
@ -191,7 +191,7 @@ class CuraEngineBackend(QObject, Backend):
|
||||||
|
|
||||||
## Perform a slice of the scene.
|
## Perform a slice of the scene.
|
||||||
def slice(self):
|
def slice(self):
|
||||||
Logger.log("d", "starting to slice!")
|
Logger.log("d", "Starting to slice...")
|
||||||
self._slice_start_time = time()
|
self._slice_start_time = time()
|
||||||
if not self._build_plates_to_be_sliced:
|
if not self._build_plates_to_be_sliced:
|
||||||
self.processingProgress.emit(1.0)
|
self.processingProgress.emit(1.0)
|
||||||
|
@ -199,7 +199,7 @@ class CuraEngineBackend(QObject, Backend):
|
||||||
return
|
return
|
||||||
|
|
||||||
if self._process_layers_job:
|
if self._process_layers_job:
|
||||||
Logger.log("d", " ## Process layers job still busy, trying later")
|
Logger.log("d", "Process layers job still busy, trying later.")
|
||||||
return
|
return
|
||||||
|
|
||||||
if not hasattr(self._scene, "gcode_dict"):
|
if not hasattr(self._scene, "gcode_dict"):
|
||||||
|
|
|
@ -121,9 +121,13 @@ class GCodeWriter(MeshWriter):
|
||||||
if flat_global_container.getMetaDataEntry("quality_type", None) is None:
|
if flat_global_container.getMetaDataEntry("quality_type", None) is None:
|
||||||
flat_global_container.addMetaDataEntry("quality_type", stack.quality.getMetaDataEntry("quality_type", "normal"))
|
flat_global_container.addMetaDataEntry("quality_type", stack.quality.getMetaDataEntry("quality_type", "normal"))
|
||||||
|
|
||||||
# Ensure that quality_definition is set. (Can happen if we have empty quality changes).
|
# Change the default defintion
|
||||||
|
default_machine_definition = "fdmprinter"
|
||||||
if parseBool(stack.getMetaDataEntry("has_machine_quality", "False")):
|
if parseBool(stack.getMetaDataEntry("has_machine_quality", "False")):
|
||||||
flat_global_container.addMetaDataEntry("quality_definition", stack.getMetaDataEntry("quality_definition"))
|
default_machine_definition = stack.getMetaDataEntry("quality_definition")
|
||||||
|
if not default_machine_definition:
|
||||||
|
default_machine_definition = stack.definition.getId()
|
||||||
|
flat_global_container.setMetaDataEntry("definition", default_machine_definition)
|
||||||
|
|
||||||
serialized = flat_global_container.serialize()
|
serialized = flat_global_container.serialize()
|
||||||
data = {"global_quality": serialized}
|
data = {"global_quality": serialized}
|
||||||
|
@ -145,6 +149,15 @@ class GCodeWriter(MeshWriter):
|
||||||
# Ensure that quality_type is set. (Can happen if we have empty quality changes).
|
# Ensure that quality_type is set. (Can happen if we have empty quality changes).
|
||||||
if flat_extruder_quality.getMetaDataEntry("quality_type", None) is None:
|
if flat_extruder_quality.getMetaDataEntry("quality_type", None) is None:
|
||||||
flat_extruder_quality.addMetaDataEntry("quality_type", extruder.quality.getMetaDataEntry("quality_type", "normal"))
|
flat_extruder_quality.addMetaDataEntry("quality_type", extruder.quality.getMetaDataEntry("quality_type", "normal"))
|
||||||
|
|
||||||
|
# Change the default defintion
|
||||||
|
default_extruder_definition = "fdmextruder"
|
||||||
|
if parseBool(stack.getMetaDataEntry("has_machine_quality", "False")):
|
||||||
|
default_extruder_definition = extruder.getMetaDataEntry("quality_definition")
|
||||||
|
if not default_extruder_definition:
|
||||||
|
default_extruder_definition = extruder.definition.getId()
|
||||||
|
flat_extruder_quality.setMetaDataEntry("definition", default_extruder_definition)
|
||||||
|
|
||||||
extruder_serialized = flat_extruder_quality.serialize()
|
extruder_serialized = flat_extruder_quality.serialize()
|
||||||
data.setdefault("extruder_quality", []).append(extruder_serialized)
|
data.setdefault("extruder_quality", []).append(extruder_serialized)
|
||||||
|
|
||||||
|
|
|
@ -419,8 +419,6 @@ class LegacyUM3OutputDevice(NetworkedPrinterOutputDevice):
|
||||||
self._authentication_failed_message.show()
|
self._authentication_failed_message.show()
|
||||||
elif status_code == 200:
|
elif status_code == 200:
|
||||||
self.setAuthenticationState(AuthState.Authenticated)
|
self.setAuthenticationState(AuthState.Authenticated)
|
||||||
# Now we know for sure that we are authenticated, send the material profiles to the machine.
|
|
||||||
self._sendMaterialProfiles()
|
|
||||||
|
|
||||||
def _checkAuthentication(self):
|
def _checkAuthentication(self):
|
||||||
Logger.log("d", "Checking if authentication is correct for id %s and key %s", self._authentication_id, self._getSafeAuthKey())
|
Logger.log("d", "Checking if authentication is correct for id %s and key %s", self._authentication_id, self._getSafeAuthKey())
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
"author": "Dagoma",
|
"author": "Dagoma",
|
||||||
"manufacturer": "Dagoma",
|
"manufacturer": "Dagoma",
|
||||||
"file_formats": "text/x-gcode",
|
"file_formats": "text/x-gcode",
|
||||||
"icon": "icon_discoeasy200.png",
|
|
||||||
"platform": "discoeasy200.stl",
|
"platform": "discoeasy200.stl",
|
||||||
"platform_offset": [ 105, -59, 280]
|
"platform_offset": [ 105, -59, 280]
|
||||||
},
|
},
|
||||||
|
@ -39,13 +38,25 @@
|
||||||
"default_value": 10
|
"default_value": 10
|
||||||
},
|
},
|
||||||
"machine_start_gcode": {
|
"machine_start_gcode": {
|
||||||
"default_value": ";Gcode by Cura\nG90 ;absolute positioning\nM106 S250 ;fan on for the palpeur\nG28 X Y\nG1 X50\nM109 S180\nG28\nM104 S{material_print_temperature_layer_0}\n;Activation palpeur\n;bloc palpeur\nG29 ;Auto level\nM107 ;start with the fan off\nG1 X100 Y20 F3000\nG1 Z0.5\nM109 S{material_print_temperature_layer_0}\nM82 ;set extruder to absolute mode\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 Z3\nG1 F6000"
|
"default_value": ";Gcode by Cura\nG90\nM106 S250\nG28 X Y\nG1 X50\nM109 S180\nG28\nM104 S{material_print_temperature_layer_0}\nG29\nM107\nG1 X100 Y20 F3000\nG1 Z0.5\nM109 S{material_print_temperature_layer_0}\nM82\nG92 E0\nG1 F200 E10\nG92 E0\nG1 Z3\nG1 F6000\n"
|
||||||
},
|
},
|
||||||
"machine_end_gcode": {
|
"machine_end_gcode": {
|
||||||
"default_value": "M104 S0\nM106 S255 ;start fan full power\nM140 S0 ;heated bed heater off (if you have it)\n;Home machine\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+3 F3000 ;move Z up a bit and retract filament even more\nG90\nG28 X Y\n;Ventilation forcee\nM107 ;stop fan\n;Shut down motor\nM84 ;shut down motors"
|
"default_value": "\nM104 S0\nM106 S255\nM140 S0\nG91\nG1 E-1 F300\nG1 Z+3 F3000\nG90\nG28 X Y\nM107\nM84\n"
|
||||||
},
|
},
|
||||||
"material_diameter": {
|
"material_diameter": {
|
||||||
"default_value": 1.75
|
"default_value": 1.75
|
||||||
|
},
|
||||||
|
"speed_print": {
|
||||||
|
"default_value": 60
|
||||||
|
},
|
||||||
|
"speed_travel": {
|
||||||
|
"default_value": 100
|
||||||
|
},
|
||||||
|
"retraction_amount": {
|
||||||
|
"default_value": 3.5
|
||||||
|
},
|
||||||
|
"retraction_speed": {
|
||||||
|
"default_value": 50
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
69
resources/definitions/dagoma_neva.def.json
Normal file
69
resources/definitions/dagoma_neva.def.json
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
{
|
||||||
|
"id": "Dagoma_neva",
|
||||||
|
"name": "Dagoma NEVA",
|
||||||
|
"version": 2,
|
||||||
|
"inherits": "fdmprinter",
|
||||||
|
"metadata": {
|
||||||
|
"visible": true,
|
||||||
|
"author": "Dagoma",
|
||||||
|
"manufacturer": "Dagoma",
|
||||||
|
"file_formats": "text/x-gcode",
|
||||||
|
"platform": "neva.stl",
|
||||||
|
"platform_offset": [ 0, 0, 0]
|
||||||
|
},
|
||||||
|
"overrides": {
|
||||||
|
"machine_width": {
|
||||||
|
"default_value": 195.55
|
||||||
|
},
|
||||||
|
"machine_height": {
|
||||||
|
"default_value": 205
|
||||||
|
},
|
||||||
|
"machine_depth": {
|
||||||
|
"default_value": 195.55
|
||||||
|
},
|
||||||
|
"machine_center_is_zero": {
|
||||||
|
"default_value": true
|
||||||
|
},
|
||||||
|
"machine_nozzle_size": {
|
||||||
|
"default_value": 0.4
|
||||||
|
},
|
||||||
|
"machine_head_with_fans_polygon": {
|
||||||
|
"default_value": [
|
||||||
|
[17, 40],
|
||||||
|
[17, -70],
|
||||||
|
[-17, -70],
|
||||||
|
[17, 40]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gantry_height": {
|
||||||
|
"default_value": 0
|
||||||
|
},
|
||||||
|
"machine_shape": {
|
||||||
|
"default_value": "elliptic"
|
||||||
|
},
|
||||||
|
"machine_gcode_flavor": {
|
||||||
|
"default_value": "RepRap"
|
||||||
|
},
|
||||||
|
"machine_start_gcode": {
|
||||||
|
"default_value": ";Gcode by Cura\nG90\nG28\nM109 S100\nG29\nM104 S{material_print_temperature_layer_0}\nG0 X0 Y-85\nG0 Z0.26\nM109 S{material_print_temperature_layer_0}\nM82\nG92 E0\nG1 F200 E6\nG92 E0\nG1 F200 E-3.5\nG0 Z0.15\nG0 X10\nG0 Z3\nG1 F6000\n"
|
||||||
|
},
|
||||||
|
"machine_end_gcode": {
|
||||||
|
"default_value": "\nM104 S0\nM106 S255\nM140 S0\nG91\nG1 E-1 F300\nG1 Z+3 E-2 F9000\nG90\nG28\n"
|
||||||
|
},
|
||||||
|
"material_diameter": {
|
||||||
|
"default_value": 1.75
|
||||||
|
},
|
||||||
|
"speed_print": {
|
||||||
|
"default_value": 40
|
||||||
|
},
|
||||||
|
"speed_travel": {
|
||||||
|
"default_value": 120
|
||||||
|
},
|
||||||
|
"retraction_amount": {
|
||||||
|
"default_value": 3.8
|
||||||
|
},
|
||||||
|
"retraction_speed": {
|
||||||
|
"default_value": 60
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
49
resources/definitions/ubuild-3d_mr_bot_280.def.json
Normal file
49
resources/definitions/ubuild-3d_mr_bot_280.def.json
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
{
|
||||||
|
"id": "ubuild-3d_mr_bot_280",
|
||||||
|
"version": 2,
|
||||||
|
"name": "uBuild-3D Mr Bot 280",
|
||||||
|
"inherits": "fdmprinter",
|
||||||
|
"metadata": {
|
||||||
|
"visible": true,
|
||||||
|
"author": "uBuild-3D",
|
||||||
|
"manufacturer": "uBuild-3D",
|
||||||
|
"category": "Other",
|
||||||
|
"file_formats": "text/x-gcode",
|
||||||
|
"icon": "icon_uBuild-3D",
|
||||||
|
"platform": "mr_bot_280_platform.stl",
|
||||||
|
"has_materials": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"overrides": {
|
||||||
|
"machine_name": { "default_value": "Mr Bot 280" },
|
||||||
|
"machine_heated_bed": { "default_value": true },
|
||||||
|
"machine_width": { "default_value": 275 },
|
||||||
|
"machine_height": { "default_value": 275 },
|
||||||
|
"machine_depth": { "default_value": 275 },
|
||||||
|
"machine_center_is_zero": { "default_value": false },
|
||||||
|
"material_diameter": { "default_value": 1.75 },
|
||||||
|
"material_bed_temperature": { "default_value": 70 },
|
||||||
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
|
"layer_height": { "default_value": 0.2 },
|
||||||
|
"layer_height_0": { "default_value": 0.1 },
|
||||||
|
"retraction_amount": { "default_value": 2 },
|
||||||
|
"retraction_speed": { "default_value": 50 },
|
||||||
|
"retraction_retract_speed": { "default_value": 50 },
|
||||||
|
"retraction_prime_speed": { "default_value": 30 },
|
||||||
|
"adhesion_type": { "default_value": "skirt" },
|
||||||
|
"machine_nozzle_heat_up_speed": { "default_value": 2 },
|
||||||
|
"machine_nozzle_cool_down_speed": { "default_value": 2 },
|
||||||
|
"machine_head_with_fans_polygon": { "default_value": [[-20,20],[10,10],[10,10],[10,10]] },
|
||||||
|
"gantry_height": { "default_value": 275 },
|
||||||
|
"machine_max_feedrate_z": { "default_value": 15 },
|
||||||
|
"machine_max_feedrate_e": { "default_value": 60 },
|
||||||
|
"machine_max_acceleration_z": { "default_value": 1000 },
|
||||||
|
"machine_acceleration": { "default_value": 2000 },
|
||||||
|
"machine_max_jerk_xy": { "default_value": 20 },
|
||||||
|
"machine_max_jerk_z": { "default_value": 0.4 },
|
||||||
|
"machine_max_jerk_e": { "default_value": 5 },
|
||||||
|
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||||
|
"machine_start_gcode": { "default_value": "G21 ; set units to millimeters\nG90 ; use absolute positioning\nM82 ; absolute extrusion mode\nM140 S{material_bed_temperature} ; set bed temp\nM104 S{material_print_temperature} ; set extruder temp\nG28 ; home X, Y and Z\nG29 ; probe sequence (for auto-leveling)\nG1 Z15 F600 ; go to Z15 position\nG1 X0 Y-20 F10000 ; go to X0 Y-20 position\nM190 S{material_bed_temperature} ; wait for bed temp\nM109 S{material_print_temperature} ; wait for extruder temp\nG92 E0 ; reset extruder distance position\nG1 E25 F100 ; extrude 25mm of material\nG92 E0 ; reset extruder distance position\nM117 Printing..." },
|
||||||
|
"machine_end_gcode": { "default_value": "M400 ; wait for moves to finish\nG92 Z0 E0 ; reset Z position\nG1 E-2 F9000 ; retract material\nG1 Z2 ; get extruder out of the way\nM104 S0 ; turn off extruder\nG1 Y285 F3000 ; present finished print\nM140 S0 ; turn off bed\nM84 ; disable motors\nM117 Print complete" }
|
||||||
|
}
|
||||||
|
}
|
|
@ -3598,6 +3598,11 @@ msgctxt "@label"
|
||||||
msgid "SVG icons"
|
msgid "SVG icons"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139
|
||||||
|
msgctxt "@label"
|
||||||
|
msgid "Linux cross-distribution application deployment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:41
|
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:41
|
||||||
msgctxt "@label"
|
msgctxt "@label"
|
||||||
msgid "Profile:"
|
msgid "Profile:"
|
||||||
|
|
|
@ -3485,6 +3485,11 @@ msgctxt "@label"
|
||||||
msgid "SVG icons"
|
msgid "SVG icons"
|
||||||
msgstr "SVG-Symbole"
|
msgstr "SVG-Symbole"
|
||||||
|
|
||||||
|
#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:139
|
||||||
|
msgctxt "@label"
|
||||||
|
msgid "Linux cross-distribution application deployment"
|
||||||
|
msgstr "Distributionsunabhängiges Format für Linux-Anwendungen"
|
||||||
|
|
||||||
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:41
|
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:41
|
||||||
msgctxt "@label"
|
msgctxt "@label"
|
||||||
msgid "Profile:"
|
msgid "Profile:"
|
||||||
|
|
BIN
resources/meshes/neva.stl
Normal file
BIN
resources/meshes/neva.stl
Normal file
Binary file not shown.
|
@ -136,6 +136,7 @@ UM.Dialog
|
||||||
|
|
||||||
projectsModel.append({ name:"Noto Sans", description: catalog.i18nc("@label", "Font"), license: "Apache 2.0", url: "https://www.google.com/get/noto/" });
|
projectsModel.append({ name:"Noto Sans", description: catalog.i18nc("@label", "Font"), license: "Apache 2.0", url: "https://www.google.com/get/noto/" });
|
||||||
projectsModel.append({ name:"Font-Awesome-SVG-PNG", description: catalog.i18nc("@label", "SVG icons"), license: "SIL OFL 1.1", url: "https://github.com/encharm/Font-Awesome-SVG-PNG" });
|
projectsModel.append({ name:"Font-Awesome-SVG-PNG", description: catalog.i18nc("@label", "SVG icons"), license: "SIL OFL 1.1", url: "https://github.com/encharm/Font-Awesome-SVG-PNG" });
|
||||||
|
projectsModel.append({ name:"AppImageKit", description: catalog.i18nc("@label", "Linux cross-distribution application deployment"), license: "MIT", url: "https://github.com/AppImage/AppImageKit" });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,48 +6,53 @@
|
||||||
"fonts": {
|
"fonts": {
|
||||||
"large": {
|
"large": {
|
||||||
"size": 1.35,
|
"size": 1.35,
|
||||||
"bold": true,
|
"weight": 63,
|
||||||
"family": "Noto Sans"
|
"family": "Noto Sans"
|
||||||
},
|
},
|
||||||
"large_nonbold": {
|
"large_nonbold": {
|
||||||
"size": 1.35,
|
"size": 1.35,
|
||||||
|
"weight": 50,
|
||||||
"family": "Noto Sans"
|
"family": "Noto Sans"
|
||||||
},
|
},
|
||||||
"default": {
|
"default": {
|
||||||
"size": 1.0,
|
"size": 1.0,
|
||||||
|
"weight": 50,
|
||||||
"family": "Noto Sans"
|
"family": "Noto Sans"
|
||||||
},
|
},
|
||||||
"default_bold": {
|
"default_bold": {
|
||||||
"size": 1.0,
|
"size": 1.0,
|
||||||
"bold": true,
|
"weight": 63,
|
||||||
"family": "Noto Sans"
|
"family": "Noto Sans"
|
||||||
},
|
},
|
||||||
"default_italic": {
|
"default_italic": {
|
||||||
"size": 1.15,
|
"size": 1.15,
|
||||||
|
"weight": 50,
|
||||||
"italic": true,
|
"italic": true,
|
||||||
"family": "Noto Sans"
|
"family": "Noto Sans"
|
||||||
},
|
},
|
||||||
"small": {
|
"small": {
|
||||||
"size": 1.0,
|
"size": 1.0,
|
||||||
"bold": true,
|
"weight": 63,
|
||||||
"family": "Noto Sans"
|
"family": "Noto Sans"
|
||||||
},
|
},
|
||||||
"very_small": {
|
"very_small": {
|
||||||
"size": 1.0,
|
"size": 1.0,
|
||||||
|
"weight": 50,
|
||||||
"family": "Noto Sans"
|
"family": "Noto Sans"
|
||||||
},
|
},
|
||||||
"button_tooltip": {
|
"button_tooltip": {
|
||||||
"size": 1.0,
|
"size": 1.0,
|
||||||
|
"weight": 50,
|
||||||
"family": "Noto Sans"
|
"family": "Noto Sans"
|
||||||
},
|
},
|
||||||
"setting_category": {
|
"setting_category": {
|
||||||
"size": 1.15,
|
"size": 1.15,
|
||||||
"bold": true,
|
"weight": 63,
|
||||||
"family": "Noto Sans"
|
"family": "Noto Sans"
|
||||||
},
|
},
|
||||||
"action_button": {
|
"action_button": {
|
||||||
"size": 1.15,
|
"size": 1.15,
|
||||||
"bold": true,
|
"weight": 50,
|
||||||
"family": "Noto Sans"
|
"family": "Noto Sans"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue