mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-05-07 03:29:00 +08:00
Merge branch '5.1'
This commit is contained in:
commit
adeb9da356
@ -565,8 +565,8 @@ class BuildVolume(SceneNode):
|
|||||||
self._updateScaleFactor()
|
self._updateScaleFactor()
|
||||||
|
|
||||||
self._volume_aabb = AxisAlignedBox(
|
self._volume_aabb = AxisAlignedBox(
|
||||||
minimum = Vector(min_w, min_h - 1.0, min_d).scale(self._scale_vector),
|
minimum = Vector(min_w, min_h - 1.0, min_d),
|
||||||
maximum = Vector(max_w, max_h - self._raft_thickness - self._extra_z_clearance, max_d).scale(self._scale_vector)
|
maximum = Vector(max_w, max_h - self._raft_thickness - self._extra_z_clearance, max_d)
|
||||||
)
|
)
|
||||||
|
|
||||||
bed_adhesion_size = self.getEdgeDisallowedSize()
|
bed_adhesion_size = self.getEdgeDisallowedSize()
|
||||||
@ -575,8 +575,8 @@ class BuildVolume(SceneNode):
|
|||||||
# This is probably wrong in all other cases. TODO!
|
# This is probably wrong in all other cases. TODO!
|
||||||
# The +1 and -1 is added as there is always a bit of extra room required to work properly.
|
# The +1 and -1 is added as there is always a bit of extra room required to work properly.
|
||||||
scale_to_max_bounds = AxisAlignedBox(
|
scale_to_max_bounds = AxisAlignedBox(
|
||||||
minimum = Vector(min_w + bed_adhesion_size + 1, min_h, min_d + self._disallowed_area_size - bed_adhesion_size + 1).scale(self._scale_vector),
|
minimum = Vector(min_w + bed_adhesion_size + 1, min_h, min_d + self._disallowed_area_size - bed_adhesion_size + 1),
|
||||||
maximum = Vector(max_w - bed_adhesion_size - 1, max_h - self._raft_thickness - self._extra_z_clearance, max_d - self._disallowed_area_size + bed_adhesion_size - 1).scale(self._scale_vector)
|
maximum = Vector(max_w - bed_adhesion_size - 1, max_h - self._raft_thickness - self._extra_z_clearance, max_d - self._disallowed_area_size + bed_adhesion_size - 1)
|
||||||
)
|
)
|
||||||
|
|
||||||
self._application.getController().getScene()._maximum_bounds = scale_to_max_bounds # type: ignore
|
self._application.getController().getScene()._maximum_bounds = scale_to_max_bounds # type: ignore
|
||||||
@ -645,7 +645,7 @@ class BuildVolume(SceneNode):
|
|||||||
for extruder in extruders:
|
for extruder in extruders:
|
||||||
extruder.propertyChanged.connect(self._onSettingPropertyChanged)
|
extruder.propertyChanged.connect(self._onSettingPropertyChanged)
|
||||||
|
|
||||||
self._width = self._global_container_stack.getProperty("machine_width", "value") * self._scale_vector.x
|
self._width = self._global_container_stack.getProperty("machine_width", "value")
|
||||||
machine_height = self._global_container_stack.getProperty("machine_height", "value")
|
machine_height = self._global_container_stack.getProperty("machine_height", "value")
|
||||||
if self._global_container_stack.getProperty("print_sequence", "value") == "one_at_a_time" and len(self._scene_objects) > 1:
|
if self._global_container_stack.getProperty("print_sequence", "value") == "one_at_a_time" and len(self._scene_objects) > 1:
|
||||||
self._height = min(self._global_container_stack.getProperty("gantry_height", "value") * self._scale_vector.z, machine_height)
|
self._height = min(self._global_container_stack.getProperty("gantry_height", "value") * self._scale_vector.z, machine_height)
|
||||||
@ -656,7 +656,7 @@ class BuildVolume(SceneNode):
|
|||||||
else:
|
else:
|
||||||
self._height = self._global_container_stack.getProperty("machine_height", "value")
|
self._height = self._global_container_stack.getProperty("machine_height", "value")
|
||||||
self._build_volume_message.hide()
|
self._build_volume_message.hide()
|
||||||
self._depth = self._global_container_stack.getProperty("machine_depth", "value") * self._scale_vector.y
|
self._depth = self._global_container_stack.getProperty("machine_depth", "value")
|
||||||
self._shape = self._global_container_stack.getProperty("machine_shape", "value")
|
self._shape = self._global_container_stack.getProperty("machine_shape", "value")
|
||||||
|
|
||||||
self._updateDisallowedAreas()
|
self._updateDisallowedAreas()
|
||||||
@ -752,8 +752,8 @@ class BuildVolume(SceneNode):
|
|||||||
return
|
return
|
||||||
self._updateScaleFactor()
|
self._updateScaleFactor()
|
||||||
self._height = self._global_container_stack.getProperty("machine_height", "value") * self._scale_vector.z
|
self._height = self._global_container_stack.getProperty("machine_height", "value") * self._scale_vector.z
|
||||||
self._width = self._global_container_stack.getProperty("machine_width", "value") * self._scale_vector.x
|
self._width = self._global_container_stack.getProperty("machine_width", "value")
|
||||||
self._depth = self._global_container_stack.getProperty("machine_depth", "value") * self._scale_vector.y
|
self._depth = self._global_container_stack.getProperty("machine_depth", "value")
|
||||||
self._shape = self._global_container_stack.getProperty("machine_shape", "value")
|
self._shape = self._global_container_stack.getProperty("machine_shape", "value")
|
||||||
|
|
||||||
def _updateDisallowedAreasAndRebuild(self):
|
def _updateDisallowedAreasAndRebuild(self):
|
||||||
@ -770,14 +770,6 @@ class BuildVolume(SceneNode):
|
|||||||
self._extra_z_clearance = self._calculateExtraZClearance(ExtruderManager.getInstance().getUsedExtruderStacks())
|
self._extra_z_clearance = self._calculateExtraZClearance(ExtruderManager.getInstance().getUsedExtruderStacks())
|
||||||
self.rebuild()
|
self.rebuild()
|
||||||
|
|
||||||
def _scaleAreas(self, result_areas: List[Polygon]) -> None:
|
|
||||||
if self._global_container_stack is None:
|
|
||||||
return
|
|
||||||
for i, polygon in enumerate(result_areas):
|
|
||||||
result_areas[i] = polygon.scale(
|
|
||||||
100.0 / max(100.0, self._global_container_stack.getProperty("material_shrinkage_percentage_xy", "value"))
|
|
||||||
)
|
|
||||||
|
|
||||||
def _updateDisallowedAreas(self) -> None:
|
def _updateDisallowedAreas(self) -> None:
|
||||||
if not self._global_container_stack:
|
if not self._global_container_stack:
|
||||||
return
|
return
|
||||||
@ -833,11 +825,9 @@ class BuildVolume(SceneNode):
|
|||||||
|
|
||||||
self._disallowed_areas = []
|
self._disallowed_areas = []
|
||||||
for extruder_id in result_areas:
|
for extruder_id in result_areas:
|
||||||
self._scaleAreas(result_areas[extruder_id])
|
|
||||||
self._disallowed_areas.extend(result_areas[extruder_id])
|
self._disallowed_areas.extend(result_areas[extruder_id])
|
||||||
self._disallowed_areas_no_brim = []
|
self._disallowed_areas_no_brim = []
|
||||||
for extruder_id in result_areas_no_brim:
|
for extruder_id in result_areas_no_brim:
|
||||||
self._scaleAreas(result_areas_no_brim[extruder_id])
|
|
||||||
self._disallowed_areas_no_brim.extend(result_areas_no_brim[extruder_id])
|
self._disallowed_areas_no_brim.extend(result_areas_no_brim[extruder_id])
|
||||||
|
|
||||||
def _computeDisallowedAreasPrinted(self, used_extruders):
|
def _computeDisallowedAreasPrinted(self, used_extruders):
|
||||||
@ -993,6 +983,9 @@ class BuildVolume(SceneNode):
|
|||||||
half_machine_width = self._global_container_stack.getProperty("machine_width", "value") / 2
|
half_machine_width = self._global_container_stack.getProperty("machine_width", "value") / 2
|
||||||
half_machine_depth = self._global_container_stack.getProperty("machine_depth", "value") / 2
|
half_machine_depth = self._global_container_stack.getProperty("machine_depth", "value") / 2
|
||||||
|
|
||||||
|
# We need at a minimum a very small border around the edge so that models can't go off the build plate
|
||||||
|
border_size = max(border_size, 0.1)
|
||||||
|
|
||||||
if self._shape != "elliptic":
|
if self._shape != "elliptic":
|
||||||
if border_size - left_unreachable_border > 0:
|
if border_size - left_unreachable_border > 0:
|
||||||
result[extruder_id].append(Polygon(numpy.array([
|
result[extruder_id].append(Polygon(numpy.array([
|
||||||
|
@ -12,6 +12,8 @@ from UM.Application import Application
|
|||||||
from UM.Message import Message
|
from UM.Message import Message
|
||||||
from UM.Resources import Resources
|
from UM.Resources import Resources
|
||||||
from UM.Scene.SceneNode import SceneNode
|
from UM.Scene.SceneNode import SceneNode
|
||||||
|
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||||
|
from UM.Settings.EmptyInstanceContainer import EmptyInstanceContainer
|
||||||
|
|
||||||
from cura.CuraApplication import CuraApplication
|
from cura.CuraApplication import CuraApplication
|
||||||
from cura.CuraPackageManager import CuraPackageManager
|
from cura.CuraPackageManager import CuraPackageManager
|
||||||
@ -268,6 +270,10 @@ class ThreeMFWriter(MeshWriter):
|
|||||||
# Don't export materials not in use
|
# Don't export materials not in use
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if isinstance(extruder.material, type(ContainerRegistry.getInstance().getEmptyInstanceContainer())):
|
||||||
|
# This is an empty material container, no material to export
|
||||||
|
continue
|
||||||
|
|
||||||
if package_manager.isMaterialBundled(extruder.material.getFileName(), extruder.material.getMetaDataEntry("GUID")):
|
if package_manager.isMaterialBundled(extruder.material.getFileName(), extruder.material.getMetaDataEntry("GUID")):
|
||||||
# Don't export bundled materials
|
# Don't export bundled materials
|
||||||
continue
|
continue
|
||||||
@ -275,14 +281,9 @@ class ThreeMFWriter(MeshWriter):
|
|||||||
package_id = package_manager.getMaterialFilePackageId(extruder.material.getFileName(), extruder.material.getMetaDataEntry("GUID"))
|
package_id = package_manager.getMaterialFilePackageId(extruder.material.getFileName(), extruder.material.getMetaDataEntry("GUID"))
|
||||||
package_data = package_manager.getInstalledPackageInfo(package_id)
|
package_data = package_manager.getInstalledPackageInfo(package_id)
|
||||||
|
|
||||||
|
# We failed to find the package for this material
|
||||||
if not package_data:
|
if not package_data:
|
||||||
# We failed to find the package for this material
|
Logger.info(f"Could not find package for material in extruder {extruder.id}, skipping.")
|
||||||
|
|
||||||
message = Message(catalog.i18nc("@error:material",
|
|
||||||
"It was not possible to store material package information in project file: {material}. This project may not open correctly on other systems.".format(material=extruder.getName())),
|
|
||||||
title=catalog.i18nc("@info:title", "Failed to save material package information"),
|
|
||||||
message_type=Message.MessageType.WARNING)
|
|
||||||
message.show()
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
material_metadata = {"id": package_id,
|
material_metadata = {"id": package_id,
|
||||||
|
@ -8053,6 +8053,7 @@
|
|||||||
"description": "Remove inside corners from the raft, causing the raft to become convex.",
|
"description": "Remove inside corners from the raft, causing the raft to become convex.",
|
||||||
"type": "bool",
|
"type": "bool",
|
||||||
"default_value": false,
|
"default_value": false,
|
||||||
|
"resolve": "any(extruderValues('raft_remove_inside_corners'))",
|
||||||
"enabled": "resolveOrValue('adhesion_type') == 'raft'",
|
"enabled": "resolveOrValue('adhesion_type') == 'raft'",
|
||||||
"settable_per_mesh": false,
|
"settable_per_mesh": false,
|
||||||
"settable_per_extruder": false
|
"settable_per_extruder": false
|
||||||
|
Loading…
x
Reference in New Issue
Block a user