package graphtea.extensions.actions.art; import graphtea.graph.graph.Edge; import graphtea.graph.graph.GPoint; import graphtea.graph.graph.Vertex; import graphtea.plugins.graphgenerator.core.PositionGenerators; import graphtea.plugins.main.GraphData; import graphtea.plugins.main.core.AlgorithmUtils; import graphtea.plugins.main.extension.GraphActionExtension; /** * Created with IntelliJ IDEA. * User: rostam * Date: 9/18/14 * Time: 12:16 PM * To change this template use File | Settings | File Templates. */ public class GraphArtActionExtendTree implements GraphActionExtension { static final String CURVE_WIDTH = "Curve Width"; @Override public String getName() { return "GraphTea Art Tree Extender"; } @Override public String getDescription() { return "GraphTea Art"; } @Override public void action(GraphData graphData) { final Vertex parent[] = new Vertex[graphData.getGraph().getVerticesCount()]; //consider the hole structure as a tree AlgorithmUtils.BFSrun(graphData.getGraph(), graphData.getGraph().getVertex(0), (v, p) -> parent[v.getId()] = p); for (Vertex v : graphData.select.getSelectedVertices()) { if(graphData.getGraph().getDegree(v)==1) { if(v.getId()==0) continue; addChildren(graphData, parent[v.getId()], v, 1.7); addChildren(graphData, parent[v.getId()], v, 0); addChildren(graphData, parent[v.getId()], v, -1.7); } } } private void addChildren(GraphData graphData, Vertex p, Vertex v, double degree) { AlgorithmUtils.getDistance(v, p); GPoint gv = GPoint.sub(p.getLocation(),v.getLocation()); gv = PositionGenerators.rotate(gv, degree); gv = GPoint.div(gv,1.7); gv = GPoint.add(gv, v.getLocation()); Vertex vv = new Vertex(); vv.setLocation(gv); graphData.getGraph().addVertex(vv); graphData.getGraph().addEdge(new Edge(v,vv)); } @Override public String getCategory() { return "Graph-based Visualization"; } }