mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-08 15:37:27 -06:00
Simplify code flow a bit
Use if branches for the unhappy flow, so that it's clear that this behaves as an early-out. This also prevents the need for declaring variables out of scope, which is not an issue with Python anyway.
This commit is contained in:
parent
564a97d5a8
commit
2c45efb70d
1 changed files with 33 additions and 34 deletions
|
@ -160,48 +160,47 @@ class ConvexHullDecorator(SceneNodeDecorator):
|
||||||
return offset_hull
|
return offset_hull
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
if not self._node.getMeshData(): #Node has no mesh data, so just return an empty Polygon.
|
||||||
|
return Polygon([])
|
||||||
|
|
||||||
offset_hull = None
|
offset_hull = None
|
||||||
mesh = None
|
mesh = self._node.getMeshData()
|
||||||
world_transform = None
|
world_transform = self._node.getWorldTransformation()
|
||||||
if self._node.getMeshData():
|
|
||||||
mesh = self._node.getMeshData()
|
|
||||||
world_transform = self._node.getWorldTransformation()
|
|
||||||
|
|
||||||
# Check the cache
|
# Check the cache
|
||||||
if mesh is self._2d_convex_hull_mesh and world_transform == self._2d_convex_hull_mesh_world_transform:
|
if mesh is self._2d_convex_hull_mesh and world_transform == self._2d_convex_hull_mesh_world_transform:
|
||||||
return self._2d_convex_hull_mesh_result
|
return self._2d_convex_hull_mesh_result
|
||||||
|
|
||||||
vertex_data = mesh.getConvexHullTransformedVertices(world_transform)
|
vertex_data = mesh.getConvexHullTransformedVertices(world_transform)
|
||||||
# Don't use data below 0.
|
# Don't use data below 0.
|
||||||
# TODO; We need a better check for this as this gives poor results for meshes with long edges.
|
# TODO; We need a better check for this as this gives poor results for meshes with long edges.
|
||||||
# Do not throw away vertices: the convex hull may be too small and objects can collide.
|
# Do not throw away vertices: the convex hull may be too small and objects can collide.
|
||||||
# vertex_data = vertex_data[vertex_data[:,1] >= -0.01]
|
# vertex_data = vertex_data[vertex_data[:,1] >= -0.01]
|
||||||
|
|
||||||
if vertex_data and len(vertex_data) >= 4:
|
if not vertex_data or len(vertex_data) < 4:
|
||||||
# Round the vertex data to 1/10th of a mm, then remove all duplicate vertices
|
return Polygon([])
|
||||||
# This is done to greatly speed up further convex hull calculations as the convex hull
|
# Round the vertex data to 1/10th of a mm, then remove all duplicate vertices
|
||||||
# becomes much less complex when dealing with highly detailed models.
|
# This is done to greatly speed up further convex hull calculations as the convex hull
|
||||||
vertex_data = numpy.round(vertex_data, 1)
|
# becomes much less complex when dealing with highly detailed models.
|
||||||
|
vertex_data = numpy.round(vertex_data, 1)
|
||||||
|
|
||||||
vertex_data = vertex_data[:, [0, 2]] # Drop the Y components to project to 2D.
|
vertex_data = vertex_data[:, [0, 2]] # Drop the Y components to project to 2D.
|
||||||
|
|
||||||
# Grab the set of unique points.
|
# Grab the set of unique points.
|
||||||
#
|
#
|
||||||
# This basically finds the unique rows in the array by treating them as opaque groups of bytes
|
# This basically finds the unique rows in the array by treating them as opaque groups of bytes
|
||||||
# which are as long as the 2 float64s in each row, and giving this view to numpy.unique() to munch.
|
# which are as long as the 2 float64s in each row, and giving this view to numpy.unique() to munch.
|
||||||
# See http://stackoverflow.com/questions/16970982/find-unique-rows-in-numpy-array
|
# See http://stackoverflow.com/questions/16970982/find-unique-rows-in-numpy-array
|
||||||
vertex_byte_view = numpy.ascontiguousarray(vertex_data).view(
|
vertex_byte_view = numpy.ascontiguousarray(vertex_data).view(
|
||||||
numpy.dtype((numpy.void, vertex_data.dtype.itemsize * vertex_data.shape[1])))
|
numpy.dtype((numpy.void, vertex_data.dtype.itemsize * vertex_data.shape[1])))
|
||||||
_, idx = numpy.unique(vertex_byte_view, return_index=True)
|
_, idx = numpy.unique(vertex_byte_view, return_index=True)
|
||||||
vertex_data = vertex_data[idx] # Select the unique rows by index.
|
vertex_data = vertex_data[idx] # Select the unique rows by index.
|
||||||
|
|
||||||
hull = Polygon(vertex_data)
|
hull = Polygon(vertex_data)
|
||||||
|
|
||||||
if len(vertex_data) >= 3:
|
if len(vertex_data) >= 3:
|
||||||
convex_hull = hull.getConvexHull()
|
convex_hull = hull.getConvexHull()
|
||||||
offset_hull = self._offsetHull(convex_hull)
|
offset_hull = self._offsetHull(convex_hull)
|
||||||
else:
|
|
||||||
return Polygon([]) # Node has no mesh data, so just return an empty Polygon.
|
|
||||||
|
|
||||||
# Store the result in the cache
|
# Store the result in the cache
|
||||||
self._2d_convex_hull_mesh = mesh
|
self._2d_convex_hull_mesh = mesh
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue