package graphtea.extensions.algorithms; import graphtea.graph.graph.Edge; import graphtea.graph.graph.GPoint; import graphtea.graph.graph.GraphModel; import graphtea.graph.graph.Vertex; import graphtea.graph.old.GStroke; import graphtea.library.BaseVertexProperties; import graphtea.platform.core.BlackBoard; import graphtea.plugins.algorithmanimator.core.GraphAlgorithm; import graphtea.plugins.algorithmanimator.extension.AlgorithmExtension; import graphtea.plugins.graphgenerator.core.PositionGenerators; import graphtea.plugins.main.saveload.core.extension.GraphIOExtensionHandler; import javax.swing.*; import java.awt.*; import java.io.File; import java.util.Scanner; import java.util.Vector; /** * author: rostam */ public class NetworkGenerateorAlgrithm extends GraphAlgorithm implements AlgorithmExtension { public NetworkGenerateorAlgrithm(BlackBoard blackBoard) { super(blackBoard); } @Override public void doAlgorithm(){ BaseVertexProperties.isLabelColorImp=true; step("Start of the simulation."); step("Select the file"); JFileChooser fileChooser = new JFileChooser(); if (GraphIOExtensionHandler.defaultFile != null) fileChooser.setCurrentDirectory(new File(GraphIOExtensionHandler.defaultFile)); int l = fileChooser.showOpenDialog(null); Scanner fread = null; if (l == JFileChooser.APPROVE_OPTION) { try{ File selectedFile = fileChooser.getSelectedFile(); fread = new Scanner(selectedFile); } catch (Exception e) { e.printStackTrace(); } } GraphModel g = graphData.getGraph(); g.setFont(new Font(g.getFont().getName(),g.getFont().getStyle(),18)); int scNum = 0; int cnt = 0; int maxNumNodesInLevel = 30; Vector<Integer> forbiddenIndex = null; GPoint center = new GPoint(500,300); Vertex cent = new Vertex(); cent.setLocation(center); cent.setColor(0); cent.setSize(new GPoint(0, 0)); cent.setLabelLocation(new GPoint(0,-1)); g.addVertex(cent); forbiddenIndex = new Vector<>(); while(fread.hasNextLine()) { String command = fread.nextLine(); step(command); if(command.startsWith("Scenario")) { scNum = Integer.parseInt(command.substring(9)); cnt=0; } else { Vertex v = new Vertex(); int randInd = (int) (Math.random() * maxNumNodesInLevel); cnt++; int distance = 0; if(cnt < 10 ) distance = Integer.parseInt(command.substring(9, command.lastIndexOf('m'))); else distance = Integer.parseInt(command.substring(10, command.lastIndexOf('m'))); Point[] ps = PositionGenerators.circle(distance*3,(int)center.x,(int)center.y,maxNumNodesInLevel); while(forbiddenIndex.contains(randInd)) { randInd = (int) (Math.random() * maxNumNodesInLevel); } forbiddenIndex.add(randInd); if(forbiddenIndex.size() > (maxNumNodesInLevel * 2/3)) forbiddenIndex = new Vector<>(); v.setColor(1); v.setLocation(new GPoint(ps[randInd].x, ps[randInd].y)); v.setShapeStroke(GStroke.empty); v.setSize(new GPoint(15,15)); v.setLabelLocation(new GPoint(0,-2)); //v.setSize(new GPoint(0, 0)); switch (scNum) { case 1: v.setLabel(String.valueOf((char)(0x25CB))); break; case 2: v.setLabel(String.valueOf((char)(0x25A1))); break; case 3: //v.setLabel(String.valueOf((char)0x25A1)); v.setLabel(String.valueOf((char)0x25C7)); break; } g.addVertex(v); Edge e = new Edge(cent,v); e.setColor(8); g.addEdge(e); } } step("End of the simulation."); } @Override public String getName() { return "Network Generator "; } @Override public String getDescription() { return "The network generator ..."; } }