/** * This operation returns a clone of the Polygon using a deep copy. * * @return * <p>The new clone. */ @Override public Object clone() { // Initialize a new object. Polygon object = new Polygon(); // Copy the contents from this one. object.copy(this); // Return the newly instantiated object. return object; }
/** * This operation copies the contents of a Polygon into the current object using a deep copy. * * @param polygon * <p>The Object from which the values should be copied. */ public void copy(Polygon polygon) { // Check the parameters. if (polygon == null) { return; } // Copy the super's data. super.copy(polygon); // Deep copy the vertices. vertices.clear(); for (Vertex vertex : polygon.getVertices()) { vertices.add((Vertex) vertex.clone()); } // Deep copy the edges. edges.clear(); ArrayList<Edge> otherEdges = polygon.getEdges(); int size = otherEdges.size(); for (int i = 0; i < size; i++) { // Clone the edge. This deep copies the other edge's vertices, so we // must hook the clone up to our vertex instances. Edge clone = (Edge) otherEdges.get(i).clone(); // Add the clone to the list of edges. edges.add(clone); // Get the new start and end vertices for this edge. Vertex start = vertices.get(i); Vertex end = vertices.get((i + 1) % size); // Register the clone with the start and end. start.register(clone); end.register(clone); // Send the start and end vertices to the clone. clone.update(start); clone.update(end); } /* ---- Deep copy the edge properties. ---- */ // Unregister from any of the current boundary conditions. for (Entry<Integer, EdgeProperties> entry : edgeProperties.entrySet()) { EdgeProperties properties = entry.getValue(); // Unregister from the fluid and thermal boundary conditions. properties.getFluidBoundaryCondition().unregister(this); properties.getThermalBoundaryCondition().unregister(this); // Unregister from all passive scalar boundary conditions. for (BoundaryCondition condition : properties.getOtherBoundaryConditions()) { condition.unregister(this); } } // Clone all of the edge properties from the other polygon and register // with their boundary conditions. for (Entry<Integer, EdgeProperties> entry : polygon.edgeProperties.entrySet()) { // Clone and add the edge's properties. EdgeProperties properties = (EdgeProperties) entry.getValue().clone(); edgeProperties.put(entry.getKey(), properties); // Unregister from the fluid and thermal boundary conditions. properties.getFluidBoundaryCondition().register(this); properties.getThermalBoundaryCondition().register(this); // Unregister from all passive scalar boundary conditions. for (BoundaryCondition condition : properties.getOtherBoundaryConditions()) { condition.register(this); } } /* ---------------------------------------- */ // Copy the PolygonProperties polygonProperties = (PolygonProperties) polygon.getPolygonProperties().clone(); return; }