Added a saving and loading system for graph maps
This commit is contained in:
91
map.txt
91
map.txt
@@ -1,12 +1,79 @@
|
|||||||
numVerts,4
|
numVerts,43
|
||||||
numEdges,3
|
numEdges,34
|
||||||
vert0Pos,797.0,539.0
|
vert,601.0,491.0
|
||||||
vert1Pos,149.0,673.0
|
vert,602.0,652.0
|
||||||
vert2Pos,609.0,247.0
|
vert,300.0,277.0
|
||||||
vert3Pos,724.0,857.0
|
vert,213.0,812.0
|
||||||
edge0End,0
|
vert,715.0,655.0
|
||||||
edge0Start,3
|
vert,294.0,378.0
|
||||||
edge1End,2
|
vert,259.0,476.0
|
||||||
edge1Start,3
|
vert,224.0,247.0
|
||||||
edge2End,1
|
vert,304.0,479.0
|
||||||
edge2Start,3
|
vert,485.0,693.0
|
||||||
|
vert,713.0,810.0
|
||||||
|
vert,367.0,347.0
|
||||||
|
vert,223.0,273.0
|
||||||
|
vert,404.0,666.0
|
||||||
|
vert,329.0,345.0
|
||||||
|
vert,482.0,615.0
|
||||||
|
vert,606.0,811.0
|
||||||
|
vert,483.0,810.0
|
||||||
|
vert,267.0,616.0
|
||||||
|
vert,603.0,537.0
|
||||||
|
vert,330.0,376.0
|
||||||
|
vert,267.0,723.0
|
||||||
|
vert,714.0,488.0
|
||||||
|
vert,401.0,616.0
|
||||||
|
vert,294.0,347.0
|
||||||
|
vert,206.0,522.0
|
||||||
|
vert,711.0,234.0
|
||||||
|
vert,493.0,238.0
|
||||||
|
vert,302.0,249.0
|
||||||
|
vert,403.0,483.0
|
||||||
|
vert,334.0,727.0
|
||||||
|
vert,168.0,471.0
|
||||||
|
vert,487.0,485.0
|
||||||
|
vert,327.0,615.0
|
||||||
|
vert,405.0,237.0
|
||||||
|
vert,211.0,346.0
|
||||||
|
vert,210.0,380.0
|
||||||
|
vert,165.0,235.0
|
||||||
|
vert,411.0,811.0
|
||||||
|
vert,165.0,809.0
|
||||||
|
vert,713.0,539.0
|
||||||
|
vert,367.0,375.0
|
||||||
|
vert,165.0,521.0
|
||||||
|
edge,start,1,end,4
|
||||||
|
edge,start,1,end,16
|
||||||
|
edge,start,3,end,25
|
||||||
|
edge,start,9,end,17
|
||||||
|
edge,start,10,end,26
|
||||||
|
edge,start,11,end,14
|
||||||
|
edge,start,11,end,41
|
||||||
|
edge,end,7,start,12
|
||||||
|
edge,end,2,start,12
|
||||||
|
edge,start,13,end,38
|
||||||
|
edge,end,0,start,19
|
||||||
|
edge,start,19,end,40
|
||||||
|
edge,end,14,start,20
|
||||||
|
edge,start,20,end,41
|
||||||
|
edge,end,18,start,21
|
||||||
|
edge,start,21,end,30
|
||||||
|
edge,start,24,end,35
|
||||||
|
edge,end,5,start,24
|
||||||
|
edge,start,26,end,27
|
||||||
|
edge,end,7,start,28
|
||||||
|
edge,end,2,start,28
|
||||||
|
edge,end,23,start,29
|
||||||
|
edge,end,8,start,29
|
||||||
|
edge,end,6,start,31
|
||||||
|
edge,end,15,start,32
|
||||||
|
edge,end,22,start,32
|
||||||
|
edge,end,18,start,33
|
||||||
|
edge,end,30,start,33
|
||||||
|
edge,start,34,end,37
|
||||||
|
edge,end,35,start,36
|
||||||
|
edge,end,5,start,36
|
||||||
|
edge,start,37,end,39
|
||||||
|
edge,end,10,start,39
|
||||||
|
edge,end,25,start,42
|
||||||
@@ -123,91 +123,6 @@ public class PointGraph extends Graph {
|
|||||||
super.removeVertex(v);
|
super.removeVertex(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return a bundle with all of the graphs vertex and edge information saved into it
|
|
||||||
*/
|
|
||||||
|
|
||||||
public void save() throws IOException {
|
|
||||||
FileWriter file = new FileWriter("map.txt");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
file.write("numVerts," + super.numVertices());
|
|
||||||
file.write("\nnumEdges," + super.numEdges());
|
|
||||||
|
|
||||||
// turn the hash map into something linear
|
|
||||||
ArrayList<PointVertex> verts = new ArrayList<>();
|
|
||||||
ArrayList<Edge> edges = new ArrayList<>();
|
|
||||||
for(Vertex v : super.adjList.keySet()){
|
|
||||||
verts.add((PointVertex) v);
|
|
||||||
for(Edge e : super.adjList.get(v)){
|
|
||||||
edges.add(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// save the vertexes
|
|
||||||
int countVerts = 0;
|
|
||||||
for(PointVertex v : verts){
|
|
||||||
String countVertsString = "\nvert"+String.valueOf(countVerts);
|
|
||||||
// save the vertex position
|
|
||||||
file.write(countVertsString+"Pos,"+v.getPos().x+","+v.getPos().y);
|
|
||||||
countVerts++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// save the edges
|
|
||||||
int countEdges = 0;
|
|
||||||
for(Edge e : edges){
|
|
||||||
int idx = 0;
|
|
||||||
String countEdgesString = "\nedge" + String.valueOf(countEdges);
|
|
||||||
for(PointVertex v : verts){
|
|
||||||
if(e.getStartVertex() == (Vertex)v){
|
|
||||||
file.write(countEdgesString+"Start,"+ idx);
|
|
||||||
}
|
|
||||||
else if(e.getEndVertex() == (Vertex)v){
|
|
||||||
file.write(countEdgesString+"End," + idx);
|
|
||||||
}
|
|
||||||
idx++;
|
|
||||||
}
|
|
||||||
countEdges++;
|
|
||||||
}
|
|
||||||
file.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @ brief add all graph information in ta bundle to the graph
|
|
||||||
* @param bundle the bundle to add to the graph
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
public void addBundleToGraph(Bundle bundle){
|
|
||||||
int numVerts = bundle.getInt("numVerts", 0);
|
|
||||||
int numEdges = bundle.getInt("numEdges", 0);
|
|
||||||
ArrayList<PointVertex> verts = new ArrayList<>();
|
|
||||||
|
|
||||||
// add all of the vertexes from the bundle
|
|
||||||
for(int i = 0; i < numVerts; i++){
|
|
||||||
String countVertsString = "vert"+String.valueOf(i);
|
|
||||||
float[] pos = bundle.getFloatArray(countVertsString+"Pos");
|
|
||||||
String label = bundle.getString(countVertsString+"Label");
|
|
||||||
boolean isSelected = bundle.getBoolean(countVertsString+"isSelected");
|
|
||||||
PointVertex v = new PointVertex(pos[0], pos[1], label);
|
|
||||||
addVertex(v);
|
|
||||||
verts.add(v);
|
|
||||||
if(isSelected){
|
|
||||||
setSelectedVertex(v);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// add all of the edges from the bundle
|
|
||||||
for(int i = 0; i < numEdges; i++){
|
|
||||||
String countEdgesString = "edge" + String.valueOf(i);
|
|
||||||
int startVertIndex = bundle.getInt(countEdgesString+"Start");
|
|
||||||
int endVertIndex = bundle.getInt(countEdgesString+"End");
|
|
||||||
PointVertex vStart = verts.get(startVertIndex);
|
|
||||||
PointVertex vEnd = verts.get(endVertIndex);
|
|
||||||
addEdge(vStart, vEnd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return all edges in the graph
|
* @return all edges in the graph
|
||||||
|
|||||||
115
src/Graph/PointGraphWriter.java
Normal file
115
src/Graph/PointGraphWriter.java
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
package Graph;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public class PointGraphWriter {
|
||||||
|
public void save(String filename, PointGraph g) throws IOException {
|
||||||
|
FileWriter file = new FileWriter(filename);
|
||||||
|
|
||||||
|
file.write("numVerts," + g.numVertices());
|
||||||
|
file.write("\nnumEdges," + g.numEdges());
|
||||||
|
|
||||||
|
// turn the hash map into something linear
|
||||||
|
ArrayList<PointVertex> verts = g.getAllVertexes();
|
||||||
|
ArrayList<LineEdge> edges = g.getAllEdges();
|
||||||
|
|
||||||
|
// save the vertexes
|
||||||
|
int countVerts = 0;
|
||||||
|
for(PointVertex v : verts){
|
||||||
|
// save the vertex position
|
||||||
|
file.write("\nvert,"+v.getPos().x+","+v.getPos().y);
|
||||||
|
countVerts++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// save the edges
|
||||||
|
for(Edge e : edges){
|
||||||
|
int idx = 0;
|
||||||
|
file.write("\nedge,");
|
||||||
|
boolean otherIsWritten = false;
|
||||||
|
for(PointVertex v : verts){
|
||||||
|
if(e.getStartVertex() == (Vertex)v){
|
||||||
|
file.write("start,"+ idx);
|
||||||
|
if(!otherIsWritten){
|
||||||
|
file.write(",");
|
||||||
|
otherIsWritten = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(e.getEndVertex() == (Vertex)v){
|
||||||
|
file.write("end," + idx);
|
||||||
|
if(!otherIsWritten){
|
||||||
|
file.write(",");
|
||||||
|
otherIsWritten = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public PointGraph loadFile(String filename) throws FileNotFoundException, NumberFormatException {
|
||||||
|
PointGraph g = new PointGraph();
|
||||||
|
File file = new File(filename);
|
||||||
|
Scanner reader = new Scanner(file);
|
||||||
|
ArrayList<PointVertex> vertices = new ArrayList<>();
|
||||||
|
while(reader.hasNextLine()){
|
||||||
|
String line = reader.nextLine();
|
||||||
|
ArrayList<String> args = parseLine(line);
|
||||||
|
String key = args.get(0);
|
||||||
|
switch (key) {
|
||||||
|
case "numVerts" -> System.out.println("Number of Vertexes: " + Integer.parseInt(args.get(1)));
|
||||||
|
case "numEdges" -> System.out.println("Number of Edges: " + Integer.parseInt(args.get(1)));
|
||||||
|
case "vert" -> {
|
||||||
|
float x = Float.parseFloat(args.get(1));
|
||||||
|
float y = Float.parseFloat(args.get(2));
|
||||||
|
PointVertex v = new PointVertex(x, y);
|
||||||
|
g.addVertex(v);
|
||||||
|
vertices.add(v);
|
||||||
|
}
|
||||||
|
case "edge" -> {
|
||||||
|
int startIdx;
|
||||||
|
int endIdx;
|
||||||
|
if (args.get(1).contains("start")) {
|
||||||
|
startIdx = Integer.parseInt(args.get(2));
|
||||||
|
endIdx = Integer.parseInt(args.get(4));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
startIdx = Integer.parseInt(args.get(4));
|
||||||
|
endIdx = Integer.parseInt(args.get(2));
|
||||||
|
}
|
||||||
|
g.addEdge(vertices.get(startIdx), vertices.get(endIdx));
|
||||||
|
}
|
||||||
|
default -> System.out.println("Unrecognized Line: " + line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return g;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ArrayList<String> parseLine(String line){
|
||||||
|
ArrayList<String> args = new ArrayList<>();
|
||||||
|
StringBuilder arg = new StringBuilder();
|
||||||
|
|
||||||
|
for(char letter : line.toCharArray()){
|
||||||
|
if(letter == ','){
|
||||||
|
args.add(arg.toString());
|
||||||
|
arg = new StringBuilder();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(letter == '\n'){
|
||||||
|
args.add(arg.toString());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
arg.append(letter);
|
||||||
|
}
|
||||||
|
if(!args.get(args.size()-1).contains(arg.toString())){
|
||||||
|
args.add(arg.toString());
|
||||||
|
}
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ import Graph.*;
|
|||||||
import Vector.Vector;
|
import Vector.Vector;
|
||||||
import processing.core.PApplet;
|
import processing.core.PApplet;
|
||||||
|
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
|
||||||
@@ -66,12 +67,28 @@ public class Processing extends PApplet {
|
|||||||
if(key == ESC){
|
if(key == ESC){
|
||||||
System.out.println("Attempting to save map to file.");
|
System.out.println("Attempting to save map to file.");
|
||||||
try{
|
try{
|
||||||
map.save();
|
PointGraphWriter writer = new PointGraphWriter();
|
||||||
|
writer.save("map.txt", map);
|
||||||
}
|
}
|
||||||
catch(IOException e){
|
catch(IOException e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(key == 'l'){
|
||||||
|
System.out.println("Attempting to load a map from file");
|
||||||
|
try{
|
||||||
|
PointGraphWriter writer = new PointGraphWriter();
|
||||||
|
map = writer.loadFile("map.txt");
|
||||||
|
}
|
||||||
|
catch (FileNotFoundException e){
|
||||||
|
System.out.println("File not found");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
catch (NumberFormatException e){
|
||||||
|
System.out.println("Number format incorrect");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void mousePressed(){
|
public void mousePressed(){
|
||||||
|
|||||||
Reference in New Issue
Block a user