ctioga2 0.0 → 0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Changelog +25 -1
- data/lib/ctioga2/commands/commands.rb +13 -2
- data/lib/ctioga2/commands/doc/doc.rb +13 -17
- data/lib/ctioga2/commands/doc/documentation-commands.rb +14 -1
- data/lib/ctioga2/commands/doc/help.rb +136 -25
- data/lib/ctioga2/commands/doc/html.rb +56 -4
- data/lib/ctioga2/commands/doc/introspection.rb +45 -9
- data/lib/ctioga2/commands/doc/man.rb +7 -5
- data/lib/ctioga2/commands/doc/markup.rb +39 -12
- data/lib/ctioga2/commands/doc/wordwrap.rb +70 -0
- data/lib/ctioga2/commands/general-commands.rb +7 -4
- data/lib/ctioga2/commands/general-types.rb +27 -12
- data/lib/ctioga2/commands/interpreter.rb +2 -2
- data/lib/ctioga2/commands/parsers/command-line.rb +9 -5
- data/lib/ctioga2/commands/parsers/file.rb +5 -3
- data/lib/ctioga2/commands/type.rb +10 -3
- data/lib/ctioga2/commands/variables.rb +2 -2
- data/lib/ctioga2/data/backends/backend.rb +17 -15
- data/lib/ctioga2/data/backends/backends.rb +2 -2
- data/lib/ctioga2/data/backends/backends/gnuplot.rb +20 -5
- data/lib/ctioga2/data/backends/backends/math.rb +2 -2
- data/lib/ctioga2/data/backends/backends/text.rb +112 -17
- data/lib/ctioga2/data/backends/description.rb +10 -11
- data/lib/ctioga2/data/datacolumn.rb +73 -14
- data/lib/ctioga2/data/dataset.rb +305 -9
- data/lib/ctioga2/data/filters.rb +49 -1
- data/lib/ctioga2/data/indexed-dtable.rb +137 -0
- data/lib/ctioga2/data/point.rb +98 -7
- data/lib/ctioga2/data/stack.rb +98 -21
- data/lib/ctioga2/graphics/coordinates.rb +19 -2
- data/lib/ctioga2/graphics/elements.rb +12 -2
- data/lib/ctioga2/graphics/elements/containers.rb +14 -2
- data/lib/ctioga2/graphics/elements/contour.rb +67 -0
- data/lib/ctioga2/graphics/elements/curve2d.rb +103 -42
- data/lib/ctioga2/graphics/elements/element.rb +12 -2
- data/lib/ctioga2/graphics/elements/gradient-region.rb +94 -0
- data/lib/ctioga2/graphics/elements/parametric2d.rb +172 -0
- data/lib/ctioga2/graphics/elements/primitive.rb +37 -21
- data/lib/ctioga2/graphics/elements/region.rb +143 -0
- data/lib/ctioga2/graphics/elements/subplot.rb +92 -32
- data/lib/ctioga2/graphics/elements/tangent.rb +99 -0
- data/lib/ctioga2/graphics/elements/xyz-map.rb +126 -0
- data/lib/ctioga2/graphics/generator.rb +91 -6
- data/lib/ctioga2/graphics/legends.rb +26 -21
- data/lib/ctioga2/graphics/legends/area.rb +8 -8
- data/lib/ctioga2/graphics/legends/items.rb +5 -5
- data/lib/ctioga2/graphics/legends/storage.rb +4 -2
- data/lib/ctioga2/graphics/root.rb +24 -2
- data/lib/ctioga2/graphics/styles.rb +8 -0
- data/lib/ctioga2/graphics/styles/axes.rb +49 -23
- data/lib/ctioga2/graphics/styles/base.rb +2 -2
- data/lib/ctioga2/graphics/styles/carrays.rb +9 -2
- data/lib/ctioga2/graphics/styles/colormap.rb +272 -0
- data/lib/ctioga2/graphics/styles/curve.rb +64 -4
- data/lib/ctioga2/graphics/styles/drawable.rb +68 -9
- data/lib/ctioga2/graphics/styles/errorbar.rb +73 -0
- data/lib/ctioga2/graphics/styles/factory.rb +133 -17
- data/lib/ctioga2/graphics/styles/gradients.rb +60 -0
- data/lib/ctioga2/graphics/styles/location.rb +64 -0
- data/lib/ctioga2/graphics/styles/map-axes.rb +164 -0
- data/lib/ctioga2/graphics/styles/plot.rb +165 -62
- data/lib/ctioga2/graphics/styles/sets.rb +14 -1
- data/lib/ctioga2/graphics/styles/texts.rb +44 -34
- data/lib/ctioga2/graphics/subplot-commands.rb +94 -6
- data/lib/ctioga2/graphics/types.rb +113 -35
- data/lib/ctioga2/graphics/types/bijection.rb +3 -3
- data/lib/ctioga2/graphics/types/boundaries.rb +120 -1
- data/lib/ctioga2/graphics/types/dimensions.rb +8 -1
- data/lib/ctioga2/graphics/types/grid.rb +196 -0
- data/lib/ctioga2/graphics/types/location.rb +228 -0
- data/lib/ctioga2/graphics/types/point.rb +2 -2
- data/lib/ctioga2/log.rb +18 -18
- data/lib/ctioga2/metabuilder/type.rb +15 -3
- data/lib/ctioga2/metabuilder/types.rb +2 -2
- data/lib/ctioga2/metabuilder/types/coordinates.rb +13 -1
- data/lib/ctioga2/metabuilder/types/data.rb +50 -0
- data/lib/ctioga2/metabuilder/types/generic.rb +60 -0
- data/lib/ctioga2/metabuilder/types/lists.rb +53 -16
- data/lib/ctioga2/metabuilder/types/styles.rb +26 -45
- data/lib/ctioga2/plotmaker.rb +91 -20
- data/lib/ctioga2/postprocess.rb +8 -8
- data/lib/ctioga2/utils.rb +23 -4
- metadata +107 -75
- data/lib/ctioga2/data/merge.rb +0 -43
@@ -17,19 +17,36 @@ require 'ctioga2/log'
|
|
17
17
|
|
18
18
|
module CTioga2
|
19
19
|
|
20
|
-
Version::register_svn_info('$Revision:
|
20
|
+
Version::register_svn_info('$Revision: 177 $', '$Date: 2010-10-25 13:22:39 +0200 (Mon, 25 Oct 2010) $')
|
21
21
|
|
22
22
|
module Graphics
|
23
23
|
|
24
24
|
# Deals with transforming the coordinates of all datasets
|
25
25
|
#
|
26
|
-
#
|
26
|
+
# \todo
|
27
27
|
# * offsets
|
28
28
|
# * scales
|
29
29
|
# * x/y log
|
30
30
|
# * non-linear transformations ?
|
31
31
|
# * the possibility to provide locations using this.
|
32
32
|
# * conversion of datasets.
|
33
|
+
#
|
34
|
+
# \todo Shouldn't this facility be axis-local ? Non-linear
|
35
|
+
# transformations definitely belong there as well (and that would
|
36
|
+
# be almost trivial to write !).
|
37
|
+
#
|
38
|
+
# @todo For now, this is a mess: these things completely mess up
|
39
|
+
# the data processing... This is a complex problem:
|
40
|
+
#
|
41
|
+
# * if the Dataset are modified in place, this is a nightmare for
|
42
|
+
# data processing
|
43
|
+
#
|
44
|
+
# * on the other hand, if they are not modified in place, this
|
45
|
+
# means that things that work on data sets and show things on
|
46
|
+
# the plot (think TangentPrimitive, for instance) will have to
|
47
|
+
# do additional things to get the target coordinates. This is
|
48
|
+
# probably the best way to go, though... This would need some
|
49
|
+
# functions to work directly on XY coordinates.
|
33
50
|
class CoordinateTransforms
|
34
51
|
|
35
52
|
# A scaling factor for coordinates:
|
@@ -16,12 +16,19 @@ require 'ctioga2/graphics/types'
|
|
16
16
|
require 'ctioga2/graphics/elements/element'
|
17
17
|
require 'ctioga2/graphics/elements/containers'
|
18
18
|
require 'ctioga2/graphics/elements/subplot'
|
19
|
+
require 'ctioga2/graphics/elements/region'
|
20
|
+
require 'ctioga2/graphics/elements/gradient-region'
|
19
21
|
require 'ctioga2/graphics/elements/curve2d'
|
22
|
+
require 'ctioga2/graphics/elements/parametric2d'
|
23
|
+
require 'ctioga2/graphics/elements/xyz-map'
|
20
24
|
require 'ctioga2/graphics/elements/primitive'
|
21
25
|
|
26
|
+
require 'ctioga2/graphics/elements/tangent'
|
27
|
+
require 'ctioga2/graphics/elements/contour'
|
28
|
+
|
22
29
|
module CTioga2
|
23
30
|
|
24
|
-
Version::register_svn_info('$Revision:
|
31
|
+
Version::register_svn_info('$Revision: 187 $', '$Date: 2010-11-07 11:02:25 +0100 (Sun, 07 Nov 2010) $')
|
25
32
|
|
26
33
|
module Graphics
|
27
34
|
|
@@ -44,13 +51,16 @@ EOH
|
|
44
51
|
|
45
52
|
|
46
53
|
# Various coordinate-related commands:
|
54
|
+
#
|
55
|
+
# @todo All these commands should be axis-dependent, and not
|
56
|
+
# plot-dependent.
|
47
57
|
CoordinateRelatedCommands = []
|
48
58
|
[:x, :y].each do |x|
|
49
59
|
cmd =
|
50
60
|
Cmd.new("#{x}range",nil,"--#{x}range",
|
51
61
|
[ CmdArg.new('partial-float-range') ]) do |plotmaker, range|
|
52
62
|
plotmaker.root_object.current_plot.
|
53
|
-
|
63
|
+
set_user_boundaries(x.to_s,range)
|
54
64
|
end
|
55
65
|
cmd.describe("Sets the #{x.to_s.upcase} range",
|
56
66
|
<<EOH, PlotCoordinatesGroup)
|
@@ -17,7 +17,7 @@ require 'ctioga2/log'
|
|
17
17
|
|
18
18
|
module CTioga2
|
19
19
|
|
20
|
-
Version::register_svn_info('$Revision:
|
20
|
+
Version::register_svn_info('$Revision: 155 $', '$Date: 2010-06-21 21:41:32 +0200 (Mon, 21 Jun 2010) $')
|
21
21
|
|
22
22
|
module Graphics
|
23
23
|
|
@@ -70,6 +70,13 @@ module CTioga2
|
|
70
70
|
return @elements.size
|
71
71
|
end
|
72
72
|
|
73
|
+
# Sometimes, the value of the subframe is _nil_ and determined
|
74
|
+
# during the plot. This function is guaranteed to return the
|
75
|
+
# correct value. It takes a reference to a FigureMaker object.
|
76
|
+
def actual_subframe(t)
|
77
|
+
return @subframe
|
78
|
+
end
|
79
|
+
|
73
80
|
# Adds an element
|
74
81
|
def add_element(element)
|
75
82
|
element.parent = self
|
@@ -83,6 +90,11 @@ module CTioga2
|
|
83
90
|
elsif element.is_a? Container
|
84
91
|
add_legend_item(element)
|
85
92
|
end
|
93
|
+
|
94
|
+
# We call LocationStyle#finalize! if possible
|
95
|
+
if(self.respond_to?(:style) and element.respond_to?(:location))
|
96
|
+
element.location.finalize!(self.style)
|
97
|
+
end
|
86
98
|
end
|
87
99
|
|
88
100
|
|
@@ -91,7 +103,7 @@ module CTioga2
|
|
91
103
|
@legend_storage.add_item(item)
|
92
104
|
end
|
93
105
|
|
94
|
-
#
|
106
|
+
# \todo provide coordinate conversion facilities...
|
95
107
|
|
96
108
|
protected
|
97
109
|
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# contour.rb: contouring code for XYZ data
|
2
|
+
# copyright (c) 2009 by Vincent Fourmond
|
3
|
+
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation; either version 2 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
|
9
|
+
# This program is distributed in the hope that it will be useful, but
|
10
|
+
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# General Public License for more details (in the COPYING file).
|
13
|
+
|
14
|
+
|
15
|
+
require 'ctioga2/graphics/elements/primitive'
|
16
|
+
|
17
|
+
# This module contains all the classes used by ctioga
|
18
|
+
module CTioga2
|
19
|
+
|
20
|
+
Version::register_svn_info('$Revision: 192 $', '$Date: 2010-11-07 18:07:01 +0100 (Sun, 07 Nov 2010) $')
|
21
|
+
|
22
|
+
module Graphics
|
23
|
+
|
24
|
+
module Elements
|
25
|
+
|
26
|
+
module Contours
|
27
|
+
|
28
|
+
ContoursOptions = {
|
29
|
+
'width' => 'float',
|
30
|
+
'color' => 'color',
|
31
|
+
'style' => 'line-style',
|
32
|
+
'closed' => 'boolean',
|
33
|
+
}
|
34
|
+
|
35
|
+
## @todo Maybe this cumbersome level/point thing along with the
|
36
|
+
# $last_curve_style calls for a context for the primitive, ie
|
37
|
+
# which was the state of the dataset/curve stack at the moment
|
38
|
+
# when the primitive was drawn ?
|
39
|
+
TiogaPrimitiveCall.
|
40
|
+
primitive("contour", "contour", [ 'level'],
|
41
|
+
ContoursOptions) do |t, level,options|
|
42
|
+
options ||= {}
|
43
|
+
# table = PlotMaker.plotmaker.data_stack.last.indexed_table
|
44
|
+
l, d = *level
|
45
|
+
table = d.indexed_table
|
46
|
+
contour = table.make_contour(l)
|
47
|
+
contour << options['closed']
|
48
|
+
|
49
|
+
## @todo This $last_curve_style isn't beautiful.
|
50
|
+
##
|
51
|
+
## Worse, it won't work !
|
52
|
+
options['color'] ||= $last_curve_style.line.color
|
53
|
+
|
54
|
+
stroke_style = Styles::StrokeStyle.from_hash(options, '%s')
|
55
|
+
|
56
|
+
|
57
|
+
t.context do
|
58
|
+
stroke_style.set_stroke_style(t)
|
59
|
+
t.append_points_with_gaps_to_path(*contour)
|
60
|
+
t.stroke
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# curve2d.rb: a 2D curve
|
2
|
-
# copyright (c) 2006, 2007, 2008, 2009 by Vincent Fourmond
|
2
|
+
# copyright (c) 2006, 2007, 2008, 2009, 2010 by Vincent Fourmond
|
3
3
|
|
4
4
|
# This program is free software; you can redistribute it and/or modify
|
5
5
|
# it under the terms of the GNU General Public License as published by
|
@@ -19,14 +19,20 @@ require 'Dobjects/Function'
|
|
19
19
|
|
20
20
|
module CTioga2
|
21
21
|
|
22
|
-
Version::register_svn_info('$Revision:
|
22
|
+
Version::register_svn_info('$Revision: 184 $', '$Date: 2010-11-07 00:44:40 +0100 (Sun, 07 Nov 2010) $')
|
23
23
|
|
24
24
|
module Graphics
|
25
25
|
|
26
26
|
module Elements
|
27
27
|
|
28
|
-
# A Curve2D object represents a 2D curve, along with its style
|
29
|
-
# on.
|
28
|
+
# A Curve2D object represents a 2D curve, along with its style
|
29
|
+
# and so on.
|
30
|
+
#
|
31
|
+
# \todo Put back various stylistic aspects that were present in
|
32
|
+
# the old ctioga, such as:
|
33
|
+
#
|
34
|
+
# * transparency
|
35
|
+
# * drawing order
|
30
36
|
class Curve2D < TiogaElement
|
31
37
|
|
32
38
|
include Log
|
@@ -36,6 +42,9 @@ module CTioga2
|
|
36
42
|
# the sake of manipulations.
|
37
43
|
attr_accessor :function
|
38
44
|
|
45
|
+
# Elements of the path, when there are more than one:
|
46
|
+
attr_accessor :path_elements
|
47
|
+
|
39
48
|
# The Data::Dataset object that should get plotted.
|
40
49
|
attr_accessor :dataset
|
41
50
|
|
@@ -43,24 +52,36 @@ module CTioga2
|
|
43
52
|
# drawn.
|
44
53
|
attr_accessor :curve_style
|
45
54
|
|
55
|
+
undef :location=, :location
|
56
|
+
|
46
57
|
# Creates a new Curve2D object with the given _dataset_ and
|
47
58
|
# _style_.
|
48
59
|
def initialize(dataset, style = nil)
|
49
60
|
@dataset = dataset
|
50
61
|
if @dataset.size > 2
|
51
|
-
warn "Columns Y2 and further were ignored for set #{dataset.name}"
|
62
|
+
warn { "Columns Y2 and further were ignored for set #{dataset.name}" }
|
52
63
|
end
|
53
64
|
# We build the function on a duplicate of the values ?
|
54
65
|
@function = Function.new(@dataset.x.values.dup,
|
55
66
|
@dataset.y.values.dup)
|
67
|
+
@curve_style = style
|
56
68
|
|
57
|
-
#
|
58
|
-
|
59
|
-
|
60
|
-
|
69
|
+
# Preparation of the subpath elements
|
70
|
+
if @curve_style.split_on_nan
|
71
|
+
# This requires Tioga r601 !
|
72
|
+
@path_elements = @function.split_on_nan(:xy)
|
73
|
+
info { "Dividing into #{@path_elements.size} subpaths" }
|
74
|
+
else
|
75
|
+
@path_elements = [@function]
|
76
|
+
end
|
61
77
|
@function.strip_nan
|
62
78
|
|
63
|
-
|
79
|
+
end
|
80
|
+
|
81
|
+
# Returns the LocationStyle object of the curve. Returns the
|
82
|
+
# one from #curve_style.
|
83
|
+
def location
|
84
|
+
return @curve_style.location
|
64
85
|
end
|
65
86
|
|
66
87
|
# Returns the Types::Boundaries of this curve.
|
@@ -74,16 +95,34 @@ module CTioga2
|
|
74
95
|
# the current path, not attempt to create a new path or empty
|
75
96
|
# what was done before.
|
76
97
|
def make_path(t)
|
77
|
-
bnds = parent.
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
98
|
+
bnds = parent.get_el_boundaries(self)
|
99
|
+
|
100
|
+
for func in @path_elements
|
101
|
+
case @curve_style.path_style
|
102
|
+
when /splines/
|
103
|
+
for f in func.split_monotonic
|
104
|
+
new_f = f.bound_values(*bnds.extrema)
|
105
|
+
t.append_interpolant_to_path(new_f.make_interpolant)
|
106
|
+
end
|
107
|
+
else
|
108
|
+
f = func.bound_values(*bnds.extrema)
|
109
|
+
t.move_to_point(f.x.first, f.y.first)
|
110
|
+
t.append_points_to_path(f.x[1..-1], f.y[1..-1])
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
|
117
|
+
# Adds a closed path to the given FigureMaker object. The path
|
118
|
+
# is closed according to the specification given as _fv_,
|
119
|
+
# which is the same as the _y0_ attribute of a CurveFillStyle.
|
120
|
+
#
|
121
|
+
# It must not be _false_
|
122
|
+
def make_closed_path(t, fv)
|
123
|
+
y0 = fill_value_to_y(fv)
|
124
|
+
make_path(t)
|
125
|
+
close_path(t, y0)
|
87
126
|
end
|
88
127
|
|
89
128
|
# Strokes the path.
|
@@ -114,39 +153,61 @@ module CTioga2
|
|
114
153
|
t.close_path
|
115
154
|
end
|
116
155
|
|
156
|
+
# Returns the AxisSyle objects for the X and Y axes as an array.
|
157
|
+
def get_axes
|
158
|
+
return [
|
159
|
+
parent.style.get_axis_style(@curve_style.xaxis),
|
160
|
+
parent.style.get_axis_style(@curve_style.yaxis)
|
161
|
+
]
|
162
|
+
end
|
163
|
+
|
117
164
|
# Draws the filled region according to the :fill_type element
|
118
165
|
# of the style pseudo-hash. It can be:
|
119
166
|
def draw_fill(t)
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
# # Then we add two line segments that go from the end to the
|
129
|
-
# # beginning.
|
130
|
-
# close_path(t, y)
|
131
|
-
|
132
|
-
# # Now the path is ready. Just strike -- or, rather, fill !
|
133
|
-
# t.fill_color = @style.fill_color
|
134
|
-
# t.fill
|
167
|
+
return unless @curve_style.fill.y0
|
168
|
+
t.context do
|
169
|
+
# Remember: first setup_fill, then draw path, then do_fill
|
170
|
+
@curve_style.fill.setup_fill(t)
|
171
|
+
make_closed_path(t,@curve_style.fill.y0)
|
172
|
+
@curve_style.fill.do_fill(t)
|
173
|
+
end
|
135
174
|
end
|
136
175
|
|
176
|
+
def draw_errorbars(t)
|
177
|
+
return unless @dataset.has_xy_errors?
|
178
|
+
@dataset.each_values(true, true) do |*vals|
|
179
|
+
@curve_style.error_bar.show_error_bar(t, *(vals[1..6]))
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
## Actually draws the curve
|
137
184
|
def real_do(t)
|
138
|
-
debug "Plotting curve #{inspect}"
|
185
|
+
debug { "Plotting curve #{inspect}" }
|
139
186
|
t.context do
|
140
|
-
|
187
|
+
## \todo allow customization of the order of drawing,
|
188
|
+
## using a simple user-specificable array of path,
|
189
|
+
## markers... and use the corresponding #draw_path or
|
190
|
+
## #draw_markers... Ideally, any string could be used, and
|
191
|
+
## warnings should be issued on missing symbols.
|
192
|
+
|
193
|
+
draw_fill(t)
|
194
|
+
draw_errorbars(t)
|
141
195
|
draw_path(t)
|
142
196
|
draw_markers(t)
|
143
|
-
|
144
|
-
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
protected
|
145
201
|
|
146
|
-
|
147
|
-
|
148
|
-
|
202
|
+
# Converts the value of a fill value into a number (or nil)
|
203
|
+
def fill_value_to_y(fv)
|
204
|
+
return nil unless fv
|
205
|
+
case fv
|
206
|
+
when :bottom,:top
|
207
|
+
bnds = parent.get_el_boundaries(self)
|
208
|
+
return bnds.send(fv)
|
149
209
|
end
|
210
|
+
return fv
|
150
211
|
end
|
151
212
|
|
152
213
|
end
|
@@ -18,7 +18,7 @@ require 'ctioga2/log'
|
|
18
18
|
# This module contains all the classes used by ctioga
|
19
19
|
module CTioga2
|
20
20
|
|
21
|
-
Version::register_svn_info('$Revision:
|
21
|
+
Version::register_svn_info('$Revision: 151 $', '$Date: 2010-06-19 23:45:20 +0200 (Sat, 19 Jun 2010) $')
|
22
22
|
|
23
23
|
# This module contains all graphical elements of CTioga2
|
24
24
|
module Graphics
|
@@ -34,12 +34,22 @@ module CTioga2
|
|
34
34
|
# The parent Container.
|
35
35
|
attr_accessor :parent
|
36
36
|
|
37
|
+
# Details pertaining to the location of the object, as a
|
38
|
+
# LocationStyle object
|
39
|
+
attr_writer :location
|
40
|
+
|
41
|
+
# Makes sure there is a location when one asks for it.
|
42
|
+
def location
|
43
|
+
@location ||= Styles::LocationStyle.new
|
44
|
+
return @location
|
45
|
+
end
|
46
|
+
|
37
47
|
# This function must be called with a FigureMaker object to
|
38
48
|
# draw the contents of the TiogaElement onto it. It calls
|
39
49
|
# #real_do, which should be redefined by the children. You can
|
40
50
|
# redefine _do_ too if you need another debugging output.
|
41
51
|
def do(f)
|
42
|
-
debug "plotting #{self.inspect}"
|
52
|
+
debug { "plotting #{self.inspect}" }
|
43
53
|
real_do(f)
|
44
54
|
end
|
45
55
|
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# region.rb: draw curves-delimited fills
|
2
|
+
# copyright (c) 2010 by Vincent Fourmond
|
3
|
+
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation; either version 2 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details (in the COPYING file).
|
13
|
+
|
14
|
+
|
15
|
+
require 'ctioga2/utils'
|
16
|
+
require 'ctioga2/log'
|
17
|
+
|
18
|
+
module CTioga2
|
19
|
+
|
20
|
+
Version::register_svn_info('$Revision: 159 $', '$Date: 2010-07-26 17:29:47 +0200 (Mon, 26 Jul 2010) $')
|
21
|
+
|
22
|
+
module Graphics
|
23
|
+
|
24
|
+
module Elements
|
25
|
+
|
26
|
+
# A GradientRegion is an object that makes color gradient for
|
27
|
+
# the curves. Especially useful for a great number of curves,
|
28
|
+
# and when one doesn't want to compute...
|
29
|
+
#
|
30
|
+
#
|
31
|
+
#
|
32
|
+
# Like Region It is a fake container in the sense that all the
|
33
|
+
# elements are actually forwarded to the parent.
|
34
|
+
class GradientRegion < Container
|
35
|
+
|
36
|
+
undef :elements
|
37
|
+
undef :subframe
|
38
|
+
|
39
|
+
# The curves which delimit the region
|
40
|
+
attr_accessor :curves
|
41
|
+
|
42
|
+
# The start and end colors
|
43
|
+
attr_accessor :start_color, :end_color
|
44
|
+
|
45
|
+
# Creates a new empty region
|
46
|
+
def initialize(parent = nil, root = nil)
|
47
|
+
@parent = parent
|
48
|
+
|
49
|
+
# The curves whose color we should change
|
50
|
+
@curves = []
|
51
|
+
|
52
|
+
@root_object = root
|
53
|
+
|
54
|
+
@legend_area = nil
|
55
|
+
|
56
|
+
@start_color = Tioga::ColorConstants::Red
|
57
|
+
@end_color = Tioga::ColorConstants::Green
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
# Adds an element. Actually forwards it to the parent.
|
62
|
+
def add_element(element)
|
63
|
+
parent.add_element(element)
|
64
|
+
if element.respond_to?(:curve_style)
|
65
|
+
@curves << element
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Sets the various things from hash.
|
70
|
+
def set_from_hash(hash)
|
71
|
+
end
|
72
|
+
|
73
|
+
# Redirects to the parent's style
|
74
|
+
def style(*a)
|
75
|
+
return parent.style(*a)
|
76
|
+
end
|
77
|
+
|
78
|
+
protected
|
79
|
+
|
80
|
+
# Simply sets the color of the curves.
|
81
|
+
def real_do(t)
|
82
|
+
nb = @curves.size
|
83
|
+
i = 0
|
84
|
+
for c in @curves
|
85
|
+
c.curve_style.line.color =
|
86
|
+
Utils::mix_objects(@end_color,@start_color, i/(nb - 1.0))
|
87
|
+
i += 1
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|