gave 1.2.2
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.
- data/ChangeLog +1061 -0
- data/README +52 -0
- data/bin/gave +1983 -0
- data/data/gave/glade/fileselection.glade +196 -0
- data/data/locale/ja/LC_MESSAGES/gave.mo +0 -0
- data/lib/numru/gave/draw.rb +173 -0
- data/lib/numru/gave/draw_dcl.rb +574 -0
- data/lib/numru/gave/draw_vtk.rb +326 -0
- data/lib/numru/gave/fileselection.rb +188 -0
- data/lib/numru/gave/gave_config.rb +2 -0
- data/lib/numru/gave/pre-install.rb +7 -0
- data/setup.rb +1360 -0
- metadata +69 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
|
|
2
|
+
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
|
|
3
|
+
|
|
4
|
+
<glade-interface>
|
|
5
|
+
<requires lib="gnome"/>
|
|
6
|
+
|
|
7
|
+
<widget class="GtkWindow" id="Fileselection">
|
|
8
|
+
<property name="visible">True</property>
|
|
9
|
+
<property name="title" translatable="yes">File Select</property>
|
|
10
|
+
<property name="type">GTK_WINDOW_TOPLEVEL</property>
|
|
11
|
+
<property name="window_position">GTK_WIN_POS_NONE</property>
|
|
12
|
+
<property name="modal">False</property>
|
|
13
|
+
<property name="default_width">500</property>
|
|
14
|
+
<property name="default_height">300</property>
|
|
15
|
+
<property name="resizable">True</property>
|
|
16
|
+
<property name="destroy_with_parent">True</property>
|
|
17
|
+
<signal name="delete_event" handler="on_Fileselection_delete_event" last_modification_time="Thu, 11 Mar 2004 08:23:28 GMT"/>
|
|
18
|
+
|
|
19
|
+
<child>
|
|
20
|
+
<widget class="GtkVBox" id="vbox1">
|
|
21
|
+
<property name="border_width">5</property>
|
|
22
|
+
<property name="visible">True</property>
|
|
23
|
+
<property name="homogeneous">False</property>
|
|
24
|
+
<property name="spacing">0</property>
|
|
25
|
+
|
|
26
|
+
<child>
|
|
27
|
+
<widget class="GtkHBox" id="hbox4">
|
|
28
|
+
<property name="border_width">5</property>
|
|
29
|
+
<property name="visible">True</property>
|
|
30
|
+
<property name="homogeneous">False</property>
|
|
31
|
+
<property name="spacing">0</property>
|
|
32
|
+
|
|
33
|
+
<child>
|
|
34
|
+
<widget class="GtkEntry" id="entry">
|
|
35
|
+
<property name="visible">True</property>
|
|
36
|
+
<property name="can_focus">True</property>
|
|
37
|
+
<property name="editable">True</property>
|
|
38
|
+
<property name="visibility">True</property>
|
|
39
|
+
<property name="max_length">0</property>
|
|
40
|
+
<property name="text" translatable="yes"></property>
|
|
41
|
+
<property name="has_frame">True</property>
|
|
42
|
+
<property name="invisible_char" translatable="yes">*</property>
|
|
43
|
+
<property name="activates_default">False</property>
|
|
44
|
+
<signal name="activate" handler="on_entry_activate" last_modification_time="Thu, 11 Mar 2004 10:32:12 GMT"/>
|
|
45
|
+
</widget>
|
|
46
|
+
<packing>
|
|
47
|
+
<property name="padding">0</property>
|
|
48
|
+
<property name="expand">True</property>
|
|
49
|
+
<property name="fill">True</property>
|
|
50
|
+
</packing>
|
|
51
|
+
</child>
|
|
52
|
+
|
|
53
|
+
<child>
|
|
54
|
+
<widget class="GtkButton" id="jump">
|
|
55
|
+
<property name="visible">True</property>
|
|
56
|
+
<property name="can_focus">True</property>
|
|
57
|
+
<property name="label" translatable="yes">jump</property>
|
|
58
|
+
<property name="use_underline">True</property>
|
|
59
|
+
<property name="relief">GTK_RELIEF_NORMAL</property>
|
|
60
|
+
<signal name="clicked" handler="on_jump_clicked" last_modification_time="Thu, 11 Mar 2004 08:03:05 GMT"/>
|
|
61
|
+
</widget>
|
|
62
|
+
<packing>
|
|
63
|
+
<property name="padding">0</property>
|
|
64
|
+
<property name="expand">False</property>
|
|
65
|
+
<property name="fill">False</property>
|
|
66
|
+
</packing>
|
|
67
|
+
</child>
|
|
68
|
+
</widget>
|
|
69
|
+
<packing>
|
|
70
|
+
<property name="padding">0</property>
|
|
71
|
+
<property name="expand">False</property>
|
|
72
|
+
<property name="fill">False</property>
|
|
73
|
+
</packing>
|
|
74
|
+
</child>
|
|
75
|
+
|
|
76
|
+
<child>
|
|
77
|
+
<widget class="GtkHPaned" id="hpaned1">
|
|
78
|
+
<property name="border_width">5</property>
|
|
79
|
+
<property name="visible">True</property>
|
|
80
|
+
<property name="can_focus">True</property>
|
|
81
|
+
<property name="position">0</property>
|
|
82
|
+
|
|
83
|
+
<child>
|
|
84
|
+
<widget class="GtkScrolledWindow" id="scrolledwindow1">
|
|
85
|
+
<property name="visible">True</property>
|
|
86
|
+
<property name="can_focus">True</property>
|
|
87
|
+
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
|
88
|
+
<property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
|
|
89
|
+
<property name="shadow_type">GTK_SHADOW_NONE</property>
|
|
90
|
+
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
|
91
|
+
|
|
92
|
+
<child>
|
|
93
|
+
<widget class="GtkTreeView" id="dirlist">
|
|
94
|
+
<property name="visible">True</property>
|
|
95
|
+
<property name="can_focus">True</property>
|
|
96
|
+
<property name="headers_visible">True</property>
|
|
97
|
+
<property name="rules_hint">False</property>
|
|
98
|
+
<property name="reorderable">False</property>
|
|
99
|
+
<property name="enable_search">True</property>
|
|
100
|
+
<signal name="cursor_changed" handler="on_dirlist_cursor_changed" last_modification_time="Thu, 11 Mar 2004 09:19:34 GMT"/>
|
|
101
|
+
</widget>
|
|
102
|
+
</child>
|
|
103
|
+
</widget>
|
|
104
|
+
<packing>
|
|
105
|
+
<property name="shrink">True</property>
|
|
106
|
+
<property name="resize">True</property>
|
|
107
|
+
</packing>
|
|
108
|
+
</child>
|
|
109
|
+
|
|
110
|
+
<child>
|
|
111
|
+
<widget class="GtkScrolledWindow" id="scrolledwindow2">
|
|
112
|
+
<property name="visible">True</property>
|
|
113
|
+
<property name="can_focus">True</property>
|
|
114
|
+
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
|
115
|
+
<property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
|
|
116
|
+
<property name="shadow_type">GTK_SHADOW_NONE</property>
|
|
117
|
+
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
|
118
|
+
|
|
119
|
+
<child>
|
|
120
|
+
<widget class="GtkTreeView" id="filelist">
|
|
121
|
+
<property name="visible">True</property>
|
|
122
|
+
<property name="can_focus">True</property>
|
|
123
|
+
<property name="headers_visible">True</property>
|
|
124
|
+
<property name="rules_hint">False</property>
|
|
125
|
+
<property name="reorderable">False</property>
|
|
126
|
+
<property name="enable_search">True</property>
|
|
127
|
+
<signal name="cursor_changed" handler="on_filelist_cursor_changed" last_modification_time="Thu, 11 Mar 2004 09:20:43 GMT"/>
|
|
128
|
+
</widget>
|
|
129
|
+
</child>
|
|
130
|
+
</widget>
|
|
131
|
+
<packing>
|
|
132
|
+
<property name="shrink">True</property>
|
|
133
|
+
<property name="resize">True</property>
|
|
134
|
+
</packing>
|
|
135
|
+
</child>
|
|
136
|
+
</widget>
|
|
137
|
+
<packing>
|
|
138
|
+
<property name="padding">0</property>
|
|
139
|
+
<property name="expand">True</property>
|
|
140
|
+
<property name="fill">True</property>
|
|
141
|
+
</packing>
|
|
142
|
+
</child>
|
|
143
|
+
|
|
144
|
+
<child>
|
|
145
|
+
<widget class="GtkHBox" id="hbox3">
|
|
146
|
+
<property name="border_width">5</property>
|
|
147
|
+
<property name="visible">True</property>
|
|
148
|
+
<property name="homogeneous">False</property>
|
|
149
|
+
<property name="spacing">15</property>
|
|
150
|
+
|
|
151
|
+
<child>
|
|
152
|
+
<widget class="GtkButton" id="ok">
|
|
153
|
+
<property name="width_request">110</property>
|
|
154
|
+
<property name="visible">True</property>
|
|
155
|
+
<property name="can_focus">True</property>
|
|
156
|
+
<property name="label">gtk-ok</property>
|
|
157
|
+
<property name="use_stock">True</property>
|
|
158
|
+
<property name="relief">GTK_RELIEF_NORMAL</property>
|
|
159
|
+
</widget>
|
|
160
|
+
<packing>
|
|
161
|
+
<property name="padding">0</property>
|
|
162
|
+
<property name="expand">False</property>
|
|
163
|
+
<property name="fill">False</property>
|
|
164
|
+
<property name="pack_type">GTK_PACK_END</property>
|
|
165
|
+
</packing>
|
|
166
|
+
</child>
|
|
167
|
+
|
|
168
|
+
<child>
|
|
169
|
+
<widget class="GtkButton" id="cancel">
|
|
170
|
+
<property name="width_request">110</property>
|
|
171
|
+
<property name="visible">True</property>
|
|
172
|
+
<property name="can_focus">True</property>
|
|
173
|
+
<property name="label">gtk-cancel</property>
|
|
174
|
+
<property name="use_stock">True</property>
|
|
175
|
+
<property name="relief">GTK_RELIEF_NORMAL</property>
|
|
176
|
+
<signal name="clicked" handler="on_cancel_clicked" last_modification_time="Thu, 11 Mar 2004 08:03:12 GMT"/>
|
|
177
|
+
</widget>
|
|
178
|
+
<packing>
|
|
179
|
+
<property name="padding">0</property>
|
|
180
|
+
<property name="expand">False</property>
|
|
181
|
+
<property name="fill">False</property>
|
|
182
|
+
<property name="pack_type">GTK_PACK_END</property>
|
|
183
|
+
</packing>
|
|
184
|
+
</child>
|
|
185
|
+
</widget>
|
|
186
|
+
<packing>
|
|
187
|
+
<property name="padding">0</property>
|
|
188
|
+
<property name="expand">False</property>
|
|
189
|
+
<property name="fill">False</property>
|
|
190
|
+
</packing>
|
|
191
|
+
</child>
|
|
192
|
+
</widget>
|
|
193
|
+
</child>
|
|
194
|
+
</widget>
|
|
195
|
+
|
|
196
|
+
</glade-interface>
|
|
Binary file
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
=begin header
|
|
2
|
+
draw.rb - a part of gave.rb
|
|
3
|
+
=end
|
|
4
|
+
|
|
5
|
+
require "numru/gphys"
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
module NumRu
|
|
9
|
+
class VArray
|
|
10
|
+
def mapping
|
|
11
|
+
@mapping
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
class SubsetMapping
|
|
15
|
+
def maps
|
|
16
|
+
@maps
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
class VArrayComposite
|
|
20
|
+
alias _initialize initialize
|
|
21
|
+
alias :_slice []
|
|
22
|
+
def initialize(*arg)
|
|
23
|
+
_initialize(*arg)
|
|
24
|
+
@mapping2 = SubsetMapping.new(shape_current,[])
|
|
25
|
+
end
|
|
26
|
+
def [](*arg)
|
|
27
|
+
mapping = @mapping2.composite(SubsetMapping.new(shape_current, arg))
|
|
28
|
+
obj = self._slice(*arg)
|
|
29
|
+
obj.set_mapping(mapping) if obj.class==VArrayComposite
|
|
30
|
+
obj
|
|
31
|
+
end
|
|
32
|
+
def mapping
|
|
33
|
+
@mapping2
|
|
34
|
+
end
|
|
35
|
+
def set_mapping(map)
|
|
36
|
+
@mapping2 = map
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
include NumRu
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class Draw_data
|
|
46
|
+
attr_accessor :gphys, :gphys2
|
|
47
|
+
attr_accessor :cont, :cont_i
|
|
48
|
+
attr_accessor :tone, :tone_i
|
|
49
|
+
attr_accessor :vector
|
|
50
|
+
attr_accessor :transpose
|
|
51
|
+
attr_accessor :type, :map_type, :map_draw, :map_pole
|
|
52
|
+
attr_accessor :title
|
|
53
|
+
attr_accessor :surface
|
|
54
|
+
# attr_accessor :missing_value
|
|
55
|
+
attr_reader :axis_x, :axis_y, :axis_z
|
|
56
|
+
def initialize
|
|
57
|
+
@axis_x = Axis.new
|
|
58
|
+
@axis_y = Axis.new
|
|
59
|
+
@axis_z = Axis.new
|
|
60
|
+
clear
|
|
61
|
+
end
|
|
62
|
+
def clear_var
|
|
63
|
+
@gphys = nil
|
|
64
|
+
@gphys2 = nil
|
|
65
|
+
@transpose = false
|
|
66
|
+
@axis_x.clear
|
|
67
|
+
@axis_y.clear
|
|
68
|
+
end
|
|
69
|
+
def clear
|
|
70
|
+
clear_var
|
|
71
|
+
@title = nil
|
|
72
|
+
@type = LINE
|
|
73
|
+
@map_type = nil
|
|
74
|
+
end
|
|
75
|
+
class Axis
|
|
76
|
+
attr_accessor :min, :max
|
|
77
|
+
attr_accessor :title, :unit
|
|
78
|
+
attr_accessor :log
|
|
79
|
+
def initialize
|
|
80
|
+
clear
|
|
81
|
+
end
|
|
82
|
+
def clear
|
|
83
|
+
@title=""
|
|
84
|
+
@unit=""
|
|
85
|
+
@log=false
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class Draw
|
|
95
|
+
def initialize(n)
|
|
96
|
+
@winno = n
|
|
97
|
+
@height=400
|
|
98
|
+
@width=400
|
|
99
|
+
clear
|
|
100
|
+
end
|
|
101
|
+
def clear
|
|
102
|
+
@type = nil
|
|
103
|
+
# @miss=nil
|
|
104
|
+
@title = nil
|
|
105
|
+
@x_title=""; @x_unit=""
|
|
106
|
+
@y_title=""; @y_unit=""
|
|
107
|
+
@fig = Fig.new
|
|
108
|
+
@opened = false
|
|
109
|
+
end
|
|
110
|
+
def show
|
|
111
|
+
@window.show if defined?(@window)&&(!@window.nil?)
|
|
112
|
+
end
|
|
113
|
+
def draw_x(draw_data)
|
|
114
|
+
@xmin = draw_data.axis_x.min
|
|
115
|
+
@xmax = draw_data.axis_x.max
|
|
116
|
+
@ymin = draw_data.axis_y.min
|
|
117
|
+
@ymax = draw_data.axis_y.max
|
|
118
|
+
@gphys = draw_data.gphys
|
|
119
|
+
@gphys2 = draw_data.gphys2
|
|
120
|
+
@mapping = draw_data.gphys.data.mapping.slicer
|
|
121
|
+
# @miss = draw_data.missing_value
|
|
122
|
+
@title = draw_data.title
|
|
123
|
+
@transpose = draw_data.transpose
|
|
124
|
+
@logx = draw_data.axis_x.log
|
|
125
|
+
@logy = draw_data.axis_y.log
|
|
126
|
+
@x_title = draw_data.axis_x.title
|
|
127
|
+
@x_unit = draw_data.axis_x.unit
|
|
128
|
+
@y_title = draw_data.axis_y.title
|
|
129
|
+
@y_unit = draw_data.axis_y.unit
|
|
130
|
+
@type = draw_data.type
|
|
131
|
+
@maptype = draw_data.map_type
|
|
132
|
+
@map_draw = draw_data.map_draw
|
|
133
|
+
@map_pole = draw_data.map_pole
|
|
134
|
+
@cont = draw_data.cont
|
|
135
|
+
@cont_i = draw_data.cont_i
|
|
136
|
+
@tone = draw_data.tone
|
|
137
|
+
@tone_i = draw_data.tone_i
|
|
138
|
+
@vector = draw_data.vector
|
|
139
|
+
@surface = draw_data.surface
|
|
140
|
+
@fig.var_set(@gphys.funcs,@mapping,0)
|
|
141
|
+
@fig.var_set(@gphys2.funcs,@mapping,1) if @type == VECTOR
|
|
142
|
+
@fig.title_set(@x_title,@x_unit,@y_title,@y_unit, __FILE__,__LINE__)
|
|
143
|
+
if @window.nil?
|
|
144
|
+
open_graphics
|
|
145
|
+
end
|
|
146
|
+
draw(@draw_area)
|
|
147
|
+
@window.show
|
|
148
|
+
end
|
|
149
|
+
def save_code(filename)
|
|
150
|
+
file = File.open(filename,"w")
|
|
151
|
+
file.print(@fig.head+"\n\n")
|
|
152
|
+
file.print(@fig.var+"\n\n")
|
|
153
|
+
file.print(@fig.open+"\n\n")
|
|
154
|
+
file.print(@fig.draw+"\n\n")
|
|
155
|
+
file.print(@fig.close+"\n\n")
|
|
156
|
+
file.close
|
|
157
|
+
end
|
|
158
|
+
def save_image(filename)
|
|
159
|
+
begin
|
|
160
|
+
save_image_file(filename)
|
|
161
|
+
p "save image to #{filename}"
|
|
162
|
+
rescue
|
|
163
|
+
dialog = Gtk::Dialog.new.set_title("Error Message")
|
|
164
|
+
dialog.set_modal(true)
|
|
165
|
+
dialog.vbox.pack_start(Gtk::Label.new($!))
|
|
166
|
+
ok_button=Gtk::Button.new("OK")
|
|
167
|
+
ok_button.signal_connect("clicked"){dialog.destroy}
|
|
168
|
+
dialog.action_area.pack_start(ok_button)
|
|
169
|
+
dialog.show_all
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
end
|
|
@@ -0,0 +1,574 @@
|
|
|
1
|
+
require "numru/gave/draw"
|
|
2
|
+
require "numru/dcl"
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
if defined?(DCL.gtk_version)
|
|
6
|
+
GAVE_GTK_VERSION = DCL.gtk_version[0]
|
|
7
|
+
else
|
|
8
|
+
GAVE_GTK_VERSION = 1
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
if GAVE_GTK_VERSION == 1
|
|
14
|
+
require "gdk_imlib"
|
|
15
|
+
def save_image_file(filename)
|
|
16
|
+
geom = @pixmap.get_geometry
|
|
17
|
+
mask = Gdk::Bitmap.new(@draw_area.window, geom[2], geom[3])
|
|
18
|
+
imlib = Gtk::imlib.new(@pixmax, mask)
|
|
19
|
+
imlib.save(filename)
|
|
20
|
+
end
|
|
21
|
+
module Gdk
|
|
22
|
+
class Window
|
|
23
|
+
def size; get_geometry[2..3]; end
|
|
24
|
+
def draw_drawable(*arg); draw_pixmap(*arg); end
|
|
25
|
+
end
|
|
26
|
+
class Event
|
|
27
|
+
BUTTON_PRESS_MASK = Gdk::BUTTON_PRESS_MASK
|
|
28
|
+
BUTTON_MOTION_MASK = Gdk::BUTTON_MOTION_MASK
|
|
29
|
+
BUTTON_RELEASE_MASK = Gdk::BUTTON_RELEASE_MASK
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
elsif GAVE_GTK_VERSION == 2
|
|
33
|
+
def save_image_file(filename)
|
|
34
|
+
pixbuf = Gdk::Pixbuf.from_drawable(nil, @pixmap, 0, 0, -1, -1)
|
|
35
|
+
pixbuf.save(filename, "png")
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class Mouse_Events
|
|
42
|
+
MOVE = 1
|
|
43
|
+
RESIZE = 2
|
|
44
|
+
attr_writer :height, :width
|
|
45
|
+
def initialize(height,width)
|
|
46
|
+
@height=height
|
|
47
|
+
@width=width
|
|
48
|
+
end
|
|
49
|
+
def length; @height<@width ? @height : @width; end
|
|
50
|
+
def xoffset; (@width-length)/2; end
|
|
51
|
+
def yoffset; (@height-length)/2; end
|
|
52
|
+
def pressed(px,py,l,r,b,t)
|
|
53
|
+
@move = false
|
|
54
|
+
@left,@right,@bottom,@top, = l,r,b,t
|
|
55
|
+
@axis = where(px,py,l,r,b,t)
|
|
56
|
+
if @axis then
|
|
57
|
+
if @axis==4 then
|
|
58
|
+
@move=MOVE
|
|
59
|
+
@bpx,@bpy, = px,py
|
|
60
|
+
p "begin move" if $DEBUG
|
|
61
|
+
else
|
|
62
|
+
@move=RESIZE
|
|
63
|
+
p "begin resize" if $DEBUG
|
|
64
|
+
end
|
|
65
|
+
else
|
|
66
|
+
@move = false
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
def released(px,py)
|
|
70
|
+
print "released:",px,",",py,"\n" if $DEBUG
|
|
71
|
+
if @move==MOVE then
|
|
72
|
+
@move=false
|
|
73
|
+
p "end move" if $DEBUG
|
|
74
|
+
dx=px-@bpx
|
|
75
|
+
dy=py-@bpy
|
|
76
|
+
[@left+dx,@right+dx,@bottom+dy,@top+dy]
|
|
77
|
+
elsif @move==RESIZE then
|
|
78
|
+
@move=false
|
|
79
|
+
p "end resize" if $DEBUG
|
|
80
|
+
l,r,b,t, = @left,@right,@bottom,@top
|
|
81
|
+
@left=nil;@right=nil;@bottom=nil;@top=nil
|
|
82
|
+
@bpx=nil;@bpy=nil
|
|
83
|
+
set(px,py,l,r,b,t)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
def draged(w,px,py)
|
|
87
|
+
if @move==MOVE then
|
|
88
|
+
gc = w.style.fg_gc(w.state)
|
|
89
|
+
x = (@left+px-@bpx)*length+xoffset
|
|
90
|
+
y = (1-@top-py+@bpy)*length+yoffset
|
|
91
|
+
xl = length*(@right-@left)
|
|
92
|
+
yl = length*(@top-@bottom)
|
|
93
|
+
w.window.draw_rectangle(gc, false, x, y, xl, yl)
|
|
94
|
+
elsif @move==RESIZE then
|
|
95
|
+
l,r,b,t, = set(px,py,@left,@right,@bottom,@top)
|
|
96
|
+
gc = w.style.fg_gc(w.state)
|
|
97
|
+
x = l*length+xoffset
|
|
98
|
+
y = (1-t)*length+yoffset
|
|
99
|
+
xl = length*(r-l)
|
|
100
|
+
yl = length*(t-b)
|
|
101
|
+
w.window.draw_rectangle(gc, false, x, y, xl, yl)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
def where(px,py,l,r,b,t)
|
|
105
|
+
width = 0.01
|
|
106
|
+
if (px>l-width)&&(px<r+width)&&(py>b-width)&&(py<t+width) then
|
|
107
|
+
if (px-l).abs < width then 0
|
|
108
|
+
elsif (px-r).abs < width then 1
|
|
109
|
+
elsif (py-b).abs < width then 2
|
|
110
|
+
elsif (py-t).abs < width then 3
|
|
111
|
+
else 4
|
|
112
|
+
end
|
|
113
|
+
else
|
|
114
|
+
false
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
def move?
|
|
118
|
+
@move
|
|
119
|
+
end
|
|
120
|
+
def set(px,py,l,r,b,t)
|
|
121
|
+
diff=0.05
|
|
122
|
+
lo,ro,bo,to, = [l,r,b,t]
|
|
123
|
+
if @axis==0 then
|
|
124
|
+
if px<diff then
|
|
125
|
+
lo=diff
|
|
126
|
+
elsif px>(r-diff) then
|
|
127
|
+
lo=r-diff
|
|
128
|
+
else
|
|
129
|
+
lo=px
|
|
130
|
+
end
|
|
131
|
+
elsif @axis==1 then
|
|
132
|
+
if px>(1-diff) then
|
|
133
|
+
ro=1-diff
|
|
134
|
+
elsif px<(l+diff) then
|
|
135
|
+
ro=l+diff
|
|
136
|
+
else
|
|
137
|
+
ro=px
|
|
138
|
+
end
|
|
139
|
+
elsif @axis==2 then
|
|
140
|
+
if py<diff then
|
|
141
|
+
bo=diff
|
|
142
|
+
elsif py>(t-diff) then
|
|
143
|
+
bo=t-diff
|
|
144
|
+
else
|
|
145
|
+
bo=py
|
|
146
|
+
end
|
|
147
|
+
elsif @axis==3 then
|
|
148
|
+
if py>(1-diff) then
|
|
149
|
+
to=1-diff
|
|
150
|
+
elsif py<(b+diff) then
|
|
151
|
+
to=b+diff
|
|
152
|
+
else
|
|
153
|
+
to=py
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
[lo,ro,bo,to]
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
class Draw
|
|
163
|
+
alias :_initialize :initialize
|
|
164
|
+
def initialize(n)
|
|
165
|
+
_initialize(n)
|
|
166
|
+
@pixmap = nil
|
|
167
|
+
end
|
|
168
|
+
alias :_clear :clear
|
|
169
|
+
def clear
|
|
170
|
+
_clear
|
|
171
|
+
@vxmin=0.2; @vxmax=0.8
|
|
172
|
+
@vymin=0.2; @vymax=0.8
|
|
173
|
+
@frame = Mouse_Events.new(@height,@width)
|
|
174
|
+
end
|
|
175
|
+
def open_graphics
|
|
176
|
+
set_env
|
|
177
|
+
@draw_area = Gtk::DrawingArea.new
|
|
178
|
+
@draw_area.set_size_request(@width,@height)
|
|
179
|
+
@draw_area.signal_connect("expose-event"){|w,p| expose_event(w,p) }
|
|
180
|
+
@draw_area.signal_connect("configure-event"){|w,p|
|
|
181
|
+
configure_event(w)
|
|
182
|
+
@width = w.allocation.width; @frame.width=@width
|
|
183
|
+
@height = w.allocation.height; @frame.height=@height
|
|
184
|
+
}
|
|
185
|
+
@draw_area.signal_connect("button-press-event"){|w,p|
|
|
186
|
+
if p.button==1 then
|
|
187
|
+
px = (p.x-@frame.xoffset)/@frame.length
|
|
188
|
+
py = 1 - (p.y-@frame.yoffset)/@frame.length
|
|
189
|
+
print "press:",px,",",py,"\n" if $DEBUG
|
|
190
|
+
@frame.pressed(px,py,@vxmin,@vxmax,@vymin,@vymax)
|
|
191
|
+
else
|
|
192
|
+
w.get_toplevel.hide
|
|
193
|
+
end
|
|
194
|
+
}
|
|
195
|
+
@draw_area.signal_connect("button-release-event"){|w,p|
|
|
196
|
+
px = (p.x-@frame.xoffset)/@frame.length
|
|
197
|
+
py = 1 - (p.y-@frame.yoffset)/@frame.length
|
|
198
|
+
if @frame.move?
|
|
199
|
+
@vxmin,@vxmax,@vymin,@vymax, = @frame.released(px,py)
|
|
200
|
+
draw(w)
|
|
201
|
+
end
|
|
202
|
+
}
|
|
203
|
+
@draw_area.signal_connect("motion-notify-event"){|w,p|
|
|
204
|
+
px = (p.x-@frame.xoffset)/@frame.length
|
|
205
|
+
py = 1 - (p.y-@frame.yoffset)/@frame.length
|
|
206
|
+
if @frame.move?
|
|
207
|
+
expose_event(w)
|
|
208
|
+
@frame.draged(w,px,py)
|
|
209
|
+
end
|
|
210
|
+
}
|
|
211
|
+
@draw_area.set_events(Gdk::Event::BUTTON_PRESS_MASK|Gdk::Event::BUTTON_MOTION_MASK|Gdk::Event::BUTTON_RELEASE_MASK)
|
|
212
|
+
aspect_frame = Gtk::AspectFrame.new(nil,0,0,1,true)
|
|
213
|
+
aspect_frame.add(@draw_area)
|
|
214
|
+
@window = Gtk::Window.new(TOPLEVEL).set_resizable(true)
|
|
215
|
+
@window.signal_connect("delete-event"){|w,p| w.hide; true}
|
|
216
|
+
@window.signal_connect("destroy"){exit}
|
|
217
|
+
@window.signal_connect("key-press-event"){|w,e|
|
|
218
|
+
key = Gdk::Keyval.to_name(e.keyval)
|
|
219
|
+
p key+" key press" if $DEBUG
|
|
220
|
+
if key=="q" then
|
|
221
|
+
w.hide
|
|
222
|
+
elsif key=="space" || key=="Return" then
|
|
223
|
+
$main.draw_next
|
|
224
|
+
end
|
|
225
|
+
}
|
|
226
|
+
@window.add(aspect_frame.show_all)
|
|
227
|
+
names = @gphys.funcs[0]
|
|
228
|
+
@window.set_title("#{@winno}: #{names[2]}@#{names[0]}")
|
|
229
|
+
@window.show
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
private
|
|
233
|
+
def set_env
|
|
234
|
+
DCL::swlset("LWAIT", false )
|
|
235
|
+
@fig.parm_set('DCL::sglset("LCNTL", false )', __FILE__,__LINE__)
|
|
236
|
+
@fig.parm_set('DCL::udlset("LMSG", false )', __FILE__,__LINE__)
|
|
237
|
+
@fig.parm_set('DCL::uglset("LMSG", false )', __FILE__,__LINE__)
|
|
238
|
+
@fig.parm_set('DCL::gllset("LMISS", true )', __FILE__,__LINE__)
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
private
|
|
242
|
+
def axis
|
|
243
|
+
@fig.figure_set('DCL::ussttl(x_title, x_unit, y_title, y_unit)', __FILE__,__LINE__)
|
|
244
|
+
@fig.figure_set('DCL::usdaxs', __FILE__,__LINE__)
|
|
245
|
+
@fig.figure_set('DCL::sglset("LCLIP", false )', __FILE__,__LINE__)
|
|
246
|
+
i=0
|
|
247
|
+
@gphys.lost_axes.each{|info|
|
|
248
|
+
@fig.figure_set("i=#{i}", __FILE__,__LINE__)
|
|
249
|
+
@fig.figure_set("DCL::sgtxzr(vxmax+0.01,vymax-0.03*i,\"#{info}\",0.02,0,-1,1)", __FILE__,__LINE__)
|
|
250
|
+
i+=1
|
|
251
|
+
}
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
private
|
|
255
|
+
def draw_1d(title)
|
|
256
|
+
@fig.figure_set('DCL::sgplzu(gphys0.coord(0).val, gphys0.val, 1, 3 )', __FILE__,__LINE__)
|
|
257
|
+
axis
|
|
258
|
+
@fig.figure_set("title = \"#{title}\"", __FILE__,__LINE__)
|
|
259
|
+
@fig.figure_set('DCL::uxsttl("t", title, 0 )', __FILE__,__LINE__)
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
private
|
|
263
|
+
def draw_2d(title,type)
|
|
264
|
+
if @transpose then
|
|
265
|
+
x = 1
|
|
266
|
+
y = 0
|
|
267
|
+
else
|
|
268
|
+
x = 0
|
|
269
|
+
y = 1
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
@fig.figure_set("DCL::uwsgxa(gphys0.coord(#{x}).val)", __FILE__,__LINE__)
|
|
273
|
+
@fig.figure_set("DCL::uwsgya(gphys0.coord(#{y}).val)", __FILE__,__LINE__)
|
|
274
|
+
@fig.figure_set('DCL::ueitlv', __FILE__,__LINE__)
|
|
275
|
+
|
|
276
|
+
if type == CONTOUR || type == MAP
|
|
277
|
+
if @tone
|
|
278
|
+
if @tone_i.nil?
|
|
279
|
+
min = @gphys.val.min
|
|
280
|
+
max = @gphys.val.max
|
|
281
|
+
dm = 0
|
|
282
|
+
else
|
|
283
|
+
min,dm = @tone_i
|
|
284
|
+
max = min+dm*(50-1)
|
|
285
|
+
end
|
|
286
|
+
if min!=max then
|
|
287
|
+
@fig.figure_set("DCL::uegtla(#{min}, #{max}, #{dm} )", __FILE__,__LINE__)
|
|
288
|
+
end
|
|
289
|
+
if @transpose
|
|
290
|
+
@fig.figure_set("DCL::#{@tone}(gphys0.val.transpose(#{x},#{y}))", __FILE__,__LINE__)
|
|
291
|
+
else
|
|
292
|
+
@fig.figure_set("DCL::#{@tone}(gphys0.val)", __FILE__,__LINE__)
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
if @cont
|
|
296
|
+
if @cont_i.nil?
|
|
297
|
+
min = @gphys.val.min
|
|
298
|
+
max = @gphys.val.max
|
|
299
|
+
dm = 0
|
|
300
|
+
else
|
|
301
|
+
min,dm = @cont_i
|
|
302
|
+
max = min+dm*(50-1)
|
|
303
|
+
end
|
|
304
|
+
if min!=max then
|
|
305
|
+
@fig.figure_set("DCL::udgcla(#{min}, #{max}, #{dm} )", __FILE__,__LINE__)
|
|
306
|
+
end
|
|
307
|
+
end
|
|
308
|
+
if @transpose
|
|
309
|
+
@fig.figure_set("DCL::udcntz(gphys0.val.transpose(#{x},#{y}))", __FILE__,__LINE__)
|
|
310
|
+
else
|
|
311
|
+
@fig.figure_set("DCL::udcntz(gphys0.val)", __FILE__,__LINE__)
|
|
312
|
+
end
|
|
313
|
+
elsif type == VECTOR
|
|
314
|
+
if @vector
|
|
315
|
+
@fig.figure_set("DCL::uglset('lnrmal', false)", __FILE__,__LINE__)
|
|
316
|
+
@fig.figure_set("DCL::ugrset('xfact1', #{@vector[0]})", __FILE__,__LINE__)
|
|
317
|
+
@fig.figure_set("DCL::ugrset('yfact1', #{@vector[1]})", __FILE__,__LINE__)
|
|
318
|
+
end
|
|
319
|
+
if @transpose
|
|
320
|
+
@fig.figure_set("DCL::ugvect(gphys0.val.transpose(#{x},#{y}), gphys1.val.transpose(#{x},#{y}))", __FILE__,__LINE__)
|
|
321
|
+
else
|
|
322
|
+
@fig.figure_set("DCL::ugvect(gphys0.val, gphys1.val)", __FILE__,__LINE__)
|
|
323
|
+
end
|
|
324
|
+
end
|
|
325
|
+
if type==CONTOUR || type==VECTOR then
|
|
326
|
+
axis
|
|
327
|
+
@fig.figure_set('DCL::uzrset("ROFFXT", 0.06)', __FILE__,__LINE__)
|
|
328
|
+
@fig.figure_set("title = \"#{title}\"", __FILE__,__LINE__)
|
|
329
|
+
@fig.figure_set('DCL::uxsttl("t", title, 0 )', __FILE__,__LINE__)
|
|
330
|
+
elsif type==MAP then
|
|
331
|
+
@fig.figure_set("DCL::umpglb", __FILE__,__LINE__)
|
|
332
|
+
if @map_draw
|
|
333
|
+
@fig.figure_set('DCL::umpmap("coast_world")', __FILE__,__LINE__)
|
|
334
|
+
end
|
|
335
|
+
@fig.figure_set('DCL::sglset("LCLIP", false )', __FILE__,__LINE__)
|
|
336
|
+
@fig.figure_set("title = \"#{title}\"", __FILE__,__LINE__)
|
|
337
|
+
@fig.figure_set("DCL::sgtxzv((vxmax+vxmin)/2,vymax+0.02,title,0.02,0.0,0,2)", __FILE__,__LINE__)
|
|
338
|
+
@fig.figure_set('DCL::sglset("LCLIP", true )', __FILE__,__LINE__)
|
|
339
|
+
end
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
private
|
|
343
|
+
def draw(drawing_area)
|
|
344
|
+
@fig.window_set(@xmin,@xmax,@ymin,@ymax, __FILE__,__LINE__)
|
|
345
|
+
@fig.viewport_set(@vxmin,@vxmax,@vymin,@vymax, __FILE__,__LINE__)
|
|
346
|
+
@fig.frame_clear
|
|
347
|
+
@fig.figure_clear
|
|
348
|
+
if @type == MAP then
|
|
349
|
+
itr = @maptype
|
|
350
|
+
lon,lat,rot = @map_pole
|
|
351
|
+
@fig.frame_set("DCL::grfrm", __FILE__,__LINE__)
|
|
352
|
+
@fig.frame_set("DCL::grsvpt(vxmin,vxmax,vymin,vymax)", __FILE__,__LINE__)
|
|
353
|
+
@fig.frame_set("DCL::grswnd(xmin,xmax,ymin,ymax)", __FILE__,__LINE__)
|
|
354
|
+
@fig.frame_set("DCL::grsmpl(#{lon},#{lat},#{rot})", __FILE__,__LINE__)
|
|
355
|
+
@fig.frame_set("DCL::grstrn(#{itr})", __FILE__,__LINE__)
|
|
356
|
+
@fig.frame_set("DCL::umpfit", __FILE__,__LINE__)
|
|
357
|
+
@fig.frame_set("DCL::grstrf", __FILE__,__LINE__)
|
|
358
|
+
else
|
|
359
|
+
itr = 1
|
|
360
|
+
itr += 2 if @logx; itr += 1 if @logy
|
|
361
|
+
@fig.frame_set("DCL::grfrm", __FILE__,__LINE__)
|
|
362
|
+
@fig.frame_set("DCL::grswnd(xmin,xmax,ymin,ymax)", __FILE__,__LINE__)
|
|
363
|
+
@fig.frame_set("DCL::grsvpt(vxmin,vxmax,vymin,vymax)", __FILE__,__LINE__)
|
|
364
|
+
@fig.frame_set("DCL::grstrn(#{itr})", __FILE__,__LINE__)
|
|
365
|
+
@fig.frame_set("DCL::grstrf", __FILE__,__LINE__)
|
|
366
|
+
end
|
|
367
|
+
@fig.figure_set('DCL::sglset("LCLIP", true )', __FILE__,__LINE__)
|
|
368
|
+
if @type == LINE then
|
|
369
|
+
draw_1d(@title)
|
|
370
|
+
elsif @type==CONTOUR || @type==MAP || @type==VECTOR then
|
|
371
|
+
draw_2d(@title,@type)
|
|
372
|
+
end
|
|
373
|
+
DCL::zgsdrw(drawing_area)
|
|
374
|
+
DCL::zgspmp(@pixmap)
|
|
375
|
+
reset
|
|
376
|
+
gphys0 = @gphys
|
|
377
|
+
gphys1 = @gphys2 if @type==VECTOR
|
|
378
|
+
codes = @fig.draw_eval
|
|
379
|
+
for j in 0...codes.length
|
|
380
|
+
eval *codes[j]
|
|
381
|
+
end
|
|
382
|
+
expose_event(drawing_area)
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
private
|
|
386
|
+
def reset
|
|
387
|
+
wsxmn,wsxmx,wsymn,wsymx,fact = DCL::swqrct
|
|
388
|
+
DCL::stswrc(wsxmn,wsxmx,wsymn,wsymx)
|
|
389
|
+
DCL::slinit(wsxmx-wsxmn,wsymx-wsymn,fact)
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
def expose_event(widget,event=nil)
|
|
393
|
+
if ! @pixmap.nil?
|
|
394
|
+
gc = widget.style.fg_gc(widget.state)
|
|
395
|
+
if event.nil?
|
|
396
|
+
size = widget.window.size
|
|
397
|
+
x0, y0 = [0, 0]
|
|
398
|
+
width, height = size
|
|
399
|
+
else
|
|
400
|
+
area = event.area
|
|
401
|
+
x0, y0 = [area.x, area.y]
|
|
402
|
+
width, height = [area.width, area.height]
|
|
403
|
+
end
|
|
404
|
+
widget.window.draw_drawable(gc, @pixmap, x0, y0, x0, y0, width, height)
|
|
405
|
+
end
|
|
406
|
+
false
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
private
|
|
410
|
+
def configure_event(widget)
|
|
411
|
+
size = widget.window.size
|
|
412
|
+
if (size[0]>0 && size[1]>0) then
|
|
413
|
+
@pixmap = Gdk::Pixmap.new(widget.window, size[0], size[1], -1)
|
|
414
|
+
@pixmap.draw_rectangle(widget.style.white_gc, true, 0, 0, size[0], size[1])
|
|
415
|
+
end
|
|
416
|
+
DCL::zgsdrw(widget)
|
|
417
|
+
DCL::zgspmp(@pixmap)
|
|
418
|
+
if !@opened then
|
|
419
|
+
DCL::sgopn(4)
|
|
420
|
+
@opened = true
|
|
421
|
+
else
|
|
422
|
+
reset
|
|
423
|
+
end
|
|
424
|
+
draw(widget)
|
|
425
|
+
true
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
private
|
|
429
|
+
class Fig
|
|
430
|
+
attr_reader :head, :var, :open, :close
|
|
431
|
+
def initialize
|
|
432
|
+
@head = ""
|
|
433
|
+
@var = ""
|
|
434
|
+
@open = ""
|
|
435
|
+
@window = Array.new
|
|
436
|
+
@viewport = Array.new
|
|
437
|
+
@title = Array.new
|
|
438
|
+
@parm = Array.new
|
|
439
|
+
@frame = Array.new
|
|
440
|
+
@figure = Array.new
|
|
441
|
+
@close = ""
|
|
442
|
+
if GAVE_GTK_VERSION == 1
|
|
443
|
+
@head = "require \"gtk\""
|
|
444
|
+
elsif GAVE_GTK_VERSION == 2
|
|
445
|
+
@head = "require \"gtk2\""
|
|
446
|
+
end
|
|
447
|
+
@head = <<"END"
|
|
448
|
+
require "numru/gphys"
|
|
449
|
+
require "numru/dcl"
|
|
450
|
+
|
|
451
|
+
include NumRu
|
|
452
|
+
END
|
|
453
|
+
@open = "DCL::gropn(1)"
|
|
454
|
+
ymin=@ymin; ymax=@ymax
|
|
455
|
+
vxmin=@vxmin; vxmax=@vxmax
|
|
456
|
+
vymin=@vymin; vymax=@vymax
|
|
457
|
+
@window[0] = "xmin = axisx[0]"
|
|
458
|
+
@window[1] = "xmax = axisx[-1]"
|
|
459
|
+
@window[2] = "ymin = 0.0"
|
|
460
|
+
@window[3] = "ymax = 1.0"
|
|
461
|
+
@viewport[0] = "vxmin = 0.2"
|
|
462
|
+
@viewport[1] = "vxmax = 0.8"
|
|
463
|
+
@viewport[2] = "vymin = 0.2"
|
|
464
|
+
@viewport[3] = "vymax = 0.8"
|
|
465
|
+
@title[0] = 'x_title = ""'
|
|
466
|
+
@title[1] = 'x_unit = ""'
|
|
467
|
+
@title[2] = 'y_title = ""'
|
|
468
|
+
@title[3] = 'y_unit = ""'
|
|
469
|
+
@close = "DCL::grcls"
|
|
470
|
+
end
|
|
471
|
+
def var_set(funcs,mapping,n)
|
|
472
|
+
@var = "" if n==0
|
|
473
|
+
filename, filetype, varname = funcs[0]
|
|
474
|
+
if filename.length==1
|
|
475
|
+
@var += "filename = \"#{filename[0]}\"\n"
|
|
476
|
+
else
|
|
477
|
+
@var += "filename = [\"#{filename.join('", "')}\"]\n"
|
|
478
|
+
end
|
|
479
|
+
@var += "varname = \"#{varname}\"\n"
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
if filetype.nil?
|
|
483
|
+
@var += "gphys#{n} = GPhys::IO.open(filename,varname)\n"
|
|
484
|
+
elsif filetype=="druby"
|
|
485
|
+
@var += "require \"drb/drb\"\n"
|
|
486
|
+
@var += "DRb.start_service\n"
|
|
487
|
+
@var += "class NArray\n"
|
|
488
|
+
@var += " def self._load(o) to_na(*Marshal::load(o)).ntoh end\n"
|
|
489
|
+
@var += "end\n"
|
|
490
|
+
@var += "ary = filename.split('/')\n"
|
|
491
|
+
@var += "host = 'druby://'+ary[2]\n"
|
|
492
|
+
@var += "path = ary[3..-1].join('/')\n"
|
|
493
|
+
@var += "tree = DRbObject.new(nil,host)\n"
|
|
494
|
+
@var += "gphys#{n} = tree.data(path)\n"
|
|
495
|
+
else
|
|
496
|
+
raise "filetype is invalid"
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
if funcs.length!=0
|
|
500
|
+
funcs[1..-1].each{|func|
|
|
501
|
+
@var += "gphys#{n} = gphys#{n}.cut(#{func[2].join(",")})\n"
|
|
502
|
+
@var += "gphys#{n} = gphys#{n}.#{func[0]}(#{func[1]})\n"
|
|
503
|
+
}
|
|
504
|
+
end
|
|
505
|
+
str = mapping.collect{|a|
|
|
506
|
+
if NArray===a
|
|
507
|
+
"NArray[#{a.to_a.join(",")}]"
|
|
508
|
+
else
|
|
509
|
+
a
|
|
510
|
+
end
|
|
511
|
+
}.join(",")
|
|
512
|
+
@var += "gphys#{n} = gphys#{n}[#{str}]\n"
|
|
513
|
+
end
|
|
514
|
+
def window_set(xmin,xmax,ymin,ymax, file,line)
|
|
515
|
+
@window[0] = "xmin = #{xmin}"
|
|
516
|
+
@window[1] = "xmax = #{xmax}"
|
|
517
|
+
@window[2] = "ymin = #{ymin}"
|
|
518
|
+
@window[3] = "ymax = #{ymax}"
|
|
519
|
+
@w_context = [file,line]
|
|
520
|
+
end
|
|
521
|
+
def viewport_set(vxmin,vxmax,vymin,vymax, file,line)
|
|
522
|
+
@viewport[0] = "vxmin = #{vxmin}"
|
|
523
|
+
@viewport[1] = "vxmax = #{vxmax}"
|
|
524
|
+
@viewport[2] = "vymin = #{vymin}"
|
|
525
|
+
@viewport[3] = "vymax = #{vymax}"
|
|
526
|
+
@v_context = [file,line]
|
|
527
|
+
end
|
|
528
|
+
def title_set(xt,xu,yt,yu, file,line)
|
|
529
|
+
@title[0] = "x_title = \"#{xt}\""
|
|
530
|
+
@title[1] = "x_unit = \"#{xu}\""
|
|
531
|
+
@title[2] = "y_title = \"#{yt}\""
|
|
532
|
+
@title[3] = "y_unit = \"#{yu}\""
|
|
533
|
+
@t_context = [file,line]
|
|
534
|
+
end
|
|
535
|
+
def parm_clear
|
|
536
|
+
@parm.clear
|
|
537
|
+
end
|
|
538
|
+
def parm_set(str,file,line)
|
|
539
|
+
@parm.push([str,file,line])
|
|
540
|
+
end
|
|
541
|
+
def frame_clear
|
|
542
|
+
@frame.clear
|
|
543
|
+
end
|
|
544
|
+
def frame_set(str,file,line)
|
|
545
|
+
@frame.push([str,file,line])
|
|
546
|
+
end
|
|
547
|
+
def figure_clear
|
|
548
|
+
@figure.clear
|
|
549
|
+
end
|
|
550
|
+
def figure_set(str,file,line)
|
|
551
|
+
@figure.push([str,file,line])
|
|
552
|
+
end
|
|
553
|
+
def draw_parm
|
|
554
|
+
end
|
|
555
|
+
def draw
|
|
556
|
+
[@window, @viewport, @title].collect{|a|
|
|
557
|
+
a.join("\n")
|
|
558
|
+
}.join("\n\n")+"\n\n"+
|
|
559
|
+
[@parm, @frame, @figure].collect{|a|
|
|
560
|
+
a.collect{|c| c[0]}.join("\n")
|
|
561
|
+
}.join("\n\n")
|
|
562
|
+
end
|
|
563
|
+
def draw_eval
|
|
564
|
+
codes = Array.new
|
|
565
|
+
@window.each{|c| codes.push [c, nil, *@w_context]}
|
|
566
|
+
@viewport.each{|c| codes.push [c, nil, *@v_context]}
|
|
567
|
+
@title.each{|c| codes.push [c, nil, *@t_context]}
|
|
568
|
+
[@parm, @frame, @figure].each{|a|
|
|
569
|
+
a.each{|c| codes.push [c[0], nil, c[1], c[2]]}
|
|
570
|
+
}
|
|
571
|
+
codes
|
|
572
|
+
end
|
|
573
|
+
end
|
|
574
|
+
end
|