All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.mathiewz.slick.svg.SVGMorph Maven / Gradle / Ivy

Go to download

The main purpose of this libraryis to modernize and maintain the slick2D library.

The newest version!
package com.github.mathiewz.slick.svg;

import java.util.ArrayList;

import com.github.mathiewz.slick.SlickException;
import com.github.mathiewz.slick.geom.MorphShape;

/**
 * A utility to allow morphing between a set of similar SVG diagrams
 *
 * @author kevin
 */
public class SVGMorph extends Diagram {
    /** The list of figures being morphed */
    private final ArrayList
figures = new ArrayList<>(); /** * Create a new morph with a first diagram base * * @param diagram * The base diagram which provides the first step of the morph */ public SVGMorph(Diagram diagram) { super(diagram.getWidth(), diagram.getHeight()); for (int i = 0; i < diagram.getFigureCount(); i++) { Figure figure = diagram.getFigure(i); Figure copy = new Figure(figure.getType(), new MorphShape(figure.getShape()), figure.getData(), figure.getTransform()); figures.add(copy); } } /** * Add a subsquent step to the morphing * * @param diagram * The diagram to add as the next step in the morph */ public void addStep(Diagram diagram) { if (diagram.getFigureCount() != figures.size()) { throw new SlickException("Mismatched diagrams, missing ids"); } for (int i = 0; i < diagram.getFigureCount(); i++) { Figure figure = diagram.getFigure(i); String id = figure.getData().getMetaData(); for (int j = 0; j < figures.size(); j++) { Figure existing = figures.get(j); if (existing.getData().getMetaData().equals(id)) { MorphShape morph = (MorphShape) existing.getShape(); morph.addShape(figure.getShape()); break; } } } } /** * Set the current diagram we should morph from. This only really works with * updateMorphTime() but can be used for smooth transitions between * morphs. * * @param diagram * The diagram to use as the base of the morph */ public void setExternalDiagram(Diagram diagram) { for (int i = 0; i < figures.size(); i++) { Figure figure = figures.get(i); for (int j = 0; j < diagram.getFigureCount(); j++) { Figure newBase = diagram.getFigure(j); if (newBase.getData().getMetaData().equals(figure.getData().getMetaData())) { MorphShape shape = (MorphShape) figure.getShape(); shape.setExternalFrame(newBase.getShape()); break; } } } } /** * Update the morph time index by the amount specified * * @param delta * The amount to update the morph by */ public void updateMorphTime(float delta) { for (int i = 0; i < figures.size(); i++) { Figure figure = figures.get(i); MorphShape shape = (MorphShape) figure.getShape(); shape.updateMorphTime(delta); } } /** * Set the "time" index for this morph. This is given in terms of diagrams, so * 0.5f would give you the position half way between the first and second diagrams. * * @param time * The time index to represent on this diagrams */ public void setMorphTime(float time) { for (int i = 0; i < figures.size(); i++) { Figure figure = figures.get(i); MorphShape shape = (MorphShape) figure.getShape(); shape.setMorphTime(time); } } /** * @see Diagram#getFigureCount() */ @Override public int getFigureCount() { return figures.size(); } /** * @see Diagram#getFigure(int) */ @Override public Figure getFigure(int index) { return figures.get(index); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy