-
Notifications
You must be signed in to change notification settings - Fork 0
/
FindReplaceFunctionView.sc
76 lines (63 loc) · 1.71 KB
/
FindReplaceFunctionView.sc
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
FindReplaceFunctionView {
var <parent, <bounds, <numBeams;
var <view, drawFunctionView;
var <points, <radius, <angle;
var <>functions;
*new {|parent, bounds, numBeams = 8|
^super.newCopyArgs(parent, bounds, numBeams).initFunctionView;
}
initFunctionView {
view = UserView(parent, bounds).background_(Color.clear);
radius = (view.bounds.width / 2) - 30;
angle = 2pi / numBeams;
functions = ["5", "7", "9", "11", "13", "15", "17", "19", "21"].wrapExtend(numBeams).scramble;
drawFunctionView = {
var x = 0, y = 0;
points = [];
numBeams.do{|i|
var a, sx, sy;
a = i * angle;
sx = x + cos(a) * radius;
sy = y + sin(a) * radius;
points = points.add(Point(sx, sy));
};
// rotate and center the ring
points = points.collect{|p|
p.rotate(-0.5pi).translate(Point(radius, radius));
};
Pen.strokeColor_(Color.gray);
points.do{|p, i|
this.functionView(
view,
Rect(0, 0, 60, 60),
p.x,
p.y,
functions[i]
);
Pen.stroke;
};
};
view.drawFunc = { drawFunctionView.() };
}
functionView {|parent, b, x, y, string, color|
var fv = UserView(parent, b).background_(Color.white), textView;
// white is a temporary hack here because i'm to stupid to figure out where to refresh...
fv.drawFunc = {|view|
Pen.strokeColor = Color.black;
Pen.width = 6;
Pen.addOval(Rect(3, 3, view.bounds.width - 6, view.bounds.height - 6));
Pen.stroke;
};
textView = StaticText(fv, fv.bounds)
.string_(string)
.font_(Font("Monaco", 32, false))
.stringColor_(Color.red)
.align_(\center);
fv.moveTo(x, y);
^fv;
}
redrawWithNewFunctions {|arrayOfFunctions|
functions = arrayOfFunctions;
view.drawFunc = { drawFunctionView.() };
}
}