package org.newdawn.slick.svg; import java.util.ArrayList; import java.util.HashMap; /** * A diagram read from SVG containing multiple figures * * @author kevin */ public class Diagram { /** The figures in the diagram */ private ArrayList figures = new ArrayList(); /** The pattern definitions */ private HashMap patterns = new HashMap(); /** The linear gradients defined within the diagram */ private HashMap gradients = new HashMap(); /** The figures mapping */ private HashMap figureMap = new HashMap(); /** The width of the diagram */ private float width; /** The height of the diagram */ private float height; /** * Create a new empty diagram * * @param width The width of the diagram * @param height The height of the diagram */ public Diagram(float width, float height) { this.width = width; this.height = height; } /** * Get the width of the diagram * * @return The width of the diagram */ public float getWidth() { return width; } /** * Get the height of the diagram * * @return The height of the diagram */ public float getHeight() { return height; } /** * Add a pattern definition basd on a image * * @param name The name of the pattern * @param href The href to the image specified in the doc */ public void addPatternDef(String name, String href) { patterns.put(name, href); } /** * Add gradient to the diagram * * @param name The name of the gradient * @param gradient The gradient to be added */ public void addGradient(String name, Gradient gradient) { gradients.put(name, gradient); } /** * Get a pattern definition from the diagram * * @param name The name of the pattern * @return The href to the image that was specified for the given pattern */ public String getPatternDef(String name) { return (String) patterns.get(name); } /** * Get the gradient defined in this document * * @param name The name of the gradient * @return The gradient definition */ public Gradient getGradient(String name) { return (Gradient) gradients.get(name); } /** * Get the names of the patterns defined * * @return The names of the pattern */ public String[] getPatternDefNames() { return (String[]) patterns.keySet().toArray(new String[0]); } /** * Get a figure by a given ID * * @param id The ID of the figure * @return The figure with the given ID */ public Figure getFigureByID(String id) { return (Figure) figureMap.get(id); } /** * Add a figure to the diagram * * @param figure The figure to add */ public void addFigure(Figure figure) { figures.add(figure); figureMap.put(figure.getData().getAttribute(NonGeometricData.ID), figure); String fillRef = figure.getData().getAsReference(NonGeometricData.FILL); Gradient gradient = getGradient(fillRef); if (gradient != null) { if (gradient.isRadial()) { for (int i=0;i<InkscapeLoader.RADIAL_TRIANGULATION_LEVEL;i++) { figure.getShape().increaseTriangulation(); } } } } /** * Get the number of figures in the diagram * * @return The number of figures in the diagram */ public int getFigureCount() { return figures.size(); } /** * Get the figure at a given index * * @param index The index of the figure to retrieve * @return The figure at the given index */ public Figure getFigure(int index) { return (Figure) figures.get(index); } /** * Remove a figure from the diagram * * @param figure The figure to be removed */ public void removeFigure(Figure figure) { figures.remove(figure); figureMap.remove(figure.getData().getAttribute("id")); } }