linkcad.edit
几何操作任务。每个任务针对一个 Drawing 构造(FlattenTask 则针对一个 Cell),通过调用 task.execute() 运行。任务必须在 WriteLock(独立脚本)或 Transaction(工具插件)内运行。
from linkcad.v1.edit import ( ITask, SnapToGridTask, FlattenTask, RemoveDuplicatesTask, MergeTask, ClosePolylinesTask, JoinPolylinesTask, PolylineToPolygonTask, ExplodeToPolygonTask, RemoveZeroWidthPolylinesTask, RemoveOverlappingPolylinesTask, FixSelfIntersectingPolygonsTask, FillRule, HolesMode, EdgePolicy, PolygonSnapMode, ShapesToConvert, CellFilter, LayerFilter, ShapeFilter,)基类
ITask
所有任务都继承 ITask。
| 属性 / 方法 | 说明 |
|---|---|
task.execute() | 运行任务。失败时可能抛出异常 |
task.cancel() | 取消正在运行的任务 |
task.progress | 进度百分比(0-100) |
task.cell_filter | 任务处理哪些单元;可赋值 |
task.layer_filter | 任务包含哪些图层;可赋值 |
task.shape_filter | 任务包含哪些形状;可赋值 |
from linkcad.v1.edit import CellFilter, RemoveDuplicatesTask, ShapeFilter
task = RemoveDuplicatesTask(drawing)task.cell_filter = CellFilter.EnabledCellstask.shape_filter = ShapeFilter.SelectedShapestask.execute()任务
SnapToGridTask
把形状顶点对齐到最近的网格点。
from linkcad.v1.db import Transactionfrom linkcad.v1.edit import PolygonSnapMode, SnapToGridTask
with Transaction(drawing, "Snap to grid"): SnapToGridTask(drawing, 100, PolygonSnapMode.AllAngle).execute()| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
drawing | Drawing | 必填 | 目标图纸 |
grid | int | 必填 | 以数据库单位表示的网格间距 |
snap_mode | PolygonSnapMode | AllAngle | 是否强制曼哈顿几何 |
FlattenTask
展平某个单元之下的单元层次结构——把所有单元引用展开到该单元中。注意它接受的是起始单元,而不是图纸。
from linkcad.v1.edit import FlattenTask
FlattenTask(drawing.main_cell).execute()| 参数 | 类型 | 说明 |
|---|---|---|
start_cell | Cell | 要展开其引用的单元 |
RemoveDuplicatesTask
删除几何完全相同的多边形和折线。
from linkcad.v1.edit import RemoveDuplicatesTask
RemoveDuplicatesTask(drawing).execute()MergeTask
用布尔并集合并每个图层上重叠的多边形。曲线形状会先按给定的 Resolution 细分。
from linkcad.v1.edit import EdgePolicy, FillRule, HolesMode, MergeTaskfrom linkcad.v1.geom import Resolution
res = Resolution()res.minimum_facets = 32res.maximum_error = 1
task = MergeTask( drawing, res, FillRule.NonZero, HolesMode.Link, EdgePolicy.Merge, dont_explode=False, process_vertically=False,)task.execute()| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
drawing | Drawing | 必填 | 目标图纸 |
resolution | Resolution | 必填 | 曲线细分设置 |
fill_rule | FillRule | 必填 | 判定多边形内部的环绕规则 |
holes_mode | HolesMode | 必填 | 输出多边形中孔的表示方式 |
edge_policy | EdgePolicy | 必填 | 内部边界的处理方式 |
dont_explode | bool | False | 为 True 时不分解复杂的结果多边形 |
process_vertically | bool | False | 为 True 时自底向上处理单元(适用于层次化图纸) |
ClosePolylinesTask
连接首尾顶点以闭合开放折线。
from linkcad.v1.edit import ClosePolylinesTask
ClosePolylinesTask(drawing).execute()JoinPolylinesTask
连接端点在容差范围内相接的折线。
from linkcad.v1.edit import JoinPolylinesTask
task = JoinPolylinesTask(drawing, wire_end_tolerance=10, width_tolerance=1)task.execute()print(task.unique_object_count, task.total_object_count)| 参数 | 类型 | 说明 |
|---|---|---|
drawing | Drawing | 目标图纸 |
wire_end_tolerance | int | 以数据库单位表示的最大端点间隙 |
width_tolerance | int | 被连接折线之间的最大宽度差 |
PolylineToPolygonTask
把闭合折线转换为填充多边形。
from linkcad.v1.edit import PolylineToPolygonTaskfrom linkcad.v1.geom import Resolution
PolylineToPolygonTask(drawing, tolerance=0, resolution=Resolution()).execute()| 参数 | 类型 | 说明 |
|---|---|---|
drawing | Drawing | 目标图纸 |
tolerance | int | 仍视为闭合的端点间隙 |
resolution | Resolution | 曲线细分设置 |
ExplodeToPolygonTask
通过细分把复杂形状转换为普通多边形和折线。
from linkcad.v1.edit import ExplodeToPolygonTask, FillRule, HolesMode, ShapesToConvertfrom linkcad.v1.geom import Resolution
res = Resolution()res.minimum_facets = 32
task = ExplodeToPolygonTask( drawing, res, FillRule.NonZero, HolesMode.Link, ShapesToConvert.All)task.execute()print(task.unique_object_count, task.total_object_count)| 参数 | 类型 | 说明 |
|---|---|---|
drawing | Drawing | 目标图纸 |
resolution | Resolution | 曲线细分设置 |
fill_rule | FillRule | 环绕规则 |
holes_mode | HolesMode | 孔的表示方式 |
shapes_to_convert | ShapesToConvert | 要分解的形状类型 |
unique_object_count 和 total_object_count 是属性,并且只定义在真正会计数的两个任务上:ExplodeToPolygonTask 和 JoinPolylinesTask。
RemoveZeroWidthPolylinesTask
删除所有宽度为零的折线。
from linkcad.v1.edit import RemoveZeroWidthPolylinesTask
RemoveZeroWidthPolylinesTask(drawing).execute()RemoveOverlappingPolylinesTask
删除与同一图层上其他线段重叠的折线段。
from linkcad.v1.edit import RemoveOverlappingPolylinesTask
RemoveOverlappingPolylinesTask(drawing).execute()FixSelfIntersectingPolygonsTask
把自相交多边形拆分为简单多边形。
from linkcad.v1.edit import FillRule, FixSelfIntersectingPolygonsTask, HolesMode
FixSelfIntersectingPolygonsTask(drawing, FillRule.NonZero, HolesMode.Link).execute()| 参数 | 类型 | 说明 |
|---|---|---|
drawing | Drawing | 目标图纸 |
fill_rule | FillRule | 环绕规则 |
holes_mode | HolesMode | 孔的表示方式 |
枚举
FillRule
用于判定多边形“内部”区域的环绕规则。从 linkcad.v1.db 重新导出。
| 值 | 说明 |
|---|---|
FillRule.NonZero | 非零环绕规则(CAD/EDA 的标准约定) |
FillRule.EvenOdd | 奇偶(交替填充)规则 |
HolesMode
控制结果多边形中孔的表示方式。从 linkcad.v1.plugin 重新导出。
| 值 | 说明 |
|---|---|
HolesMode.Link | 用零宽桥接把孔连到外轮廓 |
HolesMode.Split | 拆分多边形,使输出中不出现孔 |
HolesMode.Extract | 把孔作为独立多边形返回 |
HolesMode.Keep | 保持孔原样 |
EdgePolicy
控制合并时内部边界的处理方式。
| 值 | 说明 |
|---|---|
EdgePolicy.Keep | 保留原有内部边界 |
EdgePolicy.Merge | 合并内部边界 |
PolygonSnapMode
控制对齐之后顶点可以取的角度。
| 值 | 说明 |
|---|---|
PolygonSnapMode.AllAngle | 允许任意角度 |
PolygonSnapMode.ForceManhattan | 强制曼哈顿几何(正交) |
ShapesToConvert
选择 ExplodeToPolygonTask 转换哪些形状类型。取值可以组合。
| 值 | 说明 |
|---|---|
ShapesToConvert.None | 不转换任何内容 |
ShapesToConvert.All | 所有可转换的形状类型 |
ShapesToConvert.Polylines | 折线 |
ShapesToConvert.Text | 文本 |
ShapesToConvert.Circles | 圆和椭圆 |
ShapesToConvert.Arcs | 圆弧 |
ShapesToConvert.Donuts | 圆环 |
ShapesToConvert.Nurbs | NURBS 曲线 |
ShapesToConvert.ZeroWidthClosedPolylines | 零宽度的闭合折线 |
None 是 Python 关键字,因此该成员只能通过 getattr(ShapesToConvert, "None") 访问。