package com.sundablog.clipper;
import com.sundablog.clipper.Point.LongPoint;
public interface Clipper {
/**
* 裁剪操作类型枚举
* INTERSECTION: 交集 - 保留两个多边形的重叠区域
* UNION: 并集 - 合并两个多边形的所有区域
* DIFFERENCE: 差集 - 保留第一个多边形减去与第二个多边形重叠的部分
* XOR: 异或 - 保留两个多边形不重叠的区域
*/
enum ClipType {
INTERSECTION, UNION, DIFFERENCE, XOR
}
/**
* 方向枚举
* RIGHT_TO_LEFT: 从右到左
* LEFT_TO_RIGHT: 从左到右
*/
enum Direction {
RIGHT_TO_LEFT, LEFT_TO_RIGHT
}
/**
* 端点类型枚举
* CLOSED_POLYGON: 闭合多边形 - 形成封闭的多边形
* CLOSED_LINE: 闭合线段 - 连接起点和终点形成封闭线段
* OPEN_BUTT: 开放齐平端点 - 不延伸线段端点
* OPEN_SQUARE: 开放方形端点 - 延伸线段端点形成方形
* OPEN_ROUND: 开放圆形端点 - 延伸线段端点形成圆形
*/
enum EndType {
CLOSED_POLYGON, CLOSED_LINE, OPEN_BUTT, OPEN_SQUARE, OPEN_ROUND
}
/**
* 连接类型枚举
* SQUARE: 方形连接 - 形成方形拐角
* ROUND: 圆形连接 - 形成圆形拐角
* MITER: 斜接连接 - 延伸两条线段形成尖拐角
*/
enum JoinType {
SQUARE, ROUND, MITER
}
/**
* 多边形填充类型枚举
* EVEN_ODD: 奇偶规则 - 从点出发画射线,穿过偶数次边界为外部,奇数次为内部
* NON_ZERO: 非零环绕规则 - 从点出发画射线,计算边界交叉次数,非零为内部
* POSITIVE: 正环绕规则 - 仅填充多边形的正环绕区域
* NEGATIVE: 负环绕规则 - 仅填充多边形的负环绕区域
*/
enum PolyFillType {
EVEN_ODD, NON_ZERO, POSITIVE, NEGATIVE
}
/**
* 多边形类型枚举
* SUBJECT: 主体多边形 - 被裁剪的多边形
* CLIP: 裁剪多边形 - 用于裁剪的多边形
*/
enum PolyType {
SUBJECT, CLIP
}
/**
* Z填充回调接口
* 用于自定义Z轴填充算法的回调函数
*/
interface ZFillCallback {
/**
* 执行Z轴填充操作
* @param bot1 第一个边界的底部点
* @param top1 第一个边界的顶部点
* @param bot2 第二个边界的底部点
* @param top2 第二个边界的顶部点
* @param pt 当前处理的点
*/
void zFill(LongPoint bot1, LongPoint top1, LongPoint bot2, LongPoint top2, LongPoint pt);
}
//初始化选项常量,可传递给构造函数...
/**
* 反向解决方案标志
* 设置此标志会反转输出多边形的顶点顺序
*/
int REVERSE_SOLUTION = 1;
/**
* 严格简单多边形标志
* 确保输出多边形是简单多边形(没有自相交)
*/
int STRICTLY_SIMPLE = 2;
/**
* 保留共线点标志
* 在输出多边形中保留共线的顶点
*/
int PRESERVE_COLINEAR = 4;
/**
* 添加单个路径到裁剪器
* @param pg 要添加的路径
* @param polyType 路径的多边形类型(主体或裁剪)
* @param Closed 是否为闭合路径
* @return 添加是否成功
*/
boolean addPath(Path pg, PolyType polyType, boolean Closed);
/**
* 添加多个路径到裁剪器
* @param ppg 要添加的路径集合
* @param polyType 路径的多边形类型(主体或裁剪)
* @param closed 是否为闭合路径
* @return 添加是否成功
*/
boolean addPaths(Paths ppg, PolyType polyType, boolean closed);
/**
* 清除裁剪器中的所有路径和数据
*/
void clear();
/**
* 执行裁剪操作,使用默认填充规则
* @param clipType 裁剪操作类型
* @param solution 存储结果的路径集合
* @return 操作是否成功
*/
boolean execute(ClipType clipType, Paths solution);
/**
* 执行裁剪操作,使用指定的填充规则
* @param clipType 裁剪操作类型
* @param solution 存储结果的路径集合
* @param subjFillType 主体多边形的填充规则
* @param clipFillType 裁剪多边形的填充规则
* @return 操作是否成功
*/
boolean execute(ClipType clipType, Paths solution, PolyFillType subjFillType, PolyFillType clipFillType);
/**
* 执行裁剪操作,结果存储在PolyTree中,使用默认填充规则
* @param clipType 裁剪操作类型
* @param polytree 存储结果的多边形树结构
* @return 操作是否成功
*/
boolean execute(ClipType clipType, PolyTree polytree);
/**
* 执行裁剪操作,结果存储在PolyTree中,使用指定的填充规则
* @param clipType 裁剪操作类型
* @param polytree 存储结果的多边形树结构
* @param subjFillType 主体多边形的填充规则
* @param clipFillType 裁剪多边形的填充规则
* @return 操作是否成功
*/
boolean execute(ClipType clipType, PolyTree polytree, PolyFillType subjFillType, PolyFillType clipFillType);
}
最后修改:2025 年 12 月 01 日
© 允许规范转载