Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f726d2c

Browse files
authored
Merge pull request #25252 from anntzer/ce
Support make_compound_path concatenating only empty paths.
2 parents 380afc8 + 7b9547e commit f726d2c

File tree

2 files changed

+19
-17
lines changed

2 files changed

+19
-17
lines changed

lib/matplotlib/path.py

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -318,29 +318,25 @@ def make_compound_path_from_polys(cls, XY):
318318

319319
@classmethod
320320
def make_compound_path(cls, *args):
321+
r"""
322+
Concatenate a list of `Path`\s into a single `.Path`, removing all `.STOP`\s.
321323
"""
322-
Make a compound path from a list of `Path` objects. Blindly removes
323-
all `Path.STOP` control points.
324-
"""
325-
# Handle an empty list in args (i.e. no args).
326324
if not args:
327325
return Path(np.empty([0, 2], dtype=np.float32))
328-
vertices = np.concatenate([x.vertices for x in args])
326+
vertices = np.concatenate([path.vertices for path in args])
329327
codes = np.empty(len(vertices), dtype=cls.code_type)
330328
i = 0
331329
for path in args:
330+
size = len(path.vertices)
332331
if path.codes is None:
333-
codes[i] = cls.MOVETO
334-
codes[i + 1:i + len(path.vertices)] = cls.LINETO
332+
if size:
333+
codes[i] = cls.MOVETO
334+
codes[i+1:i+size] = cls.LINETO
335335
else:
336-
codes[i:i + len(path.codes)] = path.codes
337-
i += len(path.vertices)
338-
# remove STOP's, since internal STOPs are a bug
339-
not_stop_mask = codes != cls.STOP
340-
vertices = vertices[not_stop_mask, :]
341-
codes = codes[not_stop_mask]
342-
343-
return cls(vertices, codes)
336+
codes[i:i+size] = path.codes
337+
i += size
338+
not_stop_mask = codes != cls.STOP # Remove STOPs, as internal STOPs are a bug.
339+
return cls(vertices[not_stop_mask], codes[not_stop_mask])
344340

345341
def __repr__(self):
346342
return f"Path({self.vertices!r}, {self.codes!r})"

lib/matplotlib/tests/test_path.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,14 @@ def test_log_transform_with_zero():
203203
def test_make_compound_path_empty():
204204
# We should be able to make a compound path with no arguments.
205205
# This makes it easier to write generic path based code.
206-
r = Path.make_compound_path()
207-
assert r.vertices.shape == (0, 2)
206+
empty = Path.make_compound_path()
207+
assert empty.vertices.shape == (0, 2)
208+
r2 = Path.make_compound_path(empty, empty)
209+
assert r2.vertices.shape == (0, 2)
210+
assert r2.codes.shape == (0,)
211+
r3 = Path.make_compound_path(Path([(0, 0)]), empty)
212+
assert r3.vertices.shape == (1, 2)
213+
assert r3.codes.shape == (1,)
208214

209215

210216
def test_make_compound_path_stops():

0 commit comments

Comments
 (0)