package de.lmu.ifi.dbs.elki.data.spatial; /* This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ import java.util.Collection; import java.util.Collections; import java.util.Iterator; /** * Object representation consisting of (multiple) polygons. * * @author Erich Schubert * * @apiviz.has Polygon */ public class PolygonsObject implements SpatialComparable { /** * Static (empty) prototype */ public static final PolygonsObject PROTOTYPE = new PolygonsObject(null); /** * The polygons */ private Collection polygons; /** * Constructor. * * @param polygons Polygons */ public PolygonsObject(Collection polygons) { super(); this.polygons = polygons; if(this.polygons == null) { this.polygons = Collections.emptyList(); } } /** * Access the polygon data. * * @return Polygon collection */ public Collection getPolygons() { return Collections.unmodifiableCollection(polygons); } @Override public String toString() { StringBuilder buf = new StringBuilder(); appendToBuffer(buf); return buf.toString(); } /** * Append polygons to the buffer. * * @param buf Buffer to append to */ public void appendToBuffer(StringBuilder buf) { Iterator iter = polygons.iterator(); while(iter.hasNext()) { Polygon poly = iter.next(); poly.appendToBuffer(buf); if(iter.hasNext()) { buf.append(" -- "); } } } @Override public int getDimensionality() { assert (polygons.size() > 0); return polygons.iterator().next().getDimensionality(); } @Override public double getMin(int dimension) { double min = Double.MAX_VALUE; for(Polygon p : polygons) { min = Math.min(min, p.getMin(dimension)); } return min; } @Override public double getMax(int dimension) { double max = Double.MIN_VALUE; for(Polygon p : polygons) { max = Math.max(max, p.getMin(dimension)); } return max; } }