Class: CTioga2::Graphics::Elements::Parametric2D
- Inherits:
-
PlotBasedElement
- Object
- TiogaElement
- PlotBasedElement
- CTioga2::Graphics::Elements::Parametric2D
- Includes:
- Log, Dobjects
- Defined in:
- lib/ctioga2/graphics/elements/parametric2d.rb
Overview
Find a mechanism to really say what varies. Ideally, one
This class represents a 3D (or more, to be seen later) dataset as markers with various parameters parametrized (color, transparency, marker scale, marker type (discrete), possibly stroke and fill colors ?
would want to say:
-
Y2 is marker color
-
Y3 is marker size
-
Y4 only takes discrete values and represents markers
However, this is complex enough to be left out of the curve factory, I think. Color maps can be used for colors, but for the rest, things will have to be implemented as parameters to the curve generator, or even separated commands.
Constant Summary
Constants inherited from TiogaElement
TiogaElement::StyleBaseOptions
Instance Attribute Summary collapse
-
#function ⇒ Object
For convenience only: xy functions.
-
#parametric_style ⇒ Object
A ParametricPlotStyle object handling the correspondance between Z axis and stylistic aspects.
-
#planes ⇒ Object
A hash Z value -> corresponding XY functions.
Attributes inherited from PlotBasedElement
Attributes inherited from TiogaElement
#clipped, #depth, #hidden, #location, #object_classes, #object_id, #object_parent, #parent
Instance Method Summary collapse
-
#draw_markers(t) ⇒ Object
Draws the markers, if applicable.
-
#draw_path(t) ⇒ Object
Draws the path lines, if applicable.
-
#get_boundaries ⇒ Object
Returns the Types::Boundaries of this curve.
-
#initialize(dataset, style = nil, parametric_plot_style = nil) ⇒ Parametric2D
constructor
Creates a new Curve2D object with the given dataset and style.
-
#real_do(t) ⇒ Object
Actually draws the curve.
Methods included from Log
context, counts, debug, error, fatal, #format_exception, #identify, info, init_logger, log_to, logger, set_level, #spawn, warn
Methods inherited from PlotBasedElement
Methods inherited from TiogaElement
all_styles, base_style, #check_styled, define_style, #do, find_object, find_objects, #get_style, #has_style?, inherited, #inspect, register_object, register_style, #setup_style, #style_class, style_class, style_name, #style_name, styled_classes, #update_style
Constructor Details
#initialize(dataset, style = nil, parametric_plot_style = nil) ⇒ Parametric2D
Creates a new Curve2D object with the given dataset and style.
58 59 60 61 62 63 64 |
# File 'lib/ctioga2/graphics/elements/parametric2d.rb', line 58 def initialize(dataset, style = nil, parametric_plot_style = nil) @dataset = dataset @curve_style = style @parametric_style = parametric_plot_style prepare_data end |
Instance Attribute Details
#function ⇒ Object
For convenience only: xy functions
47 48 49 |
# File 'lib/ctioga2/graphics/elements/parametric2d.rb', line 47 def function @function end |
#parametric_style ⇒ Object
A ParametricPlotStyle object handling the correspondance between Z axis and stylistic aspects
54 55 56 |
# File 'lib/ctioga2/graphics/elements/parametric2d.rb', line 54 def parametric_style @parametric_style end |
#planes ⇒ Object
A hash Z value -> corresponding XY functions.
50 51 52 |
# File 'lib/ctioga2/graphics/elements/parametric2d.rb', line 50 def planes @planes end |
Instance Method Details
#draw_markers(t) ⇒ Object
Draws the markers, if applicable.
122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/ctioga2/graphics/elements/parametric2d.rb', line 122 def draw_markers(t) if @curve_style.has_marker? # We use a default color map for the markers @curve_style.marker_color_map ||= Styles::ColorMap.from_text("Red--Green") @dataset.each_values do |i,x,y,*z| ms = @parametric_style.marker_style(@curve_style, z, @zmin, @zmax) ms.draw_markers_at(t, x, y) end end end |
#draw_path(t) ⇒ Object
Draws the path lines, if applicable.
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/ctioga2/graphics/elements/parametric2d.rb', line 98 def draw_path(t) min = @dataset.z.values.min max = @dataset.z.values.max if @curve_style.has_line? # We use a default color map for the lines @curve_style.color_map ||= Styles::ColorMap.from_text("Red--Green") cmap = @curve_style.color_map for zs in @planes.keys.sort ## \todo have the sort ## direction configurable. f = @planes[zs] color = cmap.z_color(zs, min, max) t.context do @curve_style.line.set_stroke_style(t) t.stroke_color = color t.show_polyline(f.x, f.y) end end end end |
#get_boundaries ⇒ Object
Returns the Types::Boundaries of this curve.
93 94 95 |
# File 'lib/ctioga2/graphics/elements/parametric2d.rb', line 93 def get_boundaries return Types::Boundaries.bounds(@function.x, @function.y) end |
#real_do(t) ⇒ Object
Actually draws the curve
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/ctioga2/graphics/elements/parametric2d.rb', line 137 def real_do(t) debug { "Plotting curve #{inspect}" } t.context do ## \todo allow customization of the order of drawing, ## using a simple user-specificable array of path, ## markers... and use the corresponding #draw_path or ## #draw_markers... Ideally, any string could be used, and ## warnings should be issued on missing symbols. # draw_fill(t) # draw_errorbars(t) @parametric_style.prepare if @dataset.z_columns < @parametric_style.z_columns_needed error { "Need #{@parametric_style.z_columns_needed} Z columns, but have only #{@dataset.z_columns} for dataset #{@dataset.name}" } return end draw_path(t) draw_markers(t) if @curve_style.zaxis begin @parent.style.get_axis_style(@curve_style.zaxis). set_color_map(@curve_style.marker_color_map, @dataset.z.values.min, @dataset.z.values.max) rescue error { "Could not set Z info to non-existent axis #{@curve_style.zaxis}" } end end # draw_error_bars(t) ?? end end |