tkar 0.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,172 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # based on the 24hr_clock example from the tkruby demos
4
+
5
+ # run like this: ruby dial.rb | tkar
6
+
7
+ # Do the housekeeping associated with each step in the animation
8
+ def draw s, delay = nil
9
+ puts s # note if s is array, it is joined with "\n"
10
+ if delay
11
+ puts "wait #{delay}"
12
+ end
13
+ puts "update"
14
+ $stdout.flush
15
+ end
16
+
17
+ # Output the shape def for a circle
18
+ def circle radius, foreground, background
19
+ coords = [-radius, -radius, radius, radius]
20
+ "oval#{coords.join(",")},fc:#{foreground},oc:#{background}"
21
+ end
22
+
23
+ # Output the shape def for a clock hand
24
+ def hand length, width, offset, color
25
+ coords = [
26
+ 0, -offset,
27
+ width, -offset-width,
28
+ width, -length+width,
29
+ 0, -length,
30
+ -width, -length+width,
31
+ -width, -offset-width
32
+ ]
33
+ "poly#{coords.join(",")},fc:#{color},oc:#{color}"
34
+ end
35
+
36
+ def mark radius, length, width, color, font = nil, offset = nil, text = nil
37
+ coords = [radius-length, 0, radius, 0]
38
+
39
+ s = "line#{coords.join(",")},wi:#{width},fc:#{color}"
40
+
41
+ if text
42
+ s << " text#{radius+offset},0,anchor:center,justify:center,text:#{text}"
43
+ s << ",fc:#{color},font:#{font}"
44
+ end
45
+
46
+ return s
47
+ end
48
+
49
+ def pie radius, extent, start, color
50
+ "arc0,0,#{radius},#{radius},extent:#{extent},start:#{start},style:pieslice," +
51
+ "fill:#{color}"
52
+ end
53
+
54
+ # Parameters for this drawing
55
+
56
+ size = 200
57
+ radius = size*0.9
58
+ cdot_size = 5
59
+ cdot_color = 'black'
60
+ hour_hand_color = 'black'
61
+ minute_hand_color = 'gray25'
62
+ second_hand_color = 'gray50'
63
+ face_color = "white"
64
+
65
+ mark_font = "-*-Helvetica-Bold-R-Normal--*-100-*-*-*-*-*-*"
66
+ mark_width = 3
67
+ mark_color = 'black'
68
+ submark_color = 'gray50'
69
+
70
+ hour_hand_len = 0.55*size
71
+ minute_hand_len = 0.85*size
72
+ second_hand_len = 0.88*size
73
+
74
+ hour_hand_width = 1.8*cdot_size
75
+ minute_hand_width = 1.0*cdot_size
76
+ second_hand_width = 0.4*cdot_size
77
+
78
+ # Draw the shapes
79
+
80
+ draw %{
81
+
82
+ # window setup
83
+
84
+ title dial example
85
+ background gray90
86
+ width #{2*size + 20}
87
+ height #{2*size + 20}
88
+ zoom 1.0
89
+
90
+ # shape definitions (most are not parametrized because they do not need
91
+ # to change shape or color dynamically or have individual configuration
92
+ # other than position and rotation)
93
+
94
+ shape face #{circle(radius, face_color, "black")}
95
+
96
+ shape cdot #{circle(cdot_size, cdot_color, cdot_color)}
97
+
98
+ shape hour_hand #{
99
+ hand(hour_hand_len, hour_hand_width, cdot_size*0.5, hour_hand_color)
100
+ }
101
+
102
+ shape minute_hand #{
103
+ hand(minute_hand_len, minute_hand_width, cdot_size*0.5, minute_hand_color)
104
+ }
105
+
106
+ shape second_hand #{
107
+ hand(second_hand_len, second_hand_width, cdot_size*0.5, second_hand_color)
108
+ }
109
+
110
+ shape mark #{
111
+ mark(radius, radius*0.025, mark_width, submark_color)
112
+ }
113
+
114
+ # params: *0 is text
115
+ shape labelled_mark #{
116
+ mark(radius, radius*0.05, mark_width, mark_color,
117
+ mark_font, radius*0.1, "*0")
118
+ }
119
+
120
+ # params: *0 is extent angle, *1 is start angle, *2 is color
121
+ shape pie #{
122
+ pie(radius, "*0", "*1", "*2")
123
+ }
124
+
125
+ # Add some objects
126
+
127
+ # shape ID flags layer x y rot params...
128
+ #--------------------------------------------------------------
129
+
130
+ add face 1 - 10 0 0 0
131
+ add cdot 2 - 20 0 0 0
132
+ add hour_hand 3 - 15 0 0 0
133
+ add minute_hand 4 - 16 0 0 0
134
+ add second_hand 5 - 17 0 0 0
135
+ add pie 6 - 12 0 0 0 15 75 red
136
+ add pie 7 - 12 0 0 0 67 -72 green
137
+ add pie 8 - 12 0 0 0 17 187 blue
138
+ }
139
+
140
+ draw %{
141
+ # move the view to the right place to see object #1
142
+ view_id 1
143
+ }
144
+
145
+ mark_strs = (0..11).map do |i|
146
+ "add mark #{100+i} - 14 0 0 #{30*i+15}"
147
+ end
148
+
149
+ draw mark_strs
150
+
151
+ labelled_mark_strs = (0..11).map do |i|
152
+ "add labelled_mark #{200+i} - 14 0 0 #{30*i-90} #{i*2}"
153
+ end
154
+
155
+ draw labelled_mark_strs
156
+
157
+ # Animate!
158
+
159
+ 1_000_000.times do |i|
160
+ h = i*0.001
161
+ draw %{
162
+ rot 3 #{h}
163
+ rot 4 #{60*h}
164
+ rot 5 #{60*60*h}
165
+ # param 201 0 #{i}
166
+ # param 8 0 #{i%100}
167
+ # param 7 2 ##{s="%06x"%(i*32)}
168
+ }
169
+ end
170
+
171
+ $stderr.puts "Press Enter to finish"
172
+ gets
Binary file
Binary file
@@ -0,0 +1,58 @@
1
+ # mkgrid -- generate grid code for a tkar shape file
2
+ #
3
+ # To see what the grid looks like by itself:
4
+ #
5
+ # ruby mkgrid.rb | tkar --radians --persist
6
+ #
7
+ # (The --radians is because this is designed to be used from
8
+ # code that uses radians for angles. The --persist is because
9
+ # this is just some static objects, not an animation, so it will
10
+ # close after drawing without the persist option.)
11
+ #
12
+ # To use with other code, run like this:
13
+ #
14
+ # ruby mkgrid > grid.shp
15
+ #
16
+ # Then, add a line like this to your shape file:
17
+ #
18
+ # load grid.shp
19
+ #
20
+ # It doesn't really matter what part of the file you put the line in.
21
+ # Near the top is ok.
22
+ #
23
+ # Make sure grid.shp is in the same dir as the shape file, or enter the
24
+ # relative path.
25
+ #
26
+ # Adjust the parameters as needed: xmin, interval, mark_font, etc.
27
+ #
28
+ # You can disable the grid by commenting the "load grid.shp" line in
29
+ # the shape file (insert a # character at the beginning of the line)
30
+ #
31
+ # Note: if you are using this without simulink, remember to use the --radians
32
+ # option to tkar, otherwise it will look funny!
33
+
34
+ mark_font = "-*-Helvetica-Bold-R-Normal--*-90-*-*-*-*-*-*"
35
+
36
+ puts "shape grid_line line0,0,*0,0,wi:0.1,fc:black"
37
+ puts "shape mark text0,0,anchor:sw,justify:center,text:*0,fc:red,font:#{mark_font}"
38
+ puts
39
+
40
+ id = 12000 # high enough not to interfere (hacky!)
41
+ r = Math::PI/2 # when called from the tkar simulink block, tkar uses radians
42
+
43
+ xmin = -2000; xmax = 2000; xmid = 0
44
+ ymin = -2000; ymax = 2000; ymid = 0
45
+ interval = 100
46
+
47
+ xlen = xmax - xmin
48
+ ylen = ymax - ymin
49
+
50
+ (xmin..xmax).step(interval) do |x|
51
+ puts "add grid_line #{id+=1} - 0 #{x} #{ymin} #{r} #{ylen}"
52
+ puts "add mark #{id+=1} - 0 #{x} #{ymid} 0 #{x}"
53
+ end
54
+
55
+ (ymin..ymax).step(interval) do |y|
56
+ puts "add grid_line #{id+=1} - 0 #{xmin} #{y} 0 #{xlen}"
57
+ puts "add mark #{id+=1} - 0 #{xmid} #{y} 0 #{y}"
58
+ end
@@ -0,0 +1,47 @@
1
+ # Visualization of cpu usage from ps output. Run like this:
2
+ #
3
+ # ruby ps.rb | tkar
4
+ #
5
+ # If you don't see the pids, scroll down.
6
+
7
+ $stdout.sync = true
8
+
9
+ puts %{
10
+ title Process Status
11
+ height 600
12
+ width 600
13
+ bg white
14
+ update
15
+
16
+ shape bar \
17
+ poly0,0,50,0,50,*0,0,*0,oc:black,width:2,fc:*2 \
18
+ text25,20,anchor:c,justify:center,width:50,text:*1,fc:black
19
+
20
+ # SHAPE_NAME ID FLAGS LAYER X Y R PARAMS...
21
+ add bar 1 - 100 50 550 0 0 unknown blue
22
+ add bar 2 - 100 150 550 0 0 unknown blue
23
+ add bar 3 - 100 250 550 0 0 unknown blue
24
+ add bar 4 - 100 350 550 0 0 unknown blue
25
+ add bar 5 - 100 450 550 0 0 unknown blue
26
+ update
27
+ }
28
+
29
+ PS_FIELDS = "pcpu,pmem,s,time,pid,cmd"
30
+ TOP_CPU_CMD = "ps -A --sort=-pcpu -o cputime,#{PS_FIELDS} | head -n 6"
31
+
32
+ loop do
33
+ s = `#{TOP_CPU_CMD}`
34
+ a = s.map {|l| l[/[0-9:]*\s+(\S+)/, 1]}.map {|t| Float(t) rescue nil}.compact
35
+ b = s.map {|l| l[30,5]}.map {|t| Integer(t) rescue nil}.compact
36
+ i = 1
37
+ a.zip(b) do |pcpu, pid|
38
+ puts "param #{i} 1 #{pid}"
39
+ puts "param #{i} 0 -#{pcpu*5}"
40
+ i += 1
41
+ $stderr.puts [pcpu, pid].inspect
42
+ end
43
+ puts "update"
44
+
45
+ sleep 1
46
+ end
47
+
@@ -0,0 +1,26 @@
1
+ # Rotation is not a built-in operation in TkCanvas, but it is in tkar.
2
+ # Run like:
3
+ #
4
+ # cat rotate | tkar
5
+
6
+ shape box poly0,0,10,0,10,10,0,10,fc:green,oc:red
7
+
8
+ add box 3 - 4 50 20 0
9
+ update
10
+
11
+ wait 1.0
12
+ rot 3 45
13
+ update
14
+
15
+ wait 1.0
16
+ rot 3 90
17
+ update
18
+
19
+ wait 1.0
20
+ rot 3 135
21
+ update
22
+
23
+ wait 1.0
24
+ rot 3 180
25
+ update
26
+
@@ -0,0 +1,3 @@
1
+ shape box rect*0,*0,*1,*1
2
+ add box 1 - 5 10 10 0
3
+ update
@@ -0,0 +1,14 @@
1
+ # This sample is written directly in the tkar protocol, rather
2
+ # than generated by another program. Usually, you don't do this
3
+ # directly, since it would be very tedious to enter all the
4
+ # movement commands. To run it:
5
+ #
6
+ # cat sample | tkar --persist
7
+ #
8
+ # Note that you can drag the boxes around and see the commands on stdout.
9
+
10
+ shape box rect50,50,0,0 rect5,5,10,10
11
+ add box 3 - 4 10 10 0
12
+ shape box2 rect10,10,0,1
13
+ add box2 4 - 4 100 10 0
14
+
@@ -0,0 +1,98 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # A sample of many of the TkCanvas features usable in tkar.
4
+ #
5
+ # Run like:
6
+ #
7
+ # ruby sample.rb | tkar
8
+ #
9
+ # Not that if you click and drag on things, you can see the commands in the
10
+ # stdout. If your program is listening to that stream, it can feedback into
11
+ # the animation.
12
+
13
+ puts %{
14
+ title Strange bits of stuff: Tkar demo
15
+ background gray95
16
+ height 600
17
+ width 600
18
+
19
+ shape box polybox50,50,fc:*1,oc:*0 polybox5,5,fc:*0,oc:*1 \
20
+ oval30,-30,60,-60,fc:white,oc:gray
21
+
22
+ shape box2 polybox10,10,fc:*0,oc:*1
23
+
24
+ shape cone arc*0,*1,*2,*2,fc:yellow,oc:black,extent:30,start:-15,style:pieslice
25
+
26
+ shape thang polybox40,60,fc:*0,oc:*1,wi:5 \
27
+ polybox*2,10,fc:*1,oc:red,da:48,wi:3 \
28
+ cone20,40,60 \
29
+ line20,40,80,40,fc:purple,da:44
30
+
31
+ shape radar \
32
+ cone0,0,*0 \
33
+ cone20,0,*0,style:chord \
34
+ cone40,0,*0,style:chord \
35
+ line0,0,-20,-20,*1,0,*1,*1,0,-60,arrow:last,arrowshape:10+8+6,\
36
+ smooth:true,wi:2,fc:0x609000
37
+
38
+ shape blob \
39
+ poly0,0,10,0,20,5,15,30,-3,6,-20,40,-15,-10,5,5,smooth:true,oc:red,fc:0 \
40
+ text0,50,anchor:c,justify:center,width:40,text:*0,fc:0 \
41
+ image25,50,anchor:c,image:home.gif
42
+
43
+ add box 3 - 4 210 210 0 0xff0000 0x00ff00
44
+ add box2 4 - 4 300 210 0 0x0000ff 0x00ff00
45
+ update
46
+ }
47
+
48
+ $stdout.flush; sleep 1
49
+
50
+ puts %{
51
+ del 4
52
+ update
53
+ }
54
+
55
+ $stdout.flush; sleep 1
56
+
57
+ puts %{
58
+ move 3 165 150
59
+ param 3 0 0xffffff
60
+ param 3 1 blue
61
+ add box2 1 - 2 280 220 25 orange cyan
62
+ add thang 2 - 3 200 200 45 magenta green 80
63
+ add radar 6 - 5 360 360 25 60 -40
64
+ add blob 7 - 6 140 280 0
65
+ param 7 0 This is some text
66
+ update
67
+ }
68
+
69
+ $stdout.flush; sleep 1
70
+
71
+ 45.step(3600,5) do |i|
72
+ xy = 200 + i/15.0
73
+ puts %{
74
+ rot 2 #{i}
75
+ move 2 #{xy} #{xy}
76
+ param 2 2 #{80-(i/30.0)}
77
+ rot 1 #{-i}
78
+ param 6 0 #{60+i%40}
79
+ param 6 1 #{-20-i%80}
80
+ update
81
+ }
82
+ $stdout.flush; #sleep 0.02
83
+ end
84
+
85
+ 500.times do |i|
86
+ puts %{
87
+ scale 3 #{1.0 + 0.005 * Math::sin(i/100.0)} 1.0
88
+ update
89
+ }
90
+ end
91
+
92
+ $stdout.flush; sleep 1
93
+
94
+ puts "done"
95
+ $stdout.flush
96
+
97
+ $stderr.puts "Press enter to finish."
98
+ gets
@@ -0,0 +1,48 @@
1
+ # A very simple animation. Run like this:
2
+ #
3
+ # cat sample2 | tkar --persist
4
+
5
+ # Global settings for the window
6
+ title sample2
7
+ height 500
8
+ width 500
9
+ bg azure1
10
+
11
+ # -------------------------------------------------------------------------
12
+ # Shape definitions
13
+ shape box2 poly0,0,50,0,50,20,0,20,fc:red,oc:blue
14
+
15
+ # -------------------------------------------------------------------------
16
+ # Add some shapes
17
+ # -------------------------------------------------------------------------
18
+ # SHAPE_NAME ID FLAGS LAYER X Y R PARAMS...
19
+
20
+ add box2 1 - 100 10 10 0
21
+
22
+ # -------------------------------------------------------------------------
23
+ # draw them
24
+ update
25
+
26
+ # -------------------------------------------------------------------------
27
+ # animate
28
+
29
+ wait 1.0
30
+ move 1 20 20
31
+ rot 1 10
32
+ update
33
+
34
+ wait 1.0
35
+ move 1 30 30
36
+ rot 1 20
37
+ update
38
+
39
+ wait 1.0
40
+ move 1 40 40
41
+ rot 1 30
42
+ update
43
+
44
+ wait 1.0
45
+ move 1 50 50
46
+ rot 1 40
47
+ update
48
+