From 57596769eedd2f64b3b6f898ca230867fe866e11 Mon Sep 17 00:00:00 2001 From: Tao Gong Date: Mon, 17 Nov 2014 16:28:09 -0500 Subject: [PATCH] Basic drawing, Vertex and Edge. --- drawing/Edge.pde | 13 ++++++++ drawing/Graph.pde | 12 ++++++++ drawing/Vertex.pde | 29 +++++++++++++++++ drawing/drawing.pde | 65 +++++++++++++++++++++++++++++++++++++++ drawing/sketch.properties | 2 ++ 5 files changed, 121 insertions(+) create mode 100644 drawing/Edge.pde create mode 100644 drawing/Graph.pde create mode 100644 drawing/Vertex.pde create mode 100644 drawing/drawing.pde create mode 100644 drawing/sketch.properties diff --git a/drawing/Edge.pde b/drawing/Edge.pde new file mode 100644 index 0000000..7aabc0e --- /dev/null +++ b/drawing/Edge.pde @@ -0,0 +1,13 @@ +class Edge { + Vertex v1,v2; + Edge(Vertex _v1, Vertex _v2){ + v1=_v1;v2=_v2; + v1.E.add(this); + v2.E.add(this); + } + void draw(){ + strokeWeight(2); + stroke(0,0,255); + line(v1.x,v1.y,v2.x,v2.y); + } +} diff --git a/drawing/Graph.pde b/drawing/Graph.pde new file mode 100644 index 0000000..ca9e76a --- /dev/null +++ b/drawing/Graph.pde @@ -0,0 +1,12 @@ +class Graph{ + ArrayList V=new ArrayList(); + ArrayList E=new ArrayList(); + boolean ValidNewEdge(Vertex v1,Vertex v2){ + if(v1==v2)return false; + for(Edge i:v1.E){ + if((i.v1==v1)&&(i.v2==v2))return false; + if((i.v2==v1)&&(i.v1==v2))return false; + } + return true; + } +} diff --git a/drawing/Vertex.pde b/drawing/Vertex.pde new file mode 100644 index 0000000..6be53a8 --- /dev/null +++ b/drawing/Vertex.pde @@ -0,0 +1,29 @@ +class Vertex{ + int x,y; + boolean mouseover=false; + ArrayList E=new ArrayList(); + Vertex(int _x,int _y){ + x=_x;y=_y; + } + Vertex(int _x,int _y,boolean _mo){ + x=_x;y=_y;mouseover=_mo; + if(_mo)vertex_under_mouse=this; + } + void draw(){ + noStroke(); + if(mouseover){ + fill(0,255,0); + }else{ + fill(255,0,0); + } + ellipse(x,y,Vertex_Rad*2,Vertex_Rad*2); + } + void checkmouseover(){ + if(sqrt((mouseX-x)*(mouseX-x)+(mouseY-y)*(mouseY-y))<=Vertex_Rad*2){ + mouseover=true; + vertex_under_mouse=this; + }else{ + mouseover=false; + } + } +} diff --git a/drawing/drawing.pde b/drawing/drawing.pde new file mode 100644 index 0000000..da26bf0 --- /dev/null +++ b/drawing/drawing.pde @@ -0,0 +1,65 @@ +final int DRAW_NORMAL=1; +final int DRAW_DRAG=2; +final int Vertex_Rad=8; +Vertex drag_start; +Vertex vertex_under_mouse; +void setup() { + size(640, 360); + noStroke(); +} +Graph G=new Graph(); +int draw_state=DRAW_NORMAL; + +void draw() { + background(255); + //Draw everything else + //Draw Vertices + for(Vertex i:G.V){ + i.draw(); + } + //Draw Edges + strokeWeight(2); + for(Edge i:G.E){ + i.draw(); + } + if(draw_state==DRAW_DRAG){ + strokeWeight(2); + stroke(0,0,255); + line(drag_start.x,drag_start.y,mouseX,mouseY); + //println("DRAW_DRAG:",drag_start.x,",",drag_start.y,",",mouseX,",",mouseY); + //Draw the dragged line; + } +} +void mouseMoved(){ + vertex_under_mouse=null; + for(Vertex i:G.V){ + i.checkmouseover(); + } +} +void mouseDragged(){ + mouseMoved(); + if(draw_state!=DRAW_DRAG){//start dragging + drag_start=vertex_under_mouse; + draw_state=DRAW_DRAG; + } + +} +void mousePressed(){ + if(vertex_under_mouse==null){ + G.V.add(new Vertex(mouseX, mouseY,true)); + } +} + +void mouseReleased(){ + if(draw_state==DRAW_DRAG){ + draw_state=DRAW_NORMAL; + if(vertex_under_mouse!=null){ + if(G.ValidNewEdge(drag_start,vertex_under_mouse)){ + G.E.add(new Edge(drag_start,vertex_under_mouse)); + println("Valid"); + }else{ + println("Invalid"); + } + } + } +} diff --git a/drawing/sketch.properties b/drawing/sketch.properties new file mode 100644 index 0000000..8630fa2 --- /dev/null +++ b/drawing/sketch.properties @@ -0,0 +1,2 @@ +mode.id=processing.mode.java.JavaMode +mode=Java