-
Notifications
You must be signed in to change notification settings - Fork 2
/
jsdiagram.pjs
120 lines (97 loc) · 2.08 KB
/
jsdiagram.pjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
ArrayList items;
void setup() {
size(1200, 700);
PFont fontA = loadFont("courier");
textFont(fontA, 14);
items = new ArrayList();
var a = new Actor();
var c = new Case();
items.add(a);
items.add(c);
}
void draw() {
background(0xDD);
fill(0x33);
for (var i = 0; i < items.size(); i++) {
(UMLItem)(items.get(i)).display();
}
noLoop();
}
void mouseDragged() {
for (var i = items.size() - 1; i >= 0; i--) {
UMLItem item = (UMLItem)items.get(i);
if (item.inBounds(mouseX, mouseY)) {
item.move(mouseX, mouseY);
break;
}
}
redraw();
}
/**
* Generic UML Item
*
* Implements all the base funcitonality for visible UML items
*/
class UMLItem {
var x, y;
UMLItem() {
x = 100;
y = 100;
}
void display() {
println('ERROR: display() called from class not defining its own display() method.');
}
void move(xPos, yPos) {
x = xPos;
y = yPos;
}
boolean inBounds(xPos, yPos) {
println('ERROR: inBounds() called from class not defining its own inBounds() method.');
return false;
}
}
/**
* Group object to hold UML items
*
* TODO: Description
* TODO: Implementation
*/
class UMLGroup {
}
/**
* UML Use Case
*
* Represents a case in a UML diagram
*/
class Case extends UMLItem {
var size = 150;
var backgroundColor = 245;
void display() {
fill(backgroundColor);
ellipse(x, y, size, round(size / 3));
}
boolean inBounds(xPos, yPos) {
return xPos >= x - round(size / 2) && xPos <= x + round(size / 2) && yPos >= y - round(size / 3 / 2) && yPos <= y + round(size / 3 / 2);
}
}
/**
* UML Actor
*
* Represents an actor in a UML diagram
*/
class Actor extends UMLItem {
var size = 60;
void display() {
var third = round(size / 3);
var sixth = round(third / 2);
noFill();
ellipse(x, y - third, third, third);
line(x, y + sixth, x, y - sixth);
line(x - sixth, y, x + sixth, y);
line(x, y + sixth, x - sixth, y + third + sixth);
line(x, y + sixth, x + sixth, y + third + sixth);
}
boolean inBounds(xPos, yPos) {
return xPos >= x - sixth && xPos <= xPos + sixth && yPos >= y - sixth - third && yPos <= y + sixth + third;
}
}