vgimage.hpp

来自「一个gps小工具包」· HPP 代码 · 共 444 行

HPP
444
字号
///@file VGImage.hpp Common interface to all vector plot formats. Class declarations.//============================================================================////  This file is part of GPSTk, the GPS Toolkit.////  The GPSTk is free software; you can redistribute it and/or modify//  it under the terms of the GNU Lesser General Public License as published//  by the Free Software Foundation; either version 2.1 of the License, or//  any later version.////  The GPSTk 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 Lesser General Public License for more details.////  You should have received a copy of the GNU Lesser General Public//  License along with GPSTk; if not, write to the Free Software Foundation,//  Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA//  //  Copyright 2004, The University of Texas at Austin////============================================================================#ifndef VPLOT_VGIMAGE_H#define VPLOT_VGIMAGE_H#include <string>#include <stdarg.h>#include <vector>#include "VPlotException.hpp"#include "Path.hpp"#include "StrokeStyle.hpp"#include "Line.hpp"#include "Rectangle.hpp"#include "Circle.hpp"#include "Polygon.hpp"#include "Text.hpp"#include "Marker.hpp"#include "Comment.hpp"namespace vplot{  /** \defgroup BasicVectorGraphics Basic Vector Graphics*/   //@{  /**   * This is a generic, format- and device-independent interface to    * vector plotting. Any subclass can be "swapped out" with another.   * The default unit of length is  points (1/72 of an inch, about    * 1/28 of a centimeter).    */  class VGImage {    // Comments for these are contained with the code.    friend VGImage&       operator<<(VGImage& vgstrm, const Line& line);    friend VGImage&       operator<<(VGImage& vgstrm, const StrokeStyle& style);    friend VGImage&       operator<<(VGImage& vgstrm,           const Marker& marker);    friend VGImage&       operator<<(VGImage& vgstrm,           const Comment& comment);    friend VGImage&       operator<<(VGImage& vgstrm, const Rectangle& rect);     friend VGImage&       operator<<(VGImage& vgstrm, const Circle& circle);     friend VGImage&       operator<<(VGImage& vgstrm, const Text& text);     friend VGImage&       operator<<(VGImage& vgstrm, const Polygon& polygon);     public:    /// Units conversion from points to inches    static const double PTS_PER_INCH;    /// Units conversion from points to centimeters    static const double PTS_PER_CM;    /// U.S. Customary page size width given in points    static const double US_LETTER_WIDTH_PTS;    /// U.S. Customary page size height given in points    static const double US_LETTER_HEIGHT_PTS;    // For the rest of the world... there's ISO 216-series sizes    /// A3 page size width given in points    static const double A3_WIDTH_PTS;    /// A3 page size height given in points    static const double A3_HEIGHT_PTS;    // A4 and US customary letter are of comparable size    /// A4 page size width given in points    static const double A4_WIDTH_PTS;    /// A4 page size height given in points     static const double A4_HEIGHT_PTS;    /// A5 page size width given in points    static const double A5_WIDTH_PTS;    /// A5 page size height given in points    static const double A5_HEIGHT_PTS;    /// Enumeration to set origin from which everything in the stream will be drawn.    enum ORIGIN_LOCATION {       /// Origin in the lower-left corner.      LOWER_LEFT,       /// Origin in the upper-left corner.      UPPER_LEFT     };    /**     * Constructors and Destructor     */    /**     * Defines a new canvas in which to draw.     * @param width Width of the canvas in points     * @param height Height of the canvas in points     * @param iloc Location on the page of the overall origin     */     VGImage(double width=US_LETTER_WIDTH_PTS,         double height=US_LETTER_HEIGHT_PTS,        ORIGIN_LOCATION iloc=LOWER_LEFT):       canvasWidth(width), canvasHeight(height),      footerHasBeenWritten(false), ll(iloc==LOWER_LEFT)    {       defaults = new VGState();      //std::cout << height << " " << canvasHeight << "\n";    }    /// Destructor.    virtual ~VGImage() {}       /// Access width    double getWidth(void) const     {      return canvasWidth;    }    /// Access height    double getHeight(void) const    {      return canvasHeight;    }    /**     * Set the default line style. Doesn't necessarily     * generate output on the stream until a new line is drawn.     * @param newStyle New appearance of the line     */    void setLineStyle( const StrokeStyle& newStyle )     {defaults->useSS = true;defaults->strokeStyle = newStyle;}    /**     * Removes default line style so lines are drawn in the default     * style for the stream.     */    void removeLineStyle(void)     {defaults->useSS = false;defaults->strokeStyle = StrokeStyle();}    /**     * Sets the default marker style. Doesn't necessarily     * generate output on the stream until a new line is drawn.     * @param newMarker New default marker appearance     */    virtual void setMarker( const Marker& newMarker )     {defaults->useM = true;defaults->marker = newMarker;}    /**     * Removes default marker style so lines are drawn in the default     * style for the stream.     */    virtual void removeMarker(void)     {defaults->useM = false;defaults->marker = Marker();}    /**     * Sets the default text style. Doesn't necessarily     * generate output on the stream until new text is drawn.     * @param newStyle New appearance of the text     */    void setTextStyle( const TextStyle& newStyle )     {defaults->useTS = true;defaults->textStyle = newStyle;}    /**     * Removes default text style so text is drawn in the default     * style for the stream.     */    void removeTextStyle(void)     {defaults->useTS = false;defaults->textStyle = TextStyle();}    /**     * Sets the default fill color. Doesn't necessarily     * generate output on the stream until something filled is drawn.     * @param newColor New fill color     */    void setFillColor( const Color& newColor )     {defaults->useFC = true;defaults->fillColor = newColor;}    /**     * Removes default fill color so shapes are drawn empty.     */    void removeFillColor(void)     {defaults->useFC = false;defaults->fillColor = Color();}    /**     * Draws a simple line segment connecting two points.     * @param x1 x-coordinate of the starting point     * @param y1 y-coordinate of the starting point     * @param x2 x-coordinate of the end point     * @param y2 y-coordinate of the end point     */    void line (double x1, double y1, double x2, double y2)    {      line(Line(x1,y1,x2,y2));    };    /**     * Draws a series of line segments, defined by the path variable     * @param line Line containing list of points that define the line     */      virtual void line (const Line& line)=0;    /**     * Draws a simple rectangle using two points     * @param rect Rectangle to draw     */    virtual void rectangle (const Rectangle& rect)=0;    /**     * Draws a simple circle using a point and a radius     * @param circle Circle to draw     */    virtual void circle (const Circle& circle)=0;    /**     * Draws text.     * @param text Text to draw     */    virtual void text (const Text& text)=0;    /**     * Draws a polygon, defined by the path variable.     * @param polygon Polygon containing points that define the edges of the polygon     */      virtual void polygon(const Polygon& polygon)=0;    /**     * Adds a comment.     * @param comment Comment to be added to the file     */    virtual void comment(const Comment& comment)=0;    /**     * Adds a comment     * @param format Format string (printf style)     * @param ... Other arguments for printf.     */    virtual void comment(const char * format, ...)    {      va_list ap;      va_start(ap,format);      comment(Comment(format,ap));      va_end(ap);    }    /**     * Draws an arc of user defined radius, center, over a stated      * angular span.     * @param cx X location of the center of the arc     * @param cy Y value of the center of the arc     * @param r Radius of the arc     * @param startAngle Angle in degrees of the start of the arc     * @param endAngle End angle of the arc.     */    //virtual void arc (double cx, double cy, double r,     //                  double startAngle, double endAngle);    /**     * Pushes the current state information on the stack.  This is so helper     * methods and classes can push the state and pop the state in order to not     * interfere or accidentally use the defaults of the calling function.     */    void push_state()    {      stateStack.push_back(defaults);      defaults = new VGState();    }    /**     * Pops the topmost state off of the state stack and returns it to the     * current default settings. If the state stack is empty, default is reset.     */    void pop_state()    {      if(stateStack.size() > 0)      {        delete defaults;        defaults = stateStack.back();        stateStack.pop_back();      }      else        defaults = new VGState();    }    /**     * Write the footer, flush the stream, and view the output.     */    virtual void view(void) throw (VPlotException)    { throw VPlotException("No appropriate viewer has been defined.");}    protected:    /**     * This is an enumeration for the getCorrect*(...) helper methods     */    enum StyleType {      /// There is no potential style.      NONE,      /// The selected style is clear      CLEAR,      /// The shape has no style but a default one is set      DEFAULT,       /// The shape has its own style      SHAPE    };    /**     * Helper function.     * \see StyleType For return values     * @param[out] m Pointer to Marker to be set.     * @param[in] mark Line to obtain Marker for.     * @return What type of marker was selected     */    StyleType getCorrectMarker(Marker *m, const Markable& mark);    /**     * Helper function.     * \see StyleType For return values     * @param[out] s Pointer to StrokeStyle to be set.     * @param[in] shape BasicShape to obtain the StrokeStyle for.     * @return What type of StrokeStyle was selected     */    StyleType getCorrectStrokeStyle(StrokeStyle *s, const BasicShape& shape);    /**     * Helper function.     * \see StyleType For return values     * @param[out] c Pointer to Color to be set.     * @param[in] shape Fillable to obtain the fill Color for.     * @return What type of Color was selected     */    StyleType getCorrectFillColor(Color *c, const Fillable& shape);    /**     * Helper function.     * \see StyleType For return values     * @param[out] s Pointer to TextStyle to be set.     * @param[in] text Text to obtain the TextStyle for.     * @return What type of TextStyle was selected     */    StyleType getCorrectTextStyle(TextStyle *s, const Text& text);    /**     *  Close up the file -- must be done before this object     *  is destroyed.     */    virtual void outputFooter(void) {}    /// Width of the drawable area in points    double canvasWidth;      /// Height of the drawable area in points     double canvasHeight;    /// Make sure to only write the footer once.    bool footerHasBeenWritten;    /**     * Is the origin lower left? If not it is upper left.     * This boolean is used to shorten expressions when placing      * a y-coordinate in a file.     */    bool ll;     /// This structor holds the current default state.    struct VGState     {      /// The default StrokeStyle (if one is set)      StrokeStyle strokeStyle;      /// The default Marker (if one is set)      Marker marker;      /// The default TextStyle (if one is set)      TextStyle textStyle;      /// The default fill Color (if one is set)      Color fillColor;      /// Whether or not to use the default StrokeStyle      bool useSS;      /// Whether or not to use the default Marker      bool useM;      /// Whether or not to use the default TextStyle      bool useTS;      /// Whether or not to use the default fill Color            bool useFC;      /// Make sure the defaults are with nothing set.      VGState()      {        useSS = useM = useTS = useFC = false;      }    };    /// The state stack    std::vector<VGState*> stateStack;    /// The current default state settings    VGState *defaults;    private:  }; // class VGImage  //@} group BasicVectorGraphics} // namespace vplot#endif //VPLOT_VGIMAGE_H

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?