Fix polyhedron vertices - points - #1527
Conversation
points to list[x, y, z], when initiated as vertices: list[Point].
gonzalocasas
left a comment
There was a problem hiding this comment.
mmm... this has two problems:
- performance is not the best, because it iterates twice over all vertices (first to check
all()and then to convert to lists), and - [this is a bit more problematic] vertices are not always going to be instances of
Point, compas accepts lists/tuples/etc that can be iterated as valid points, so, this code would break that assumption
may I ask what's the trigger for changing this? Have you observed a bug in other code?
|
the behaviour of |
|
I believe the issue here is that therefore you'd get a different type from |
|
I knew one day someone would dig up this polyhedron can of worm. I'm now excited to watch how it unfolds. |
| if all(isinstance(vertex, Point) for vertex in vertices): | ||
| vertices = [[vertex.x, vertex.y, vertex.z] for vertex in vertices] | ||
| self._vertices = vertices |
There was a problem hiding this comment.
perhaps something more like this?
| if all(isinstance(vertex, Point) for vertex in vertices): | |
| vertices = [[vertex.x, vertex.y, vertex.z] for vertex in vertices] | |
| self._vertices = vertices | |
| self._vertices = [] | |
| for vertex in vertices: | |
| self._vertices.append([*vertex]) |
Fixes the vertices setter to convert list[Point] into a list of coordinates list[list[int]]. The Polyhedron.vertices attribute now always returns a list of vertices (list[list[int]]).
The behavior now matches the docstring.
test_polyhedron_verticesintest_polyhedron.pyto verify that thePolyhedronclass correctly handles both lists of coordinates and lists ofPointobjects as vertices.Pointin the test file to support the new test case.What type of change is this?
Checklist
Put an
xin the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code.CHANGELOG.mdfile in theUnreleasedsection under the most fitting heading (e.g.Added,Changed,Removed).invoke test).invoke lint).compas.datastructures.Mesh.