home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Java 1.2 How-To
/
JavaHowTo.iso
/
3rdParty
/
Bluette
/
Plastic
/
demo
/
Graph.pla
< prev
next >
Wrap
Text File
|
1997-10-28
|
22KB
|
2,029 lines
<string>
Graph Layout
<string>
Min-Kyu Lee
<integer>
3
<string>
@(#)Graph.java 1.3 96/12/06
<string>
Copyright (c) 1994-1996 Sun Microsystems, Inc. All Rights
<string>
Reserved.
<string>
<string>
<integer>
3
<string>
java.util.*
<string>
java.awt.*
<string>
java.applet.Applet
<storable>
<string>
TGraph
<integer>
15
<storable>
<string>
TJavaClass
<integer>
22
<integer>
177
<integer>
132
<integer>
307
<string>
Node
<integer>
6
<storable>
<string>
TJavaAttribute
<string>
x
<string>
double
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
y
<string>
double
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
dx
<string>
double
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
dy
<string>
double
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
fixed
<string>
boolean
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
lbl
<string>
String
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<integer>
0
<integer>
0
<boolean>
FALSE
<boolean>
TRUE
<integer>
0
<storable>
<string>
TJavaClass
<integer>
162
<integer>
177
<integer>
272
<integer>
257
<string>
Edge
<integer>
3
<storable>
<string>
TJavaAttribute
<string>
from
<string>
int
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
to
<string>
int
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
len
<string>
double
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<integer>
0
<integer>
0
<boolean>
FALSE
<boolean>
TRUE
<integer>
0
<storable>
<string>
TJavaClass
<integer>
302
<integer>
82
<integer>
412
<integer>
117
<string>
Panel
<integer>
0
<integer>
0
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<integer>
0
<storable>
<string>
TJavaClass
<integer>
302
<integer>
177
<integer>
587
<integer>
357
<string>
GraphPanel
<integer>
17
<storable>
<string>
TJavaAttribute
<string>
nnodes
<string>
int
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
nedges
<string>
int
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
stress
<string>
boolean
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
random
<string>
boolean
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
pick
<string>
Node
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
pickfixed
<string>
boolean
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
offscreen
<string>
Image
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
offscreensize
<string>
Dimension
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
offgraphics
<string>
Graphics
<string>
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
fixedColor
<string>
Color
<string>
Color.red
<integer>
0
<boolean>
TRUE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
selectColor
<string>
Color
<string>
Color.pink
<integer>
0
<boolean>
TRUE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
edgeColor
<string>
Color
<string>
Color.black
<integer>
0
<boolean>
TRUE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
nodeColor
<string>
Color
<string>
new Color(250, 220, 100)
<integer>
0
<boolean>
TRUE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
stressColor
<string>
Color
<string>
Color.darkGray
<integer>
0
<boolean>
TRUE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
arcColor1
<string>
Color
<string>
Color.black
<integer>
0
<boolean>
TRUE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
arcColor2
<string>
Color
<string>
Color.pink
<integer>
0
<boolean>
TRUE
<boolean>
FALSE
<storable>
<string>
TJavaAttribute
<string>
arcColor3
<string>
Color
<string>
Color.red
<integer>
0
<boolean>
TRUE
<boolean>
FALSE
<integer>
13
<storable>
<string>
TJavaConstructor
<string>
<string>
<integer>
1
<storable>
<string>
TJavaArgument
<string>
graph
<string>
Graph
<integer>
1
<string>
this.graph = graph;
<storable>
<string>
TJavaMethod
<string>
findNode
<string>
int
<integer>
1
<storable>
<string>
TJavaArgument
<string>
lbl
<string>
String
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<string>
<integer>
6
<string>
for (int i = 0 ; i < nnodes ; i++) {
<string>
if (nodes[i].lbl.equals(lbl)) {
<string>
return i;
<string>
}
<string>
}
<string>
return addNode(lbl);
<storable>
<string>
TJavaMethod
<string>
addNode
<string>
int
<integer>
1
<storable>
<string>
TJavaArgument
<string>
lbl
<string>
String
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<string>
<integer>
6
<string>
Node n = new Node();
<string>
n.x = 10 + 380*Math.random();
<string>
n.y = 10 + 380*Math.random();
<string>
n.lbl = lbl;
<string>
nodes[nnodes] = n;
<string>
return nnodes++;
<storable>
<string>
TJavaMethod
<string>
addEdge
<string>
<integer>
3
<storable>
<string>
TJavaArgument
<string>
from
<string>
String
<storable>
<string>
TJavaArgument
<string>
to
<string>
String
<storable>
<string>
TJavaArgument
<string>
len
<string>
int
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<string>
<integer>
5
<string>
Edge e = new Edge();
<string>
e.from = findNode(from);
<string>
e.to = findNode(to);
<string>
e.len = len;
<string>
edges[nedges++] = e;
<storable>
<string>
TJavaMethod
<string>
run
<string>
<integer>
0
<integer>
3
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<string>
<integer>
16
<string>
while (true) {
<string>
relax();
<string>
if (random && (Math.random() < 0.03)) {
<string>
Node n = nodes[(int)(Math.random() * nnodes)];
<string>
if (!n.fixed) {
<string>
n.x += 100*Math.random() - 50;
<string>
n.y += 100*Math.random() - 50;
<string>
}
<string>
graph.play(graph.getCodeBase(), "audio/drip.au");
<string>
}
<string>
try {
<string>
Thread.sleep(100);
<string>
} catch (InterruptedException e) {
<string>
break;
<string>
}
<string>
}
<storable>
<string>
TJavaMethod
<string>
relax
<string>
<integer>
0
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<boolean>
TRUE
<string>
<integer>
66
<string>
for (int i = 0 ; i < nedges ; i++) {
<string>
Edge e = edges[i];
<string>
double vx = nodes[e.to].x - nodes[e.from].x;
<string>
double vy = nodes[e.to].y - nodes[e.from].y;
<string>
double len = Math.sqrt(vx * vx + vy * vy);
<string>
double f = (edges[i].len - len) / (len * 3);
<string>
double dx = f * vx;
<string>
double dy = f * vy;
<string>
<string>
nodes[e.to].dx += dx;
<string>
nodes[e.to].dy += dy;
<string>
nodes[e.from].dx += -dx;
<string>
nodes[e.from].dy += -dy;
<string>
}
<string>
<string>
for (int i = 0 ; i < nnodes ; i++) {
<string>
Node n1 = nodes[i];
<string>
double dx = 0;
<string>
double dy = 0;
<string>
<string>
for (int j = 0 ; j < nnodes ; j++) {
<string>
if (i == j) {
<string>
continue;
<string>
}
<string>
Node n2 = nodes[j];
<string>
double vx = n1.x - n2.x;
<string>
double vy = n1.y - n2.y;
<string>
double len = vx * vx + vy * vy;
<string>
if (len == 0) {
<string>
dx += Math.random();
<string>
dy += Math.random();
<string>
} else if (len < 100*100) {
<string>
dx += vx / len;
<string>
dy += vy / len;
<string>
}
<string>
}
<string>
double dlen = dx * dx + dy * dy;
<string>
if (dlen > 0) {
<string>
dlen = Math.sqrt(dlen) / 2;
<string>
n1.dx += dx / dlen;
<string>
n1.dy += dy / dlen;
<string>
}
<string>
}
<string>
<string>
Dimension d = size();
<string>
for (int i = 0 ; i < nnodes ; i++) {
<string>
Node n = nodes[i];
<string>
if (!n.fixed) {
<string>
n.x += Math.max(-5, Math.min(5, n.dx));
<string>
n.y += Math.max(-5, Math.min(5, n.dy));
<string>
// System.out.println("v= " + n.dx + "," + n.dy);
<string>
if (n.x < 0) {
<string>
n.x = 0;
<string>
} else if (n.x > d.width) {
<string>
n.x = d.width;
<string>
}
<string>
if (n.y < 0) {
<string>
n.y = 0;
<string>
} else if (n.y > d.height) {
<string>
n.y = d.height;
<string>
}
<string>
}
<string>
n.dx /= 2;
<string>
n.dy /= 2;
<string>
}
<string>
repaint();
<storable>
<string>
TJavaMethod
<string>
paintNode
<string>
<integer>
3
<storable>
<string>
TJavaArgument
<string>
g
<string>
Graphics
<storable>
<string>
TJavaArgument
<string>
n
<string>
Node
<storable>
<string>
TJavaArgument
<string>
fm
<string>
FontMetrics
<integer>
3
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<string>
<integer>
9
<string>
int x = (int)n.x;
<string>
int y = (int)n.y;
<string>
g.setColor((n == pick) ? selectColor : (n.fixed ? fixedColor : nodeColor));
<string>
int w = fm.stringWidth(n.lbl) + 10;
<string>
int h = fm.getHeight() + 4;
<string>
g.fillRect(x - w/2, y - h / 2, w, h);
<string>
g.setColor(Color.black);
<string>
g.drawRect(x - w/2, y - h / 2, w-1, h-1);
<string>
g.drawString(n.lbl, x - (w-10)/2, (y - (h-4)/2) + fm.getAscent());
<storable>
<string>
TJavaMethod
<string>
update
<string>
<integer>
1
<storable>
<string>
TJavaArgument
<string>
g
<string>
Graphics
<integer>
3
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<boolean>
TRUE
<string>
<integer>
33
<string>
Dimension d = size();
<string>
if ((offscreen == null) || (d.width != offscreensize.width) || (d.height != offscreensize.height)) {
<string>
offscreen = createImage(d.width, d.height);
<string>
offscreensize = d;
<string>
offgraphics = offscreen.getGraphics();
<string>
offgraphics.setFont(getFont());
<string>
}
<string>
<string>
offgraphics.setColor(getBackground());
<string>
offgraphics.fillRect(0, 0, d.width, d.height);
<string>
for (int i = 0 ; i < nedges ; i++) {
<string>
Edge e = edges[i];
<string>
int x1 = (int)nodes[e.from].x;
<string>
int y1 = (int)nodes[e.from].y;
<string>
int x2 = (int)nodes[e.to].x;
<string>
int y2 = (int)nodes[e.to].y;
<string>
int len = (int)Math.abs(Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)) - e.len);
<string>
offgraphics.setColor((len < 10) ? arcColor1 : (len < 20 ? arcColor2 : arcColor3)) ;
<string>
offgraphics.drawLine(x1, y1, x2, y2);
<string>
if (stress) {
<string>
String lbl = String.valueOf(len);
<string>
offgraphics.setColor(stressColor);
<string>
offgraphics.drawString(lbl, x1 + (x2-x1)/2, y1 + (y2-y1)/2);
<string>
offgraphics.setColor(edgeColor);
<string>
}
<string>
}
<string>
<string>
FontMetrics fm = offgraphics.getFontMetrics();
<string>
for (int i = 0 ; i < nnodes ; i++) {
<string>
paintNode(offgraphics, nodes[i], fm);
<string>
}
<string>
<string>
g.drawImage(offscreen, 0, 0, null);
<storable>
<string>
TJavaMethod
<string>
mouseDown
<string>
boolean
<integer>
3
<storable>
<string>
TJavaArgument
<string>
evt
<string>
Event
<storable>
<string>
TJavaArgument
<string>
x
<string>
int
<storable>
<string>
TJavaArgument
<string>
y
<string>
int
<integer>
3
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<boolean>
TRUE
<string>
<integer>
15
<string>
double bestdist = Double.MAX_VALUE;
<string>
for (int i = 0 ; i < nnodes ; i++) {
<string>
Node n = nodes[i];
<string>
double dist = (n.x - x) * (n.x - x) + (n.y - y) * (n.y - y);
<string>
if (dist < bestdist) {
<string>
pick = n;
<string>
bestdist = dist;
<string>
}
<string>
}
<string>
pickfixed = pick.fixed;
<string>
pick.fixed = true;
<string>
pick.x = x;
<string>
pick.y = y;
<string>
repaint();
<string>
return true;
<storable>
<string>
TJavaMethod
<string>
mouseDrag
<string>
boolean
<integer>
3
<storable>
<string>
TJavaArgument
<string>
evt
<string>
Event
<storable>
<string>
TJavaArgument
<string>
x
<string>
int
<storable>
<string>
TJavaArgument
<string>
y
<string>
int
<integer>
3
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<boolean>
TRUE
<string>
<integer>
4
<string>
pick.x = x;
<string>
pick.y = y;
<string>
repaint();
<string>
return true;
<storable>
<string>
TJavaMethod
<string>
mouseUp
<string>
boolean
<integer>
3
<storable>
<string>
TJavaArgument
<string>
evt
<string>
Event
<storable>
<string>
TJavaArgument
<string>
x
<string>
int
<storable>
<string>
TJavaArgument
<string>
y
<string>
int
<integer>
3
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<boolean>
TRUE
<string>
<integer>
6
<string>
pick.x = x;
<string>
pick.y = y;
<string>
pick.fixed = pickfixed;
<string>
pick = null;
<string>
repaint();
<string>
return true;
<storable>
<string>
TJavaMethod
<string>
start
<string>
<integer>
0
<integer>
3
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<string>
<integer>
2
<string>
relaxer = new Thread(this);
<string>
relaxer.start();
<storable>
<string>
TJavaMethod
<string>
stop
<string>
<integer>
0
<integer>
3
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<string>
<integer>
1
<string>
relaxer.stop();
<integer>
0
<boolean>
FALSE
<boolean>
TRUE
<integer>
1
<storable>
<string>
TInheritance
<integer>
347
<integer>
142
<integer>
367
<integer>
162
<storable>
<string>
TJavaInterface
<integer>
477
<integer>
82
<integer>
587
<integer>
132
<string>
Runnable
<integer>
0
<integer>
1
<storable>
<string>
TJavaOperation
<string>
run
<string>
<integer>
0
<integer>
0
<boolean>
FALSE
<storable>
<string>
TInheritance
<integer>
522
<integer>
142
<integer>
542
<integer>
162
<storable>
<string>
TJavaClass
<integer>
302
<integer>
472
<integer>
522
<integer>
572
<string>
Graph
<integer>
0
<integer>
4
<storable>
<string>
TJavaMethod
<string>
init
<string>
<integer>
0
<integer>
3
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<string>
<integer>
31
<string>
setLayout(new BorderLayout());
<string>
panel = new GraphPanel(this);
<string>
add("Center", panel);
<string>
Panel p = new Panel();
<string>
add("South", p);
<string>
p.add(new Button("Scramble"));
<string>
p.add(new Button("Shake"));
<string>
p.add(new Checkbox("Stress"));
<string>
p.add(new Checkbox("Random"));
<string>
String edges = getParameter("edges");
<string>
for (StringTokenizer t = new StringTokenizer(edges, ",") ; t.hasMoreTokens() ; ) {
<string>
String str = t.nextToken();
<string>
int i = str.indexOf('-');
<string>
if (i > 0) {
<string>
int len = 50;
<string>
int j = str.indexOf('/');
<string>
if (j > 0) {
<string>
len = Integer.valueOf(str.substring(j+1)).intValue();
<string>
str = str.substring(0, j);
<string>
}
<string>
panel.addEdge(str.substring(0,i), str.substring(i+1), len);
<string>
}
<string>
}
<string>
Dimension d = size();
<string>
String center = getParameter("center");
<string>
if (center != null){
<string>
Node n = panel.nodes[panel.findNode(center)];
<string>
n.x = d.width / 2;
<string>
n.y = d.height / 2;
<string>
n.fixed = true;
<string>
}
<storable>
<string>
TJavaMethod
<string>
start
<string>
<integer>
0
<integer>
3
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<string>
<integer>
1
<string>
panel.start();
<storable>
<string>
TJavaMethod
<string>
stop
<string>
<integer>
0
<integer>
3
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<string>
<integer>
1
<string>
panel.stop();
<storable>
<string>
TJavaMethod
<string>
action
<string>
boolean
<integer>
2
<storable>
<string>
TJavaArgument
<string>
evt
<string>
Event
<storable>
<string>
TJavaArgument
<string>
arg
<string>
Object
<integer>
3
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<boolean>
FALSE
<string>
<integer>
33
<string>
if (arg instanceof Boolean) {
<string>
if (((Checkbox)evt.target).getLabel().equals("Stress")) {
<string>
panel.stress = ((Boolean)arg).booleanValue();
<string>
} else {
<string>
panel.random = ((Boolean)arg).booleanValue();
<string>
}
<string>
return true;
<string>
}
<string>
if ("Scramble".equals(arg)) {
<string>
play(getCodeBase(), "audio/computer.au");
<string>
Dimension d = size();
<string>
for (int i = 0 ; i < panel.nnodes ; i++) {
<string>
Node n = panel.nodes[i];
<string>
if (!n.fixed) {
<string>
n.x = 10 + (d.width-20)*Math.random();
<string>
n.y = 10 + (d.height-20)*Math.random();
<string>
}
<string>
}
<string>
return true;
<string>
}
<string>
if ("Shake".equals(arg)) {
<string>
play(getCodeBase(), "audio/gong.au");
<string>
Dimension d = size();
<string>
for (int i = 0 ; i < panel.nnodes ; i++) {
<string>
Node n = panel.nodes[i];
<string>
if (!n.fixed) {
<string>
n.x += 80*Math.random() - 40;
<string>
n.y += 80*Math.random() - 40;
<string>
}
<string>
}
<string>
return true;
<string>
}
<string>
return false;
<integer>
1
<boolean>
FALSE
<boolean>
TRUE
<integer>
0
<storable>
<string>
TJavaClass
<integer>
637
<integer>
322
<integer>
747
<integer>
357
<string>
Thread
<integer>
0
<integer>
0
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<integer>
0
<storable>
<string>
TJavaClass
<integer>
302
<integer>
377
<integer>
412
<integer>
412
<string>
Applet
<integer>
0
<integer>
0
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<integer>
0
<storable>
<string>
TInheritance
<integer>
347
<integer>
432
<integer>
367
<integer>
452
<storable>
<string>
TJavaClass
<integer>
92
<integer>
82
<integer>
202
<integer>
117
<string>
Object
<integer>
0
<integer>
0
<integer>
0
<boolean>
FALSE
<boolean>
FALSE
<integer>
0
<storable>
<string>
TInheritance
<integer>
137
<integer>
137
<integer>
157
<integer>
157
<storable>
<string>
TText
<integer>
27
<integer>
22
<integer>
342
<integer>
37
<string>
Graph Layout Example - from JDK version 1.1.1 Demo
<storable>
<string>
TText
<integer>
27
<integer>
42
<integer>
342
<integer>
57
<string>
1997. 8. Model By Min-Kyu Lee (niklaus@nownuri.net)
<integer>
13
<storable>
<string>
TSuperClassing
<integer>
2
<integer>
4
<integer>
2
<integer>
357
<integer>
117
<integer>
357
<integer>
142
<storable>
<string>
TSubClassing
<integer>
4
<integer>
3
<integer>
3
<integer>
367
<integer>
162
<integer>
407
<integer>
162
<integer>
407
<integer>
177
<storable>
<string>
TAssociation
<integer>
3
<integer>
0
<integer>
3
<integer>
302
<integer>
342
<integer>
77
<integer>
342
<integer>
77
<integer>
307
<string>
<string>
nodes
<integer>
0
<integer>
0
<integer>
1
<integer>
1
<integer>
100
<storable>
<string>
TAssociation
<integer>
3
<integer>
1
<integer>
3
<integer>
302
<integer>
312
<integer>
217
<integer>
312
<integer>
217
<integer>
257
<string>
<string>
edges
<integer>
0
<integer>
0
<integer>
1
<integer>
1
<integer>
200
<storable>
<string>
TSuperClassing
<integer>
5
<integer>
6
<integer>
2
<integer>
532
<integer>
132
<integer>
532
<integer>
142
<storable>
<string>
TSubClassing
<integer>
6
<integer>
3
<integer>
3
<integer>
522
<integer>
162
<integer>
457
<integer>
162
<integer>
457
<integer>
177
<storable>
<string>
TAssociation
<integer>
3
<integer>
8
<integer>
3
<integer>
587
<integer>
202
<integer>
692
<integer>
202
<integer>
692
<integer>
322
<string>
<string>
relaxer
<integer>
0
<integer>
0
<integer>
0
<integer>
0
<integer>
0
<storable>
<string>
TAssociation
<integer>
7
<integer>
3
<integer>
2
<integer>
467
<integer>
472
<integer>
467
<integer>
357
<string>
graph
<string>
panel
<integer>
0
<integer>
0
<integer>
0
<integer>
0
<integer>
0
<storable>
<string>
TSuperClassing
<integer>
9
<integer>
10
<integer>
2
<integer>
357
<integer>
412
<integer>
357
<integer>
432
<storable>
<string>
TSubClassing
<integer>
10
<integer>
7
<integer>
3
<integer>
367
<integer>
452
<integer>
417
<integer>
452
<integer>
417
<integer>
472
<storable>
<string>
TSuperClassing
<integer>
11
<integer>
12
<integer>
2
<integer>
147
<integer>
117
<integer>
147
<integer>
137
<storable>
<string>
TSubClassing
<integer>
12
<integer>
0
<integer>
3
<integer>
137
<integer>
157
<integer>
72
<integer>
157
<integer>
72
<integer>
177
<storable>
<string>
TSubClassing
<integer>
12
<integer>
1
<integer>
3
<integer>
157
<integer>
157
<integer>
212
<integer>
157
<integer>
212
<integer>
177