MCPcopy Create free account
hub / github.com/BIT-DataLab/Edit-Banana / XMLMerger

Class XMLMerger

modules/xml_merger.py:49–635  ·  view source on GitHub ↗

XML合并模块 职责: 1. 收集各模块生成的XML片段 2. 按层级排序(layer_level升序,小的在底层) 3. 同层级内按面积降序排列(大的在下,避免遮挡) 4. 重新分配mxCell的id,避免冲突 5. 生成完整的DrawIO XML文件 不负责: - 生成元素的样式(由各子模块负责) - 决定元素的颜色、描边等属性(由各子模块负责) 层级规则(从底到顶): 0. BACKGROUND

Source from the content-addressed store, hash-verified

47
48
49class XMLMerger(BaseProcessor):
50 """
51 XML合并模块
52
53 职责:
54 1. 收集各模块生成的XML片段
55 2. 按层级排序(layer_level升序,小的在底层)
56 3. 同层级内按面积降序排列(大的在下,避免遮挡)
57 4. 重新分配mxCell的id,避免冲突
58 5. 生成完整的DrawIO XML文件
59
60 不负责:
61 - 生成元素的样式(由各子模块负责)
62 - 决定元素的颜色、描边等属性(由各子模块负责)
63
64 层级规则(从底到顶):
65 0. BACKGROUND - section_panel, title_bar等大面积容器
66 1. BASIC_SHAPE - rectangle, ellipse等基本图形
67 2. IMAGE - icon, picture等图片
68 3. ARROW - 箭头/连接线
69 4. TEXT - 文字(最上层)
70 5. OTHER - 其他
71 """
72
73 def __init__(self, config=None):
74 super().__init__(config)
75
76 def process(self, context: ProcessingContext) -> ProcessingResult:
77 """
78 处理入口 - 合并所有XML片段
79
80 Args:
81 context: 处理上下文,需要包含:
82 - canvas_width, canvas_height: 画布尺寸
83 - xml_fragments: List[XMLFragment] 或
84 - elements: List[ElementInfo](每个元素需要有xml_fragment)
85
86 Returns:
87 ProcessingResult: 包含生成的XML路径
88 """
89 # 获取 upscale_factor,用于将画布尺寸缩放回原始尺寸
90 upscale_factor = 1.0
91 if hasattr(context, 'intermediate_results') and context.intermediate_results:
92 upscale_factor = context.intermediate_results.get('upscale_factor', 1.0)
93
94 # 计算原始画布尺寸
95 canvas_width = context.canvas_width
96 canvas_height = context.canvas_height
97 if upscale_factor != 1.0:
98 canvas_width = int(context.canvas_width / upscale_factor)
99 canvas_height = int(context.canvas_height / upscale_factor)
100 self._log(f"画布尺寸缩放: {context.canvas_width}x{context.canvas_height} → {canvas_width}x{canvas_height}")
101
102 # 收集所有XML片段
103 fragments = self._collect_fragments(context)
104
105 self._log(f"开始合并XML: 共{len(fragments)}个片段")
106

Callers 3

xml_mergerMethod · 0.90
merge_fragmentsFunction · 0.85
merge_shape_and_textFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected