00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __ABSTRACTTEXT_H__
00020 #define __ABSTRACTTEXT_H__
00021
00022 #include <vrs/shape.h>
00023 #include <string>
00024 #include <set>
00025 #include <list>
00026
00027 #include <vrs/text/vrs_textprerequisites.h>
00028 #include <vrs/text/fontdefinition.h>
00029
00031 namespace VRS
00032 {
00034 namespace TEXT
00035 {
00036
00041 class VRS_CORE_API AbstractText : public Shape
00042 {
00043 public:
00044 enum HorizontalAlignment { LEFT, RIGHT, CENTER };
00045 VRS_SERIALIZABLE_CLASS_ENUM(HorizontalAlignment);
00046 enum VerticalAlignment { TOP, BOTTOM, MIDDLE };
00047 VRS_SERIALIZABLE_CLASS_ENUM(VerticalAlignment);
00048 enum Direction { HORIZONTAL, VERTICAL };
00049 VRS_SERIALIZABLE_CLASS_ENUM(Direction);
00050 enum HorizontalDirection { LEFTTORIGHT, RIGHTTOLEFT };
00051 VRS_SERIALIZABLE_CLASS_ENUM(HorizontalDirection);
00052 enum VerticalDirection { TOPTOBOTTOM, BOTTOMTOTOP };
00053 VRS_SERIALIZABLE_CLASS_ENUM(VerticalDirection);
00054
00055 enum TextPlane { TP_XY_z, TP_XY_Z, TP_XZ_y, TP_XZ_Y, TP_YZ_x, TP_YZ_X };
00056
00057
00059 virtual ~AbstractText() {};
00060
00061
00062
00063 #ifdef VRS_HAS_WSTRING // Has Unicode support
00064
00065 virtual const std::wstring& getText() const = 0;
00067 virtual void setText(const std::wstring& str) = 0;
00068 #else // Has no Unicode support
00069
00070 virtual const std::string& getText() const = 0;
00071 #endif
00073 virtual void setText(const std::string& str) = 0;
00074
00075
00076
00077
00079 virtual SO<FontDefinition> getFontDefinition( ) const = 0;
00081 virtual void setFontDefinition( SO<FontDefinition> ) = 0;
00082
00083
00084
00088 virtual HorizontalAlignment getHorizontalAlignment() const = 0;
00092 virtual void setHorizontalAlignment(HorizontalAlignment tva) = 0;
00096 virtual VerticalAlignment getVerticalAlignment() const = 0;
00100 virtual void setVerticalAlignment(VerticalAlignment tva) = 0;
00104 virtual HorizontalDirection getHorizontalDirection() const = 0;
00108 virtual void setHorizontalDirection(HorizontalDirection thd) = 0;
00112 virtual VerticalDirection getVerticalDirection() const = 0;
00116 virtual void setVerticalDirection(VerticalDirection thd) = 0;
00120 virtual AbstractText::Direction getDirection() const = 0;
00124 virtual void setDirection(AbstractText::Direction td) = 0;
00125
00137 virtual void setAlignmentBounds( float rightBorder, float bottomBorder ) = 0;
00141 virtual void setRightAlignmentBound(float rightBorder) = 0;
00145 virtual void setBottomAlignmentBound(float bottomBorder) = 0;
00149 virtual float getRightAlignmentBound() const = 0;
00153 virtual float getBottomAlignmentBound() const = 0;
00154
00155
00156
00157
00161 virtual float getLineSpacing() const = 0;
00165 virtual void setLineSpacing(float LineSpacing) = 0;
00166
00167
00168
00169
00171 virtual void setColor( const Color& color, bool use = true ) = 0;
00173 virtual Color getColor() const = 0;
00175 virtual bool useColor() const = 0;
00176
00177
00178
00180 virtual Matrix getMatrix() const = 0;
00182 virtual void setMatrix( const Matrix& m ) = 0;
00188 virtual void setMatrix( AbstractText::TextPlane tp,
00189 const Vector& offset=Vector(0,0,0), const Vector& scale=Vector(1,1,1) )
00190 {
00191 setMatrix( AbstractText::buildMatrix(tp,offset,scale) );
00192 };
00198 static Matrix buildMatrix( TextPlane tp, const Vector& offset=Vector(0,0,0), const Vector& scale=Vector(1,1,1) )
00199 {
00200 Matrix ret;
00201
00202
00203 switch( tp )
00204 {
00205 default:
00206 case TP_XY_z:
00207 ret = Matrix::identity;
00208 break;
00209 case TP_XY_Z:
00210 ret = Matrix::rotation(Vector(0,1,0),Vector(0,0,0),180);
00211 break;
00212 case TP_XZ_y:
00213 ret = Matrix::rotation(Vector(1,0,0),Vector(0,0,0),90);
00214 break;
00215 case TP_XZ_Y:
00216 ret = Matrix::rotation(Vector(0,0,1),Vector(0,0,0),180)*Matrix::rotation(Vector(1,0,0),Vector(0,0,0),90);
00217 break;
00218 case TP_YZ_x:
00219 ret = Matrix::rotation(Vector(1,0,0),Vector(0,0,0),90)*Matrix::rotation(Vector(0,1,0),Vector(0,0,0),90);
00220 break;
00221 case TP_YZ_X:
00222 ret = Matrix::rotation(Vector(1,0,0),Vector(0,0,0),90)*Matrix::rotation(Vector(0,1,0),Vector(0,0,0),-90);
00223 break;
00224 }
00225
00226
00227 if( offset != Vector(0,0,0) )
00228 ret = ret * Matrix::translation(offset);
00229
00230 if( scale != Vector(1,1,1) )
00231 ret = ret * Matrix::scaling(scale);
00232
00233 return ret;
00234 };
00235
00236
00237
00238
00240 virtual Bounds boundingBox() const = 0;
00242 virtual Bounds getLocalBounds() const = 0;
00243
00244 VRS_TYPEINFO(AbstractText, Shape);
00245 };
00246 }
00247 }
00248
00249 #endif