Skip to content

Commit f2b5486

Browse files
authored
Merge pull request #24305 from anntzer/cscs
Unify logic of ConnectionStyle._Base.{_clip,_shrink}.
2 parents 79a5abb + 1d457c0 commit f2b5486

File tree

2 files changed

+33
-43
lines changed

2 files changed

+33
-43
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
``SimpleEvent``
2+
~~~~~~~~~~~~~~~
3+
The ``SimpleEvent`` nested class (previously accessible via the public
4+
subclasses of ``ConnectionStyle._Base``, such as `.ConnectionStyle.Arc`, has
5+
been deprecated.

lib/matplotlib/patches.py

Lines changed: 28 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import math
88
from numbers import Number
99
import textwrap
10+
from types import SimpleNamespace
1011
from collections import namedtuple
1112

1213
import numpy as np
@@ -2698,59 +2699,35 @@ class _Base:
26982699
helper methods.
26992700
"""
27002701

2702+
@_api.deprecated("3.7")
27012703
class SimpleEvent:
27022704
def __init__(self, xy):
27032705
self.x, self.y = xy
27042706

2705-
def _clip(self, path, patchA, patchB):
2707+
def _in_patch(self, patch):
27062708
"""
2707-
Clip the path to the boundary of the patchA and patchB.
2708-
The starting point of the path needed to be inside of the
2709-
patchA and the end point inside the patch B. The *contains*
2710-
methods of each patch object is utilized to test if the point
2711-
is inside the path.
2709+
Return a predicate function testing whether a point *xy* is
2710+
contained in *patch*.
27122711
"""
2712+
return lambda xy: patch.contains(
2713+
SimpleNamespace(x=xy[0], y=xy[1]))[0]
27132714

2714-
if patchA:
2715-
def insideA(xy_display):
2716-
xy_event = ConnectionStyle._Base.SimpleEvent(xy_display)
2717-
return patchA.contains(xy_event)[0]
2718-
2719-
try:
2720-
left, right = split_path_inout(path, insideA)
2721-
except ValueError:
2722-
right = path
2723-
2724-
path = right
2725-
2726-
if patchB:
2727-
def insideB(xy_display):
2728-
xy_event = ConnectionStyle._Base.SimpleEvent(xy_display)
2729-
return patchB.contains(xy_event)[0]
2730-
2731-
try:
2732-
left, right = split_path_inout(path, insideB)
2733-
except ValueError:
2734-
left = path
2735-
2736-
path = left
2737-
2738-
return path
2739-
2740-
def _shrink(self, path, shrinkA, shrinkB):
2715+
def _clip(self, path, in_start, in_stop):
27412716
"""
2742-
Shrink the path by fixed size (in points) with shrinkA and shrinkB.
2717+
Clip *path* at its start by the region where *in_start* returns
2718+
True, and at its stop by the region where *in_stop* returns True.
2719+
2720+
The original path is assumed to start in the *in_start* region and
2721+
to stop in the *in_stop* region.
27432722
"""
2744-
if shrinkA:
2745-
insideA = inside_circle(*path.vertices[0], shrinkA)
2723+
if in_start:
27462724
try:
2747-
left, path = split_path_inout(path, insideA)
2725+
_, path = split_path_inout(path, in_start)
27482726
except ValueError:
27492727
pass
2750-
if shrinkB:
2751-
insideB = inside_circle(*path.vertices[-1], shrinkB)
2728+
if in_stop:
27522729
try:
2753-
path, right = split_path_inout(path, insideB)
2730+
path, _ = split_path_inout(path, in_stop)
27542731
except ValueError:
27552732
pass
27562733
return path
@@ -2762,9 +2739,17 @@ def __call__(self, posA, posB,
27622739
*posB*; then clip and shrink the path.
27632740
"""
27642741
path = self.connect(posA, posB)
2765-
clipped_path = self._clip(path, patchA, patchB)
2766-
shrunk_path = self._shrink(clipped_path, shrinkA, shrinkB)
2767-
return shrunk_path
2742+
path = self._clip(
2743+
path,
2744+
self._in_patch(patchA) if patchA else None,
2745+
self._in_patch(patchB) if patchB else None,
2746+
)
2747+
path = self._clip(
2748+
path,
2749+
inside_circle(*path.vertices[0], shrinkA) if shrinkA else None,
2750+
inside_circle(*path.vertices[-1], shrinkB) if shrinkB else None
2751+
)
2752+
return path
27682753

27692754
@_register_style(_style_list)
27702755
class Arc3(_Base):

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy