drawlib 0.2.3.dev4__tar.gz → 0.2.3.dev5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of drawlib might be problematic. Click here for more details.
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/PKG-INFO +1 -1
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/__init__.py +1 -1
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core_canvas/original_arrow.py +114 -8
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/pyproject.toml +1 -1
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/LICENSE.txt +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/__main__.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/apis.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/assets/__init__.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/assets/v0_2/__init__.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/assets/v0_2/fonticons/__init__.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/assets/v0_2/fonts/__init__.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/py.typed +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/__init__.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/__main__.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/apis.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/__init__.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/command.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core/__init__.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core/colors.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core/dimage.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core/fonts.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core/model.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core/model_system_default.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core/theme.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core/theme_officials.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core/theme_style_caches.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core/util.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core_canvas/__init__.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core_canvas/base.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core_canvas/canvas.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core_canvas/image.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core_canvas/line.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core_canvas/original_polygon.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core_canvas/patches.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core_canvas/text.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/download.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/dutil/__init__.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/dutil/dutil_canvas.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/dutil/dutil_color.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/dutil/dutil_script.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/dutil/settings.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/icons/__init__.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/icons/phosphor.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/icons/util.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/logging.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/smartarts/__init__.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/smartarts/boxlist.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/smartarts/boxtree.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/smartarts/bubblespeech.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/smartarts/bulletpoints.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/smartarts/dsart.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/smartarts/gridlayout.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/smartarts/pyramid.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/smartarts/sourcecode.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/smartarts/table.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/smartarts/tree.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/umls/activity.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/umls/class_.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/umls/communication.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/umls/component.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/umls/deployment.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/umls/duml.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/umls/object.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/umls/package.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/umls/sequence.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/umls/state_machine.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/umls/usecase.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/util.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/validators/__init__.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/validators/args.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/validators/color.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/validators/coordinate.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/validators/icon.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/validators/image.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/validators/line.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/validators/shape.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/validators/smartarts.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/validators/style.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/validators/text.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/validators/types.py +0 -0
- {drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/pypi.md +0 -0
{drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core_canvas/original_arrow.py
RENAMED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"""Canvas's original arrow feature implementation module."""
|
|
12
12
|
|
|
13
13
|
import math
|
|
14
|
-
from typing import List, Literal, Optional, Tuple, Union
|
|
14
|
+
from typing import Any, List, Literal, Optional, Tuple, Union
|
|
15
15
|
|
|
16
16
|
from matplotlib.patches import PathPatch
|
|
17
17
|
from matplotlib.path import Path
|
|
@@ -219,8 +219,8 @@ class CanvasOriginalArrowFeature(CanvasBase):
|
|
|
219
219
|
new_xys.insert(0, xys_start)
|
|
220
220
|
new_xys.append(xys_end)
|
|
221
221
|
aph = ArrowPolylineHelper(new_xys, r, 100)
|
|
222
|
-
parallel_xys1 = aph.
|
|
223
|
-
parallel_xys2 = aph.
|
|
222
|
+
parallel_xys1 = aph.get_parallel_points(tail_width / 2)
|
|
223
|
+
parallel_xys2 = aph.get_parallel_points(tail_width / -2)
|
|
224
224
|
parallel_xys2.reverse()
|
|
225
225
|
|
|
226
226
|
if head in {"<-", "<->"}:
|
|
@@ -568,6 +568,14 @@ class ArrowPolylineHelper:
|
|
|
568
568
|
curve.append((x, y))
|
|
569
569
|
return curve
|
|
570
570
|
|
|
571
|
+
def remove_consecutive_duplicates(lst: List[Any]) -> List[Any]:
|
|
572
|
+
return [v for i, v in enumerate(lst) if i == 0 or v != lst[i - 1]]
|
|
573
|
+
|
|
574
|
+
self._r = r
|
|
575
|
+
if r == 0:
|
|
576
|
+
self._original_points = xys[:]
|
|
577
|
+
return
|
|
578
|
+
|
|
571
579
|
points = []
|
|
572
580
|
bezier_start: Tuple[float, float] = (0, 0)
|
|
573
581
|
last_i = len(xys) - 2
|
|
@@ -592,24 +600,122 @@ class ArrowPolylineHelper:
|
|
|
592
600
|
points.extend(get_points(bezier_points))
|
|
593
601
|
bezier_start = p2
|
|
594
602
|
|
|
595
|
-
self.
|
|
603
|
+
self._original_points = remove_consecutive_duplicates(points)
|
|
596
604
|
|
|
597
|
-
def
|
|
605
|
+
def get_parallel_points(self, distance: float) -> List[Tuple[float, float]]:
|
|
606
|
+
"""Internal function"""
|
|
607
|
+
if self._r == 0:
|
|
608
|
+
return self._get_parallel_straight_points(distance)
|
|
609
|
+
return self._get_parallel_curved_points(distance)
|
|
610
|
+
|
|
611
|
+
def _get_parallel_curved_points(self, distance: float) -> List[Tuple[float, float]]:
|
|
598
612
|
"""Internal function"""
|
|
599
613
|
|
|
600
614
|
def get_distance(p1: Tuple[float, float], p2: Tuple[float, float]) -> float:
|
|
601
615
|
return math.sqrt((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2)
|
|
602
616
|
|
|
603
617
|
parallel_curve_points = []
|
|
604
|
-
for i in range(1, len(self.
|
|
605
|
-
p0, p1 = self.
|
|
618
|
+
for i in range(1, len(self._original_points)):
|
|
619
|
+
p0, p1 = self._original_points[i - 1], self._original_points[i]
|
|
606
620
|
dx, dy = p1[0] - p0[0], p1[1] - p0[1]
|
|
607
621
|
length = get_distance(p0, p1)
|
|
622
|
+
print(p0, p1, length)
|
|
608
623
|
nx, ny = -dy / length, dx / length
|
|
609
624
|
px0, py0 = p0[0] + distance * nx, p0[1] + distance * ny
|
|
610
625
|
px1, py1 = p1[0] + distance * nx, p1[1] + distance * ny
|
|
611
626
|
parallel_curve_points.append((px0, py0))
|
|
612
|
-
if i == len(self.
|
|
627
|
+
if i == len(self._original_points) - 1:
|
|
613
628
|
parallel_curve_points.append((px1, py1))
|
|
614
629
|
|
|
615
630
|
return parallel_curve_points
|
|
631
|
+
|
|
632
|
+
def _get_parallel_straight_points(self, distance: float) -> List[Tuple[float, float]]:
|
|
633
|
+
"""Internal function"""
|
|
634
|
+
|
|
635
|
+
def get_parallel_line_xys(
|
|
636
|
+
xy1: Tuple[float, float],
|
|
637
|
+
xy2: Tuple[float, float],
|
|
638
|
+
) -> Tuple[Tuple[float, float], Tuple[float, float]]:
|
|
639
|
+
"""Internal function"""
|
|
640
|
+
x1, y1 = xy1
|
|
641
|
+
x2, y2 = xy2
|
|
642
|
+
|
|
643
|
+
# calc vector
|
|
644
|
+
vx = x2 - x1
|
|
645
|
+
vy = y2 - y1
|
|
646
|
+
length = math.sqrt(vx**2 + vy**2)
|
|
647
|
+
dx = -vy / length * distance
|
|
648
|
+
dy = vx / length * distance
|
|
649
|
+
|
|
650
|
+
# add vector
|
|
651
|
+
x1_prime = x1 + dx
|
|
652
|
+
y1_prime = y1 + dy
|
|
653
|
+
x2_prime = x2 + dx
|
|
654
|
+
y2_prime = y2 + dy
|
|
655
|
+
|
|
656
|
+
return (x1_prime, y1_prime), (x2_prime, y2_prime)
|
|
657
|
+
|
|
658
|
+
def find_lines_intersection(
|
|
659
|
+
xy1: Tuple[float, float],
|
|
660
|
+
xy2: Tuple[float, float],
|
|
661
|
+
xy3: Tuple[float, float],
|
|
662
|
+
xy4: Tuple[float, float],
|
|
663
|
+
) -> Tuple[float, float]:
|
|
664
|
+
"""Internal function"""
|
|
665
|
+
x1, y1 = xy1
|
|
666
|
+
x2, y2 = xy2
|
|
667
|
+
x3, y3 = xy3
|
|
668
|
+
x4, y4 = xy4
|
|
669
|
+
|
|
670
|
+
# Check if lines are vertical
|
|
671
|
+
if x1 == x2 and x3 == x4:
|
|
672
|
+
raise ValueError(f'line "{xy1}" -> "{xy2}" and "{xy3}" => "{xy4}" are parallel.')
|
|
673
|
+
|
|
674
|
+
# Handle vertical lines
|
|
675
|
+
if x1 == x2:
|
|
676
|
+
m2 = (y4 - y3) / (x4 - x3)
|
|
677
|
+
b2 = y3 - m2 * x3
|
|
678
|
+
x = x1
|
|
679
|
+
y = m2 * x + b2
|
|
680
|
+
return (x, y)
|
|
681
|
+
|
|
682
|
+
if x3 == x4:
|
|
683
|
+
m1 = (y2 - y1) / (x2 - x1)
|
|
684
|
+
b1 = y1 - m1 * x1
|
|
685
|
+
x = x3
|
|
686
|
+
y = m1 * x + b1
|
|
687
|
+
return (x, y)
|
|
688
|
+
|
|
689
|
+
m1 = (y2 - y1) / (x2 - x1)
|
|
690
|
+
b1 = y1 - m1 * x1
|
|
691
|
+
m2 = (y4 - y3) / (x4 - x3)
|
|
692
|
+
b2 = y3 - m2 * x3
|
|
693
|
+
|
|
694
|
+
if m1 == m2:
|
|
695
|
+
raise ValueError(f'line "{xy1}" -> "{xy2}" and "{xy3}" => "{xy4}" are parallel.')
|
|
696
|
+
|
|
697
|
+
x = (b2 - b1) / (m1 - m2)
|
|
698
|
+
y = m1 * x + b1
|
|
699
|
+
|
|
700
|
+
return (x, y)
|
|
701
|
+
|
|
702
|
+
xys = self._original_points
|
|
703
|
+
parallel_lines: List[Tuple[Tuple[float, float], Tuple[float, float]]] = []
|
|
704
|
+
for i in range(len(xys) - 1):
|
|
705
|
+
xy1, xy2 = get_parallel_line_xys(xys[i], xys[i + 1])
|
|
706
|
+
parallel_lines.append((xy1, xy2))
|
|
707
|
+
|
|
708
|
+
points: List[Tuple[float, float]] = []
|
|
709
|
+
for i in range(len(parallel_lines) - 1):
|
|
710
|
+
xy1, xy2 = parallel_lines[i]
|
|
711
|
+
xy3, xy4 = parallel_lines[i + 1]
|
|
712
|
+
xy = find_lines_intersection(xy1, xy2, xy3, xy4)
|
|
713
|
+
points.append(xy)
|
|
714
|
+
|
|
715
|
+
first_point = parallel_lines[0][0]
|
|
716
|
+
last_point = parallel_lines[len(parallel_lines) - 1][1]
|
|
717
|
+
|
|
718
|
+
points.insert(0, first_point)
|
|
719
|
+
points.append(last_point)
|
|
720
|
+
|
|
721
|
+
return points
|
|
@@ -7,7 +7,7 @@ build-backend = "poetry.core.masonry.api"
|
|
|
7
7
|
|
|
8
8
|
[tool.poetry]
|
|
9
9
|
name = "drawlib"
|
|
10
|
-
version = "0.2.3.
|
|
10
|
+
version = "0.2.3.dev5"
|
|
11
11
|
description = "Python drawing library. Illustration as Code."
|
|
12
12
|
homepage = "https://www.drawlib.com"
|
|
13
13
|
repository = "https://github.com/yuichi110/drawlib"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{drawlib-0.2.3.dev4 → drawlib-0.2.3.dev5}/drawlib/v0_2/private/core_canvas/original_polygon.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|