/* Copyright (c) 1997-2004
Ewgenij Gawrilow, Michael Joswig (Technische Universitaet Berlin, Germany)
http://www.math.tu-berlin.de/polymake, mailto:polymake@math.tu-berlin.de
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version: http://www.gnu.org/licenses/gpl.txt.
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 General Public License for more details.
$Project: polymake $$Id: EmbeddedGeometry.java 6461 2005-11-01 09:15:11Z thilosch $
*/
package de.tuberlin.polymake.common;
import jv.object.PsObject;
import jv.project.PgGeometry;
/**
* This class implements the base geometry structure of the polymake JavaView
* visualisation. It is based on the JavaView class jv.geom.PgGeometry.
*
* @author Thilo Schröder
* @version 1.0
*/
public class EmbeddedGeometry implements Cloneable {
/** An array containing the vertex indices */
protected int[] vertexList;
/** The JavaView geometry containing the geometric data. */
protected PgGeometry geometry;
/**
* If a geometry is dynamic it depends on the vertices of a second geometry
* and is updated if this geometry is changed.
*/
protected boolean dynamic = false;
/**
* Creates a new EmbeddedGeometry instance.
*
* @param vertexList an array of vertex indices corresponding to the vertices of the geometry this geometry is depending on
* @param geom the geometric data, e.g. polygons, lines.
* @param dynamic if true, this geometry is embedded on the vertices of some other geometry.
*/
public EmbeddedGeometry(int[] vertexList, PgGeometry geom, boolean dynamic) {
if(vertexList != null) {
this.vertexList = new int[vertexList.length];
System.arraycopy(vertexList,0,this.vertexList,0,vertexList.length);
}
geometry = (PgGeometry)geom.clone();
this.dynamic = dynamic;
}
/**
* DOCUME
* Creates a new EmbeddedGeometry instance.
*
* @param vertexList an int[] value
*/
public EmbeddedGeometry(int[] vertexList) {
System.arraycopy(vertexList,0,this.vertexList,0,vertexList.length);
}
/**
* This methods updates the coordinates of the EmbeddedGeometry.
*
* @param ps A PgPointSet containing the new vertices
* @param clearTag if true, the tags (e.g. marked) of the vertices will be removed
*/
public void update(PointSet ps, boolean clearTag) {
for(int i = 0; i < vertexList.length; ++i) {
double[] coords = (ps.getPoint(vertexList[i])).getCoords();
geometry.getVertex(i).copy(coords, coords.length);
if (clearTag) {
geometry.clearTagVertex(i,PsObject.IS_PICKED);
}
}
geometry.update(geometry);
}
/**
* Each vertex of an EmbeddedGeometry corresponds to a vertex of the embedding.
* This method returns the indices of the vertices of the EmbeddedGeometry.
*
* @return the indices of the vertices of the underlying geometry
*/
public int[] getVertexList() {
int[] vl = new int[vertexList.length];;
System.arraycopy(this.vertexList,0,vl,0,vl.length);
return vl;
}
/**
* Get the index of the i's vertex.
*
* @param i the number of the vertex of the EmbeddedGeometry
* @return the corresponding index of the underlying geometry.
*/
public int getVertexIndex(int i) {
return vertexList[i];
}
/**
* Get the name of the geometry.
*
* @return name of the EmbeddedGeometry
*/
public String getName() {
return geometry.getName();
}
/**
* Set the geometric structure of the EmbeddedGeometry
*
* @param g the geometric structure
*/
public void setGeometry(PgGeometry g) {
geometry = (PgGeometry)(g.clone());
}
/**
* Get the geometric structure of the EmbeddedGeometry
*
* @return the geometric structure as PgGeometry
*/
public PgGeometry getGeometry() {
return geometry;
}
/**
* Is the geometry dynamically embedded on an underlying geometry?
*
* @return true, if dynamic
*/
public boolean isDynamic() {
return dynamic;
}
/**
* Get a copy of the EmbeddedGeometry
*
* @return the EmbeddedGeometry
*/
public Object clone() {
return new EmbeddedGeometry(vertexList,geometry,dynamic);
}
/**
* Get a String representation of the EmbeddedGeometry
*
* @return a String containing all information about the EmbeddedGeometry
*/
public String toString() {
String msg = new String();
msg += "geometry=" + geometry.toString() + "\n";
msg += "vertexList=";
if(vertexList!=null) {
for(int i = 0; i < vertexList.length; ++i) {
msg += vertexList[i] + " ";
}
} else {
msg += "null";
}
msg += "\ndynamic = " + dynamic +"\n";
return msg;
}
}