Skip to content

Commit b2552eb

Browse files
committed
Merge branch 'fix-mesh-strip-and-loop' into mesh-strip-split
2 parents 1fb20b6 + 2d1e7ec commit b2552eb

File tree

2 files changed

+58
-11
lines changed

2 files changed

+58
-11
lines changed

src/compas/datastructures/mesh/mesh.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
from compas.geometry import vector_average
3636

3737
from compas.utilities import linspace
38-
from compas.utilities import meshgrid
3938

4039
from compas.utilities import geometric_key
4140
from compas.utilities import pairwise
@@ -641,16 +640,15 @@ def from_meshgrid(cls, dx, nx, dy=None, ny=None):
641640
dy = dy or dx
642641
ny = ny or nx
643642

644-
U, V = meshgrid(linspace(0, dx, nx + 1), linspace(0, dy, ny + 1), indexing='ij')
645-
646-
quads = [[
647-
[U[i + 0][j + 0], V[i + 0][j + 0], 0.0],
648-
[U[i + 0][j + 1], V[i + 0][j + 1], 0.0],
649-
[U[i + 1][j + 1], V[i + 1][j + 1], 0.0],
650-
[U[i + 1][j + 0], V[i + 1][j + 0], 0.0]
643+
vertices = [[x, y, 0.0] for x, y in product(linspace(0, dx, nx + 1), linspace(0, dy, ny + 1))]
644+
faces = [[
645+
i * (ny + 1) + j,
646+
(i + 1) * (ny + 1) + j,
647+
(i + 1) * (ny + 1) + j + 1,
648+
i * (ny + 1) + j + 1
651649
] for i, j in product(range(nx), range(ny))]
652650

653-
return cls.from_polygons(quads)
651+
return cls.from_vertices_and_faces(vertices, faces)
654652

655653
# --------------------------------------------------------------------------
656654
# helpers

tests/compas/datastructures/test_halfedge.py

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ def test_del_edge_attribute_in_view(mesh, edge_key):
271271
# Tests - Loops & Strip
272272
# ==============================================================================
273273

274-
def test_loops_and_strips(sphere):
274+
def test_loops_and_strips_closed(sphere):
275275
poles = list(sphere.vertices_where({'vertex_degree': 16}))
276276

277277
for nbr in sphere.vertex_neighbors(poles[0]):
@@ -293,7 +293,6 @@ def test_loops_and_strips(sphere):
293293
assert len(ring) == 16, ring
294294
assert ring[0][0] == ring[-1][1]
295295

296-
297296
def test_split_strip_closed(box):
298297
edge = box.edge_sample()[0]
299298

@@ -320,3 +319,53 @@ def test_split_strip_open_corner(grid):
320319

321320
assert grid.is_valid()
322321
assert grid.number_of_faces() == 121
322+
323+
324+
def test_loops_and_strips_open(grid):
325+
assert grid.number_of_edges() == 220
326+
327+
edge = 47, 48
328+
strip = grid.edge_strip(edge)
329+
loop = grid.edge_loop(edge)
330+
331+
assert edge in strip
332+
assert len(strip) == 11
333+
assert grid.is_edge_on_boundary(* strip[0])
334+
assert grid.is_edge_on_boundary(* strip[-1])
335+
336+
assert edge in loop
337+
assert len(loop) == 10
338+
assert grid.is_vertex_on_boundary(loop[0][0])
339+
assert grid.is_vertex_on_boundary(loop[-1][1])
340+
341+
342+
def test_loops_and_strips_open_corner(grid):
343+
assert grid.number_of_edges() == 220
344+
345+
edge = 0, 1
346+
loop = grid.edge_loop(edge)
347+
strip = grid.edge_strip(edge)
348+
349+
assert edge in strip
350+
assert len(strip) == 11
351+
assert grid.is_edge_on_boundary(* strip[0])
352+
assert grid.is_edge_on_boundary(* strip[-1])
353+
assert edge == strip[-1]
354+
355+
assert edge in loop
356+
assert len(loop) == 10
357+
assert edge == loop[0]
358+
359+
edge = 1, 0
360+
loop = grid.edge_loop(edge)
361+
strip = grid.edge_strip(edge)
362+
363+
assert edge in strip
364+
assert len(strip) == 11
365+
assert grid.is_edge_on_boundary(* strip[0])
366+
assert grid.is_edge_on_boundary(* strip[-1])
367+
assert edge == strip[0]
368+
369+
assert edge in loop
370+
assert len(loop) == 10
371+
assert edge == loop[-1]

0 commit comments

Comments
 (0)