/* 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: PolymakeJvxParser.java 6459 2005-11-01 09:06:15Z thilosch $ */ package de.tuberlin.polymake.common; import java.io.IOException; import java.util.StringTokenizer; import jv.geom.PgElementSet; import jv.geom.PgPointSet; import jv.geom.PgPolygon; import jv.geom.PgPolygonSet; import jv.loader.PgJvxLoader; import jv.object.PsDebug; import jv.project.PgJvxSrc; import jv.project.PvGeometryIf; /** * This class parses JavaView jvx files and puts them into one EmbeddedGeometries class. * It parses the name of the JavaView geometries to detect dynamic geometries. The name * of a dynamic geometry is "dynamic:". The first geometry of the jvx file is the * embedding of the EmdeddedGeometries. * * @author Thilo Schröder * @version 1.0 */ public class PolymakeJvxParser { /** * Parse a jvx-data into an EmbeddedGeometries object. The first geometry of the jvx-data * is the basis of all the following geometries. The geometries that have to change if the * embedding changes must have the name "dynamic:". * * @param in BufferedReader for textual input which will be parsed * @return EmbeddedGeometries instance containing * @exception IOException if problems reading from in occur */ public static EmbeddedGeometries parse(java.io.BufferedReader in) throws IOException { PgJvxLoader jvxLoader = new PgJvxLoader(); if(!jvxLoader.load(in)) throw new IOException("Error reading JVX-Data."); PgJvxSrc[] i_geoms = jvxLoader.getGeometries(); EmbeddedGeometry[] geoms = new EmbeddedGeometry[i_geoms.length]; for(int i = 0; i < i_geoms.length; ++i) { String name = i_geoms[i].getName(); boolean dynamic = false; StringTokenizer st = new StringTokenizer(name,":"); if(st.nextToken().equals("dynamic")) { dynamic = true; name = st.nextToken(); i_geoms[i].setName(name); } int[] vertexList = null; if(dynamic) { vertexList = new int[i_geoms[i].getNumVertices()]; for(int j = 0; j < vertexList.length; ++j) { vertexList[j] = (int)(i_geoms[i].getVertex(j).getEntry(0)); } } switch (i_geoms[i].getType()) { case PvGeometryIf.GEOM_POINT_SET: PgPointSet pointSet = new PgPointSet(); pointSet.setJvx(i_geoms[i]); geoms[i] = new EmbeddedGeometry(vertexList,pointSet,dynamic); break; case PvGeometryIf.GEOM_POLYGON_SET: PgPolygonSet polygonSet = new PgPolygonSet(); polygonSet.setJvx(i_geoms[i]); polygonSet.showPolygonColors(true); geoms[i] = new EmbeddedGeometry(vertexList,polygonSet,dynamic); break; case PvGeometryIf.GEOM_ELEMENT_SET: PgElementSet elementSet = new PgElementSet(); elementSet.setJvx(i_geoms[i]); geoms[i] = new EmbeddedGeometry(vertexList,elementSet,dynamic); break; case PvGeometryIf.GEOM_POLYGON: PgPolygon polygon = new PgPolygon(); polygon.setJvx(i_geoms[i]); geoms[i] = new EmbeddedGeometry(vertexList,polygon,dynamic); break; default: PsDebug.warning("geometry["+i+"] has unknown type = "+i_geoms[i].getType()); } } String title = i_geoms[0].getTitle(); StringTokenizer st = new StringTokenizer(title,":"); if(st.nextToken().equals("dynamic")) { title = st.nextToken(); } return new EmbeddedGeometries(title,geoms); } }