ctioga2 0.7 → 0.8
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 +8 -0
- data/lib/ctioga2/commands/arguments.rb +0 -2
- data/lib/ctioga2/commands/commands.rb +0 -2
- data/lib/ctioga2/commands/context.rb +0 -2
- data/lib/ctioga2/commands/doc/doc.rb +0 -2
- data/lib/ctioga2/commands/doc/documentation-commands.rb +0 -2
- data/lib/ctioga2/commands/doc/help.rb +0 -2
- data/lib/ctioga2/commands/doc/html.rb +0 -2
- data/lib/ctioga2/commands/doc/introspection.rb +0 -2
- data/lib/ctioga2/commands/doc/man.rb +0 -2
- data/lib/ctioga2/commands/doc/markup.rb +0 -2
- data/lib/ctioga2/commands/doc/wordwrap.rb +0 -2
- data/lib/ctioga2/commands/general-commands.rb +0 -2
- data/lib/ctioga2/commands/general-types.rb +0 -2
- data/lib/ctioga2/commands/groups.rb +0 -2
- data/lib/ctioga2/commands/interpreter.rb +0 -2
- data/lib/ctioga2/commands/parsers/command-line.rb +0 -2
- data/lib/ctioga2/commands/parsers/file.rb +0 -2
- data/lib/ctioga2/commands/parsers/old-file.rb +0 -2
- data/lib/ctioga2/commands/strings.rb +0 -2
- data/lib/ctioga2/commands/type.rb +0 -2
- data/lib/ctioga2/commands/variables.rb +0 -2
- data/lib/ctioga2/data/backends/backend.rb +0 -3
- data/lib/ctioga2/data/backends/backends/direct.rb +0 -3
- data/lib/ctioga2/data/backends/backends/gnuplot.rb +0 -3
- data/lib/ctioga2/data/backends/backends/math.rb +0 -2
- data/lib/ctioga2/data/backends/backends/text.rb +0 -3
- data/lib/ctioga2/data/backends/description.rb +0 -3
- data/lib/ctioga2/data/backends/factory.rb +18 -2
- data/lib/ctioga2/data/backends/parameter.rb +0 -2
- data/lib/ctioga2/data/datacolumn.rb +0 -2
- data/lib/ctioga2/data/dataset.rb +5 -3
- data/lib/ctioga2/data/filters.rb +0 -3
- data/lib/ctioga2/data/indexed-dtable.rb +0 -3
- data/lib/ctioga2/data/point.rb +0 -3
- data/lib/ctioga2/data/stack.rb +2 -4
- data/lib/ctioga2/graphics/coordinates.rb +0 -2
- data/lib/ctioga2/graphics/elements.rb +1 -2
- data/lib/ctioga2/graphics/elements/containers.rb +32 -2
- data/lib/ctioga2/graphics/elements/contour.rb +0 -2
- data/lib/ctioga2/graphics/elements/curve2d.rb +0 -2
- data/lib/ctioga2/graphics/elements/element.rb +4 -2
- data/lib/ctioga2/graphics/elements/gradient-region.rb +0 -2
- data/lib/ctioga2/graphics/elements/histogram.rb +298 -0
- data/lib/ctioga2/graphics/elements/parametric2d.rb +7 -3
- data/lib/ctioga2/graphics/elements/primitive.rb +0 -2
- data/lib/ctioga2/graphics/elements/redirecting-container.rb +21 -2
- data/lib/ctioga2/graphics/elements/region.rb +0 -2
- data/lib/ctioga2/graphics/elements/subplot.rb +0 -2
- data/lib/ctioga2/graphics/elements/tangent.rb +0 -2
- data/lib/ctioga2/graphics/elements/xyz-contour.rb +0 -2
- data/lib/ctioga2/graphics/elements/xyz-map.rb +0 -2
- data/lib/ctioga2/graphics/generator.rb +47 -42
- data/lib/ctioga2/graphics/legends.rb +0 -2
- data/lib/ctioga2/graphics/legends/area.rb +0 -2
- data/lib/ctioga2/graphics/legends/items.rb +0 -2
- data/lib/ctioga2/graphics/legends/multicols.rb +0 -2
- data/lib/ctioga2/graphics/legends/provider.rb +0 -2
- data/lib/ctioga2/graphics/legends/storage.rb +0 -2
- data/lib/ctioga2/graphics/root.rb +0 -2
- data/lib/ctioga2/graphics/styles/arrows.rb +0 -2
- data/lib/ctioga2/graphics/styles/axes.rb +0 -2
- data/lib/ctioga2/graphics/styles/background.rb +0 -2
- data/lib/ctioga2/graphics/styles/base.rb +4 -2
- data/lib/ctioga2/graphics/styles/box.rb +0 -2
- data/lib/ctioga2/graphics/styles/carrays.rb +0 -2
- data/lib/ctioga2/graphics/styles/colormap.rb +0 -2
- data/lib/ctioga2/graphics/styles/contour.rb +0 -2
- data/lib/ctioga2/graphics/styles/curve.rb +0 -2
- data/lib/ctioga2/graphics/styles/drawable.rb +0 -2
- data/lib/ctioga2/graphics/styles/errorbar.rb +0 -2
- data/lib/ctioga2/graphics/styles/factory.rb +0 -2
- data/lib/ctioga2/graphics/styles/gradients.rb +0 -2
- data/lib/ctioga2/graphics/styles/legend.rb +0 -2
- data/lib/ctioga2/graphics/styles/location.rb +0 -2
- data/lib/ctioga2/graphics/styles/map-axes.rb +0 -2
- data/lib/ctioga2/graphics/styles/plot-types.rb +51 -3
- data/lib/ctioga2/graphics/styles/plot.rb +0 -2
- data/lib/ctioga2/graphics/styles/sets.rb +0 -2
- data/lib/ctioga2/graphics/styles/sheet.rb +0 -2
- data/lib/ctioga2/graphics/styles/texts.rb +0 -2
- data/lib/ctioga2/graphics/styles/ticks.rb +0 -2
- data/lib/ctioga2/graphics/subplot-commands.rb +0 -2
- data/lib/ctioga2/graphics/types.rb +11 -4
- data/lib/ctioga2/graphics/types/bijection.rb +0 -2
- data/lib/ctioga2/graphics/types/boundaries.rb +0 -2
- data/lib/ctioga2/graphics/types/boxes.rb +0 -2
- data/lib/ctioga2/graphics/types/dimensions.rb +0 -2
- data/lib/ctioga2/graphics/types/fill.rb +27 -15
- data/lib/ctioga2/graphics/types/grid.rb +0 -2
- data/lib/ctioga2/graphics/types/location.rb +0 -2
- data/lib/ctioga2/graphics/types/point.rb +0 -2
- data/lib/ctioga2/log.rb +0 -2
- data/lib/ctioga2/metabuilder/type.rb +0 -2
- data/lib/ctioga2/metabuilder/types/coordinates.rb +0 -2
- data/lib/ctioga2/metabuilder/types/data.rb +0 -2
- data/lib/ctioga2/metabuilder/types/dates.rb +0 -1
- data/lib/ctioga2/metabuilder/types/generic.rb +0 -3
- data/lib/ctioga2/metabuilder/types/lists.rb +25 -3
- data/lib/ctioga2/metabuilder/types/numbers.rb +0 -2
- data/lib/ctioga2/metabuilder/types/strings.rb +0 -3
- data/lib/ctioga2/metabuilder/types/styles.rb +0 -2
- data/lib/ctioga2/plotmaker.rb +2 -4
- data/lib/ctioga2/postprocess.rb +0 -2
- data/lib/ctioga2/utils.rb +6 -64
- data/lib/ctioga2/version.rb +8 -0
- metadata +6 -4
|
@@ -20,6 +20,7 @@ require 'ctioga2/graphics/elements/subplot'
|
|
|
20
20
|
require 'ctioga2/graphics/elements/region'
|
|
21
21
|
require 'ctioga2/graphics/elements/gradient-region'
|
|
22
22
|
require 'ctioga2/graphics/elements/curve2d'
|
|
23
|
+
require 'ctioga2/graphics/elements/histogram'
|
|
23
24
|
require 'ctioga2/graphics/elements/parametric2d'
|
|
24
25
|
require 'ctioga2/graphics/elements/xyz-map'
|
|
25
26
|
require 'ctioga2/graphics/elements/xyz-contour'
|
|
@@ -30,8 +31,6 @@ require 'ctioga2/graphics/elements/contour'
|
|
|
30
31
|
|
|
31
32
|
module CTioga2
|
|
32
33
|
|
|
33
|
-
Version::register_svn_info('$Revision: 405 $', '$Date: 2013-08-22 16:25:13 +0200 (Thu, 22 Aug 2013) $')
|
|
34
|
-
|
|
35
34
|
module Graphics
|
|
36
35
|
|
|
37
36
|
# Now, various commands pertaining to various drawables
|
|
@@ -17,8 +17,6 @@ require 'ctioga2/log'
|
|
|
17
17
|
|
|
18
18
|
module CTioga2
|
|
19
19
|
|
|
20
|
-
Version::register_svn_info('$Revision: 529 $', '$Date: 2013-09-25 18:23:27 +0200 (Wed, 25 Sep 2013) $')
|
|
21
|
-
|
|
22
20
|
module Graphics
|
|
23
21
|
|
|
24
22
|
module Elements
|
|
@@ -51,6 +49,16 @@ module CTioga2
|
|
|
51
49
|
# Defaults to the #legend_storage, but it can be changed
|
|
52
50
|
attr_accessor :legend_item_target
|
|
53
51
|
|
|
52
|
+
# A general-purpose cache that objects may use.
|
|
53
|
+
#
|
|
54
|
+
# It is a hash, and its contents are reset at the beginning of
|
|
55
|
+
# each invocation of #do.
|
|
56
|
+
attr_accessor :gp_cache
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
# @todo Add an iterator over all leaf elements (including
|
|
60
|
+
# children or not ?)
|
|
61
|
+
|
|
54
62
|
# Creates an empty new Container with the given _parent_.
|
|
55
63
|
def initialize(parent = nil, root = nil)
|
|
56
64
|
super()
|
|
@@ -72,6 +80,12 @@ module CTioga2
|
|
|
72
80
|
@legend_area = nil
|
|
73
81
|
end
|
|
74
82
|
|
|
83
|
+
def do(t)
|
|
84
|
+
# reset the cache
|
|
85
|
+
@gp_cache = {}
|
|
86
|
+
super
|
|
87
|
+
end
|
|
88
|
+
|
|
75
89
|
# Returns the number of child elements
|
|
76
90
|
def size
|
|
77
91
|
return @elements.size
|
|
@@ -123,6 +137,22 @@ module CTioga2
|
|
|
123
137
|
end
|
|
124
138
|
end
|
|
125
139
|
|
|
140
|
+
def each_item(leaf_only = true, recursive = false, tl = true, &blk)
|
|
141
|
+
if (!recursive && !tl)
|
|
142
|
+
return # We're at the bottom level
|
|
143
|
+
end
|
|
144
|
+
for el in @elements
|
|
145
|
+
if el.respond_to? :each_item
|
|
146
|
+
if ! leaf_only
|
|
147
|
+
blk.call(el)
|
|
148
|
+
end
|
|
149
|
+
el.each_item(leaf_only, recursive, false, &blk)
|
|
150
|
+
else
|
|
151
|
+
blk.call(el)
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
126
156
|
# \todo provide coordinate conversion facilities...
|
|
127
157
|
|
|
128
158
|
protected
|
|
@@ -17,8 +17,6 @@ require 'ctioga2/graphics/elements/primitive'
|
|
|
17
17
|
# This module contains all the classes used by ctioga
|
|
18
18
|
module CTioga2
|
|
19
19
|
|
|
20
|
-
Version::register_svn_info('$Revision: 299 $', '$Date: 2011-03-15 11:22:20 +0100 (Tue, 15 Mar 2011) $')
|
|
21
|
-
|
|
22
20
|
module Graphics
|
|
23
21
|
|
|
24
22
|
module Elements
|
|
@@ -18,8 +18,6 @@ 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: 535 $', '$Date: 2013-10-02 20:31:21 +0200 (Wed, 02 Oct 2013) $')
|
|
22
|
-
|
|
23
21
|
# This module contains all graphical elements of CTioga2
|
|
24
22
|
module Graphics
|
|
25
23
|
|
|
@@ -38,6 +36,7 @@ module CTioga2
|
|
|
38
36
|
# LocationStyle object
|
|
39
37
|
attr_writer :location
|
|
40
38
|
|
|
39
|
+
# Whether the object is clipped by default or not.
|
|
41
40
|
attr_accessor :clipped
|
|
42
41
|
|
|
43
42
|
|
|
@@ -48,6 +47,8 @@ module CTioga2
|
|
|
48
47
|
@clipped = true
|
|
49
48
|
|
|
50
49
|
@depth = 50 # Hey, like xfig
|
|
50
|
+
|
|
51
|
+
@gp_cache = {}
|
|
51
52
|
end
|
|
52
53
|
|
|
53
54
|
def depth
|
|
@@ -66,6 +67,7 @@ module CTioga2
|
|
|
66
67
|
# redefine _do_ too if you need another debugging output.
|
|
67
68
|
def do(f)
|
|
68
69
|
debug { "plotting #{self.inspect}" }
|
|
70
|
+
@gp_cache = {}
|
|
69
71
|
real_do(f)
|
|
70
72
|
end
|
|
71
73
|
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
# histogram.rb: a histogram
|
|
2
|
+
# copyright (c) 2013 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
|
+
require 'ctioga2/utils'
|
|
15
|
+
require 'ctioga2/log'
|
|
16
|
+
require 'ctioga2/graphics/elements/curve2d'
|
|
17
|
+
|
|
18
|
+
require 'set'
|
|
19
|
+
|
|
20
|
+
require 'Dobjects/Function'
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
module CTioga2
|
|
24
|
+
|
|
25
|
+
module Graphics
|
|
26
|
+
|
|
27
|
+
module Elements
|
|
28
|
+
|
|
29
|
+
# A histogram
|
|
30
|
+
class Histogram < Curve2D
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
include Log
|
|
34
|
+
include Dobjects
|
|
35
|
+
|
|
36
|
+
# The histogram style at the moment of the creation of the
|
|
37
|
+
# object.
|
|
38
|
+
attr_accessor :histogram_style
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def initialize(dataset, style, hstyle)
|
|
42
|
+
super(dataset, style)
|
|
43
|
+
@histogram_style = hstyle
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def get_boundaries
|
|
47
|
+
ry = modified_yvalues
|
|
48
|
+
bnds = Types::Boundaries.bounds(@function.x, ry)
|
|
49
|
+
if ! @within_gb
|
|
50
|
+
base = get_base
|
|
51
|
+
|
|
52
|
+
nb = bnds.dup
|
|
53
|
+
nb.bottom = base
|
|
54
|
+
nb.top = base
|
|
55
|
+
|
|
56
|
+
# include the width ?
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
bnds.extend(nb)
|
|
60
|
+
end
|
|
61
|
+
return bnds
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
# First, a very naive way.
|
|
66
|
+
|
|
67
|
+
def make_path(t)
|
|
68
|
+
base = get_base
|
|
69
|
+
|
|
70
|
+
w, ho, yo = *get_properties(t)
|
|
71
|
+
|
|
72
|
+
org = get_cached_organization
|
|
73
|
+
h_o = org[:has_offsets][self]
|
|
74
|
+
|
|
75
|
+
for x,y in @function
|
|
76
|
+
xl = x + ho
|
|
77
|
+
xr = xl + w
|
|
78
|
+
b = yo[x]
|
|
79
|
+
t.move_to_point(xl, base+b)
|
|
80
|
+
t.append_point_to_path(xl, y+b)
|
|
81
|
+
t.append_point_to_path(xr, y+b)
|
|
82
|
+
t.append_point_to_path(xr, base+b)
|
|
83
|
+
if h_o # close !
|
|
84
|
+
t.move_to_point(xl, base+b)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# The algorithms for closing the path just look ugly for
|
|
90
|
+
# histograms that are offset from something. The reasoning
|
|
91
|
+
# does not apply here.
|
|
92
|
+
def make_closed_path(t, close_type = nil)
|
|
93
|
+
org = get_cached_organization
|
|
94
|
+
if org[:has_offsets][self]
|
|
95
|
+
make_path(t)
|
|
96
|
+
else
|
|
97
|
+
super
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
protected
|
|
102
|
+
|
|
103
|
+
def modified_yvalues
|
|
104
|
+
org = get_cached_organization
|
|
105
|
+
if org[:has_offsets][self]
|
|
106
|
+
vo = org[:y_offsets][self]
|
|
107
|
+
vc = @function.y.dup
|
|
108
|
+
vc.size.times do |i|
|
|
109
|
+
vc[i] += vo[@function.x[i]]
|
|
110
|
+
end
|
|
111
|
+
return vc
|
|
112
|
+
else
|
|
113
|
+
return @function.y
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# The cache is setup in two bits:
|
|
118
|
+
# * one fully metric-independent (i.e. that does not need the
|
|
119
|
+
# FigureMaker object)
|
|
120
|
+
# * the metric cache, holding information about widths and the
|
|
121
|
+
# likes, that builds upon the first
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
# This first cache is the organization of the whole
|
|
125
|
+
# histograms. It is independent of the metrics.
|
|
126
|
+
def get_cached_organization
|
|
127
|
+
if ! parent.gp_cache.key?(:histograms)
|
|
128
|
+
cache = {}
|
|
129
|
+
parent.gp_cache[:histograms] = cache
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
hists = []
|
|
133
|
+
|
|
134
|
+
x_values = Set.new
|
|
135
|
+
|
|
136
|
+
parent.each_item do |el|
|
|
137
|
+
if el.is_a?(Histogram)
|
|
138
|
+
hists << el
|
|
139
|
+
x_values.merge(el.function.x.to_a)
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
cache[:list] = hists
|
|
144
|
+
cache[:xvalues] = x_values
|
|
145
|
+
|
|
146
|
+
# First, we must split the histograms in columns, based on
|
|
147
|
+
# the :cumulative attribute. If positive or null, then the
|
|
148
|
+
# index is that. If false, then, the next available index.
|
|
149
|
+
# if negative, then the next available index, unless it exists
|
|
150
|
+
# the index conversion here.
|
|
151
|
+
index_cnv = {}
|
|
152
|
+
|
|
153
|
+
columns = []
|
|
154
|
+
cache[:indices] = {}
|
|
155
|
+
for h in hists
|
|
156
|
+
cm = h.histogram_style.cumulative
|
|
157
|
+
if ! cm
|
|
158
|
+
cm = columns.size
|
|
159
|
+
elsif cm < 0
|
|
160
|
+
if ! index_cnv.key?(cm)
|
|
161
|
+
index_cnv[cm] = columns.size
|
|
162
|
+
end
|
|
163
|
+
cm = index_cnv[cm]
|
|
164
|
+
end
|
|
165
|
+
columns[cm] ||= []
|
|
166
|
+
columns[cm] << h
|
|
167
|
+
cache[:indices][h] = cm
|
|
168
|
+
end
|
|
169
|
+
cache[:columns] = columns
|
|
170
|
+
|
|
171
|
+
offsets = {}
|
|
172
|
+
isoff = {}
|
|
173
|
+
for ar in columns
|
|
174
|
+
base = {}
|
|
175
|
+
for x in x_values
|
|
176
|
+
base[x] = 0.0
|
|
177
|
+
end
|
|
178
|
+
next unless ar
|
|
179
|
+
index = 0
|
|
180
|
+
for h in ar
|
|
181
|
+
offsets[h] = base.dup
|
|
182
|
+
isoff[h] = (index > 0)
|
|
183
|
+
for x,y in h.function
|
|
184
|
+
base[x] += y
|
|
185
|
+
end
|
|
186
|
+
index += 1
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
cache[:y_offsets] = offsets
|
|
190
|
+
cache[:has_offsets] = isoff
|
|
191
|
+
|
|
192
|
+
end
|
|
193
|
+
return parent.gp_cache[:histograms]
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
# Returns the cached metrics of all the histograms,
|
|
197
|
+
# recomputing it in the process.
|
|
198
|
+
def get_cached_metrics(t)
|
|
199
|
+
if ! parent.gp_cache.key?(:histogram_metrics)
|
|
200
|
+
cache = {}
|
|
201
|
+
parent.gp_cache[:histogram_metrics] = cache
|
|
202
|
+
|
|
203
|
+
org = get_cached_organization
|
|
204
|
+
cols = org[:columns]
|
|
205
|
+
x_values = org[:xvalues]
|
|
206
|
+
|
|
207
|
+
# Overall size of intra seps, in figure coordinates. Only
|
|
208
|
+
# intra sep of the first element in a column counts !
|
|
209
|
+
intra_sep = 0
|
|
210
|
+
cols[0..-2].each do |col|
|
|
211
|
+
if col && col.first.histogram_style.intra_sep
|
|
212
|
+
intra_sep += col.first.histogram_style.intra_sep.to_figure(t, :x)
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
inter_sep = if @histogram_style.gap
|
|
217
|
+
@histogram_style.gap.to_figure(t, :x)
|
|
218
|
+
elsif @histogram_style.intra_sep
|
|
219
|
+
@histogram_style.intra_sep.to_figure(t, :x)
|
|
220
|
+
else
|
|
221
|
+
0
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
# OK, now we have all the values. For now, we assume more
|
|
225
|
+
# or less that they are evenly spaced.
|
|
226
|
+
#
|
|
227
|
+
# Later, we'll have to use a conversion function for X
|
|
228
|
+
# values (which means in particular that they won't be
|
|
229
|
+
# positioned at the exact X value, but that's already the
|
|
230
|
+
# case anyway).
|
|
231
|
+
width = (x_values.max - x_values.min)/(x_values.size - 1)
|
|
232
|
+
|
|
233
|
+
# Available width
|
|
234
|
+
aw = width - intra_sep - inter_sep
|
|
235
|
+
if aw < 0
|
|
236
|
+
error { "Too much padding around the histograms leading to negative size. Try using smaller intra-sep or inter-sep. Ignoring them for now" }
|
|
237
|
+
aw = width
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
iw = aw/cols.size
|
|
241
|
+
offset = -0.5 * (width - inter_sep)
|
|
242
|
+
|
|
243
|
+
# @todo Add padding between the hists and around the
|
|
244
|
+
# groups of histograms.
|
|
245
|
+
|
|
246
|
+
for col in cols
|
|
247
|
+
c = {}
|
|
248
|
+
c[:width] = iw
|
|
249
|
+
c[:x_offset] = offset
|
|
250
|
+
offset += iw
|
|
251
|
+
next unless col
|
|
252
|
+
if col.first.histogram_style.intra_sep
|
|
253
|
+
offset += h.histogram_style.intra_sep.to_figure(t, :x)
|
|
254
|
+
end
|
|
255
|
+
for h in col
|
|
256
|
+
cache[h] = c
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
end
|
|
260
|
+
return parent.gp_cache[:histogram_metrics]
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
# Computes the horizontal offset and the width of the
|
|
264
|
+
# histogram. Relies on a cache installed onto the parent.
|
|
265
|
+
def get_properties(t)
|
|
266
|
+
metrics = get_cached_metrics(t)
|
|
267
|
+
s = metrics[self]
|
|
268
|
+
org = get_cached_organization
|
|
269
|
+
return [s[:width], s[:x_offset], org[:y_offsets][self] ]
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
def get_base
|
|
273
|
+
ct = @curve_style.fill.close_type
|
|
274
|
+
if ct
|
|
275
|
+
if ! ct.horizontal?
|
|
276
|
+
warning { "Cannot use fill types other than horizontal for histograms: #{ct.type}. Using default value" }
|
|
277
|
+
return 0
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
@within_gb = true
|
|
281
|
+
bnds = parent.get_el_boundaries(self)
|
|
282
|
+
@within_gb = false
|
|
283
|
+
|
|
284
|
+
begin
|
|
285
|
+
return ct.effective_value(bnds)
|
|
286
|
+
rescue
|
|
287
|
+
return @function.y.min # default value. Make sense ?
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
# @todo Horizontal histograms ??
|
|
292
|
+
return 0
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
end
|
|
@@ -19,8 +19,6 @@ require 'Dobjects/Function'
|
|
|
19
19
|
|
|
20
20
|
module CTioga2
|
|
21
21
|
|
|
22
|
-
Version::register_svn_info('$Revision: 535 $', '$Date: 2013-10-02 20:31:21 +0200 (Wed, 02 Oct 2013) $')
|
|
23
|
-
|
|
24
22
|
module Graphics
|
|
25
23
|
|
|
26
24
|
module Elements
|
|
@@ -122,7 +120,6 @@ module CTioga2
|
|
|
122
120
|
|
|
123
121
|
# Draws the markers, if applicable.
|
|
124
122
|
def draw_markers(t)
|
|
125
|
-
@parametric_style.prepare
|
|
126
123
|
if @curve_style.has_marker?
|
|
127
124
|
# We use a default color map for the markers
|
|
128
125
|
@curve_style.marker_color_map ||=
|
|
@@ -148,6 +145,13 @@ module CTioga2
|
|
|
148
145
|
|
|
149
146
|
# draw_fill(t)
|
|
150
147
|
# draw_errorbars(t)
|
|
148
|
+
|
|
149
|
+
@parametric_style.prepare
|
|
150
|
+
if @dataset.z_columns < @parametric_style.z_columns_needed
|
|
151
|
+
error { "Need #{@parametric_style.z_columns_needed} Z columns, but have only #{@dataset.z_columns} for dataset #{@dataset.name}" }
|
|
152
|
+
return
|
|
153
|
+
end
|
|
154
|
+
|
|
151
155
|
draw_path(t)
|
|
152
156
|
draw_markers(t)
|
|
153
157
|
|