导入器架构
本文档描述 Rayforge 文件导入系统的架构,它处理将各种文件格式(SVG、DXF、PNG、PDF 等)转换为 Rayforge 文档模型。
目录
概述
导入系统围绕四阶段流水线构建,将原始文件数据转换为完全定位的文档对象。每个阶段有特定职责并产生明确定义的数据结构。
导入流水线
阶段 1:解析
方法: Importer.parse()
从文件中提取几何事实,包括边界、坐标系详情和图层信息。
输出: ParsingResult
document_bounds:本机坐标系中的总画布大小native_unit_to_mm:到毫米的转换因子is_y_down:Y 轴方向标志layers:LayerGeometry列表world_frame_of_reference:世界坐标(mm,Y-Up)background_world_transform:背景定位矩阵untrimmed_document_bounds:Y 反转的参考
坐标系:
document_bounds:本机坐标(文件特定)world_frame_of_reference:世界坐标(mm,Y-Up)
阶段 2:矢量化
方法: Importer.vectorize()
根据 VectorizationSpec 将解析数据转换为矢量 Geometry 对象。
输出: VectorizationResult
geometries_by_layer:每层矢量几何(本机坐标)source_parse_result:原始 ParsingResult 的引用fills_by_layer:可选填充几何(Sketch 导入器)
坐标系: 本机坐标(文件特定)
阶段 3:布局
类: NormalizationEngine
根据用户意图计算变换矩阵,将本机坐标映射到世界坐标。
输出: List[LayoutItem]
每个 LayoutItem 包含:
world_matrix:归一化(0-1, Y-Up)→ 世界(mm,Y-Up)normalization_matrix:本机 → 归一化(0-1, Y-Up)crop_window:本机坐标中原始文件的子集layer_id、layer_name:图层标识
坐标系:
- 输入:本机坐标
- 输出:世界坐标(mm,Y-Up)通过中间归一化空间
阶段 4:组装
类: ItemAssembler
根据布局计划实例化 Rayforge 领域对象(WorkPiece、Layer)。
输出: ImportPayload
source:SourceAssetitems:准备插入的DocItem列表sketches:可选的Sketch对象列表
坐标系: 所有 DocItems 在世界坐标(mm,Y-Up)中
扫描方法
方法: Importer.scan()
一种轻量级扫描,无需完整处理即可提取元数据。用于为导入器构建 UI,包括图层选择列表。这 不是 由 get_doc_items() 执行的主导入流水线的一部分。
输出: ImportManifest
layers:LayerInfo对象列表natural_size_mm:物理尺寸,单位毫米(Y-Up)title:可选文档标题warnings、errors:发现的非关键问题
坐标系: natural_size_mm 的世界坐标(mm,Y-Up)
坐标系
导入流水线通过仔细的变换处理多个坐标系:
本机坐标(输入)
- 文件特定坐标系(SVG 用户单位、DXF 单位、像素)
- Y 轴方向因格式而异
- 边界在文档坐标空间内是绝对的
- 通过
native_unit_to_mm因子将单位转换为 mm
归一化坐标(中间)
- 从 (0,0) 到 (1,1) 的单位正方形
- Y 轴指向上(Y-Up 约定)
- 用作本机和世界之间的中间表示