mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-24 23:23:57 -06:00
Prime tower area is now also drawn in error mesh
CURA-2375
This commit is contained in:
parent
799cb51c2e
commit
9f1dd325bb
1 changed files with 22 additions and 43 deletions
|
@ -70,9 +70,6 @@ class BuildVolume(SceneNode):
|
|||
self._disallowed_areas = []
|
||||
self._disallowed_area_mesh = None
|
||||
|
||||
self._prime_tower_area = None
|
||||
self._prime_tower_area_mesh = None
|
||||
|
||||
self._error_areas = []
|
||||
self._error_mesh = None
|
||||
|
||||
|
@ -150,10 +147,6 @@ class BuildVolume(SceneNode):
|
|||
if self._disallowed_area_mesh:
|
||||
renderer.queueNode(self, mesh = self._disallowed_area_mesh, shader = self._shader, transparent = True, backface_cull = True, sort = -9)
|
||||
|
||||
if self._prime_tower_area_mesh:
|
||||
renderer.queueNode(self, mesh = self._prime_tower_area_mesh, shader = self._shader, transparent=True,
|
||||
backface_cull=True, sort=-8)
|
||||
|
||||
if self._error_mesh:
|
||||
renderer.queueNode(self, mesh=self._error_mesh, shader=self._shader, transparent=True,
|
||||
backface_cull=True, sort=-8)
|
||||
|
@ -232,24 +225,6 @@ class BuildVolume(SceneNode):
|
|||
else:
|
||||
self._disallowed_area_mesh = None
|
||||
|
||||
if self._prime_tower_area:
|
||||
mb = MeshBuilder()
|
||||
color = Color(1.0, 0.0, 0.0, 0.5)
|
||||
points = self._prime_tower_area.getPoints()
|
||||
first = Vector(self._clamp(points[0][0], min_w, max_w), disallowed_area_height,
|
||||
self._clamp(points[0][1], min_d, max_d))
|
||||
previous_point = Vector(self._clamp(points[0][0], min_w, max_w), disallowed_area_height,
|
||||
self._clamp(points[0][1], min_d, max_d))
|
||||
for point in points:
|
||||
new_point = Vector(self._clamp(point[0], min_w, max_w), disallowed_area_height,
|
||||
self._clamp(point[1], min_d, max_d))
|
||||
mb.addFace(first, previous_point, new_point, color=color)
|
||||
previous_point = new_point
|
||||
|
||||
self._prime_tower_area_mesh = mb.build()
|
||||
else:
|
||||
self._prime_tower_area_mesh = None
|
||||
|
||||
if self._error_areas:
|
||||
mb = MeshBuilder()
|
||||
for error_area in self._error_areas:
|
||||
|
@ -265,7 +240,8 @@ class BuildVolume(SceneNode):
|
|||
mb.addFace(first, previous_point, new_point, color=color)
|
||||
previous_point = new_point
|
||||
self._error_mesh = mb.build()
|
||||
|
||||
else:
|
||||
self._error_mesh = None
|
||||
|
||||
self._volume_aabb = AxisAlignedBox(
|
||||
minimum = Vector(min_w, min_h - 1.0, min_d),
|
||||
|
@ -383,7 +359,8 @@ class BuildVolume(SceneNode):
|
|||
|
||||
machine_width = self._global_container_stack.getProperty("machine_width", "value")
|
||||
machine_depth = self._global_container_stack.getProperty("machine_depth", "value")
|
||||
self._prime_tower_area = None
|
||||
prime_tower_area = None
|
||||
|
||||
# Add prime tower location as disallowed area.
|
||||
# if self._global_container_stack.getProperty("prime_tower_enable", "value") == True:
|
||||
if ExtruderManager.getInstance().getResolveOrValue("prime_tower_enable") == True:
|
||||
|
@ -391,7 +368,7 @@ class BuildVolume(SceneNode):
|
|||
prime_tower_x = self._global_container_stack.getProperty("prime_tower_position_x", "value") - machine_width / 2
|
||||
prime_tower_y = - self._global_container_stack.getProperty("prime_tower_position_y", "value") + machine_depth / 2
|
||||
|
||||
self._prime_tower_area = Polygon([
|
||||
prime_tower_area = Polygon([
|
||||
[prime_tower_x - prime_tower_size, prime_tower_y - prime_tower_size],
|
||||
[prime_tower_x, prime_tower_y - prime_tower_size],
|
||||
[prime_tower_x, prime_tower_y],
|
||||
|
@ -425,18 +402,18 @@ class BuildVolume(SceneNode):
|
|||
[prime_x - PRIME_CLEARANCE, prime_y + PRIME_CLEARANCE],
|
||||
])
|
||||
prime_polygon = prime_polygon.getMinkowskiHull(Polygon(approximatedCircleVertices(0)))
|
||||
collision = False
|
||||
prime_tower_collision = False
|
||||
# Check if prime polygon is intersecting with any of the other disallowed areas.
|
||||
for poly in disallowed_polygons:
|
||||
if prime_polygon.intersectsPolygon(poly) is not None:
|
||||
collision = True
|
||||
prime_tower_collision = True
|
||||
break
|
||||
|
||||
if not collision: # Prime area is valid. Add as normal.
|
||||
if not prime_tower_collision: # Prime area is valid. Add as normal.
|
||||
prime_polygons.append(prime_polygon)
|
||||
else:
|
||||
self._error_areas.append(prime_polygon)
|
||||
prime_collision = prime_collision or collision
|
||||
prime_collision = prime_collision or prime_tower_collision
|
||||
|
||||
disallowed_polygons.extend(prime_polygons)
|
||||
|
||||
|
@ -448,7 +425,6 @@ class BuildVolume(SceneNode):
|
|||
poly = poly.getMinkowskiHull(Polygon(approximatedCircleVertices(disallowed_border_size)))
|
||||
areas.append(poly)
|
||||
|
||||
|
||||
# Add the skirt areas around the borders of the build plate.
|
||||
if disallowed_border_size > 0:
|
||||
half_machine_width = self._global_container_stack.getProperty("machine_width", "value") / 2
|
||||
|
@ -485,18 +461,21 @@ class BuildVolume(SceneNode):
|
|||
# Check if the prime tower area intersects with any of the other areas.
|
||||
# If this is the case, keep the polygon seperate, so it can be drawn in red.
|
||||
# If not, add it back to disallowed area's, so it's rendered as normal.
|
||||
collision = False
|
||||
if self._prime_tower_area:
|
||||
prime_tower_collision = False
|
||||
if prime_tower_area:
|
||||
# Using Minkowski of 0 fixes the prime tower area so it's rendered correctly
|
||||
prime_tower_area = prime_tower_area.getMinkowskiHull(Polygon(approximatedCircleVertices(0)))
|
||||
for area in areas:
|
||||
# Using Minkowski of 0 fixes the prime tower area so it's rendered correctly
|
||||
self._prime_tower_area = self._prime_tower_area.getMinkowskiHull(Polygon(approximatedCircleVertices(0)))
|
||||
if self._prime_tower_area.intersectsPolygon(area) is not None:
|
||||
collision = True
|
||||
if prime_tower_area.intersectsPolygon(area) is not None:
|
||||
prime_tower_collision = True
|
||||
break
|
||||
if not collision:
|
||||
areas.append(self._prime_tower_area)
|
||||
self._prime_tower_area = None
|
||||
self._has_errors = collision
|
||||
|
||||
if not prime_tower_collision:
|
||||
areas.append(prime_tower_area)
|
||||
else:
|
||||
self._error_areas.append(prime_tower_area)
|
||||
|
||||
self._has_errors = prime_tower_collision or prime_collision
|
||||
self._disallowed_areas = areas
|
||||
|
||||
## Private convenience function to get a setting from the adhesion extruder.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue