drawlib 0.2.3.dev3__tar.gz → 0.2.3.dev4__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.dev3 → drawlib-0.2.3.dev4}/PKG-INFO +1 -1
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/__init__.py +1 -1
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/apis.py +3 -1
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/base.py +53 -1
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/canvas.py +7 -3
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/line.py +29 -23
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/original_arrow.py +247 -268
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/patches.py +19 -69
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/bubblespeech.py +16 -16
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/util.py +116 -1
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/args.py +13 -13
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/pyproject.toml +1 -1
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/LICENSE.txt +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/__main__.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/apis.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/assets/__init__.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/assets/v0_2/__init__.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/assets/v0_2/fonticons/__init__.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/assets/v0_2/fonts/__init__.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/py.typed +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/__init__.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/__main__.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/__init__.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/command.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/__init__.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/colors.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/dimage.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/fonts.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/model.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/model_system_default.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/theme.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/theme_officials.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/theme_style_caches.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/util.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/__init__.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/image.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/original_polygon.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/text.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/download.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/dutil/__init__.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/dutil/dutil_canvas.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/dutil/dutil_color.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/dutil/dutil_script.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/dutil/settings.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/icons/__init__.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/icons/phosphor.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/icons/util.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/logging.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/__init__.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/boxlist.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/boxtree.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/bulletpoints.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/dsart.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/gridlayout.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/pyramid.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/sourcecode.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/table.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/tree.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/activity.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/class_.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/communication.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/component.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/deployment.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/duml.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/object.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/package.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/sequence.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/state_machine.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/usecase.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/__init__.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/color.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/coordinate.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/icon.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/image.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/line.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/shape.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/smartarts.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/style.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/text.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/types.py +0 -0
- {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/pypi.md +0 -0
|
@@ -18,7 +18,10 @@ import matplotlib.lines
|
|
|
18
18
|
import matplotlib.text
|
|
19
19
|
import PIL.Image
|
|
20
20
|
from matplotlib import pyplot
|
|
21
|
-
from matplotlib.patches import
|
|
21
|
+
from matplotlib.patches import (
|
|
22
|
+
PathPatch,
|
|
23
|
+
Polygon,
|
|
24
|
+
)
|
|
22
25
|
from matplotlib.path import Path
|
|
23
26
|
|
|
24
27
|
import drawlib.v0_2.private.validators.args as validator
|
|
@@ -235,6 +238,55 @@ class CanvasBase:
|
|
|
235
238
|
# Shape
|
|
236
239
|
#
|
|
237
240
|
|
|
241
|
+
@error_handler
|
|
242
|
+
def polygon(
|
|
243
|
+
self,
|
|
244
|
+
xys: List[Tuple[float, float]],
|
|
245
|
+
style: Union[ShapeStyle, str, None] = None,
|
|
246
|
+
text: str = "",
|
|
247
|
+
textsize: Optional[float] = None,
|
|
248
|
+
textstyle: Union[ShapeTextStyle, str, None] = None,
|
|
249
|
+
) -> None:
|
|
250
|
+
"""Draw a polygon on the canvas.
|
|
251
|
+
|
|
252
|
+
Args:
|
|
253
|
+
xys: List of vertices [(x1, y1), ...(x_n, y_n)].
|
|
254
|
+
style (optional): Style of the polygon.
|
|
255
|
+
text (optional): Text shown at the center of the polygon.
|
|
256
|
+
textsize (optional): Font size of the text.
|
|
257
|
+
textstyle (optional): Style of the text.
|
|
258
|
+
|
|
259
|
+
Returns:
|
|
260
|
+
None
|
|
261
|
+
"""
|
|
262
|
+
style, textstyle = ShapeUtil.format_styles(
|
|
263
|
+
style,
|
|
264
|
+
textstyle,
|
|
265
|
+
dtheme.polygonstyles.get,
|
|
266
|
+
dtheme.polygontextstyles.get,
|
|
267
|
+
)
|
|
268
|
+
validator.validate_shape_args(locals())
|
|
269
|
+
|
|
270
|
+
if textsize is not None:
|
|
271
|
+
textstyle.size = textsize
|
|
272
|
+
|
|
273
|
+
style.halign = None
|
|
274
|
+
style.valign = None
|
|
275
|
+
options = ShapeUtil.get_shape_options(style)
|
|
276
|
+
self._artists.append(Polygon(xy=xys, closed=True, **options))
|
|
277
|
+
|
|
278
|
+
if not text:
|
|
279
|
+
return
|
|
280
|
+
center, (_, _) = get_center_and_size(xys)
|
|
281
|
+
self._artists.append(
|
|
282
|
+
ShapeUtil.get_shape_text(
|
|
283
|
+
center,
|
|
284
|
+
text=text,
|
|
285
|
+
angle=0,
|
|
286
|
+
style=textstyle,
|
|
287
|
+
),
|
|
288
|
+
)
|
|
289
|
+
|
|
238
290
|
@error_handler
|
|
239
291
|
def shape( # noqa: C901
|
|
240
292
|
self,
|
|
@@ -276,12 +276,16 @@ rhombus = canvas.rhombus
|
|
|
276
276
|
trapezoid = canvas.trapezoid
|
|
277
277
|
parallelogram = canvas.parallelogram
|
|
278
278
|
triangle = canvas.triangle
|
|
279
|
-
arrow = canvas.arrow
|
|
280
|
-
arrows = canvas.arrows
|
|
281
|
-
arrow_arc = canvas.arrow_arc
|
|
282
279
|
star = canvas.star
|
|
283
280
|
chevron = canvas.chevron
|
|
284
281
|
|
|
282
|
+
# original arrow
|
|
283
|
+
arrow = canvas.arrow
|
|
284
|
+
arrow_polyline = canvas.arrow_polyline
|
|
285
|
+
arrow_arc = canvas.arrow_arc
|
|
286
|
+
arrow_l = canvas.arrow_l
|
|
287
|
+
arrow_u = canvas.arrow_u
|
|
288
|
+
|
|
285
289
|
# patches
|
|
286
290
|
arc = canvas.arc
|
|
287
291
|
circle = canvas.circle
|
|
@@ -20,7 +20,7 @@ import drawlib.v0_2.private.validators.args as validator
|
|
|
20
20
|
from drawlib.v0_2.private.core.model import LineStyle
|
|
21
21
|
from drawlib.v0_2.private.core.util import LineUtil
|
|
22
22
|
from drawlib.v0_2.private.core_canvas.base import CanvasBase
|
|
23
|
-
from drawlib.v0_2.private.util import error_handler
|
|
23
|
+
from drawlib.v0_2.private.util import error_handler, get_rotated_path_points
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class CanvasLineFeature(CanvasBase):
|
|
@@ -197,10 +197,11 @@ class CanvasLineFeature(CanvasBase):
|
|
|
197
197
|
xy: Tuple[float, float],
|
|
198
198
|
width: float,
|
|
199
199
|
height: float,
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
200
|
+
angle_start: float = 0,
|
|
201
|
+
angle_end: float = 180,
|
|
202
|
+
angle: float = 0,
|
|
203
203
|
arrowhead: Literal["", "->", "<-", "<->"] = "",
|
|
204
|
+
lwidth: Optional[float] = None,
|
|
204
205
|
style: Union[LineStyle, str, None] = None,
|
|
205
206
|
) -> None:
|
|
206
207
|
"""Draw arc line on ellipse.
|
|
@@ -209,10 +210,11 @@ class CanvasLineFeature(CanvasBase):
|
|
|
209
210
|
xy: Tuple[float, float]: The center point of the ellipse from which the arc is drawn.
|
|
210
211
|
width: float: The width of the ellipse.
|
|
211
212
|
height: float: The height of the ellipse
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
213
|
+
angle_start: float: The starting angle of the arc in degrees (default is 0).
|
|
214
|
+
angle_end: float: The ending angle of the arc in degrees (default is 180).
|
|
215
|
+
angle (float): The angle of ellipse.
|
|
215
216
|
arrowhead: Literal["", "->", "<-", "<->"]: Optional arrowhead style ("", "->", "<-", "<->").
|
|
217
|
+
lwidth: Optional[float]: Optional width of the line.
|
|
216
218
|
style: Union[LineStyle, str, None]: Optional line style.
|
|
217
219
|
|
|
218
220
|
Returns:
|
|
@@ -221,15 +223,19 @@ class CanvasLineFeature(CanvasBase):
|
|
|
221
223
|
style = LineUtil.format_style(style)
|
|
222
224
|
# validator.validate_line_args(locals())
|
|
223
225
|
|
|
224
|
-
if
|
|
225
|
-
|
|
226
|
+
if angle_start > angle_end:
|
|
227
|
+
angle_start = -1 * (360 - angle_start)
|
|
226
228
|
path_points = LineArcHelper.get_ellipse_path_points(
|
|
227
229
|
xy,
|
|
228
230
|
width,
|
|
229
231
|
height,
|
|
230
|
-
|
|
231
|
-
|
|
232
|
+
angle_start,
|
|
233
|
+
angle_end,
|
|
232
234
|
)
|
|
235
|
+
|
|
236
|
+
if angle != 0:
|
|
237
|
+
path_points = get_rotated_path_points(path_points, xy, angle) # type: ignore
|
|
238
|
+
|
|
233
239
|
start_point = path_points[0]
|
|
234
240
|
path_points = path_points[1:]
|
|
235
241
|
|
|
@@ -410,8 +416,8 @@ class LineArcHelper:
|
|
|
410
416
|
xy: Tuple[float, float],
|
|
411
417
|
width: float,
|
|
412
418
|
height: float,
|
|
413
|
-
|
|
414
|
-
|
|
419
|
+
angle_start: float,
|
|
420
|
+
angle_end: float,
|
|
415
421
|
) -> List[
|
|
416
422
|
Union[
|
|
417
423
|
Tuple[float, float],
|
|
@@ -419,9 +425,9 @@ class LineArcHelper:
|
|
|
419
425
|
]
|
|
420
426
|
]:
|
|
421
427
|
"""Internal function"""
|
|
422
|
-
diff =
|
|
428
|
+
diff = angle_end - angle_start
|
|
423
429
|
if abs(diff) > 270:
|
|
424
|
-
# having +2 for avoiding situation next_mid_angle ==
|
|
430
|
+
# having +2 for avoiding situation next_mid_angle == angle_end
|
|
425
431
|
step = int(diff / 3)
|
|
426
432
|
elif abs(diff) > 135:
|
|
427
433
|
step = int(diff / 2)
|
|
@@ -430,8 +436,8 @@ class LineArcHelper:
|
|
|
430
436
|
xy,
|
|
431
437
|
width,
|
|
432
438
|
height,
|
|
433
|
-
|
|
434
|
-
|
|
439
|
+
angle_start,
|
|
440
|
+
angle_end,
|
|
435
441
|
)
|
|
436
442
|
return [p1, (p2, p3, p4)]
|
|
437
443
|
if diff >= 0:
|
|
@@ -443,15 +449,15 @@ class LineArcHelper:
|
|
|
443
449
|
start = None
|
|
444
450
|
path_points = []
|
|
445
451
|
while True:
|
|
446
|
-
last_mid_angle =
|
|
447
|
-
next_mid_angle =
|
|
452
|
+
last_mid_angle = angle_start + step * i
|
|
453
|
+
next_mid_angle = angle_start + step * (i + 1)
|
|
448
454
|
|
|
449
|
-
if
|
|
455
|
+
if angle_start < angle_end:
|
|
450
456
|
# anti clock wise
|
|
451
|
-
is_last = next_mid_angle >
|
|
457
|
+
is_last = next_mid_angle > angle_end
|
|
452
458
|
else:
|
|
453
459
|
# clock wise
|
|
454
|
-
is_last =
|
|
460
|
+
is_last = angle_end > next_mid_angle
|
|
455
461
|
|
|
456
462
|
if is_last:
|
|
457
463
|
p1, p2, p3, p4 = cls.bezier_ellipse_arc_approximation(
|
|
@@ -459,7 +465,7 @@ class LineArcHelper:
|
|
|
459
465
|
width,
|
|
460
466
|
height,
|
|
461
467
|
last_mid_angle,
|
|
462
|
-
|
|
468
|
+
angle_end,
|
|
463
469
|
)
|
|
464
470
|
if start is None:
|
|
465
471
|
start = p1
|