1/* 2 * Copyright 2005, Stephan A��mus <superstippi@gmx.de>. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Simple BShape to agg::path_storage converter, implemented as BShapeIterator. 6 * 7 */ 8 9 10#include "ShapeConverter.h" 11 12// constructor 13ShapeConverter::ShapeConverter() 14 : BShapeIterator(), 15 Transformable(), 16 fPath(NULL) 17{ 18} 19 20// constructor 21ShapeConverter::ShapeConverter(agg::path_storage* path) 22 : BShapeIterator(), 23 Transformable(), 24 fPath(path) 25{ 26} 27 28// SetPath 29void 30ShapeConverter::SetPath(agg::path_storage* path) 31{ 32 fPath = path; 33} 34 35// IterateMoveTo 36status_t 37ShapeConverter::IterateMoveTo(BPoint* point) 38{ 39 double x = point->x; 40 double y = point->y; 41 Transform(&x, &y); 42 43 fPath->move_to(x, y); 44 45 return B_OK; 46} 47 48// IterateLineTo 49status_t 50ShapeConverter::IterateLineTo(int32 lineCount, BPoint* linePts) 51{ 52 while (lineCount--) { 53 54 double x = linePts->x; 55 double y = linePts->y; 56 Transform(&x, &y); 57 58 fPath->line_to(x, y); 59 60 linePts++; 61 } 62 return B_OK; 63} 64 65// IterateBezierTo 66status_t 67ShapeConverter::IterateBezierTo(int32 bezierCount, BPoint* bezierPts) 68{ 69 bezierCount /= 3; 70 while (bezierCount--) { 71 72 double x1 = bezierPts[0].x; 73 double y1 = bezierPts[0].y; 74 75 double x2 = bezierPts[1].x; 76 double y2 = bezierPts[1].y; 77 78 double x3 = bezierPts[2].x; 79 double y3 = bezierPts[2].y; 80 81 Transform(&x1, &y1); 82 Transform(&x2, &y2); 83 Transform(&x3, &y3); 84 85 fPath->curve4(x1, y1, x2, y2, x3, y3); 86 87 bezierPts += 3; 88 } 89 return B_OK; 90} 91 92// IterateClose 93status_t 94ShapeConverter::IterateClose() 95{ 96 fPath->close_polygon(); 97 return B_OK; 98} 99