package com.sundablog.clipper;
import java.util.ArrayList;
import java.util.List;
/**
* 多边形树类,继承自PolyNode
* 用于存储和管理多边形裁剪结果的树状结构
* 可以包含多个多边形及其嵌套的子多边形(如孔)
*/
public class PolyTree extends PolyNode {
/**
* 存储所有多边形节点的列表
* 用于快速访问所有多边形,不考虑层次结构
*/
private final List<PolyNode> allPolys = new ArrayList<PolyNode>();
/**
* 清空多边形树
* 清除所有多边形节点,包括allPolys列表和childs列表
*/
public void Clear() {
allPolys.clear(); // 清空所有多边形列表
childs.clear(); // 清空子节点列表
}
/**
* 获取所有多边形节点的列表
* @return 包含所有多边形节点的列表
*/
public List<PolyNode> getAllPolys() {
return allPolys;
}
/**
* 获取多边形树中的第一个子节点
* @return 第一个子节点,如果没有子节点则返回null
*/
public PolyNode getFirst() {
if (!childs.isEmpty()) {
return childs.get( 0 );
}
else {
return null;
}
}
/**
* 获取多边形树中多边形的总数量
* 在负偏移量情况下,会忽略隐藏的外部多边形
* @return 多边形的实际数量
*/
public int getTotalSize() {
int result = allPolys.size();
//with negative offsets, ignore the hidden outer polygon ...
if (result > 0 && childs.get( 0 ) != allPolys.get( 0 )) {
result--; // 如果第一个子节点与allPolys中的第一个元素不同,说明有隐藏的外部多边形,需要减1
}
return result;
}
}
最后修改:2025 年 12 月 03 日
© 允许规范转载