mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-10 05:41:51 +09:00
Former-commit-id: 1647fa32ef6894bd7db44f741f07c2f4dcdf9054 Former-commit-id: 0e5810dcfbe1fd59b13e7cabe9f1e93c5542da2d
163 lines
3.6 KiB
Java
163 lines
3.6 KiB
Java
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"));
|
|
}
|
|
}
|