From 6a14f610460564234d7f374e61fb71dacd48f3a1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Orvisk=C3=BD?= <orvisky.tomas@centrum.cz>
Date: Sun, 28 Jan 2024 12:48:36 +0100
Subject: [PATCH] Edge on same object

---
 src/pyplaml/diagram_edge.py | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/pyplaml/diagram_edge.py b/src/pyplaml/diagram_edge.py
index 9606caf..966e68a 100644
--- a/src/pyplaml/diagram_edge.py
+++ b/src/pyplaml/diagram_edge.py
@@ -112,11 +112,15 @@ class DiagramEdge(DiagramObject):
         self.mo_mid_text_arrow.rotate(self.mo_mid_text_arrow.start_angle + angle_to_obj)
 
     def __line_updater(self):
-        (start, target) = self.__get_closest_points()
+        def_params = {"tip_length": 0.25, "stroke_width": 1, "color": BLACK}
 
-        self.mo_line = DashedLine(buff=0, stroke_width=1, tip_length=0.25, color=BLACK) if self.dotted \
-            else Line(buff=0, stroke_width=1, tip_length=0.25, color=BLACK)
-        self.mo_line.put_start_and_end_on(start, target)
+        if self.source != self.target:
+            (start, target) = self.__get_closest_points()
+            self.mo_line = DashedLine(buff=0, **def_params) if self.dotted else Line(buff=0, **def_params)
+            self.mo_line.put_start_and_end_on(start, target)
+        else:
+            self.mo_line = Arc(**def_params, angle=-PI)
+            self.mo_line.put_start_and_end_on(self.source.get_edge_center(UP), self.source.get_edge_center(RIGHT))
 
         self.__prepare_line_tips()
 
-- 
GitLab