From 233845c07587f8f078cc167831b94f2d4692dfcf Mon Sep 17 00:00:00 2001 From: William Joye Date: Mon, 13 Mar 2017 11:52:18 -0400 Subject: simplify code --- tksao/frame/basefill.C | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++ tksao/frame/basefill.h | 19 +++++++++++++ tksao/frame/circle.C | 57 ++++--------------------------------- tksao/frame/circle.h | 2 +- tksao/frame/ellipse.C | 59 +++++--------------------------------- tksao/frame/ellipse.h | 2 +- 6 files changed, 111 insertions(+), 105 deletions(-) diff --git a/tksao/frame/basefill.C b/tksao/frame/basefill.C index 458ea12..4da1ae5 100644 --- a/tksao/frame/basefill.C +++ b/tksao/frame/basefill.C @@ -6,6 +6,8 @@ #include "basefill.h" +// BaseFill + BaseFill::BaseFill(const BaseFill& a) { fill_ = a.fill_; @@ -20,3 +22,78 @@ BaseFill::BaseFill(int ff) { fill_ =ff; } + +// BaseFillEllipse + +BaseFillEllipse::BaseFillEllipse(const BaseFillEllipse& a) : BaseFill(a) {} + +BaseFillEllipse::BaseFillEllipse() : BaseFill() {} + +BaseFillEllipse::BaseFillEllipse(int ff) : BaseFill(ff) {} + +void BaseFillEllipse::renderXCircleDraw(Display* display, Drawable drawable, + GC lgc, + Vector& st, Vector& size, + int a1, int aa) +{ + if (fill_) + XFillArc(display, drawable, lgc, st[0], st[1], size[0], size[1], a1, aa); + else + XDrawArc(display, drawable, lgc, st[0], st[1], size[0], size[1], a1, aa); +} + +void BaseFillEllipse::renderPSCircleDraw(Base* parent, + Vector& cc, double l, + float a1, float a2) +{ + ostringstream str; + str << "newpath " + << cc.TkCanvasPs(parent->getCanvas()) << ' ' + << l << ' ' + << a1 << ' ' << a2 << ' ' + << "arc "; + if (fill_) + str << "fill"; + else + str << "stroke"; + str << endl << ends; + + Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); +} + +void BaseFillEllipse::renderPSEllipseArcDraw(Base* parent, Vector& center, + Vector& tt0, Vector& xx1, + Vector& xx2, Vector& tt1) +{ + ostringstream str; + if (fill_) { + Vector cc = parent->mapFromRef(center,Coord::CANVAS); + + str << "newpath " + << tt0.TkCanvasPs(parent->getCanvas()) << ' ' + << "moveto " + << xx1.TkCanvasPs(parent->getCanvas()) << ' ' + << xx2.TkCanvasPs(parent->getCanvas()) << ' ' + << tt1.TkCanvasPs(parent->getCanvas()) << ' ' + << "curveto fill" << endl + << "newpath " + << cc.TkCanvasPs(parent->getCanvas()) << ' ' + << "moveto " + << tt0.TkCanvasPs(parent->getCanvas()) << ' ' + << "lineto " + << tt1.TkCanvasPs(parent->getCanvas()) << ' ' + << "lineto closepath gsave" << endl + << "1 setlinejoin .75 setlinewidth stroke" << endl + << "grestore fill" << endl << ends; + } + else + str << "newpath " + << tt0.TkCanvasPs(parent->getCanvas()) << ' ' + << "moveto " + << xx1.TkCanvasPs(parent->getCanvas()) << ' ' + << xx2.TkCanvasPs(parent->getCanvas()) << ' ' + << tt1.TkCanvasPs(parent->getCanvas()) << ' ' + << "curveto stroke" << endl << ends; + + Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); +} diff --git a/tksao/frame/basefill.h b/tksao/frame/basefill.h index 4b586c1..f50adcf 100644 --- a/tksao/frame/basefill.h +++ b/tksao/frame/basefill.h @@ -5,10 +5,16 @@ #ifndef __basefill_h__ #define __basefill_h__ +#include "vector.h" +#include "base.h" + class BaseFill { protected: int fill_; + protected: + void doit(); + public: BaseFill(); BaseFill(int); @@ -18,4 +24,17 @@ class BaseFill { int getFill() {return fill_;} }; +class BaseFillEllipse : public BaseFill { + protected: + void renderXCircleDraw(Display*, Drawable, GC, Vector&, Vector&, int, int); + void renderPSCircleDraw(Base*, Vector&, double, float, float); + void renderPSEllipseArcDraw(Base*, Vector&, Vector&, Vector&, + Vector&, Vector&); + + public: + BaseFillEllipse(); + BaseFillEllipse(int); + BaseFillEllipse(const BaseFillEllipse& a); +}; + #endif diff --git a/tksao/frame/circle.C b/tksao/frame/circle.C index 3ea410f..3015d07 100644 --- a/tksao/frame/circle.C +++ b/tksao/frame/circle.C @@ -7,10 +7,10 @@ #include "circle.h" #include "fitsimage.h" -Circle::Circle(const Circle& a) : BaseEllipse(a), BaseFill(a) {} +Circle::Circle(const Circle& a) : BaseEllipse(a), BaseFillEllipse(a) {} Circle::Circle(Base* p, const Vector& ctr, double r, int fill) - : BaseEllipse(p, ctr, 0), BaseFill(fill) + : BaseEllipse(p, ctr, 0), BaseFillEllipse(fill) { numAnnuli_ = 1; annuli_ = new Vector[1]; @@ -29,7 +29,7 @@ Circle::Circle(Base* p, const Vector& ctr, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BaseEllipse(p, ctr, 0, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb), - BaseFill(fill) + BaseFillEllipse(fill) { numAnnuli_ = 1; annuli_ = new Vector[numAnnuli_]; @@ -58,63 +58,18 @@ void Circle::renderXCircleDraw(Drawable drawable, GC lgc, Vector& st, Vector& size, int a1, int aa) { - if (fill_) - XFillArc(display, drawable, lgc, st[0], st[1], size[0], size[1], a1, aa); - else - XDrawArc(display, drawable, lgc, st[0], st[1], size[0], size[1], a1, aa); + BaseFillEllipse::renderXCircleDraw(display, drawable, lgc, st, size, a1, aa); } void Circle::renderPSCircleDraw(Vector& cc, double l, float a1, float a2) { - ostringstream str; - str << "newpath " - << cc.TkCanvasPs(parent->canvas) << ' ' - << l << ' ' - << a1 << ' ' << a2 << ' ' - << "arc "; - if (fill_) - str << "fill"; - else - str << "stroke"; - str << endl << ends; - - Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); + BaseFillEllipse::renderPSCircleDraw(parent, cc, l, a1, a2); } void Circle::renderPSEllipseArcDraw(Vector& tt0, Vector& xx1, Vector& xx2, Vector& tt1) { - ostringstream str; - if (fill_) { - Vector cc = parent->mapFromRef(center,Coord::CANVAS); - - str << "newpath " - << tt0.TkCanvasPs(parent->canvas) << ' ' - << "moveto " - << xx1.TkCanvasPs(parent->canvas) << ' ' - << xx2.TkCanvasPs(parent->canvas) << ' ' - << tt1.TkCanvasPs(parent->canvas) << ' ' - << "curveto fill" << endl - << "newpath " - << cc.TkCanvasPs(parent->canvas) << ' ' - << "moveto " - << tt0.TkCanvasPs(parent->canvas) << ' ' - << "lineto " - << tt1.TkCanvasPs(parent->canvas) << ' ' - << "lineto closepath gsave" << endl - << "1 setlinejoin .75 setlinewidth stroke" << endl - << "grestore fill" << endl << ends; - } - else - str << "newpath " - << tt0.TkCanvasPs(parent->canvas) << ' ' - << "moveto " - << xx1.TkCanvasPs(parent->canvas) << ' ' - << xx2.TkCanvasPs(parent->canvas) << ' ' - << tt1.TkCanvasPs(parent->canvas) << ' ' - << "curveto stroke" << endl << ends; - - Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); + BaseFillEllipse::renderPSEllipseArcDraw(parent, center, tt0, xx1, xx2, tt1); } void Circle::analysis(AnalysisTask mm, int which) diff --git a/tksao/frame/circle.h b/tksao/frame/circle.h index c59de03..1d7ff77 100644 --- a/tksao/frame/circle.h +++ b/tksao/frame/circle.h @@ -8,7 +8,7 @@ #include "baseellipse.h" #include "basefill.h" -class Circle : public BaseEllipse, public BaseFill { +class Circle : public BaseEllipse, public BaseFillEllipse { protected: void renderXCircleDraw(Drawable, GC, Vector&, Vector&, int, int); void renderPSCircleDraw(Vector& cc, double l, float a1, float a2); diff --git a/tksao/frame/ellipse.C b/tksao/frame/ellipse.C index e6d3a9c..7992090 100644 --- a/tksao/frame/ellipse.C +++ b/tksao/frame/ellipse.C @@ -7,11 +7,11 @@ #include "ellipse.h" #include "fitsimage.h" -Ellipse::Ellipse(const Ellipse& a) : BaseEllipse(a), BaseFill(a) {} +Ellipse::Ellipse(const Ellipse& a) : BaseEllipse(a), BaseFillEllipse(a) {} Ellipse::Ellipse(Base* p, const Vector& ctr, const Vector& r, double ang, int fill) - : BaseEllipse(p, ctr, ang), BaseFill(fill) + : BaseEllipse(p, ctr, ang), BaseFillEllipse(fill) { numAnnuli_ = 1; annuli_ = new Vector[1]; @@ -30,7 +30,7 @@ Ellipse::Ellipse(Base* p, const Vector& ctr, unsigned short prop, const char* cmt, const List& tg, const List& cb) : BaseEllipse(p, ctr, ang, clr, dsh, wth, fnt, txt, prop, cmt, tg, cb), - BaseFill(fill) + BaseFillEllipse(fill) { numAnnuli_ = 1; annuli_ = new Vector[1]; @@ -46,63 +46,18 @@ void Ellipse::renderXCircleDraw(Drawable drawable, GC lgc, Vector& st, Vector& size, int a1, int aa) { - if (fill_) - XFillArc(display, drawable, lgc, st[0], st[1], size[0], size[1], a1, aa); - else - XDrawArc(display, drawable, lgc, st[0], st[1], size[0], size[1], a1, aa); + BaseFillEllipse::renderXCircleDraw(display, drawable, lgc, st, size, a1, aa); } void Ellipse::renderPSCircleDraw(Vector& cc, double l, float a1, float a2) { - ostringstream str; - str << "newpath " - << cc.TkCanvasPs(parent->canvas) << ' ' - << l << ' ' - << a1 << ' ' << a2 << ' ' - << "arc "; - if (fill_) - str << "fill"; - else - str << "stroke"; - str << endl << ends; - - Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); + BaseFillEllipse::renderPSCircleDraw(parent, cc, l, a1, a2); } void Ellipse::renderPSEllipseArcDraw(Vector& tt0, Vector& xx1, - Vector& xx2, Vector& tt1) + Vector& xx2, Vector& tt1) { - ostringstream str; - if (fill_) { - Vector cc = parent->mapFromRef(center,Coord::CANVAS); - - str << "newpath " - << tt0.TkCanvasPs(parent->canvas) << ' ' - << "moveto " - << xx1.TkCanvasPs(parent->canvas) << ' ' - << xx2.TkCanvasPs(parent->canvas) << ' ' - << tt1.TkCanvasPs(parent->canvas) << ' ' - << "curveto fill" << endl - << "newpath " - << cc.TkCanvasPs(parent->canvas) << ' ' - << "moveto " - << tt0.TkCanvasPs(parent->canvas) << ' ' - << "lineto " - << tt1.TkCanvasPs(parent->canvas) << ' ' - << "lineto closepath gsave" << endl - << "1 setlinejoin .75 setlinewidth stroke" << endl - << "grestore fill" << endl << ends; - } - else - str << "newpath " - << tt0.TkCanvasPs(parent->canvas) << ' ' - << "moveto " - << xx1.TkCanvasPs(parent->canvas) << ' ' - << xx2.TkCanvasPs(parent->canvas) << ' ' - << tt1.TkCanvasPs(parent->canvas) << ' ' - << "curveto stroke" << endl << ends; - - Tcl_AppendResult(parent->interp, str.str().c_str(), NULL); + BaseFillEllipse::renderPSEllipseArcDraw(parent, center, tt0, xx1, xx2, tt1); } void Ellipse::edit(const Vector& v, int h) diff --git a/tksao/frame/ellipse.h b/tksao/frame/ellipse.h index 27d6184..25bf115 100644 --- a/tksao/frame/ellipse.h +++ b/tksao/frame/ellipse.h @@ -8,7 +8,7 @@ #include "baseellipse.h" #include "basefill.h" -class Ellipse : public BaseEllipse, public BaseFill { +class Ellipse : public BaseEllipse, public BaseFillEllipse { protected: void renderXCircleDraw(Drawable, GC, Vector&, Vector&, int, int); void renderPSCircleDraw(Vector& cc, double l, float a1, float a2); -- cgit v0.12