1 // This may look like C code, but it is really -*- C++ -*-
3 // Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003
4 // Copyright Dirk Lemstra 2014-2015
6 // Implementation of Drawable (Graphic objects)
9 #define MAGICKCORE_IMPLEMENTATION 1
10 #define MAGICK_PLUSPLUS_IMPLEMENTATION 1
11 #define MAGICK_DRAWABLE_IMPLEMENTATION
13 #include "Magick++/Include.h"
17 #include "Magick++/Drawable.h"
18 #include "Magick++/Image.h"
22 MagickPPExport int Magick::operator == (const Magick::Coordinate& left_,
23 const Magick::Coordinate& right_)
25 return((left_.x() == right_.x()) && (left_.y() == right_.y()));
28 MagickPPExport int Magick::operator != (const Magick::Coordinate& left_,
29 const Magick::Coordinate& right_)
31 return(!(left_ == right_));
34 MagickPPExport int Magick::operator > (const Magick::Coordinate& left_,
35 const Magick::Coordinate& right_)
37 return (!(left_ < right_) && (left_ != right_));
40 MagickPPExport int Magick::operator < (const Magick::Coordinate& left_,
41 const Magick::Coordinate& right_)
43 // Based on distance from origin
44 return((sqrt(left_.x()*left_.x() + left_.y()*left_.y())) <
45 (sqrt(right_.x()*right_.x() + right_.y()*right_.y())));
48 MagickPPExport int Magick::operator >= (const Magick::Coordinate& left_,
49 const Magick::Coordinate& right_)
51 return((left_ > right_) || (left_ == right_));
54 MagickPPExport int Magick::operator <= (const Magick::Coordinate& left_,
55 const Magick::Coordinate& right_)
57 return((left_ < right_) || (left_ == right_));
61 Magick::DrawableBase::DrawableBase()
65 Magick::DrawableBase::~DrawableBase(void)
69 void Magick::DrawableBase::operator()(MagickCore::DrawingWand * context_) const
73 Magick::DrawableBase* Magick::DrawableBase::copy() const
75 return new DrawableBase(*this);
79 Magick::Drawable::Drawable(void)
80 : dp((Magick::DrawableBase *) NULL)
84 Magick::Drawable::Drawable(const Magick::DrawableBase& original_)
85 : dp(original_.copy())
89 Magick::Drawable::~Drawable(void)
92 dp=(Magick::DrawableBase *) NULL;
95 Magick::Drawable::Drawable(const Magick::Drawable& original_)
96 : dp((original_.dp != (Magick::DrawableBase *) NULL ? original_.dp->copy() :
97 (Magick::DrawableBase *) NULL))
101 Magick::Drawable& Magick::Drawable::operator= (
102 const Magick::Drawable& original_)
107 if (this != &original_)
109 temp_dp=(original_.dp != (Magick::DrawableBase *) NULL ?
110 original_.dp->copy() : (Magick::DrawableBase *) NULL);
117 void Magick::Drawable::operator()(MagickCore::DrawingWand * context_) const
119 if (dp != (Magick::DrawableBase *) NULL)
120 dp->operator()(context_);
123 MagickPPExport int Magick::operator == ( const Magick::Drawable& /*left_*/,
124 const Magick::Drawable& /*right_*/ )
128 MagickPPExport int Magick::operator != ( const Magick::Drawable& /*left_*/,
129 const Magick::Drawable& /*right_*/ )
133 MagickPPExport int Magick::operator > ( const Magick::Drawable& /*left_*/,
134 const Magick::Drawable& /*right_*/ )
138 MagickPPExport int Magick::operator < ( const Magick::Drawable& /*left_*/,
139 const Magick::Drawable& /*right_*/ )
143 MagickPPExport int Magick::operator >= ( const Magick::Drawable& left_,
144 const Magick::Drawable& right_ )
146 return ( ( left_ > right_ ) || ( left_ == right_ ) );
148 MagickPPExport int Magick::operator <= ( const Magick::Drawable& left_,
149 const Magick::Drawable& right_ )
151 return ( ( left_ < right_ ) || ( left_ == right_ ) );
155 Magick::VPathBase::~VPathBase ( void )
160 Magick::VPath::VPath ( void )
165 // Construct from VPathBase
166 Magick::VPath::VPath ( const Magick::VPathBase& original_ )
167 : dp(original_.copy())
172 /* virtual */ Magick::VPath::~VPath ( void )
179 Magick::VPath::VPath ( const Magick::VPath& original_ )
180 : dp(original_.dp? original_.dp->copy(): 0)
184 // Assignment operator
185 Magick::VPath& Magick::VPath::operator= (const Magick::VPath& original_ )
187 if (this != &original_)
189 VPathBase* temp_dp = (original_.dp ? original_.dp->copy() : 0);
196 // Operator to invoke contained object
197 void Magick::VPath::operator()( MagickCore::DrawingWand * context_ ) const
200 dp->operator()( context_ );
203 MagickPPExport int Magick::operator == ( const Magick::VPath& /*left_*/,
204 const Magick::VPath& /*right_*/ )
208 MagickPPExport int Magick::operator != ( const Magick::VPath& /*left_*/,
209 const Magick::VPath& /*right_*/ )
213 MagickPPExport int Magick::operator > ( const Magick::VPath& /*left_*/,
214 const Magick::VPath& /*right_*/ )
218 MagickPPExport int Magick::operator < ( const Magick::VPath& /*left_*/,
219 const Magick::VPath& /*right_*/ )
223 MagickPPExport int Magick::operator >= ( const Magick::VPath& left_,
224 const Magick::VPath& right_ )
226 return ( ( left_ > right_ ) || ( left_ == right_ ) );
228 MagickPPExport int Magick::operator <= ( const Magick::VPath& left_,
229 const Magick::VPath& right_ )
231 return ( ( left_ < right_ ) || ( left_ == right_ ) );
238 // Affine (scaling, rotation, and translation)
239 Magick::DrawableAffine::DrawableAffine( double sx_, double sy_,
240 double rx_, double ry_,
241 double tx_, double ty_ )
250 Magick::DrawableAffine::DrawableAffine( void )
252 GetAffineMatrix(&_affine);
254 Magick::DrawableAffine::~DrawableAffine( void )
257 void Magick::DrawableAffine::operator()( MagickCore::DrawingWand * context_ ) const
259 DrawAffine( context_, &_affine );
261 Magick::DrawableBase* Magick::DrawableAffine::copy() const
263 return new DrawableAffine(*this);
266 Magick::DrawableAlpha::~DrawableAlpha(void)
270 void Magick::DrawableAlpha::operator()(MagickCore::DrawingWand * context_) const
272 DrawAlpha(context_,_x,_y,_paintMethod);
275 Magick::DrawableBase* Magick::DrawableAlpha::copy() const
277 return new DrawableAlpha(*this);
281 Magick::DrawableArc::~DrawableArc( void )
284 void Magick::DrawableArc::operator()( MagickCore::DrawingWand * context_ ) const
286 DrawArc( context_, _startX, _startY, _endX, _endY, _startDegrees, _endDegrees );
288 Magick::DrawableBase* Magick::DrawableArc::copy() const
290 return new DrawableArc(*this);
296 // Construct from coordinates (Coordinate list must contain at least three members)
297 Magick::DrawableBezier::DrawableBezier ( const CoordinateList &coordinates_ )
298 : _coordinates(coordinates_)
302 Magick::DrawableBezier::DrawableBezier( const Magick::DrawableBezier& original_ )
303 : DrawableBase (original_),
304 _coordinates(original_._coordinates)
308 Magick::DrawableBezier::~DrawableBezier( void )
311 void Magick::DrawableBezier::operator()( MagickCore::DrawingWand * context_ ) const
313 size_t num_coords = (size_t) _coordinates.size();
314 PointInfo *coordinates = new PointInfo[num_coords];
316 PointInfo *q = coordinates;
317 CoordinateList::const_iterator p = _coordinates.begin();
319 while( p != _coordinates.end() )
327 DrawBezier( context_, num_coords, coordinates );
328 delete [] coordinates;
330 Magick::DrawableBase* Magick::DrawableBezier::copy() const
332 return new DrawableBezier(*this);
339 // Pop (terminate) Clip path definition
340 Magick::DrawablePopClipPath::~DrawablePopClipPath ( void )
343 void Magick::DrawablePopClipPath::operator() ( MagickCore::DrawingWand * context_ ) const
345 DrawPopClipPath( context_ );
346 DrawPopDefs(context_);
348 Magick::DrawableBase* Magick::DrawablePopClipPath::copy() const
350 return new DrawablePopClipPath(*this);
353 // Push clip path definition
354 Magick::DrawablePushClipPath::DrawablePushClipPath( const std::string &id_)
355 : _id(id_.c_str()) //multithread safe const char*
358 Magick::DrawablePushClipPath::DrawablePushClipPath
359 ( const Magick::DrawablePushClipPath& original_ ) //multithread safe const char*
360 : DrawableBase (original_),
361 _id(original_._id.c_str())
364 Magick::DrawablePushClipPath::~DrawablePushClipPath( void )
367 void Magick::DrawablePushClipPath::operator()
368 ( MagickCore::DrawingWand * context_ ) const
370 DrawPushDefs(context_);
371 DrawPushClipPath( context_, _id.c_str());
373 Magick::DrawableBase* Magick::DrawablePushClipPath::copy() const
375 return new DrawablePushClipPath(*this);
380 Magick::DrawableClipPath::DrawableClipPath( const std::string &id_ )
385 Magick::DrawableClipPath::DrawableClipPath ( const Magick::DrawableClipPath& original_ )
386 : DrawableBase (original_),
387 _id(original_._id.c_str())
390 Magick::DrawableClipPath::~DrawableClipPath( void )
393 void Magick::DrawableClipPath::operator()( MagickCore::DrawingWand * context_ ) const
395 (void) DrawSetClipPath( context_, _id.c_str());
397 Magick::DrawableBase* Magick::DrawableClipPath::copy() const
399 return new DrawableClipPath(*this);
403 Magick::DrawableCircle::~DrawableCircle ( void )
406 void Magick::DrawableCircle::operator()( MagickCore::DrawingWand * context_ ) const
408 DrawCircle( context_, _originX, _originY, _perimX, _perimY );
410 Magick::DrawableBase* Magick::DrawableCircle::copy() const
412 return new DrawableCircle(*this);
415 // Colorize at point using PaintMethod
416 Magick::DrawableColor::~DrawableColor( void )
419 void Magick::DrawableColor::operator()( MagickCore::DrawingWand * context_ ) const
421 DrawColor( context_, _x, _y, _paintMethod );
423 Magick::DrawableBase* Magick::DrawableColor::copy() const
425 return new DrawableColor(*this);
428 // Draw image at point
429 Magick::DrawableCompositeImage::DrawableCompositeImage
430 ( double x_, double y_,
431 double width_, double height_,
432 const std::string &filename_,
433 Magick::CompositeOperator composition_ )
434 : _composition(composition_),
439 _image(new Image(filename_))
442 Magick::DrawableCompositeImage::DrawableCompositeImage
443 ( double x_, double y_,
444 double width_, double height_,
445 const Magick::Image &image_,
446 Magick::CompositeOperator composition_ )
447 : _composition(composition_),
452 _image(new Image(image_))
455 Magick::DrawableCompositeImage::DrawableCompositeImage
456 ( double x_, double y_,
457 double width_, double height_,
458 const std::string &filename_ )
459 :_composition(CopyCompositeOp),
464 _image(new Image(filename_))
467 Magick::DrawableCompositeImage::DrawableCompositeImage
468 ( double x_, double y_,
469 double width_, double height_,
470 const Magick::Image &image_ )
471 :_composition(CopyCompositeOp),
476 _image(new Image(image_))
479 Magick::DrawableCompositeImage::DrawableCompositeImage
480 ( double x_, double y_,
481 const std::string &filename_ )
482 : _composition(CopyCompositeOp),
487 _image(new Image(filename_))
489 _width=_image->columns();
490 _height=_image->rows();
492 Magick::DrawableCompositeImage::DrawableCompositeImage
493 ( double x_, double y_,
494 const Magick::Image &image_ )
495 : _composition(CopyCompositeOp),
500 _image(new Image(image_))
502 _width=_image->columns();
503 _height=_image->rows();
506 Magick::DrawableCompositeImage::DrawableCompositeImage
507 ( const Magick::DrawableCompositeImage& original_ )
508 : Magick::DrawableBase(original_),
509 _composition(original_._composition),
512 _width(original_._width),
513 _height(original_._height),
514 _image(new Image(*original_._image))
517 Magick::DrawableCompositeImage::~DrawableCompositeImage( void )
521 // Assignment operator
522 Magick::DrawableCompositeImage& Magick::DrawableCompositeImage::operator=
523 (const Magick::DrawableCompositeImage& original_ )
525 // If not being set to ourself
526 if ( this != &original_ )
528 _composition = original_._composition;
531 _width = original_._width;
532 _height = original_._height;
533 Image* temp_image = new Image(*original_._image);
539 void Magick::DrawableCompositeImage::filename( const std::string &filename_ )
541 Image* temp_image = new Image(filename_);
545 std::string Magick::DrawableCompositeImage::filename( void ) const
547 return _image->fileName();
550 void Magick::DrawableCompositeImage::image( const Magick::Image &image_ )
552 Image* temp_image = new Image(image_);
556 Magick::Image Magick::DrawableCompositeImage::image( void ) const
561 // Specify image format used to output Base64 inlined image data.
562 void Magick::DrawableCompositeImage::magick( std::string magick_ )
564 _image->magick( magick_ );
566 std::string Magick::DrawableCompositeImage::magick( void )
568 return _image->magick();
571 void Magick::DrawableCompositeImage::operator()
572 ( MagickCore::DrawingWand * context_ ) const
577 magick_wand=NewMagickWandFromImage(_image->constImage());
578 (void) DrawComposite( context_, _composition, _x, _y, _width, _height,
580 magick_wand=DestroyMagickWand(magick_wand);
583 Magick::DrawableBase* Magick::DrawableCompositeImage::copy() const
585 return new DrawableCompositeImage(*this);
588 Magick::DrawableDensity::DrawableDensity(const Point &density_)
593 Magick::DrawableDensity::DrawableDensity(const std::string &density_)
598 Magick::DrawableDensity::~DrawableDensity(void)
602 void Magick::DrawableDensity::operator()(
603 MagickCore::DrawingWand *context_) const
605 DrawSetDensity(context_,_density.c_str());
608 Magick::DrawableBase* Magick::DrawableDensity::copy() const
610 return(new DrawableDensity(*this));
614 Magick::DrawableEllipse::~DrawableEllipse( void )
617 void Magick::DrawableEllipse::operator()
618 ( MagickCore::DrawingWand * context_ ) const
620 DrawEllipse( context_, _originX, _originY, _radiusX, _radiusY,
621 _arcStart, _arcEnd );
623 Magick::DrawableBase* Magick::DrawableEllipse::copy() const
625 return new DrawableEllipse(*this);
628 // Specify drawing fill color
629 Magick::DrawableFillColor::DrawableFillColor( const Magick::Color &color_ )
633 Magick::DrawableFillColor::DrawableFillColor
634 ( const Magick::DrawableFillColor& original_ )
635 : DrawableBase (original_),
636 _color(original_._color)
639 Magick::DrawableFillColor::~DrawableFillColor( void )
642 void Magick::DrawableFillColor::operator()
643 ( MagickCore::DrawingWand * context_ ) const
645 PixelInfo color = static_cast<PixelInfo>(_color);
646 PixelWand *pixel_wand=NewPixelWand();
647 PixelSetPixelColor(pixel_wand,&color);
648 DrawSetFillColor(context_,pixel_wand);
649 pixel_wand=DestroyPixelWand(pixel_wand);
651 Magick::DrawableBase* Magick::DrawableFillColor::copy() const
653 return new DrawableFillColor(*this);
656 // Specify drawing fill fule
657 Magick::DrawableFillRule::~DrawableFillRule ( void )
660 void Magick::DrawableFillRule::operator()
661 ( MagickCore::DrawingWand * context_ ) const
663 DrawSetFillRule( context_, _fillRule );
665 Magick::DrawableBase* Magick::DrawableFillRule::copy() const
667 return new DrawableFillRule(*this);
670 Magick::DrawableFillOpacity::~DrawableFillOpacity(void)
674 void Magick::DrawableFillOpacity::operator()
675 (MagickCore::DrawingWand *context_) const
677 DrawSetFillOpacity(context_,_opacity);
680 Magick::DrawableBase* Magick::DrawableFillOpacity::copy() const
682 return new DrawableFillOpacity(*this);
686 Magick::DrawableFont::DrawableFont ( const std::string &font_ )
689 _style(Magick::AnyStyle),
691 _stretch(Magick::NormalStretch)
694 Magick::DrawableFont::DrawableFont ( const std::string &family_,
695 Magick::StyleType style_,
696 const unsigned int weight_,
697 Magick::StretchType stretch_ )
705 Magick::DrawableFont::DrawableFont ( const Magick::DrawableFont& original_ )
706 : DrawableBase (original_),
707 _font(original_._font),
708 _family(original_._family),
709 _style(original_._style),
710 _weight(original_._weight),
711 _stretch(original_._stretch)
714 Magick::DrawableFont::~DrawableFont ( void )
717 void Magick::DrawableFont::operator()( MagickCore::DrawingWand * context_ ) const
722 (void) DrawSetFont( context_, _font.c_str() );
728 (void) DrawSetFontFamily( context_, _family.c_str() );
731 DrawSetFontStyle( context_, _style );
734 DrawSetFontWeight( context_, _weight );
737 DrawSetFontStretch( context_, _stretch );
740 Magick::DrawableBase* Magick::DrawableFont::copy() const
742 return new DrawableFont(*this);
745 // Specify text positioning gravity
746 Magick::DrawableGravity::~DrawableGravity ( void )
749 void Magick::DrawableGravity::operator()
750 ( MagickCore::DrawingWand * context_ ) const
752 DrawSetGravity( context_, _gravity );
754 Magick::DrawableBase* Magick::DrawableGravity::copy() const
756 return new DrawableGravity(*this);
760 Magick::DrawableLine::~DrawableLine ( void )
763 void Magick::DrawableLine::operator()( MagickCore::DrawingWand * context_ ) const
765 DrawLine( context_, _startX, _startY, _endX, _endY );
767 Magick::DrawableBase* Magick::DrawableLine::copy() const
769 return new DrawableLine(*this);
773 Magick::DrawablePath::DrawablePath ( const VPathList &path_ )
777 Magick::DrawablePath::DrawablePath ( const Magick::DrawablePath& original_ )
778 : DrawableBase (original_),
779 _path(original_._path)
782 Magick::DrawablePath::~DrawablePath ( void )
785 void Magick::DrawablePath::operator()( MagickCore::DrawingWand * context_ ) const
787 DrawPathStart( context_ );
789 for( VPathList::const_iterator p = _path.begin();
790 p != _path.end(); p++ )
791 p->operator()( context_ ); // FIXME, how to quit loop on error?
793 DrawPathFinish( context_ );
795 Magick::DrawableBase* Magick::DrawablePath::copy() const
797 return new DrawablePath(*this);
801 Magick::DrawablePoint::~DrawablePoint ( void )
804 void Magick::DrawablePoint::operator()( MagickCore::DrawingWand * context_ ) const
806 DrawPoint( context_, _x, _y );
808 Magick::DrawableBase* Magick::DrawablePoint::copy() const
810 return new DrawablePoint(*this);
814 Magick::DrawablePointSize::~DrawablePointSize ( void )
817 void Magick::DrawablePointSize::operator()
818 ( MagickCore::DrawingWand * context_ ) const
820 DrawSetFontSize( context_, _pointSize );
822 Magick::DrawableBase* Magick::DrawablePointSize::copy() const
824 return new DrawablePointSize(*this);
827 // Polygon (Coordinate list must contain at least three members)
828 Magick::DrawablePolygon::DrawablePolygon ( const CoordinateList &coordinates_ )
829 : _coordinates(coordinates_)
832 Magick::DrawablePolygon::DrawablePolygon
833 ( const Magick::DrawablePolygon& original_ )
834 : DrawableBase (original_),
835 _coordinates(original_._coordinates)
838 Magick::DrawablePolygon::~DrawablePolygon ( void )
841 void Magick::DrawablePolygon::operator()
842 ( MagickCore::DrawingWand * context_ ) const
844 size_t num_coords = (size_t) _coordinates.size();
845 PointInfo *coordinates = new PointInfo[num_coords];
847 PointInfo *q = coordinates;
848 CoordinateList::const_iterator p = _coordinates.begin();
850 while( p != _coordinates.end() )
858 DrawPolygon( context_, num_coords, coordinates );
859 delete [] coordinates;
861 Magick::DrawableBase* Magick::DrawablePolygon::copy() const
863 return new DrawablePolygon(*this);
866 // Polyline (Coordinate list must contain at least three members)
867 Magick::DrawablePolyline::DrawablePolyline
868 ( const CoordinateList &coordinates_ )
869 : _coordinates(coordinates_)
872 Magick::DrawablePolyline::DrawablePolyline
873 ( const Magick::DrawablePolyline& original_ )
874 : DrawableBase (original_),
875 _coordinates(original_._coordinates)
878 Magick::DrawablePolyline::~DrawablePolyline ( void )
881 void Magick::DrawablePolyline::operator()
882 ( MagickCore::DrawingWand * context_ ) const
884 size_t num_coords = (size_t) _coordinates.size();
885 PointInfo *coordinates = new PointInfo[num_coords];
887 PointInfo *q = coordinates;
888 CoordinateList::const_iterator p = _coordinates.begin();
890 while( p != _coordinates.end() )
898 DrawPolyline( context_, num_coords, coordinates );
899 delete [] coordinates;
901 Magick::DrawableBase* Magick::DrawablePolyline::copy() const
903 return new DrawablePolyline(*this);
906 // Pop Graphic Context
907 Magick::DrawablePopGraphicContext::~DrawablePopGraphicContext ( void )
910 void Magick::DrawablePopGraphicContext::operator()
911 ( MagickCore::DrawingWand * context_ ) const
913 PopDrawingWand( context_ );
915 Magick::DrawableBase* Magick::DrawablePopGraphicContext::copy() const
917 return new DrawablePopGraphicContext(*this);
920 // Push Graphic Context
921 Magick::DrawablePushGraphicContext::~DrawablePushGraphicContext ( void )
924 void Magick::DrawablePushGraphicContext::operator()
925 ( MagickCore::DrawingWand * context_ ) const
927 PushDrawingWand( context_ );
929 Magick::DrawableBase* Magick::DrawablePushGraphicContext::copy() const
931 return new DrawablePushGraphicContext(*this);
934 // Pop (terminate) Pattern definition
935 Magick::DrawablePopPattern::~DrawablePopPattern ( void )
938 void Magick::DrawablePopPattern::operator()
939 ( MagickCore::DrawingWand * context_ ) const
941 (void) DrawPopPattern( context_ );
943 Magick::DrawableBase* Magick::DrawablePopPattern::copy() const
945 return new DrawablePopPattern(*this);
948 // Push Pattern definition
949 Magick::DrawablePushPattern::DrawablePushPattern
950 ( const std::string &id_, ssize_t x_, ssize_t y_,
951 size_t width_, size_t height_ )
959 Magick::DrawablePushPattern::DrawablePushPattern
960 ( const Magick::DrawablePushPattern& original_ )
961 : DrawableBase (original_),
965 _width(original_._width),
966 _height(original_._height)
969 Magick::DrawablePushPattern::~DrawablePushPattern ( void )
972 void Magick::DrawablePushPattern::operator()
973 ( MagickCore::DrawingWand * context_ ) const
975 (void) DrawPushPattern( context_, _id.c_str(), _x, _y, _width, _height );
977 Magick::DrawableBase* Magick::DrawablePushPattern::copy() const
979 return new DrawablePushPattern(*this);
983 Magick::DrawableRectangle::~DrawableRectangle ( void )
986 void Magick::DrawableRectangle::operator()
987 ( MagickCore::DrawingWand * context_ ) const
989 DrawRectangle( context_, _upperLeftX, _upperLeftY,
990 _lowerRightX, _lowerRightY );
992 Magick::DrawableBase* Magick::DrawableRectangle::copy() const
994 return new DrawableRectangle(*this);
998 Magick::DrawableRotation::~DrawableRotation ( void )
1001 void Magick::DrawableRotation::operator()
1002 ( MagickCore::DrawingWand * context_ ) const
1004 DrawRotate( context_, _angle );
1006 Magick::DrawableBase* Magick::DrawableRotation::copy() const
1008 return new DrawableRotation(*this);
1012 Magick::DrawableRoundRectangle::~DrawableRoundRectangle ( void )
1015 void Magick::DrawableRoundRectangle::operator()
1016 ( MagickCore::DrawingWand * context_ ) const
1018 DrawRoundRectangle( context_, _centerX,_centerY, _width,_hight,
1019 _cornerWidth, _cornerHeight);
1021 Magick::DrawableBase* Magick::DrawableRoundRectangle::copy() const
1023 return new DrawableRoundRectangle(*this);
1027 Magick::DrawableScaling::~DrawableScaling ( void )
1030 void Magick::DrawableScaling::operator()
1031 ( MagickCore::DrawingWand * context_ ) const
1033 DrawScale( context_, _x, _y );
1035 Magick::DrawableBase* Magick::DrawableScaling::copy() const
1037 return new DrawableScaling(*this);
1040 // Apply Skew in the X direction
1041 Magick::DrawableSkewX::~DrawableSkewX ( void )
1044 void Magick::DrawableSkewX::operator()
1045 ( MagickCore::DrawingWand * context_ ) const
1047 DrawSkewX( context_, _angle );
1049 Magick::DrawableBase* Magick::DrawableSkewX::copy() const
1051 return new DrawableSkewX(*this);
1054 // Apply Skew in the Y direction
1055 Magick::DrawableSkewY::~DrawableSkewY ( void )
1058 void Magick::DrawableSkewY::operator()( MagickCore::DrawingWand * context_ ) const
1060 DrawSkewY( context_, _angle );
1062 Magick::DrawableBase* Magick::DrawableSkewY::copy() const
1064 return new DrawableSkewY(*this);
1067 Magick::DrawableDashArray::DrawableDashArray(const double* dasharray_)
1071 dasharray(dasharray_);
1074 Magick::DrawableDashArray::DrawableDashArray(
1075 const Magick::DrawableDashArray& original_)
1076 : DrawableBase (original_),
1077 _size(original_._size),
1078 _dasharray(new double[_size+1])
1082 for (size_t i=0; i < _size; i++)
1083 _dasharray[i]=original_._dasharray[i];
1084 _dasharray[_size]=0.0;
1088 Magick::DrawableDashArray::~DrawableDashArray(void)
1090 delete [] _dasharray;
1095 Magick::DrawableDashArray& Magick::DrawableDashArray::operator=(
1096 const Magick::DrawableDashArray &original_)
1098 if( this != &original_ )
1100 delete [] _dasharray;
1101 _size=original_._size;
1102 _dasharray = new double[_size+1];
1105 for (size_t i=0; i < _size; i++)
1106 _dasharray[i]=original_._dasharray[i];
1107 _dasharray[_size]=0.0;
1113 void Magick::DrawableDashArray::operator()(
1114 MagickCore::DrawingWand *context_) const
1116 (void) DrawSetStrokeDashArray(context_,(const unsigned long) _size,_dasharray);
1119 Magick::DrawableBase *Magick::DrawableDashArray::copy() const
1121 return(new DrawableDashArray(*this));
1124 void Magick::DrawableDashArray::dasharray(const double* dasharray_)
1129 delete [] _dasharray;
1135 // Count elements in dash array
1138 const double *p = dasharray_;
1144 // Allocate elements
1145 _dasharray=new double[_size+1];
1148 for (size_t i=0; i < _size; i++)
1149 _dasharray[i]=dasharray_[i];
1150 _dasharray[_size]=0.0;
1155 // Stroke dashoffset
1156 Magick::DrawableDashOffset::~DrawableDashOffset ( void )
1159 void Magick::DrawableDashOffset::operator()
1160 ( MagickCore::DrawingWand * context_ ) const
1162 DrawSetStrokeDashOffset( context_, _offset );
1164 Magick::DrawableBase* Magick::DrawableDashOffset::copy() const
1166 return new DrawableDashOffset(*this);
1170 Magick::DrawableStrokeLineCap::~DrawableStrokeLineCap ( void )
1173 void Magick::DrawableStrokeLineCap::operator()
1174 ( MagickCore::DrawingWand * context_ ) const
1176 DrawSetStrokeLineCap( context_, _linecap );
1178 Magick::DrawableBase* Magick::DrawableStrokeLineCap::copy() const
1180 return new DrawableStrokeLineCap(*this);
1184 Magick::DrawableStrokeLineJoin::~DrawableStrokeLineJoin ( void )
1187 void Magick::DrawableStrokeLineJoin::operator()
1188 ( MagickCore::DrawingWand * context_ ) const
1190 DrawSetStrokeLineJoin( context_, _linejoin );
1192 Magick::DrawableBase* Magick::DrawableStrokeLineJoin::copy() const
1194 return new DrawableStrokeLineJoin(*this);
1197 // Stroke miterlimit
1198 Magick::DrawableMiterLimit::~DrawableMiterLimit ( void )
1201 void Magick::DrawableMiterLimit::operator()
1202 ( MagickCore::DrawingWand * context_ ) const
1204 DrawSetStrokeMiterLimit( context_, _miterlimit );
1206 Magick::DrawableBase* Magick::DrawableMiterLimit::copy() const
1208 return new DrawableMiterLimit(*this);
1212 Magick::DrawableStrokeAntialias::~DrawableStrokeAntialias ( void )
1215 void Magick::DrawableStrokeAntialias::operator()
1216 ( MagickCore::DrawingWand * context_ ) const
1218 DrawSetStrokeAntialias( context_, static_cast<MagickBooleanType>
1219 (_flag ? MagickTrue : MagickFalse) );
1221 Magick::DrawableBase* Magick::DrawableStrokeAntialias::copy() const
1223 return new DrawableStrokeAntialias(*this);
1227 Magick::DrawableStrokeColor::DrawableStrokeColor
1228 ( const Magick::Color &color_ )
1232 Magick::DrawableStrokeColor::DrawableStrokeColor
1233 ( const Magick::DrawableStrokeColor& original_ )
1234 : DrawableBase (original_),
1235 _color(original_._color)
1238 Magick::DrawableStrokeColor::~DrawableStrokeColor ( void )
1241 void Magick::DrawableStrokeColor::operator()
1242 ( MagickCore::DrawingWand * context_ ) const
1244 PixelInfo color = static_cast<PixelInfo>(_color);
1245 PixelWand *pixel_wand=NewPixelWand();
1246 PixelSetPixelColor(pixel_wand,&color);
1247 DrawSetStrokeColor(context_,pixel_wand);
1248 pixel_wand=DestroyPixelWand(pixel_wand);
1250 Magick::DrawableBase* Magick::DrawableStrokeColor::copy() const
1252 return new DrawableStrokeColor(*this);
1255 Magick::DrawableStrokeOpacity::~DrawableStrokeOpacity(void)
1259 void Magick::DrawableStrokeOpacity::operator()
1260 (MagickCore::DrawingWand * context_) const
1262 DrawSetStrokeOpacity(context_,_opacity);
1265 Magick::DrawableBase* Magick::DrawableStrokeOpacity::copy() const
1267 return new DrawableStrokeOpacity(*this);
1271 Magick::DrawableStrokeWidth::~DrawableStrokeWidth ( void )
1274 void Magick::DrawableStrokeWidth::operator()
1275 ( MagickCore::DrawingWand * context_ ) const
1277 DrawSetStrokeWidth( context_, _width );
1279 Magick::DrawableBase* Magick::DrawableStrokeWidth::copy() const
1281 return new DrawableStrokeWidth(*this);
1284 // Draw text at point
1285 Magick::DrawableText::DrawableText ( const double x_, const double y_,
1286 const std::string &text_ )
1293 Magick::DrawableText::DrawableText ( const double x_, const double y_,
1294 const std::string &text_, const std::string &encoding_)
1298 _encoding(encoding_)
1301 Magick::DrawableText::DrawableText( const Magick::DrawableText& original_ )
1302 : DrawableBase (original_),
1305 _text(original_._text),
1306 _encoding(original_._encoding)
1309 Magick::DrawableText::~DrawableText ( void )
1312 void Magick::DrawableText::operator()
1313 ( MagickCore::DrawingWand * context_ ) const
1315 DrawSetTextEncoding( context_, _encoding.c_str() );
1316 DrawAnnotation( context_, _x, _y,
1317 reinterpret_cast<const unsigned char*>(_text.c_str()) );
1319 Magick::DrawableBase* Magick::DrawableText::copy() const
1321 return new DrawableText(*this);
1325 Magick::DrawableTextAntialias::DrawableTextAntialias ( bool flag_ )
1329 Magick::DrawableTextAntialias::DrawableTextAntialias( const Magick::DrawableTextAntialias &original_ )
1330 : DrawableBase (original_),
1331 _flag(original_._flag)
1334 Magick::DrawableTextAntialias::~DrawableTextAntialias ( void )
1337 void Magick::DrawableTextAntialias::operator()
1338 ( MagickCore::DrawingWand * context_ ) const
1340 DrawSetTextAntialias( context_, static_cast<MagickBooleanType>
1341 (_flag ? MagickTrue : MagickFalse) );
1343 Magick::DrawableBase* Magick::DrawableTextAntialias::copy() const
1345 return new DrawableTextAntialias(*this);
1348 // Decoration (text decoration)
1349 Magick::DrawableTextDecoration::DrawableTextDecoration
1350 ( Magick::DecorationType decoration_ )
1351 : _decoration(decoration_)
1354 Magick::DrawableTextDecoration::DrawableTextDecoration
1355 ( const Magick::DrawableTextDecoration &original_ )
1356 : DrawableBase (original_),
1357 _decoration(original_._decoration)
1360 Magick::DrawableTextDecoration::~DrawableTextDecoration( void )
1363 void Magick::DrawableTextDecoration::operator()
1364 ( MagickCore::DrawingWand * context_ ) const
1366 DrawSetTextDecoration( context_, _decoration );
1368 Magick::DrawableBase* Magick::DrawableTextDecoration::copy() const
1370 return new DrawableTextDecoration(*this);
1373 // DrawableTextDirection
1374 Magick::DrawableTextDirection::DrawableTextDirection(
1375 DirectionType direction_)
1376 : _direction(direction_)
1380 Magick::DrawableTextDirection::~DrawableTextDirection(void)
1384 void Magick::DrawableTextDirection::operator()(
1385 MagickCore::DrawingWand *context_) const
1387 DrawSetTextDirection(context_,_direction);
1390 void Magick::DrawableTextDirection::direction(DirectionType direction_)
1392 _direction=direction_;
1395 Magick::DirectionType Magick::DrawableTextDirection::direction(void) const
1400 Magick::DrawableBase *Magick::DrawableTextDirection::copy() const
1402 return new DrawableTextDirection(*this);
1405 // DrawableTextInterlineSpacing
1406 Magick::DrawableTextInterlineSpacing::DrawableTextInterlineSpacing(
1408 : _spacing(spacing_)
1412 Magick::DrawableTextInterlineSpacing::~DrawableTextInterlineSpacing(void)
1416 void Magick::DrawableTextInterlineSpacing::operator()(
1417 MagickCore::DrawingWand *context_) const
1419 DrawSetTextInterlineSpacing(context_,_spacing);
1422 void Magick::DrawableTextInterlineSpacing::spacing(double spacing_)
1427 double Magick::DrawableTextInterlineSpacing::spacing(void) const
1432 Magick::DrawableBase *Magick::DrawableTextInterlineSpacing::copy() const
1434 return new DrawableTextInterlineSpacing(*this);
1437 // DrawableTextInterwordSpacing
1438 Magick::DrawableTextInterwordSpacing::DrawableTextInterwordSpacing(
1440 : _spacing(spacing_)
1444 Magick::DrawableTextInterwordSpacing::~DrawableTextInterwordSpacing(void)
1448 void Magick::DrawableTextInterwordSpacing::operator()(
1449 MagickCore::DrawingWand *context_) const
1451 DrawSetTextInterwordSpacing(context_,_spacing);
1454 void Magick::DrawableTextInterwordSpacing::spacing(double spacing_)
1459 double Magick::DrawableTextInterwordSpacing::spacing(void) const
1464 Magick::DrawableBase *Magick::DrawableTextInterwordSpacing::copy() const
1466 return new DrawableTextInterwordSpacing(*this);
1469 // DrawableTextKerning
1470 Magick::DrawableTextKerning::DrawableTextKerning(
1472 : _kerning(kerning_)
1476 Magick::DrawableTextKerning::~DrawableTextKerning(void)
1480 void Magick::DrawableTextKerning::operator()(
1481 MagickCore::DrawingWand *context_) const
1483 DrawSetTextKerning(context_,_kerning);
1486 void Magick::DrawableTextKerning::kerning(double kerning_)
1491 double Magick::DrawableTextKerning::kerning(void) const
1496 Magick::DrawableBase *Magick::DrawableTextKerning::copy() const
1498 return new DrawableTextKerning(*this);
1501 // Set text undercolor
1502 Magick::DrawableTextUnderColor::DrawableTextUnderColor
1503 ( const Magick::Color &color_ )
1507 Magick::DrawableTextUnderColor::DrawableTextUnderColor
1508 ( const Magick::DrawableTextUnderColor& original_ )
1509 : DrawableBase (original_),
1510 _color(original_._color)
1513 Magick::DrawableTextUnderColor::~DrawableTextUnderColor ( void )
1516 void Magick::DrawableTextUnderColor::operator()
1517 ( MagickCore::DrawingWand * context_ ) const
1519 PixelInfo color = static_cast<PixelInfo>(_color);
1520 PixelWand *pixel_wand=NewPixelWand();
1521 PixelSetPixelColor(pixel_wand,&color);
1522 DrawSetTextUnderColor(context_,pixel_wand);
1523 pixel_wand=DestroyPixelWand(pixel_wand);
1525 Magick::DrawableBase* Magick::DrawableTextUnderColor::copy() const
1527 return new DrawableTextUnderColor(*this);
1530 // Apply Translation
1531 Magick::DrawableTranslation::~DrawableTranslation ( void )
1534 void Magick::DrawableTranslation::operator()
1535 ( MagickCore::DrawingWand * context_ ) const
1537 DrawTranslate( context_, _x, _y );
1539 Magick::DrawableBase* Magick::DrawableTranslation::copy() const
1541 return new DrawableTranslation(*this);
1544 // Set the size of the viewbox
1545 Magick::DrawableViewbox::~DrawableViewbox ( void )
1548 void Magick::DrawableViewbox::operator()
1549 ( MagickCore::DrawingWand * context_ ) const
1551 DrawSetViewbox( context_, _x1, _y1, _x2, _y2 );
1553 Magick::DrawableBase* Magick::DrawableViewbox::copy() const
1555 return new DrawableViewbox(*this);
1565 MagickPPExport int Magick::operator == ( const Magick::PathArcArgs& /*left_*/,
1566 const Magick::PathArcArgs& /*right_*/ )
1570 MagickPPExport int Magick::operator != ( const Magick::PathArcArgs& /*left_*/,
1571 const Magick::PathArcArgs& /*right_*/ )
1575 MagickPPExport int Magick::operator > ( const Magick::PathArcArgs& /*left_*/,
1576 const Magick::PathArcArgs& /*right_*/ )
1580 MagickPPExport int Magick::operator < ( const Magick::PathArcArgs& /*left_*/,
1581 const Magick::PathArcArgs& /*right_*/ )
1585 MagickPPExport int Magick::operator >= ( const Magick::PathArcArgs& left_,
1586 const Magick::PathArcArgs& right_ )
1588 return ( ( left_ > right_ ) || ( left_ == right_ ) );
1590 MagickPPExport int Magick::operator <= ( const Magick::PathArcArgs& left_,
1591 const Magick::PathArcArgs& right_ )
1593 return ( ( left_ < right_ ) || ( left_ == right_ ) );
1595 // Default constructor
1596 Magick::PathArcArgs::PathArcArgs( void )
1600 _largeArcFlag(false),
1606 // Normal constructor
1607 Magick::PathArcArgs::PathArcArgs( double radiusX_, double radiusY_,
1608 double xAxisRotation_, bool largeArcFlag_,
1609 bool sweepFlag_, double x_, double y_ )
1610 : _radiusX(radiusX_),
1612 _xAxisRotation(xAxisRotation_),
1613 _largeArcFlag(largeArcFlag_),
1614 _sweepFlag(sweepFlag_),
1620 Magick::PathArcArgs::PathArcArgs( const Magick::PathArcArgs &original_ )
1621 : _radiusX(original_._radiusX),
1622 _radiusY(original_._radiusY),
1623 _xAxisRotation(original_._xAxisRotation),
1624 _largeArcFlag(original_._largeArcFlag),
1625 _sweepFlag(original_._sweepFlag),
1631 Magick::PathArcArgs::~PathArcArgs ( void )
1636 Magick::PathArcAbs::PathArcAbs ( const Magick::PathArcArgs &coordinates_ )
1637 : _coordinates(1,coordinates_)
1640 Magick::PathArcAbs::PathArcAbs ( const PathArcArgsList &coordinates_ )
1641 : _coordinates(coordinates_)
1644 Magick::PathArcAbs::PathArcAbs ( const Magick::PathArcAbs& original_ )
1645 : VPathBase (original_),
1646 _coordinates(original_._coordinates)
1649 Magick::PathArcAbs::~PathArcAbs ( void )
1652 void Magick::PathArcAbs::operator()( MagickCore::DrawingWand * context_ ) const
1654 for( PathArcArgsList::const_iterator p = _coordinates.begin();
1655 p != _coordinates.end(); p++ )
1657 DrawPathEllipticArcAbsolute( context_, p->radiusX(), p->radiusY(),
1658 p->xAxisRotation(), (MagickBooleanType) p->largeArcFlag(),
1659 (MagickBooleanType) p->sweepFlag(), p->x(), p->y() );
1662 Magick::VPathBase* Magick::PathArcAbs::copy() const
1664 return new PathArcAbs(*this);
1667 Magick::PathArcRel::PathArcRel ( const Magick::PathArcArgs &coordinates_ )
1668 : _coordinates(1,coordinates_)
1671 Magick::PathArcRel::PathArcRel ( const PathArcArgsList &coordinates_ )
1672 : _coordinates(coordinates_)
1675 Magick::PathArcRel::PathArcRel ( const Magick::PathArcRel& original_ )
1676 : VPathBase (original_),
1677 _coordinates(original_._coordinates)
1680 Magick::PathArcRel::~PathArcRel ( void )
1683 void Magick::PathArcRel::operator()( MagickCore::DrawingWand * context_ ) const
1685 for( PathArcArgsList::const_iterator p = _coordinates.begin();
1686 p != _coordinates.end(); p++ )
1688 DrawPathEllipticArcRelative( context_, p->radiusX(), p->radiusY(),
1689 p->xAxisRotation(), (MagickBooleanType) p->largeArcFlag(),
1690 (MagickBooleanType) p->sweepFlag(), p->x(), p->y() );
1693 Magick::VPathBase* Magick::PathArcRel::copy() const
1695 return new PathArcRel(*this);
1701 Magick::PathClosePath::~PathClosePath ( void )
1704 void Magick::PathClosePath::operator()( MagickCore::DrawingWand * context_ ) const
1706 DrawPathClose( context_ );
1708 Magick::VPathBase* Magick::PathClosePath::copy() const
1710 return new PathClosePath(*this);
1714 // Path Curveto (Cubic Bezier)
1716 MagickPPExport int Magick::operator == ( const Magick::PathCurvetoArgs& /*left_*/,
1717 const Magick::PathCurvetoArgs& /*right_*/ )
1721 MagickPPExport int Magick::operator != ( const Magick::PathCurvetoArgs& /*left_*/,
1722 const Magick::PathCurvetoArgs& /*right_*/ )
1726 MagickPPExport int Magick::operator > ( const Magick::PathCurvetoArgs& /*left_*/,
1727 const Magick::PathCurvetoArgs& /*right_*/ )
1731 MagickPPExport int Magick::operator < ( const Magick::PathCurvetoArgs& /*left_*/,
1732 const Magick::PathCurvetoArgs& /*right_*/ )
1736 MagickPPExport int Magick::operator >= ( const Magick::PathCurvetoArgs& left_,
1737 const Magick::PathCurvetoArgs& right_ )
1739 return ( ( left_ > right_ ) || ( left_ == right_ ) );
1741 MagickPPExport int Magick::operator <= ( const Magick::PathCurvetoArgs& left_,
1742 const Magick::PathCurvetoArgs& right_ )
1744 return ( ( left_ < right_ ) || ( left_ == right_ ) );
1746 // Default constructor
1747 Magick::PathCurvetoArgs::PathCurvetoArgs( void )
1756 // Normal constructor
1757 Magick::PathCurvetoArgs::PathCurvetoArgs( double x1_, double y1_,
1758 double x2_, double y2_,
1759 double x_, double y_ )
1769 Magick::PathCurvetoArgs::PathCurvetoArgs( const PathCurvetoArgs &original_ )
1770 : _x1(original_._x1),
1779 Magick::PathCurvetoArgs::~PathCurvetoArgs ( void )
1783 Magick::PathCurvetoAbs::PathCurvetoAbs ( const Magick::PathCurvetoArgs &args_ )
1787 Magick::PathCurvetoAbs::PathCurvetoAbs ( const PathCurveToArgsList &args_ )
1791 Magick::PathCurvetoAbs::PathCurvetoAbs
1792 ( const Magick::PathCurvetoAbs& original_ )
1793 : VPathBase (original_),
1794 _args(original_._args)
1797 Magick::PathCurvetoAbs::~PathCurvetoAbs ( void )
1800 void Magick::PathCurvetoAbs::operator()
1801 ( MagickCore::DrawingWand * context_ ) const
1803 for( PathCurveToArgsList::const_iterator p = _args.begin();
1804 p != _args.end(); p++ )
1806 DrawPathCurveToAbsolute( context_, p->x1(), p->y1(), p->x2(), p->y2(),
1810 Magick::VPathBase* Magick::PathCurvetoAbs::copy() const
1812 return new PathCurvetoAbs(*this);
1814 Magick::PathCurvetoRel::PathCurvetoRel ( const Magick::PathCurvetoArgs &args_ )
1818 Magick::PathCurvetoRel::PathCurvetoRel ( const PathCurveToArgsList &args_ )
1822 Magick::PathCurvetoRel::PathCurvetoRel
1823 ( const Magick::PathCurvetoRel& original_ )
1824 : VPathBase (original_),
1825 _args(original_._args)
1828 Magick::PathCurvetoRel::~PathCurvetoRel ( void )
1831 void Magick::PathCurvetoRel::operator()
1832 ( MagickCore::DrawingWand * context_ ) const
1834 for( PathCurveToArgsList::const_iterator p = _args.begin();
1835 p != _args.end(); p++ )
1837 DrawPathCurveToRelative( context_, p->x1(), p->y1(), p->x2(), p->y2(),
1841 Magick::VPathBase* Magick::PathCurvetoRel::copy() const
1843 return new PathCurvetoRel(*this);
1845 Magick::PathSmoothCurvetoAbs::PathSmoothCurvetoAbs
1846 ( const Magick::Coordinate &coordinates_ )
1847 : _coordinates(1,coordinates_)
1850 Magick::PathSmoothCurvetoAbs::PathSmoothCurvetoAbs
1851 ( const CoordinateList &coordinates_ )
1852 : _coordinates(coordinates_)
1855 Magick::PathSmoothCurvetoAbs::PathSmoothCurvetoAbs
1856 ( const Magick::PathSmoothCurvetoAbs& original_ )
1857 : VPathBase (original_),
1858 _coordinates(original_._coordinates)
1861 Magick::PathSmoothCurvetoAbs::~PathSmoothCurvetoAbs ( void )
1864 void Magick::PathSmoothCurvetoAbs::operator()
1865 ( MagickCore::DrawingWand * context_ ) const
1867 for( CoordinateList::const_iterator p = _coordinates.begin();
1868 p != _coordinates.end(); p++ )
1873 if(p != _coordinates.end() )
1874 DrawPathCurveToSmoothAbsolute( context_, x2, y2, p->x(), p->y() );
1877 Magick::VPathBase* Magick::PathSmoothCurvetoAbs::copy() const
1879 return new PathSmoothCurvetoAbs(*this);
1881 Magick::PathSmoothCurvetoRel::PathSmoothCurvetoRel
1882 ( const Magick::Coordinate &coordinates_ )
1883 : _coordinates(1,coordinates_)
1886 Magick::PathSmoothCurvetoRel::PathSmoothCurvetoRel
1887 ( const CoordinateList &coordinates_ )
1888 : _coordinates(coordinates_)
1891 Magick::PathSmoothCurvetoRel::PathSmoothCurvetoRel
1892 ( const Magick::PathSmoothCurvetoRel& original_ )
1893 : VPathBase (original_),
1894 _coordinates(original_._coordinates)
1897 Magick::PathSmoothCurvetoRel::~PathSmoothCurvetoRel ( void )
1900 void Magick::PathSmoothCurvetoRel::operator()
1901 ( MagickCore::DrawingWand * context_ ) const
1903 for( CoordinateList::const_iterator p = _coordinates.begin();
1904 p != _coordinates.end(); p++ )
1909 if(p != _coordinates.end() )
1910 DrawPathCurveToSmoothRelative( context_, x2, y2, p->x(), p->y() );
1913 Magick::VPathBase* Magick::PathSmoothCurvetoRel::copy() const
1915 return new PathSmoothCurvetoRel(*this);
1919 // Quadratic Curveto (Quadratic Bezier)
1921 MagickPPExport int Magick::operator ==
1922 ( const Magick::PathQuadraticCurvetoArgs& /*left_*/,
1923 const Magick::PathQuadraticCurvetoArgs& /*right_*/ )
1927 MagickPPExport int Magick::operator !=
1928 ( const Magick::PathQuadraticCurvetoArgs& /*left_*/,
1929 const Magick::PathQuadraticCurvetoArgs& /*right_*/ )
1933 MagickPPExport int Magick::operator >
1934 ( const Magick::PathQuadraticCurvetoArgs& /*left_*/,
1935 const Magick::PathQuadraticCurvetoArgs& /*right_*/ )
1939 MagickPPExport int Magick::operator <
1940 ( const Magick::PathQuadraticCurvetoArgs& /*left_*/,
1941 const Magick::PathQuadraticCurvetoArgs& /*right_*/ )
1945 MagickPPExport int Magick::operator >=
1946 ( const Magick::PathQuadraticCurvetoArgs& left_,
1947 const Magick::PathQuadraticCurvetoArgs& right_ )
1949 return ( ( left_ > right_ ) || ( left_ == right_ ) );
1951 MagickPPExport int Magick::operator <=
1952 ( const Magick::PathQuadraticCurvetoArgs& left_,
1953 const Magick::PathQuadraticCurvetoArgs& right_ )
1955 return ( ( left_ < right_ ) || ( left_ == right_ ) );
1957 // Default Constructor
1958 Magick::PathQuadraticCurvetoArgs::PathQuadraticCurvetoArgs( void )
1965 // Normal Constructor
1966 Magick::PathQuadraticCurvetoArgs::PathQuadraticCurvetoArgs( double x1_,
1977 Magick::PathQuadraticCurvetoArgs::PathQuadraticCurvetoArgs( const PathQuadraticCurvetoArgs &original_ )
1978 : _x1(original_._x1),
1985 Magick::PathQuadraticCurvetoArgs::~PathQuadraticCurvetoArgs ( void )
1989 Magick::PathQuadraticCurvetoAbs::PathQuadraticCurvetoAbs
1990 ( const Magick::PathQuadraticCurvetoArgs &args_ )
1994 Magick::PathQuadraticCurvetoAbs::PathQuadraticCurvetoAbs
1995 ( const PathQuadraticCurvetoArgsList &args_ )
1999 Magick::PathQuadraticCurvetoAbs::PathQuadraticCurvetoAbs
2000 ( const Magick::PathQuadraticCurvetoAbs& original_ )
2001 : VPathBase (original_),
2002 _args(original_._args)
2005 Magick::PathQuadraticCurvetoAbs::~PathQuadraticCurvetoAbs ( void )
2008 void Magick::PathQuadraticCurvetoAbs::operator()
2009 ( MagickCore::DrawingWand * context_ ) const
2011 for( PathQuadraticCurvetoArgsList::const_iterator p = _args.begin();
2012 p != _args.end(); p++ )
2014 DrawPathCurveToQuadraticBezierAbsolute( context_, p->x1(), p->y1(),
2018 Magick::VPathBase* Magick::PathQuadraticCurvetoAbs::copy() const
2020 return new PathQuadraticCurvetoAbs(*this);
2022 Magick::PathQuadraticCurvetoRel::PathQuadraticCurvetoRel
2023 ( const Magick::PathQuadraticCurvetoArgs &args_ )
2027 Magick::PathQuadraticCurvetoRel::PathQuadraticCurvetoRel
2028 ( const PathQuadraticCurvetoArgsList &args_ )
2032 Magick::PathQuadraticCurvetoRel::PathQuadraticCurvetoRel
2033 ( const Magick::PathQuadraticCurvetoRel& original_ )
2034 : VPathBase (original_),
2035 _args(original_._args)
2038 Magick::PathQuadraticCurvetoRel::~PathQuadraticCurvetoRel ( void )
2041 void Magick::PathQuadraticCurvetoRel::operator()
2042 ( MagickCore::DrawingWand * context_ ) const
2044 for( PathQuadraticCurvetoArgsList::const_iterator p = _args.begin();
2045 p != _args.end(); p++ )
2047 DrawPathCurveToQuadraticBezierRelative( context_, p->x1(), p->y1(),
2051 Magick::VPathBase* Magick::PathQuadraticCurvetoRel::copy() const
2053 return new PathQuadraticCurvetoRel(*this);
2055 Magick::PathSmoothQuadraticCurvetoAbs::PathSmoothQuadraticCurvetoAbs
2056 ( const Magick::Coordinate &coordinate_ )
2057 : _coordinates(1,coordinate_)
2060 Magick::PathSmoothQuadraticCurvetoAbs::PathSmoothQuadraticCurvetoAbs
2061 ( const CoordinateList &coordinates_ )
2062 : _coordinates(coordinates_)
2065 Magick::PathSmoothQuadraticCurvetoAbs::PathSmoothQuadraticCurvetoAbs
2066 ( const Magick::PathSmoothQuadraticCurvetoAbs& original_ )
2067 : VPathBase (original_),
2068 _coordinates(original_._coordinates)
2071 Magick::PathSmoothQuadraticCurvetoAbs::~PathSmoothQuadraticCurvetoAbs ( void )
2074 void Magick::PathSmoothQuadraticCurvetoAbs::operator()
2075 ( MagickCore::DrawingWand * context_ ) const
2077 for( CoordinateList::const_iterator p = _coordinates.begin();
2078 p != _coordinates.end(); p++ )
2080 DrawPathCurveToQuadraticBezierSmoothAbsolute( context_, p->x(), p->y() );
2083 Magick::VPathBase* Magick::PathSmoothQuadraticCurvetoAbs::copy() const
2085 return new PathSmoothQuadraticCurvetoAbs(*this);
2087 Magick::PathSmoothQuadraticCurvetoRel::PathSmoothQuadraticCurvetoRel
2088 ( const Magick::Coordinate &coordinate_ )
2089 : _coordinates(1,coordinate_)
2092 Magick::PathSmoothQuadraticCurvetoRel::PathSmoothQuadraticCurvetoRel
2093 ( const CoordinateList &coordinates_ )
2094 : _coordinates(coordinates_)
2097 Magick::PathSmoothQuadraticCurvetoRel::PathSmoothQuadraticCurvetoRel
2098 ( const PathSmoothQuadraticCurvetoRel& original_ )
2099 : VPathBase (original_),
2100 _coordinates(original_._coordinates)
2103 Magick::PathSmoothQuadraticCurvetoRel::~PathSmoothQuadraticCurvetoRel ( void )
2106 void Magick::PathSmoothQuadraticCurvetoRel::operator()
2107 ( MagickCore::DrawingWand * context_ ) const
2109 for( CoordinateList::const_iterator p = _coordinates.begin();
2110 p != _coordinates.end(); p++ )
2112 DrawPathCurveToQuadraticBezierSmoothRelative( context_, p->x(), p->y() );
2115 Magick::VPathBase* Magick::PathSmoothQuadraticCurvetoRel::copy() const
2117 return new PathSmoothQuadraticCurvetoRel(*this);
2123 Magick::PathLinetoAbs::PathLinetoAbs ( const Magick::Coordinate& coordinate_ )
2124 : _coordinates(1,coordinate_)
2127 Magick::PathLinetoAbs::PathLinetoAbs ( const CoordinateList &coordinates_ )
2128 : _coordinates(coordinates_)
2131 Magick::PathLinetoAbs::PathLinetoAbs ( const Magick::PathLinetoAbs& original_ )
2132 : VPathBase (original_),
2133 _coordinates(original_._coordinates)
2136 Magick::PathLinetoAbs::~PathLinetoAbs ( void )
2139 void Magick::PathLinetoAbs::operator()( MagickCore::DrawingWand * context_ ) const
2141 for( CoordinateList::const_iterator p = _coordinates.begin();
2142 p != _coordinates.end(); p++ )
2144 DrawPathLineToAbsolute( context_, p->x(), p->y() );
2147 Magick::VPathBase* Magick::PathLinetoAbs::copy() const
2149 return new PathLinetoAbs(*this);
2151 Magick::PathLinetoRel::PathLinetoRel ( const Magick::Coordinate& coordinate_ )
2152 : _coordinates(1,coordinate_)
2155 Magick::PathLinetoRel::PathLinetoRel ( const CoordinateList &coordinates_ )
2156 : _coordinates(coordinates_)
2159 Magick::PathLinetoRel::PathLinetoRel ( const Magick::PathLinetoRel& original_ )
2160 : VPathBase (original_),
2161 _coordinates(original_._coordinates)
2164 Magick::PathLinetoRel::~PathLinetoRel ( void )
2167 void Magick::PathLinetoRel::operator()( MagickCore::DrawingWand * context_ ) const
2169 for( CoordinateList::const_iterator p = _coordinates.begin();
2170 p != _coordinates.end(); p++ )
2172 DrawPathLineToRelative( context_, p->x(), p->y() );
2175 Magick::VPathBase* Magick::PathLinetoRel::copy() const
2177 return new PathLinetoRel(*this);
2181 // Path Horizontal Lineto
2184 Magick::PathLinetoHorizontalAbs::~PathLinetoHorizontalAbs ( void )
2187 void Magick::PathLinetoHorizontalAbs::operator()
2188 ( MagickCore::DrawingWand * context_ ) const
2190 DrawPathLineToHorizontalAbsolute( context_, _x );
2192 Magick::VPathBase* Magick::PathLinetoHorizontalAbs::copy() const
2194 return new PathLinetoHorizontalAbs(*this);
2196 Magick::PathLinetoHorizontalRel::~PathLinetoHorizontalRel ( void )
2199 void Magick::PathLinetoHorizontalRel::operator()
2200 ( MagickCore::DrawingWand * context_ ) const
2202 DrawPathLineToHorizontalRelative( context_, _x );
2204 Magick::VPathBase* Magick::PathLinetoHorizontalRel::copy() const
2206 return new PathLinetoHorizontalRel(*this);
2210 // Path Vertical Lineto
2212 Magick::PathLinetoVerticalAbs::~PathLinetoVerticalAbs ( void )
2215 void Magick::PathLinetoVerticalAbs::operator()
2216 ( MagickCore::DrawingWand * context_ ) const
2218 DrawPathLineToVerticalAbsolute( context_, _y );
2220 Magick::VPathBase* Magick::PathLinetoVerticalAbs::copy() const
2222 return new PathLinetoVerticalAbs(*this);
2224 Magick::PathLinetoVerticalRel::~PathLinetoVerticalRel ( void )
2227 void Magick::PathLinetoVerticalRel::operator()
2228 ( MagickCore::DrawingWand * context_ ) const
2230 DrawPathLineToVerticalRelative( context_, _y );
2232 Magick::VPathBase* Magick::PathLinetoVerticalRel::copy() const
2234 return new PathLinetoVerticalRel(*this);
2241 Magick::PathMovetoAbs::PathMovetoAbs ( const Magick::Coordinate &coordinate_ )
2242 : _coordinates(1,coordinate_)
2245 Magick::PathMovetoAbs::PathMovetoAbs ( const CoordinateList &coordinates_ )
2246 : _coordinates(coordinates_)
2249 Magick::PathMovetoAbs::PathMovetoAbs ( const Magick::PathMovetoAbs& original_ )
2250 : VPathBase (original_),
2251 _coordinates(original_._coordinates)
2254 Magick::PathMovetoAbs::~PathMovetoAbs ( void )
2257 void Magick::PathMovetoAbs::operator()( MagickCore::DrawingWand * context_ ) const
2259 for( CoordinateList::const_iterator p = _coordinates.begin();
2260 p != _coordinates.end(); p++ )
2262 DrawPathMoveToAbsolute( context_, p->x(), p->y() );
2265 Magick::VPathBase* Magick::PathMovetoAbs::copy() const
2267 return new PathMovetoAbs(*this);
2269 Magick::PathMovetoRel::PathMovetoRel ( const Magick::Coordinate &coordinate_ )
2270 : _coordinates(1,coordinate_)
2273 Magick::PathMovetoRel::PathMovetoRel ( const CoordinateList &coordinates_ )
2274 : _coordinates(coordinates_)
2277 Magick::PathMovetoRel::PathMovetoRel ( const Magick::PathMovetoRel& original_ )
2278 : VPathBase (original_),
2279 _coordinates(original_._coordinates)
2282 Magick::PathMovetoRel::~PathMovetoRel ( void )
2285 void Magick::PathMovetoRel::operator()( MagickCore::DrawingWand * context_ ) const
2287 for( CoordinateList::const_iterator p = _coordinates.begin();
2288 p != _coordinates.end(); p++ )
2290 DrawPathMoveToRelative( context_, p->x(), p->y() );
2293 Magick::VPathBase* Magick::PathMovetoRel::copy() const
2295 return new PathMovetoRel(*this);
2298 #if defined(EXPLICIT_TEMPLATE_INSTANTIATION)
2299 // template class std::vector<Magick::Coordinate>;
2300 // template class std::vector<const Magick::Drawable>;
2301 // template class std::vector<const Magick::PathArcArgs>;
2302 // template class std::vector<const Magick::PathCurvetoArgs>;
2303 // template class std::vector<const Magick::PathQuadraticCurvetoArgs>;
2304 // template class std::vector<const Magick::VPath>;