## Public API Reference

- Main Page
- Modules
- Namespaces
- Classes
- Files
- Related Pages

- File List
- File Members

# cstool/pen.h

Go to the documentation of this file.

    00001 /*
    00002   Copyright (C) 2005 by Christopher Nelson
    00003
    00004   This library is free software; you can redistribute it and/or
    00005   modify it under the terms of the GNU Library General Public
    00006   License as published by the Free Software Foundation; either
    00007   version 2 of the License, or (at your option) any later version.
    00008
    00009   This library is distributed in the hope that it will be useful,
    00010   but WITHOUT ANY WARRANTY; without even the implied warranty of
    00011   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00012   Library General Public License for more details.
    00013
    00014   You should have received a copy of the GNU Library General Public
    00015   License along with this library; if not, write to the Free
    00016   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    00017 */
    00018
    00019 #ifndef __CS_CSTOOL_PEN_H__
    00020 #define __CS_CSTOOL_PEN_H__
    00021
    00026 #include "csgeom/poly3d.h"
    00027 #include "csgeom/polyidx.h"
    00028 #include "csgeom/vector4.h"
    00029 #include "csutil/cscolor.h"
    00030 #include "csutil/dirtyaccessarray.h"
    00031 #include "csutil/ref.h"
    00032
    00033 #include "ivideo/graph3d.h"
    00034
    00035 struct iFont;
    00036 struct iGraphics2D;
    00037 struct iGraphics3D;
    00038
    00039 enum CS_PEN_TEXT_ALIGN
    00040 {
    00041   CS_PEN_TA_TOP,
    00042   CS_PEN_TA_BOT,
    00043   CS_PEN_TA_LEFT,
    00044   CS_PEN_TA_RIGHT,
    00045   CS_PEN_TA_CENTER
    00046 };
    00047
    00048
    00052 struct iPen
    00053 {
    00057   virtual void SetColor (float r, float g, float b, float a) = 0;
    00058
    00062   virtual void SetColor(const csColor4 &color) = 0;
    00063
    00067   virtual void SwapColors() = 0;
    00068
    00072   virtual void ClearTransform() = 0;
    00073
    00077   virtual void PushTransform() = 0;
    00078
    00083   virtual void PopTransform() = 0;
    00084
    00088   virtual void SetOrigin(const csVector3 &o) = 0;
    00089
    00093   virtual void Translate(const csVector3 &t) = 0;
    00094
    00098   virtual void Rotate(const float &a) = 0;
    00099
    00103   virtual void DrawLine (uint x1, uint y1, uint x2, uint y2) = 0;
    00104
    00108   virtual void DrawPoint (uint x1, uint y2) = 0;
    00109
    00113   virtual void DrawRect (uint x1, uint y1, uint x2, uint y2,
    00114         bool swap_colors = false, bool fill = false) = 0;
    00115
    00120   virtual void DrawMiteredRect (uint x1, uint y1, uint x2, uint y2,
    00121     float miter, bool swap_colors = false, bool fill = false) = 0;
    00122
    00127   virtual void DrawRoundedRect (uint x1, uint y1, uint x2, uint y2,
    00128     float roundness, bool swap_colors = false, bool fill = false) = 0;
    00129
    00137   virtual void DrawArc(uint x1, uint y1, uint x2, uint y2, float start_angle,
    00138         float end_angle, bool swap_colors = false, bool fill=false) = 0;
    00139
    00143   virtual void DrawTriangle(uint x1, uint y1, uint x2, uint y2, uint x3, uint y3, bool fill=false) = 0;
    00144
    00148   virtual void Write(iFont *font, uint x1, uint y1, char *text) = 0;
    00149
    00154   virtual void WriteBoxed(iFont *font, uint x1, uint y1, uint x2, uint y2,
    00155     uint h_align, uint v_align, char *text) = 0;
    00156 };
    00157
    00159 class csPen : public iPen
    00160 {
    00162   csRef<iGraphics3D> g3d;
    00163
    00165   csRef<iGraphics2D> g2d;
    00166
    00168   csSimpleRenderMesh mesh;
    00169
    00171   csPolyIndexed poly_idx;
    00172
    00174   csPoly3D poly;
    00175
    00177   csVector4 color;
    00178
    00180   csVector4 alt_color;
    00181
    00183   csVector3 tt;
    00184
    00186   csDirtyAccessArray<csVector4> colors;
    00187
    00189   csArray<csReversibleTransform> transforms;
    00190
    00191 protected:
    00195   void Start();
    00196
    00200   void AddVertex(float x, float y);
    00201
    00205   void SetupMesh();
    00206
    00210   void DrawMesh(csRenderMeshType mesh_type);
    00211
    00212 public:
    00213   csPen(iGraphics2D *_g2d, iGraphics3D *_g3d);
    00214   virtual ~csPen();
    00215
    00219   virtual void SetColor (float r, float g, float b, float a);
    00220
    00224   virtual void SetColor(const csColor4 &color);
    00225
    00229   virtual void SwapColors();
    00230
    00234   virtual void ClearTransform();
    00235
    00239   virtual void PushTransform();
    00240
    00245   virtual void PopTransform();
    00246
    00250   virtual void SetOrigin(const csVector3 &o);
    00251
    00255   virtual void Translate(const csVector3 &t);
    00256
    00260   virtual void Rotate(const float &a);
    00261
    00265   virtual void DrawLine (uint x1, uint y1, uint x2, uint y2);
    00266
    00270   virtual void DrawPoint (uint x1, uint y2);
    00271
    00275   virtual void DrawRect (uint x1, uint y1, uint x2, uint y2,
    00276         bool swap_colors = false, bool fill = false);
    00277
    00282   virtual void DrawMiteredRect (uint x1, uint y1, uint x2, uint y2,
    00283     float miter, bool swap_colors = false, bool fill = false);
    00284
    00289   virtual void DrawRoundedRect (uint x1, uint y1, uint x2, uint y2,
    00290     float roundness, bool swap_colors = false, bool fill = false);
    00291
    00299   virtual void DrawArc(uint x1, uint y1, uint x2, uint y2,
    00300         float start_angle=0, float end_angle=6.2831853,
    00301     bool swap_colors = false, bool fill=false);
    00302
    00306   virtual void DrawTriangle(uint x1, uint y1, uint x2, uint y2, uint x3, uint y3, bool fill=false);
    00307
    00311   virtual void Write(iFont *font, uint x1, uint y1, char *text);
    00312
    00317   virtual void WriteBoxed(iFont *font, uint x1, uint y1, uint x2, uint y2,
    00318     uint h_align, uint v_align, char *text);
    00319 };
    00320
    00321
    00322 #endif