ctioga2 0.6.1 → 0.7
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 +12 -0
- data/lib/ctioga2/commands/commands.rb +2 -1
- data/lib/ctioga2/commands/doc/help.rb +17 -7
- data/lib/ctioga2/commands/general-types.rb +8 -1
- data/lib/ctioga2/commands/interpreter.rb +3 -2
- data/lib/ctioga2/data/backends/backends/text.rb +13 -3
- data/lib/ctioga2/data/stack.rb +17 -2
- data/lib/ctioga2/graphics/elements/containers.rb +2 -1
- data/lib/ctioga2/graphics/elements/curve2d.rb +13 -19
- data/lib/ctioga2/graphics/elements/element.rb +51 -16
- data/lib/ctioga2/graphics/elements/parametric2d.rb +25 -31
- data/lib/ctioga2/graphics/elements/primitive.rb +20 -2
- data/lib/ctioga2/graphics/elements/subplot.rb +47 -9
- data/lib/ctioga2/graphics/elements/xyz-contour.rb +1 -10
- data/lib/ctioga2/graphics/elements/xyz-map.rb +2 -19
- data/lib/ctioga2/graphics/generator.rb +21 -4
- data/lib/ctioga2/graphics/styles/box.rb +63 -2
- data/lib/ctioga2/graphics/styles/colormap.rb +2 -2
- data/lib/ctioga2/graphics/styles/curve.rb +17 -1
- data/lib/ctioga2/graphics/styles/factory.rb +9 -2
- data/lib/ctioga2/graphics/styles/plot-types.rb +123 -0
- data/lib/ctioga2/graphics/styles/plot.rb +22 -4
- data/lib/ctioga2/graphics/types.rb +4 -2
- data/lib/ctioga2/log.rb +5 -2
- data/lib/ctioga2/metabuilder/type.rb +33 -9
- data/lib/ctioga2/plotmaker.rb +8 -2
- data/lib/ctioga2/postprocess.rb +39 -8
- data/lib/ctioga2/utils.rb +93 -3
- metadata +3 -2
@@ -22,7 +22,7 @@ require 'shellwords'
|
|
22
22
|
# This module contains all the classes used by ctioga
|
23
23
|
module CTioga2
|
24
24
|
|
25
|
-
Version::register_svn_info('$Revision:
|
25
|
+
Version::register_svn_info('$Revision: 531 $', '$Date: 2013-09-29 00:07:44 +0200 (Sun, 29 Sep 2013) $')
|
26
26
|
|
27
27
|
module Graphics
|
28
28
|
|
@@ -83,6 +83,22 @@ module CTioga2
|
|
83
83
|
@options = options
|
84
84
|
end
|
85
85
|
|
86
|
+
undef :clipped, :clipped=
|
87
|
+
|
88
|
+
def clipped
|
89
|
+
if @options.key? 'clipped'
|
90
|
+
return @options['clipped']
|
91
|
+
else
|
92
|
+
return true # Defaults to clipped
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
undef :depth, :depth=
|
97
|
+
|
98
|
+
def depth
|
99
|
+
@options['depth'] || 50
|
100
|
+
end
|
101
|
+
|
86
102
|
@known_primitives = {}
|
87
103
|
|
88
104
|
PrimitiveCommands = {}
|
@@ -111,7 +127,9 @@ module CTioga2
|
|
111
127
|
CmdArg.new(v)
|
112
128
|
end
|
113
129
|
end
|
114
|
-
|
130
|
+
|
131
|
+
cmd_opts['clipped'] = CmdArg.new('boolean')
|
132
|
+
cmd_opts['depth'] = CmdArg.new('integer')
|
115
133
|
cmd = Cmd.new("draw-#{name}",nil,"--draw-#{name}",
|
116
134
|
cmd_args, cmd_opts) do |plotmaker, *rest|
|
117
135
|
options = rest.pop
|
@@ -16,7 +16,7 @@ require 'ctioga2/log'
|
|
16
16
|
|
17
17
|
module CTioga2
|
18
18
|
|
19
|
-
Version::register_svn_info('$Revision:
|
19
|
+
Version::register_svn_info('$Revision: 540 $', '$Date: 2013-10-04 00:05:23 +0200 (Fri, 04 Oct 2013) $')
|
20
20
|
|
21
21
|
module Graphics
|
22
22
|
|
@@ -132,6 +132,24 @@ module CTioga2
|
|
132
132
|
end
|
133
133
|
|
134
134
|
|
135
|
+
def clip_and_plot(t, elements)
|
136
|
+
clusters = Utils::cluster_by_value(elements, :clipped)
|
137
|
+
|
138
|
+
for clst in clusters
|
139
|
+
t.context do
|
140
|
+
if clst[0].clipped
|
141
|
+
t.clip_to_frame
|
142
|
+
end
|
143
|
+
for element in clst
|
144
|
+
t.context do
|
145
|
+
t.set_bounds(get_el_boundaries(element).to_a)
|
146
|
+
element.do(t)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
135
153
|
|
136
154
|
# Plots all the objects inside the plot.
|
137
155
|
def real_do(t)
|
@@ -151,24 +169,44 @@ module CTioga2
|
|
151
169
|
# Manually creating the plot:
|
152
170
|
t.set_bounds(real_boundaries.to_a)
|
153
171
|
|
172
|
+
# First, gather up all elements by depth
|
173
|
+
|
174
|
+
els_by_depth = Utils::sort_by_value(@elements, :depth)
|
175
|
+
|
176
|
+
background = []
|
177
|
+
mid = []
|
178
|
+
fore = []
|
179
|
+
|
180
|
+
# Organize by depth
|
181
|
+
for depth in els_by_depth.keys.sort.reverse
|
182
|
+
v = els_by_depth[depth]
|
183
|
+
if depth && (depth >= 90)
|
184
|
+
background += v
|
185
|
+
elsif depth && depth <= 10
|
186
|
+
fore += v
|
187
|
+
else
|
188
|
+
mid += v
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
154
192
|
# Drawing the background elements:
|
193
|
+
|
194
|
+
clip_and_plot(t, background)
|
195
|
+
|
155
196
|
t.context do
|
156
197
|
t.clip_to_frame
|
157
198
|
|
158
199
|
@style.background.draw_background(t)
|
159
200
|
|
160
201
|
@style.draw_all_background_lines(t)
|
161
|
-
i = 0
|
162
|
-
for element in @elements
|
163
|
-
t.context do
|
164
|
-
t.set_bounds(get_el_boundaries(element).to_a)
|
165
|
-
element.do(t)
|
166
|
-
end
|
167
|
-
i += 1
|
168
|
-
end
|
169
202
|
end
|
203
|
+
|
204
|
+
clip_and_plot(t, mid)
|
205
|
+
|
170
206
|
@style.draw_all_axes(t, @computed_boundaries)
|
171
207
|
|
208
|
+
clip_and_plot(t, fore)
|
209
|
+
|
172
210
|
# Now drawing legends:
|
173
211
|
if @legend_area
|
174
212
|
a, b = @legend_area.partition_frame(t, self)
|
@@ -26,14 +26,11 @@ module CTioga2
|
|
26
26
|
module Elements
|
27
27
|
|
28
28
|
# This class displays a XYZ element using contour lines.
|
29
|
-
class XYZContour <
|
29
|
+
class XYZContour < PlotBasedElement
|
30
30
|
|
31
31
|
include Log
|
32
32
|
include Dobjects
|
33
33
|
|
34
|
-
# The Data::Dataset object that should get plotted.
|
35
|
-
attr_accessor :dataset
|
36
|
-
|
37
34
|
# A Styles::CurveStyle object saying how the curve should be
|
38
35
|
# drawn.
|
39
36
|
#
|
@@ -44,7 +41,6 @@ module CTioga2
|
|
44
41
|
attr_accessor :table
|
45
42
|
|
46
43
|
|
47
|
-
undef :location=, :location
|
48
44
|
|
49
45
|
# Creates a new XYZContour object with the given _dataset_ and
|
50
46
|
# _style_.
|
@@ -63,11 +59,6 @@ module CTioga2
|
|
63
59
|
|
64
60
|
protected :prepare_data
|
65
61
|
|
66
|
-
# Returns the LocationStyle object of the curve. Returns the
|
67
|
-
# one from #curve_style.
|
68
|
-
def location
|
69
|
-
return @curve_style.location
|
70
|
-
end
|
71
62
|
|
72
63
|
# Returns the Types::Boundaries of this curve.
|
73
64
|
def get_boundaries
|
@@ -19,7 +19,7 @@ require 'Dobjects/Function'
|
|
19
19
|
|
20
20
|
module CTioga2
|
21
21
|
|
22
|
-
Version::register_svn_info('$Revision:
|
22
|
+
Version::register_svn_info('$Revision: 535 $', '$Date: 2013-10-02 20:31:21 +0200 (Wed, 02 Oct 2013) $')
|
23
23
|
|
24
24
|
module Graphics
|
25
25
|
|
@@ -30,26 +30,15 @@ module CTioga2
|
|
30
30
|
#
|
31
31
|
# @todo There should be a way to automatically display level
|
32
32
|
# lines, and possibly only that.
|
33
|
-
class XYZMap <
|
33
|
+
class XYZMap < PlotBasedElement
|
34
34
|
|
35
35
|
include Log
|
36
36
|
include Dobjects
|
37
37
|
|
38
|
-
# The Data::Dataset object that should get plotted.
|
39
|
-
attr_accessor :dataset
|
40
|
-
|
41
|
-
# A Styles::CurveStyle object saying how the curve should be
|
42
|
-
# drawn.
|
43
|
-
#
|
44
|
-
# Some of the elements will be overridden.
|
45
|
-
attr_accessor :curve_style
|
46
|
-
|
47
38
|
# The IndexedTable object representing the underlying data
|
48
39
|
attr_accessor :table
|
49
40
|
|
50
41
|
|
51
|
-
undef :location=, :location
|
52
|
-
|
53
42
|
# Creates a new XYZMap object with the given _dataset_ and
|
54
43
|
# _style_.
|
55
44
|
def initialize(dataset, style = nil)
|
@@ -65,12 +54,6 @@ module CTioga2
|
|
65
54
|
|
66
55
|
protected :prepare_data
|
67
56
|
|
68
|
-
# Returns the LocationStyle object of the curve. Returns the
|
69
|
-
# one from #curve_style.
|
70
|
-
def location
|
71
|
-
return @curve_style.location
|
72
|
-
end
|
73
|
-
|
74
57
|
# Returns the Types::Boundaries of this curve.
|
75
58
|
def get_boundaries
|
76
59
|
return @table.xy_boundaries
|
@@ -16,9 +16,12 @@ require 'ctioga2/log'
|
|
16
16
|
|
17
17
|
require 'ctioga2/graphics/coordinates'
|
18
18
|
|
19
|
+
require 'ctioga2/graphics/styles/base'
|
20
|
+
require 'ctioga2/graphics/styles/plot-types'
|
21
|
+
|
19
22
|
module CTioga2
|
20
23
|
|
21
|
-
Version::register_svn_info('$Revision:
|
24
|
+
Version::register_svn_info('$Revision: 513 $', '$Date: 2013-09-19 00:43:28 +0200 (Thu, 19 Sep 2013) $')
|
22
25
|
|
23
26
|
module Graphics
|
24
27
|
|
@@ -41,11 +44,22 @@ module CTioga2
|
|
41
44
|
# The current kind of generated. It is a symbol
|
42
45
|
attr_accessor :current_curves
|
43
46
|
|
47
|
+
# Information used for the various curve types. They are not
|
48
|
+
# strictly speaking curve styles or would simply clutter the
|
49
|
+
# overall curve styles with many meaningless
|
50
|
+
# parameters/options. They therefore belong here.
|
51
|
+
|
52
|
+
# A ParametricPlotStyle object handling the style of the
|
53
|
+
# parametric plots.
|
54
|
+
attr_accessor :xy_parametric_parameters
|
55
|
+
|
44
56
|
# Creates a CurveGenerator object.
|
45
57
|
def initialize
|
46
58
|
@legend_provider = Legends::LegendProvider.new
|
47
59
|
@style_factory = Styles::CurveStyleFactory.new
|
48
60
|
@current_curves = :xy_plot
|
61
|
+
|
62
|
+
@xy_parametric_parameters = Styles::ParametricPlotStyle.new
|
49
63
|
end
|
50
64
|
|
51
65
|
PlotOptions = {
|
@@ -105,8 +119,8 @@ module CTioga2
|
|
105
119
|
style.legend ||= legend # The legend specified as option to
|
106
120
|
# the --plot command has precedence
|
107
121
|
# over the one specified by --legend.
|
108
|
-
curve = Graphics::Elements::Parametric2D.
|
109
|
-
|
122
|
+
curve = Graphics::Elements::Parametric2D.
|
123
|
+
new(dataset, style, @xy_parametric_parameters.dup)
|
110
124
|
return curve
|
111
125
|
end
|
112
126
|
|
@@ -148,8 +162,11 @@ module CTioga2
|
|
148
162
|
|
149
163
|
|
150
164
|
XYParametricPlotCommand =
|
151
|
-
Cmd.new("xy-parametric",nil,"--xy-parametric"
|
165
|
+
Cmd.new("xy-parametric",nil,"--xy-parametric",
|
166
|
+
[], Styles::ParametricPlotStyle.options_hash) do |plotmaker, opts|
|
152
167
|
plotmaker.curve_generator.current_curves = :xy_parametric
|
168
|
+
plotmaker.curve_generator.
|
169
|
+
xy_parametric_parameters.set_from_hash(opts)
|
153
170
|
end
|
154
171
|
|
155
172
|
XYParametricPlotCommand.describe('select XY parametric plots',
|
@@ -23,6 +23,18 @@ module CTioga2
|
|
23
23
|
|
24
24
|
# All the styles
|
25
25
|
module Styles
|
26
|
+
BoxShapeRE = {
|
27
|
+
/^square$/i => :square,
|
28
|
+
/^round(ed)?$/i => :round,
|
29
|
+
}
|
30
|
+
|
31
|
+
BoxShape =
|
32
|
+
CmdType.new('box-shape', {:type => :re_list,
|
33
|
+
:list => BoxShapeRE}, <<EOD)
|
34
|
+
The shape of a box. It can be:
|
35
|
+
* @square@ for a plain square box
|
36
|
+
* @round@ for a rounded box
|
37
|
+
EOD
|
26
38
|
|
27
39
|
# This class represents styles attached to a box
|
28
40
|
#
|
@@ -31,6 +43,55 @@ module CTioga2
|
|
31
43
|
|
32
44
|
sub_style 'fill', FillStyle
|
33
45
|
|
46
|
+
typed_attribute 'shape', 'box-shape'
|
47
|
+
|
48
|
+
# Radius of rounded box
|
49
|
+
typed_attribute 'radius', 'dimension'
|
50
|
+
|
51
|
+
def initialize
|
52
|
+
@shape = :square
|
53
|
+
@radius = Types::Dimension::new(:dy, 1.0)
|
54
|
+
end
|
55
|
+
|
56
|
+
def prepare_path(t, x1, y1, x2, y2)
|
57
|
+
case @shape
|
58
|
+
when :square
|
59
|
+
t.append_rect_to_path(x1, y1, x2 - x1, y2 - y1)
|
60
|
+
when :round
|
61
|
+
dx = @radius.to_figure(t, :x)
|
62
|
+
dy = @radius.to_figure(t, :y)
|
63
|
+
|
64
|
+
xl = x1
|
65
|
+
xr = x2
|
66
|
+
xl,xr = xr, xl if xl > xr
|
67
|
+
|
68
|
+
yt = y1
|
69
|
+
yb = y2
|
70
|
+
yb,yt = yt,yb if yb > yt
|
71
|
+
|
72
|
+
t.move_to_point(xl, yt - dy)
|
73
|
+
t.append_curve_to_path(xl, yt - 0.5 * dy, # First control point
|
74
|
+
xl + 0.5 * dx, yt,
|
75
|
+
xl + dx, yt)
|
76
|
+
t.append_point_to_path(xr - dx, yt)
|
77
|
+
t.append_curve_to_path(xr - 0.5 * dx, yt,
|
78
|
+
xr, yt - 0.5 * dy,
|
79
|
+
xr, yt - dy)
|
80
|
+
|
81
|
+
t.append_point_to_path(xr, yb + dy)
|
82
|
+
t.append_curve_to_path(xr, yb + 0.5 * dy, # First control point
|
83
|
+
xr - 0.5 * dx, yb,
|
84
|
+
xr - dx, yb)
|
85
|
+
t.append_point_to_path(xl + dx, yb)
|
86
|
+
t.append_curve_to_path(xl + 0.5 * dx, yb, # First control point
|
87
|
+
xl, yb + 0.5 * dy,
|
88
|
+
xl, yb + dy)
|
89
|
+
t.close_path
|
90
|
+
else
|
91
|
+
raise "Unknown box shape: #{@shape}"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
34
95
|
def draw_box(t, x1, y1, x2, y2)
|
35
96
|
t.context do
|
36
97
|
t.discard_path
|
@@ -38,12 +99,12 @@ module CTioga2
|
|
38
99
|
## @todo Rounded rects!
|
39
100
|
if fill && fill.color
|
40
101
|
fill.setup_fill(t)
|
41
|
-
t
|
102
|
+
prepare_path(t, x1, y1, x2, y2)
|
42
103
|
fill.do_fill(t)
|
43
104
|
end
|
44
105
|
if color
|
45
106
|
set_stroke_style(t)
|
46
|
-
t
|
107
|
+
prepare_path(t, x1, y1, x2, y2)
|
47
108
|
t.stroke
|
48
109
|
end
|
49
110
|
end
|
@@ -17,7 +17,7 @@ require 'ctioga2/log'
|
|
17
17
|
# This module contains all the classes used by ctioga
|
18
18
|
module CTioga2
|
19
19
|
|
20
|
-
Version::register_svn_info('$Revision:
|
20
|
+
Version::register_svn_info('$Revision: 540 $', '$Date: 2013-10-04 00:05:23 +0200 (Fri, 04 Oct 2013) $')
|
21
21
|
|
22
22
|
module Graphics
|
23
23
|
|
@@ -255,7 +255,7 @@ module CTioga2
|
|
255
255
|
if last_value + 1 < i
|
256
256
|
(last_value+1).upto(i - 1) do |j|
|
257
257
|
frac = (j - last_value)/(i - last_value + 1.0)
|
258
|
-
p [last_value, j, i, frac]
|
258
|
+
# p [last_value, j, i, frac]
|
259
259
|
z_values[j] = z_values[last_value] * frac +
|
260
260
|
z_values[i] * (1 - frac)
|
261
261
|
end
|
@@ -17,7 +17,7 @@ require 'ctioga2/log'
|
|
17
17
|
# This module contains all the classes used by ctioga
|
18
18
|
module CTioga2
|
19
19
|
|
20
|
-
Version::register_svn_info('$Revision:
|
20
|
+
Version::register_svn_info('$Revision: 531 $', '$Date: 2013-09-29 00:07:44 +0200 (Sun, 29 Sep 2013) $')
|
21
21
|
|
22
22
|
module Graphics
|
23
23
|
|
@@ -52,6 +52,12 @@ module CTioga2
|
|
52
52
|
# the filled region.
|
53
53
|
typed_attribute :region_position, "region-side"
|
54
54
|
|
55
|
+
# Wether that element is clipped or not.
|
56
|
+
typed_attribute :clipped, 'boolean'
|
57
|
+
|
58
|
+
# The depth.
|
59
|
+
typed_attribute :depth, 'integer'
|
60
|
+
|
55
61
|
# A path style.
|
56
62
|
#
|
57
63
|
# @todo Ideas for a path style include
|
@@ -79,6 +85,11 @@ module CTioga2
|
|
79
85
|
# A colormap for markers (only for XYZ data)
|
80
86
|
typed_attribute :marker_color_map, 'colormap'
|
81
87
|
|
88
|
+
# If this is specified when choosing the marker scale as a
|
89
|
+
# function of a given Z value, then the original Z segment is
|
90
|
+
# mapped to min_scale -> scale.
|
91
|
+
typed_attribute :marker_min_scale, 'float-or-false'
|
92
|
+
|
82
93
|
# Whether the XY display should split on NaN values (wherever)
|
83
94
|
typed_attribute :split_on_nan, 'boolean'
|
84
95
|
|
@@ -92,6 +103,11 @@ module CTioga2
|
|
92
103
|
# Generator#curve_from_dataset
|
93
104
|
attr_accessor :target
|
94
105
|
|
106
|
+
def initialize()
|
107
|
+
@clipped = true
|
108
|
+
@depth = 50
|
109
|
+
end
|
110
|
+
|
95
111
|
# True if a line should be drawn.
|
96
112
|
def has_line?
|
97
113
|
return @line && @line.style
|
@@ -17,7 +17,7 @@ require 'ctioga2/log'
|
|
17
17
|
# This module contains all the classes used by ctioga
|
18
18
|
module CTioga2
|
19
19
|
|
20
|
-
Version::register_svn_info('$Revision:
|
20
|
+
Version::register_svn_info('$Revision: 531 $', '$Date: 2013-09-29 00:07:44 +0200 (Sun, 29 Sep 2013) $')
|
21
21
|
|
22
22
|
module Graphics
|
23
23
|
|
@@ -246,7 +246,8 @@ module CTioga2
|
|
246
246
|
'line_style' => LineStyles::Solid,
|
247
247
|
'marker_marker' => false,
|
248
248
|
'marker_scale' => 0.5,
|
249
|
-
'fill_color' => '=color'.to_sym
|
249
|
+
'fill_color' => '=color'.to_sym,
|
250
|
+
'error_bar_color' => '=marker_color'.to_sym
|
250
251
|
}
|
251
252
|
@parameters_carrays = {}
|
252
253
|
for target, param in self.class.parameters
|
@@ -336,6 +337,8 @@ module CTioga2
|
|
336
337
|
|
337
338
|
simple_parameter 'marker_scale', "marker scale", Sets::LineWidthSets
|
338
339
|
|
340
|
+
simple_parameter 'marker_min_scale', "marker scale", nil
|
341
|
+
|
339
342
|
# Error bars:
|
340
343
|
simple_parameter 'error_bar_color', "error bar color",
|
341
344
|
Sets::ColorSets
|
@@ -353,6 +356,10 @@ module CTioga2
|
|
353
356
|
|
354
357
|
simple_parameter 'fill_color', "fill color", Sets::ColorSets
|
355
358
|
|
359
|
+
simple_parameter 'clipped', "clipped", nil
|
360
|
+
|
361
|
+
simple_parameter 'depth', "depth", nil
|
362
|
+
|
356
363
|
simple_parameter 'fill_transparency', 'fill transparency', {}
|
357
364
|
|
358
365
|
# Region handling
|