基本图形处理模块 处理流程: 1. 从context.elements中筛选基本图形 2. 对每个图形提取填充色和描边色 3. 生成XML片段 4. 可选:运行CV补充检测遗漏的矩形
| 1347 | |
| 1348 | # ======================== 基本图形处理器 ======================== |
| 1349 | class BasicShapeProcessor(BaseProcessor): |
| 1350 | """ |
| 1351 | 基本图形处理模块 |
| 1352 | |
| 1353 | 处理流程: |
| 1354 | 1. 从context.elements中筛选基本图形 |
| 1355 | 2. 对每个图形提取填充色和描边色 |
| 1356 | 3. 生成XML片段 |
| 1357 | 4. 可选:运行CV补充检测遗漏的矩形 |
| 1358 | """ |
| 1359 | |
| 1360 | def __init__(self, config=None, enable_cv_detection: bool = True): |
| 1361 | """ |
| 1362 | Args: |
| 1363 | config: 处理配置 |
| 1364 | enable_cv_detection: 是否启用CV补充检测(检测SAM3遗漏的矩形) |
| 1365 | """ |
| 1366 | super().__init__(config) |
| 1367 | self.enable_cv_detection = enable_cv_detection |
| 1368 | |
| 1369 | def process(self, context: ProcessingContext) -> ProcessingResult: |
| 1370 | """ |
| 1371 | 处理入口 |
| 1372 | |
| 1373 | Args: |
| 1374 | context: 处理上下文 |
| 1375 | |
| 1376 | Returns: |
| 1377 | ProcessingResult |
| 1378 | """ |
| 1379 | self._log("开始处理基本图形") |
| 1380 | |
| 1381 | if not context.image_path or not os.path.exists(context.image_path): |
| 1382 | return ProcessingResult( |
| 1383 | success=False, |
| 1384 | error_message="图片路径无效" |
| 1385 | ) |
| 1386 | |
| 1387 | cv2_image = cv2.imread(context.image_path) |
| 1388 | if cv2_image is None: |
| 1389 | return ProcessingResult( |
| 1390 | success=False, |
| 1391 | error_message="无法读取图片" |
| 1392 | ) |
| 1393 | |
| 1394 | # 筛选基本图形 |
| 1395 | elements_to_process = self._get_elements_to_process(context.elements) |
| 1396 | |
| 1397 | # 计算画布面积,用于判断大面积元素 |
| 1398 | canvas_area = context.canvas_width * context.canvas_height |
| 1399 | |
| 1400 | processed_count = 0 |
| 1401 | for elem in elements_to_process: |
| 1402 | try: |
| 1403 | self._process_element(elem, cv2_image, canvas_area) |
| 1404 | processed_count += 1 |
| 1405 | except Exception as e: |
| 1406 | elem.processing_notes.append(f"处理失败: {str(e)}") |
no outgoing calls
no test coverage detected