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 日
如果觉得我的文章对你有用,请随意赞赏