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.

Files changed (81) hide show
  1. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/PKG-INFO +1 -1
  2. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/__init__.py +1 -1
  3. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/apis.py +3 -1
  4. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/base.py +53 -1
  5. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/canvas.py +7 -3
  6. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/line.py +29 -23
  7. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/original_arrow.py +247 -268
  8. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/patches.py +19 -69
  9. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/bubblespeech.py +16 -16
  10. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/util.py +116 -1
  11. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/args.py +13 -13
  12. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/pyproject.toml +1 -1
  13. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/LICENSE.txt +0 -0
  14. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/__main__.py +0 -0
  15. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/apis.py +0 -0
  16. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/assets/__init__.py +0 -0
  17. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/assets/v0_2/__init__.py +0 -0
  18. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/assets/v0_2/fonticons/__init__.py +0 -0
  19. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/assets/v0_2/fonts/__init__.py +0 -0
  20. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/py.typed +0 -0
  21. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/__init__.py +0 -0
  22. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/__main__.py +0 -0
  23. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/__init__.py +0 -0
  24. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/command.py +0 -0
  25. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/__init__.py +0 -0
  26. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/colors.py +0 -0
  27. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/dimage.py +0 -0
  28. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/fonts.py +0 -0
  29. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/model.py +0 -0
  30. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/model_system_default.py +0 -0
  31. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/theme.py +0 -0
  32. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/theme_officials.py +0 -0
  33. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/theme_style_caches.py +0 -0
  34. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core/util.py +0 -0
  35. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/__init__.py +0 -0
  36. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/image.py +0 -0
  37. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/original_polygon.py +0 -0
  38. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/core_canvas/text.py +0 -0
  39. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/download.py +0 -0
  40. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/dutil/__init__.py +0 -0
  41. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/dutil/dutil_canvas.py +0 -0
  42. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/dutil/dutil_color.py +0 -0
  43. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/dutil/dutil_script.py +0 -0
  44. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/dutil/settings.py +0 -0
  45. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/icons/__init__.py +0 -0
  46. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/icons/phosphor.py +0 -0
  47. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/icons/util.py +0 -0
  48. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/logging.py +0 -0
  49. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/__init__.py +0 -0
  50. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/boxlist.py +0 -0
  51. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/boxtree.py +0 -0
  52. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/bulletpoints.py +0 -0
  53. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/dsart.py +0 -0
  54. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/gridlayout.py +0 -0
  55. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/pyramid.py +0 -0
  56. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/sourcecode.py +0 -0
  57. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/table.py +0 -0
  58. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/smartarts/tree.py +0 -0
  59. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/activity.py +0 -0
  60. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/class_.py +0 -0
  61. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/communication.py +0 -0
  62. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/component.py +0 -0
  63. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/deployment.py +0 -0
  64. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/duml.py +0 -0
  65. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/object.py +0 -0
  66. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/package.py +0 -0
  67. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/sequence.py +0 -0
  68. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/state_machine.py +0 -0
  69. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/umls/usecase.py +0 -0
  70. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/__init__.py +0 -0
  71. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/color.py +0 -0
  72. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/coordinate.py +0 -0
  73. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/icon.py +0 -0
  74. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/image.py +0 -0
  75. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/line.py +0 -0
  76. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/shape.py +0 -0
  77. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/smartarts.py +0 -0
  78. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/style.py +0 -0
  79. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/text.py +0 -0
  80. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/drawlib/v0_2/private/validators/types.py +0 -0
  81. {drawlib-0.2.3.dev3 → drawlib-0.2.3.dev4}/pypi.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: drawlib
3
- Version: 0.2.3.dev3
3
+ Version: 0.2.3.dev4
4
4
  Summary: Python drawing library. Illustration as Code.
5
5
  Home-page: https://www.drawlib.com
6
6
  Author: Yuichi Ito
@@ -14,7 +14,7 @@ import sys
14
14
  from typing import Final, List
15
15
 
16
16
  # please update here when you release new version
17
- LIB_VERSION = "0.2.3.dev3"
17
+ LIB_VERSION = "0.2.3.dev4"
18
18
 
19
19
  # please list active main committers (1+ commits per month)
20
20
  AUTHORS: Final[List[str]] = [
@@ -55,7 +55,9 @@ from drawlib.v0_2.private.core_canvas.canvas import (
55
55
  # shape original
56
56
  arrow,
57
57
  arrow_arc,
58
- arrows,
58
+ arrow_l,
59
+ arrow_polyline,
60
+ arrow_u,
59
61
  chevron,
60
62
  circle,
61
63
  # base
@@ -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 PathPatch
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
- from_angle: float = 0,
201
- to_angle: float = 180,
202
- lwidth: Optional[float] = None,
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
- from_angle: float: The starting angle of the arc in degrees (default is 0).
213
- to_angle: float: The ending angle of the arc in degrees (default is 180).
214
- lwidth: Optional[float]: Optional width of the line.
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 from_angle > to_angle:
225
- from_angle = -1 * (360 - from_angle)
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
- from_angle,
231
- to_angle,
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
- from_angle: float,
414
- to_angle: float,
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 = to_angle - from_angle
428
+ diff = angle_end - angle_start
423
429
  if abs(diff) > 270:
424
- # having +2 for avoiding situation next_mid_angle == to_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
- from_angle,
434
- to_angle,
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 = from_angle + step * i
447
- next_mid_angle = from_angle + step * (i + 1)
452
+ last_mid_angle = angle_start + step * i
453
+ next_mid_angle = angle_start + step * (i + 1)
448
454
 
449
- if from_angle < to_angle:
455
+ if angle_start < angle_end:
450
456
  # anti clock wise
451
- is_last = next_mid_angle > to_angle
457
+ is_last = next_mid_angle > angle_end
452
458
  else:
453
459
  # clock wise
454
- is_last = to_angle > next_mid_angle
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
- to_angle,
468
+ angle_end,
463
469
  )
464
470
  if start is None:
465
471
  start = p1