ソースを参照

EdgeGeometry can also have offset

Joeri Exelmans 2 年 前
コミット
af8079b148
3 ファイル変更12 行追加3 行削除
  1. 1 0
      drawio2py/abstract_syntax.py
  2. 2 0
      drawio2py/generator.py
  3. 9 3
      drawio2py/parser.py

+ 1 - 0
drawio2py/abstract_syntax.py

@@ -47,6 +47,7 @@ class EdgeGeometry(Element):
 	points: List[Point] = field(default_factory=list)
 	source_point: Optional[Point] = None
 	target_point: Optional[Point] = None
+	offset: Optional[Point] = None # Relative offset of the Edge's label
 
 @dataclass(eq=False)
 class Edge(Cell):

+ 2 - 0
drawio2py/generator.py

@@ -105,6 +105,8 @@ def generate_diagram(page: Page) -> ET.Element:
 				write_point(g, cell.geometry.source_point, "sourcePoint")
 			if cell.geometry.target_point is not None:
 				write_point(g, cell.geometry.target_point, "targetPoint")
+			if cell.geometry.offset != None:
+				write_point(g, cell.geometry.offset, "offset")
 
 		for child in cell.children:
 			write_cell(child)

+ 9 - 3
drawio2py/parser.py

@@ -52,8 +52,15 @@ class Parser:
 		target_xml = groot.find(".//mxPoint[@as='targetPoint']")
 		source = None if source_xml == None else Parser.parse_point(source_xml)
 		target = None if target_xml == None else Parser.parse_point(target_xml)
+		offset = Parser.parse_offset_if_exists(groot)
 
-		return EdgeGeometry(pts, source, target)
+		return EdgeGeometry(pts, source, target, offset=offset)
+
+	@staticmethod
+	def parse_offset_if_exists(geometry_xml):
+		offset_xml = geometry_xml.find(".//mxPoint[@as='offset']")
+		offset = None if offset_xml == None else Parser.parse_point(offset_xml)
+		return offset
 
 	@staticmethod
 	def parse_point(xml_node) -> Point:
@@ -62,8 +69,7 @@ class Parser:
 	@staticmethod
 	def parse_cell_geometry(groot):
 		if groot is None: return None
-		offset_xml = groot.find(".//mxPoint[@as='offset']")
-		offset = None if offset_xml == None else Parser.parse_point(offset_xml)
+		offset = Parser.parse_offset_if_exists(groot)
 		return VertexGeometry(groot.get("x", None), groot.get("y", None),
 		                    groot.get("width", None), groot.get("height", None),
 		                    offset=offset)