//# PGPlotter.h: Standard plotting object for application programmers. //# Copyright (C) 1997,2000,2001 //# Associated Universities, Inc. Washington DC, USA. //# //# This library is free software; you can redistribute it and/or modify it //# under the terms of the GNU Library General Public License as published by //# the Free Software Foundation; either version 2 of the License, or (at your //# option) any later version. //# //# This library is distributed in the hope that it will be useful, but WITHOUT //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public //# License for more details. //# //# You should have received a copy of the GNU Library General Public License //# along with this library; if not, write to the Free Software Foundation, //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA. //# //# Correspondence concerning AIPS++ should be addressed as follows: //# Internet email: aips2-request@nrao.edu. //# Postal address: AIPS++ Project Office //# National Radio Astronomy Observatory //# 520 Edgemont Road //# Charlottesville, VA 22903-2475 USA //# //# //# $Id$ #ifndef CASA_PGPLOTTER_H #define CASA_PGPLOTTER_H #include #include #include #include namespace casacore { //# NAMESPACE CASACORE - BEGIN class String; // // Standard plotting object for application programmers. // // // // // //
  • PGPlotterInterface // // // // This is the class that a programmer should instantiate if he wants to open // a "device" to plot to. The device might be local, or it might be remote // (i.e., running under Glish). The philosophy of the plotting interface is // described in the // PGPlotterInterface documentation. // // It is possible that the object might not be attached to a valid plot device // (for example, the user might have said "no plotting." Programerss should // check the isAttached() member before plotting. If you attempt to // plot to an unattached plotter, an exception is thrown. // // Copying a PGPlotter uses reference semantics -- after copying // plotting on the old and new objects will result in the plot commands // appearing on the same device. The device is closed only when the last // reference is destructed. // // You can detach a plotter from a device with the detach() call. // If there are no other references to the plotter, this will close the device. // (What it actually does is call the destructor on the object. For a local // PGPPLOT device this will close it). // // // // // // plot y = x*x // Vector x(100), y(100); // indgen(x); // y = x*x; // PGPlotter plotter("myplot.ps/ps"); // plotter.env(0, 100, 0, 100*100, 0, 0); // plotter.line(x, y); // // // // //
  • Add more plot calls. // class PGPlotter : public PGPlotterInterface { public: // Define the signature of a function creating a PGPlotter object. typedef PGPlotter CreateFunction (const String &device, uInt mincolors, uInt maxcolors, uInt sizex, uInt sizey); // The default constructor does not attach to any plotter, that is // isAttached() returns False. An exception is thrown if you // attempt to plot to an unattached PGPlotter. PGPlotter(); // Create PGPlotter object using the curreent create function. PGPlotter (const String &device, uInt mincolors=2, uInt maxcolors=100, uInt sizex=600, uInt sizey=450); // Create from the given PGPlotterInterface instantiation. // It takes over the pointer. PGPlotter (PGPlotterInterface*); // Copies use reference semantics, i.e. after copying the new and old // copy both draw onto the same surface. // PGPlotter(const PGPlotter &other); PGPlotter &operator=(const PGPlotter &other); // // If this is the last reference, close the plot. virtual ~PGPlotter(); // Create a PGPlotter object using the current create function. static PGPlotter create (const String &device, uInt mincolors=2, uInt maxcolors=100, uInt sizex=600, uInt sizey=450); // Set the create function. It returns the current create function. // It is, for example, used by ObjectController to attach to glish. // The initial create function creates a detached PGPlotter object. // If override==False, the function is only set if it was // not already set. static CreateFunction* setCreateFunction (CreateFunction*, Bool override=True); // True if it is OK to plot to this object. virtual Bool isAttached() const; // Detach from the object. If this is the last reference to the object, // call its destructor (this will call pgclos on a local device). void detach(); // This is not a standard PGPLOT command. In the Glish/PGPLOT window, it // puts a message in the message line. By default it sends it to the logger. // In any event, this is intended for short helpful messages (e.g. // saying which keys to press to mark a spectrum). virtual void message(const String &text); // This is an emulated standard PGPLOT command. It returns a record // containing the fields: // // [ok=Bool, x=Float, y=Float, ch=String]; // If the remote device cannot do cursor feedback, ok==F. // virtual Record curs(Float x, Float y); // Standard PGPLOT commands. Documentation for the individual commands // can be found in the Glish manual and in the standard PGPLOT documentation // which may be found at http://astro.caltech.edu/~tjp/pgplot/. // The Glish/PGPLOT documentation is preferred since this interface follows // it exactly (e.g. the array sizes are inferred both here and in Glish, // whereas they must be passed into standard PGPLOT). // //
  • An AipsError will be thrown // if the plotter is unattached. // // virtual void arro(Float x1, Float y1, Float x2, Float y2); virtual void ask(Bool flag); virtual void bbuf(); virtual void bin(const Vector &x, const Vector &data, Bool center); virtual void box(const String &xopt, Float xtick, Int nxsub, const String &yopt, Float ytick, Int nysub); virtual void circ(Float xcent, Float ycent, Float radius); virtual void conb(const Matrix &a, const Vector &c, const Vector &tr, Float blank); virtual void conl(const Matrix &a, Float c, const Vector &tr, const String &label, Int intval, Int minint); virtual void cons(const Matrix &a, const Vector &c, const Vector &tr); virtual void cont(const Matrix &a, const Vector &c, Bool nc, const Vector &tr); virtual void ctab(const Vector &l, const Vector &r, const Vector &g, const Vector &b, Float contra, Float bright); virtual void draw(Float x, Float y); virtual void ebuf(); virtual void env(Float xmin, Float xmax, Float ymin, Float ymax, Int just, Int axis); virtual void eras(); virtual void errb(Int dir, const Vector &x, const Vector &y, const Vector &e, Float t); virtual void errx(const Vector &x1, const Vector &x2, const Vector &y, Float t); virtual void erry(const Vector &x, const Vector &y1, const Vector &y2, Float t); virtual void gray(const Matrix &a, Float fg, Float bg, const Vector &tr); virtual void hi2d(const Matrix &data, const Vector &x, Int ioff, Float bias, Bool center, const Vector &ylims); virtual void hist(const Vector &data, Float datmin, Float datmax, Int nbin, Int pcflag); virtual void iden(); virtual void imag(const Matrix &a, Float a1, Float a2, const Vector &tr); virtual void lab(const String &xlbl, const String &ylbl, const String &toplbl); virtual void ldev(); virtual Vector len(Int units, const String &string); virtual void line(const Vector &xpts, const Vector &ypts); virtual void move(Float x, Float y); virtual void mtxt(const String &side, Float disp, Float coord, Float fjust, const String &text); virtual String numb(Int mm, Int pp, Int form); virtual void page(); virtual void panl(Int ix, Int iy); virtual void pap(Float width, Float aspect); virtual void pixl(const Matrix &ia, Float x1, Float x2, Float y1, Float y2); virtual void pnts(const Vector &x, const Vector &y, const Vector symbol); virtual void poly(const Vector &xpts, const Vector &ypts); virtual void pt(const Vector &xpts, const Vector &ypts, Int symbol); virtual void ptxt(Float x, Float y, Float angle, Float fjust, const String &text); virtual Vector qah(); virtual Int qcf(); virtual Float qch(); virtual Int qci(); virtual Vector qcir(); virtual Vector qcol(); virtual Vector qcr(Int ci); virtual Vector qcs(Int units); virtual Int qfs(); virtual Vector qhs(); virtual Int qid(); virtual String qinf(const String &item); virtual Int qitf(); virtual Int qls(); virtual Int qlw(); virtual Vector qpos(); virtual Int qtbg(); virtual Vector qtxt(Float x, Float y, Float angle, Float fjust, const String &text); virtual Vector qvp(Int units); virtual Vector qvsz(Int units); virtual Vector qwin(); virtual void rect(Float x1, Float x2, Float y1, Float y2); virtual Float rnd(Float x, Int nsub); virtual Vector rnge(Float x1, Float x2); virtual void sah(Int fs, Float angle, Float vent); virtual void save(); virtual void scf(Int font); virtual void sch(Float size); virtual void sci(Int ci); virtual void scir(Int icilo, Int icihi); virtual void scr(Int ci, Float cr, Float cg, Float cb); virtual void scrn(Int ci, const String &name); virtual void sfs(Int fs); virtual void shls(Int ci, Float ch, Float cl, Float cs); virtual void shs(Float angle, Float sepn, Float phase); virtual void sitf(Int itf); virtual void sls(Int ls); virtual void slw(Int lw); virtual void stbg(Int tbci); virtual void subp(Int nxsub, Int nysub); virtual void svp(Float xleft, Float xright, Float ybot, Float ytop); virtual void swin(Float x1, Float x2, Float y1, Float y2); virtual void tbox(const String &xopt, Float xtick, Int nxsub, const String &yopt, Float ytick, Int nysub); virtual void text(Float x, Float y, const String &text); virtual void unsa(); virtual void updt(); virtual void vect(const Matrix &a, const Matrix &b, Float c, Int nc, const Vector &tr, Float blank); virtual void vsiz(Float xleft, Float xright, Float ybot, Float ytop); virtual void vstd(); virtual void wedg(const String &side, Float disp, Float width, Float fg, Float bg, const String &label); virtual void wnad(Float x1, Float x2, Float y1, Float y2); // private: CountedPtr worker_p; static CreateFunction* creator_p; // Throws an exception if !isAttached() void ok() const; }; } //# NAMESPACE CASACORE - END #endif