Line data Source code
1 : //# Plot.h: Plot objects to be drawn on a canvas.
2 : //# Copyright (C) 2008
3 : //# Associated Universities, Inc. Washington DC, USA.
4 : //#
5 : //# This library is free software; you can redistribute it and/or modify it
6 : //# under the terms of the GNU Library General Public License as published by
7 : //# the Free Software Foundation; either version 2 of the License, or (at your
8 : //# option) any later version.
9 : //#
10 : //# This library is distributed in the hope that it will be useful, but WITHOUT
11 : //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 : //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13 : //# License for more details.
14 : //#
15 : //# You should have received a copy of the GNU Library General Public License
16 : //# along with this library; if not, write to the Free Software Foundation,
17 : //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18 : //#
19 : //# Correspondence concerning AIPS++ should be addressed as follows:
20 : //# Internet email: aips2-request@nrao.edu.
21 : //# Postal address: AIPS++ Project Office
22 : //# National Radio Astronomy Observatory
23 : //# 520 Edgemont Road
24 : //# Charlottesville, VA 22903-2475 USA
25 : //#
26 : //# $Id: $
27 : #ifndef PLOT_H_
28 : #define PLOT_H_
29 :
30 : #include <graphics/GenericPlotter/PlotData.h>
31 : #include <graphics/GenericPlotter/PlotItem.h>
32 :
33 : #include <casacore/casa/BasicSL/String.h>
34 :
35 : namespace casa {
36 :
37 : // A Plot basically consists of data and customization information. The data
38 : // is held by the base class whereas any customization should be handled in
39 : // subclasses.
40 : class Plot : public virtual PlotItem {
41 : public:
42 : Plot() { }
43 :
44 : virtual ~Plot() { }
45 :
46 :
47 : // ABSTRACT METHODS //
48 :
49 : // Returns the data associated with this plot.
50 : virtual PlotDataPtr data() const = 0;
51 :
52 : // Should be called whenever the underlying PlotData has changed, to let
53 : // the plot and its attached canvas know that the plot needs to be redrawn.
54 : virtual void dataChanged() = 0;
55 :
56 : // It's likely that any plot subclass (scatter, bar, function, etc.) will
57 : // have lines of some sort, so it's safe to have in the base class.
58 :
59 : // Returns true if this plot has lines shown, false otherwise.
60 : virtual bool linesShown() const = 0;
61 :
62 : // Sets whether or not lines are shown. If linesShown is true, the
63 : // implementation can decide whether to choose the line style shown, or
64 : // just use the last set PlotLine.
65 : virtual void setLinesShown(bool linesShown = true) = 0;
66 :
67 : // Returns a copy of the line used for this plot. Note: if lines are not
68 : // shown, then this behavior is undefined. The last shown line can be
69 : // returned, or a line with style NOLINE, or a null pointer, or....
70 : virtual PlotLinePtr line() const = 0;
71 :
72 : // Sets the plot lines to the given line. Implies setLinesShown(true)
73 : // unless the given line's style is set to NOLINE.
74 : virtual void setLine(const PlotLine& line) = 0;
75 :
76 :
77 : // IMPLEMENTED METHODS //
78 :
79 : // Convenience methods for setting line.
80 : // <group>
81 : virtual void setLine(const PlotLinePtr line) {
82 : if(!line.null()) setLine(*line);
83 : else setLinesShown(false);
84 : }
85 : virtual void setLine(const casacore::String& color,
86 : PlotLine::Style style = PlotLine::SOLID,
87 : double width = 1.0) {
88 : PlotLinePtr l = line();
89 : l->setColor(color);
90 : l->setStyle(style);
91 : l->setWidth(width);
92 : setLine(*l);
93 : }
94 : virtual void setLineColor(const casacore::String& color) {
95 : PlotLinePtr l = line();
96 : l->setColor(color);
97 : setLine(*l);
98 : }
99 : virtual void setLineStyle(PlotLine::Style style) {
100 : PlotLinePtr l = line();
101 : l->setStyle(style);
102 : setLine(*l);
103 : }
104 : virtual void setLineWidth(double width) {
105 : PlotLinePtr l = line();
106 : l->setWidth(width);
107 : setLine(*l);
108 : }
109 : // </group>
110 : };
111 :
112 :
113 : // Scatter plot abstract class. In addition to the abstract methods in Plot, a
114 : // scatter plot subclass should also have symbol customization for the points.
115 : // A scatter plot is expected to consist of PlotPointData.
116 : class ScatterPlot : public virtual Plot {
117 : public:
118 : ScatterPlot() { }
119 :
120 : virtual ~ScatterPlot() { }
121 :
122 :
123 : // Overrides Plot::data().
124 : virtual PlotDataPtr data() const { return pointData(); }
125 :
126 : // Returns the data value at the given index. Just a thin layer over the
127 : // PlotPointData functionality.
128 : virtual ppoint_t pointAt(unsigned int i) const {
129 : PlotPointDataPtr data = pointData();
130 : if(!data.null()) return ppoint_t(data->xAt(i), data->yAt(i));
131 : else return ppoint_t(0, 0);
132 : }
133 :
134 : // Implements PlotItem::drawCount(). Provides default implementation that
135 : // returns the number of plotted points.
136 : virtual unsigned int drawCount() const { return pointData()->size(); }
137 :
138 :
139 : // ABSTRACT METHODS //
140 :
141 : // Returns the point data used for this plot.
142 : virtual PlotPointDataPtr pointData() const = 0;
143 :
144 : // Get/set to connect points in step rather than line
145 : virtual bool linesStep() const = 0;
146 : virtual void setLinesStep(bool linesStep = true) = 0;
147 :
148 : // Returns true if symbols are shown, false otherwise.
149 : virtual bool symbolsShown() const = 0;
150 :
151 : // Sets whether symbols are shown or not. If symbolsShown is true, the
152 : // implementation can decide whether to choose the symbol shown, or just
153 : // use the last set PlotSymbol.
154 : virtual void setSymbolsShown(bool symbolsShown = true) = 0;
155 :
156 : // Returns a copy of the symbol for this plot. Note: if symbols are not
157 : // shown, then this behavior is undefined. The last shown symbol can be
158 : // returned, or a symbol with style NOSYMBOL, or a null pointer, or....
159 : virtual PlotSymbolPtr symbol() const = 0;
160 :
161 : // Sets the plot symbols to the given symbol. Implies setSymbolsShown(true)
162 : // unless the symbol's style is set to NOSYMBOL.
163 : virtual void setSymbol(const PlotSymbol& symbol) = 0;
164 :
165 :
166 : // IMPLEMENTED METHODS //
167 :
168 : // Convenience methods for setting symbol.
169 : // <group>
170 : virtual void setSymbol(const PlotSymbolPtr symbol) {
171 : if(!symbol.null()) setSymbol(*symbol);
172 : else setSymbolsShown(false);
173 : }
174 : virtual void setSymbol(PlotSymbol::Symbol s) {
175 : PlotSymbolPtr sym = symbol();
176 : sym->setSymbol(s);
177 : setSymbol(*sym);
178 : }
179 : virtual void setSymbol(char s) {
180 : PlotSymbolPtr sym = symbol();
181 : sym->setSymbol(s);
182 : setSymbol(*sym);
183 : }
184 : virtual void setSymbolSize(double width, double height) {
185 : PlotSymbolPtr sym = symbol();
186 : sym->setSize(width, height);
187 : setSymbol(*sym);
188 : }
189 : virtual void setSymbolLine(const PlotLine& line) {
190 : PlotSymbolPtr sym = symbol();
191 : sym->setLine(line);
192 : setSymbol(*sym);
193 : }
194 : virtual void setSymbolLine(const PlotLinePtr line) {
195 : if(!line.null()) setSymbolLine(*line); }
196 : virtual void setSymbolLine(const casacore::String& color,
197 : PlotLine::Style style = PlotLine::SOLID, double width = 1.0) {
198 : PlotSymbolPtr sym = symbol();
199 : sym->setLine(color, style, width);
200 : setSymbol(*sym);
201 : }
202 : virtual void setSymbolAreaFill(const PlotAreaFill& fill) {
203 : PlotSymbolPtr sym = symbol();
204 : sym->setAreaFill(fill);
205 : setSymbol(*sym);
206 : }
207 : virtual void setSymbolAreaFill(const PlotAreaFillPtr fill) {
208 : if(!fill.null()) setSymbolAreaFill(*fill); }
209 : virtual void setSymbolAreaFill(const casacore::String& color,
210 : PlotAreaFill::Pattern pattern = PlotAreaFill::FILL) {
211 : PlotSymbolPtr sym = symbol();
212 : sym->setAreaFill(color, pattern);
213 : setSymbol(*sym);
214 : }
215 : // </group>
216 : };
217 :
218 :
219 : // Subclass of ScatterPlot that adds masking functionality. The ScatterPlot
220 : // customization methods (lines, symbols, etc.) are expected to apply only to
221 : // unmasked data, while additional methods are provided in MaskedScatterPlot
222 : // to customize the masked data (which is not shown by default).
223 : class MaskedScatterPlot : public virtual ScatterPlot {
224 : public:
225 : MaskedScatterPlot() { }
226 :
227 : virtual ~MaskedScatterPlot() { }
228 :
229 :
230 : // Overrides ScatterPlot::pointData().
231 : virtual PlotPointDataPtr pointData() const { return maskedData(); }
232 :
233 : // Returns whether the data at the given index is masked or not. Just a
234 : // thin layer over the PlotMaskedPointData functionality.
235 : virtual bool maskedAt(unsigned int index) const {
236 : PlotMaskedPointDataPtr data = maskedData();
237 : return !data.null() && data->maskedAt(index);
238 : }
239 :
240 :
241 : // ABSTRACT METHODS //
242 :
243 : // Returns the masked data used for this plot.
244 : virtual PlotMaskedPointDataPtr maskedData() const = 0;
245 : virtual void clearData() = 0;
246 :
247 : // Returns true if this plot has lines shown for masked points, false
248 : // otherwise.
249 : virtual bool maskedLinesShown() const = 0;
250 :
251 : // Sets whether or not lines are shown for masked points. If linesShown is
252 : // true, the implementation can decide whether to choose the line style
253 : // shown, or just use the last set PlotLine.
254 : virtual void setMaskedLinesShown(bool linesShown = true) = 0;
255 :
256 : // Returns a copy of the line used for masked points. Note: if lines are
257 : // not shown, then this behavior is undefined. The last shown line can be
258 : // returned, or a line with style NOLINE, or a null pointer, or....
259 : virtual PlotLinePtr maskedLine() const = 0;
260 :
261 : // Sets the lines for masked points to the given. Implies
262 : // setMaskedLinesShown(true) unless the given line's style is set to
263 : // NOLINE.
264 : virtual void setMaskedLine(const PlotLine& line) = 0;
265 :
266 : // Convenience methods for setting line for masked points.
267 : // <group>
268 : virtual void setMaskedLine(const PlotLinePtr line) {
269 : if(!line.null()) setMaskedLine(*line);
270 : else setMaskedLinesShown(false);
271 : }
272 : virtual void setMaskedLine(const casacore::String& color,
273 : PlotLine::Style style = PlotLine::SOLID,
274 : double width = 1.0) {
275 : PlotLinePtr l = maskedLine();
276 : l->setColor(color);
277 : l->setStyle(style);
278 : l->setWidth(width);
279 : setMaskedLine(*l);
280 : }
281 : virtual void setMaskedLineColor(const casacore::String& color) {
282 : PlotLinePtr l = maskedLine();
283 : l->setColor(color);
284 : setMaskedLine(*l);
285 : }
286 : virtual void setMaskedLineStyle(PlotLine::Style style) {
287 : PlotLinePtr l = maskedLine();
288 : l->setStyle(style);
289 : setMaskedLine(*l);
290 : }
291 : virtual void setMaskedLineWidth(double width) {
292 : PlotLinePtr l = maskedLine();
293 : l->setWidth(width);
294 : setMaskedLine(*l);
295 : }
296 : // Get/set connect masked points in step rather than line
297 : virtual bool maskedLinesStep() const = 0;
298 : virtual void setMaskedLinesStep(bool linesStep = true) = 0;
299 :
300 : // </group>
301 :
302 : // Returns true if symbols are shown for masked points, false otherwise.
303 : virtual bool maskedSymbolsShown() const = 0;
304 :
305 : // Sets whether symbols are shown or not for masked points. If
306 : // symbolsShown is true, the implementation can decide whether to choose
307 : // the symbol shown, or just use the last set PlotSymbol.
308 : virtual void setMaskedSymbolsShown(bool symbolsShown = true) = 0;
309 :
310 : // Returns a copy of the symbol for masked points. Note: if symbols are
311 : /// not shown, then this behavior is undefined. The last shown symbol can
312 : // be returned, or a symbol with style NOSYMBOL, or a null pointer, or....
313 : virtual PlotSymbolPtr maskedSymbol() const = 0;
314 :
315 : // Sets the symbols for masked points to the given. Implies
316 : // setMaskedSymbolsShown(true) unless the symbol's style is set to
317 : // NOSYMBOL.
318 : virtual void setMaskedSymbol(const PlotSymbol& symbol) = 0;
319 :
320 : // Convenience methods for setting symbol for masked points.
321 : // <group>
322 : virtual void setMaskedSymbol(const PlotSymbolPtr symbol) {
323 : if(!symbol.null()) setMaskedSymbol(*symbol);
324 : else setMaskedSymbolsShown(false);
325 : }
326 : virtual void setMaskedSymbol(PlotSymbol::Symbol s) {
327 : PlotSymbolPtr sym = maskedSymbol();
328 : sym->setSymbol(s);
329 : setMaskedSymbol(*sym);
330 : }
331 : virtual void setMaskedSymbol(char s) {
332 : PlotSymbolPtr sym = maskedSymbol();
333 : sym->setSymbol(s);
334 : setMaskedSymbol(*sym);
335 : }
336 : virtual void setMaskedSymbolSize(double width, double height) {
337 : PlotSymbolPtr sym = maskedSymbol();
338 : sym->setSize(width, height);
339 : setMaskedSymbol(*sym);
340 : }
341 : virtual void setMaskedSymbolLine(const PlotLine& line) {
342 : PlotSymbolPtr sym = maskedSymbol();
343 : sym->setLine(line);
344 : setMaskedSymbol(*sym);
345 : }
346 : virtual void setMaskedSymbolLine(const PlotLinePtr line) {
347 : if(!line.null()) setMaskedSymbolLine(*line); }
348 : virtual void setMaskedSymbolLine(const casacore::String& color,
349 : PlotLine::Style style = PlotLine::SOLID, double width = 1.0) {
350 : PlotSymbolPtr sym = maskedSymbol();
351 : sym->setLine(color, style, width);
352 : setMaskedSymbol(*sym);
353 : }
354 : virtual void setMaskedSymbolAreaFill(const PlotAreaFill& fill) {
355 : PlotSymbolPtr sym = maskedSymbol();
356 : sym->setAreaFill(fill);
357 : setMaskedSymbol(*sym);
358 : }
359 : virtual void setMaskedSymbolAreaFill(const PlotAreaFillPtr fill) {
360 : if(!fill.null()) setMaskedSymbolAreaFill(*fill); }
361 : virtual void setMaskedSymbolAreaFill(const casacore::String& color,
362 : PlotAreaFill::Pattern pattern = PlotAreaFill::FILL) {
363 : PlotSymbolPtr sym = maskedSymbol();
364 : sym->setAreaFill(color, pattern);
365 : setMaskedSymbol(*sym);
366 : }
367 : // </group>
368 : };
369 :
370 :
371 : // An error plot is a scatter plot with error bars drawn. It is expected to
372 : // consist of PlotErrorData.
373 : class ErrorPlot : public virtual ScatterPlot {
374 : public:
375 : ErrorPlot() { }
376 :
377 : virtual ~ErrorPlot() { }
378 :
379 :
380 : // Overrides ScatterPlot::pointData().
381 : virtual PlotPointDataPtr pointData() const { return errorData(); }
382 :
383 :
384 : // ABSTRACT METHODS //
385 :
386 : // Returns the error data used for this plot.
387 : virtual PlotErrorDataPtr errorData() const = 0;
388 :
389 : // Returns whether the error bar line is shown or not.
390 : virtual bool errorLineShown() const = 0;
391 :
392 : // Sets whether the error bar line is shown. If show is true, the
393 : // implementation can decide whether to choose the line shown, or just
394 : // use the last set PlotLine.
395 : virtual void setErrorLineShown(bool show = true) = 0;
396 :
397 : // Returns the line used to draw the error bars.
398 : virtual PlotLinePtr errorLine() const = 0;
399 :
400 : // Sets the line used to draw the error bars.
401 : virtual void setErrorLine(const PlotLine& line) = 0;
402 :
403 : // Convenience methods for setting error line.
404 : // <group>
405 : virtual void setErrorLine(const PlotLinePtr line) {
406 : if(!line.null()) setErrorLine(*line);
407 : else setErrorLineShown(false);
408 : }
409 : virtual void setErrorLine(const casacore::String& color,
410 : PlotLine::Style style = PlotLine::SOLID,
411 : double width = 1.0) {
412 : PlotLinePtr line = errorLine();
413 : line->setColor(color);
414 : line->setStyle(style);
415 : line->setWidth(width);
416 : setErrorLine(*line);
417 : }
418 : virtual void setErrorLineColor(const casacore::String& color) {
419 : PlotLinePtr line = errorLine();
420 : line->setColor(color);
421 : setErrorLine(*line);
422 : }
423 : virtual void setErrorLineStyle(PlotLine::Style style) {
424 : PlotLinePtr line = errorLine();
425 : line->setStyle(style);
426 : setErrorLine(*line);
427 : }
428 : virtual void setErrorLineWidth(double width) {
429 : PlotLinePtr line = errorLine();
430 : line->setWidth(width);
431 : setErrorLine(*line);
432 : }
433 : // </group>
434 :
435 : // Returns the "cap" size of the error bar. The cap is the perpendicular
436 : // line at the end of the error bar (that makes the error bar look like an
437 : // I rather than a |).
438 : virtual unsigned int errorCapSize() const = 0;
439 :
440 : // Sets the error bar cap size in pixels.
441 : virtual void setErrorCapSize(unsigned int capSize) = 0;
442 : };
443 :
444 :
445 : // An color plot is a scatter plot with differentiated colors for points in
446 : // different bins. It is expected to consist of PlotBinnedData.
447 : class ColoredPlot : public virtual ScatterPlot {
448 : public:
449 : // Constructor.
450 : ColoredPlot() { }
451 :
452 : // Destructor.
453 : virtual ~ColoredPlot() { }
454 :
455 :
456 : // Overrides ScatterPlot::pointData().
457 : virtual PlotPointDataPtr pointData() const { return binnedColorData(); }
458 :
459 :
460 : // ABSTRACT METHODS //
461 :
462 : // Returns the binned data used for this plot.
463 : virtual PlotBinnedDataPtr binnedColorData() const = 0;
464 :
465 : // Returns the color to use for the bin at the given index. The color
466 : // applies to the symbol fill color.
467 : virtual PlotColorPtr colorForBin(unsigned int bin) const = 0;
468 :
469 : // Sets the color to use for the bin at the given index. The color applies
470 : // to the symbol fill color.
471 : virtual void setColorForBin(unsigned int bin, const PlotColorPtr color) = 0;
472 : };
473 :
474 :
475 : // Bar plot abstract class. It is expected to take data in the form of
476 : // PlotPointData. The line methods in Plot are used for the bar outlines.
477 : class BarPlot : public virtual Plot {
478 : public:
479 : BarPlot() { }
480 :
481 : virtual ~BarPlot() { }
482 :
483 :
484 : // Overrides Plot::data().
485 : PlotDataPtr data() const { return pointData(); }
486 :
487 : // Returns the data value at the given index. Just a thin layer over the
488 : // PlotPointData functionality.
489 : virtual ppoint_t pointAt(unsigned int i) const {
490 : PlotPointDataPtr data = pointData();
491 : if(!data.null()) return ppoint_t(data->xAt(i), data->yAt(i));
492 : else return ppoint_t(0, 0);
493 : }
494 :
495 : // Implements PlotItem::drawCount(). Provides default implementation that
496 : // returns the number of plotted points.
497 : virtual unsigned int drawCount() const { return pointData()->size(); }
498 :
499 :
500 : // ABSTRACT METHODS //
501 :
502 : // Returns the data used for the plot.
503 : virtual PlotPointDataPtr pointData() const = 0;
504 :
505 : // Returns whether or not the bars have an area fill or not.
506 : virtual bool areaIsFilled() const = 0;
507 :
508 : // Sets whether the bars have an area fill. If fill is true, the
509 : // implementation can decide whether to choose the area fill, or just
510 : // use the last set PlotAreaFill.
511 : virtual void setAreaFilled(bool fill = true) = 0;
512 :
513 : // Returns a copy of the area fill used for the bar interiors.
514 : virtual PlotAreaFillPtr areaFill() const = 0;
515 :
516 : // Sets the area fill used for the bars to the given.
517 : virtual void setAreaFill(const PlotAreaFill& areaFill) = 0;
518 :
519 :
520 : // IMPLEMENTED METHODS //
521 :
522 : // Convenience methods for setting area fill.
523 : // <group>
524 : virtual void setAreaFill(const PlotAreaFillPtr areaFill) {
525 : if(!areaFill.null()) setAreaFill(*areaFill);
526 : else setAreaFilled(false);
527 : }
528 : virtual void setAreaFill(const casacore::String& color,
529 : PlotAreaFill::Pattern pattern = PlotAreaFill::FILL) {
530 : PlotAreaFillPtr fill = areaFill();
531 : fill->setColor(color);
532 : fill->setPattern(pattern);
533 : setAreaFill(*fill);
534 : }
535 : // </group>
536 : };
537 :
538 :
539 : // Plot used to show raster (image-like) data. Expected to use PlotRasterData.
540 : // The line methods in Plot are used for contour lines (if any). A RasterPlot
541 : // can either use the data values directly as colors, or automatically pick
542 : // colors based on a range of values and a colorbar. (See PlotRasterData.)
543 : class RasterPlot : public virtual Plot {
544 : public:
545 : RasterPlot() { }
546 :
547 : virtual ~RasterPlot() { }
548 :
549 :
550 : // Overrides Plot::data().
551 : PlotDataPtr data() const { return rasterData(); }
552 :
553 : // Returns the data at the given point. Just a thin layer over data
554 : // functionality.
555 : virtual double valueAt(double x, double y) const {
556 : PlotRasterDataPtr data = rasterData();
557 : if(!data.null()) return data->valueAt(x, y);
558 : else return 0;
559 : }
560 :
561 :
562 : // ABSTRACT METHODS //
563 :
564 : // Returns the data used.
565 : virtual PlotRasterDataPtr rasterData() const = 0;
566 :
567 : // Sets the x range.
568 : virtual void setXRange(double from, double to) = 0;
569 :
570 : // Sets the y range.
571 : virtual void setYRange(double from, double to) = 0;
572 :
573 : // Returns the data format. See PlotRasterData.
574 : virtual PlotRasterData::Format dataFormat() const = 0;
575 :
576 : // Sets the data format. See PlotRasterData.
577 : virtual void setDataFormat(PlotRasterData::Format f) = 0;
578 :
579 : // Returns the data origin. See PlotRasterData.
580 : virtual PlotRasterData::Origin dataOrigin() const = 0;
581 :
582 : // Sets the data origin. See PlotRasterData.
583 : virtual void setDataOrigin(PlotRasterData::Origin o) = 0;
584 :
585 : // Returns the contour line levels, if any.
586 : virtual std::vector<double> contourLines() const = 0;
587 :
588 : // Sets the contour line levels.
589 : virtual void setContourLines(const std::vector<double>& lines) = 0;
590 : };
591 :
592 :
593 : /* Smart pointer definitions */
594 :
595 0 : INHERITANCE_POINTER2(Plot, PlotPtr, PlotItem, PlotItemPtr)
596 0 : INHERITANCE_POINTER(ScatterPlot, ScatterPlotPtr, Plot, PlotPtr, PlotItem,
597 : PlotItemPtr)
598 0 : INHERITANCE_POINTER(MaskedScatterPlot, MaskedScatterPlotPtr, ScatterPlot,
599 : ScatterPlotPtr, PlotItem, PlotItemPtr)
600 0 : INHERITANCE_POINTER(ErrorPlot, ErrorPlotPtr, ScatterPlot, ScatterPlotPtr,
601 : PlotItem, PlotItemPtr)
602 0 : INHERITANCE_POINTER(ColoredPlot, ColoredPlotPtr, ScatterPlot, ScatterPlotPtr,
603 : PlotItem, PlotItemPtr)
604 0 : INHERITANCE_POINTER(BarPlot, BarPlotPtr, Plot, PlotPtr, PlotItem, PlotItemPtr)
605 0 : INHERITANCE_POINTER(RasterPlot, RasterPlotPtr, Plot, PlotPtr, PlotItem,
606 : PlotItemPtr)
607 :
608 : }
609 :
610 : #endif /*PLOT_H_*/
|