X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fbase%2Frs_ellipse.h;h=dc0588c6b64418e3126a34f9d793e6ec961d89f3;hb=27d4a138d23453e93a833e9347444b828a971cb4;hp=2c3e83e1e07fefed4e943d323c1c88da0f0d5c15;hpb=16ce54abf01ca3032e42a5bb11a4afcf9014dcca;p=architektonas diff --git a/src/base/rs_ellipse.h b/src/base/rs_ellipse.h index 2c3e83e..dc0588c 100644 --- a/src/base/rs_ellipse.h +++ b/src/base/rs_ellipse.h @@ -1,30 +1,3 @@ -/**************************************************************************** -** $Id: rs_ellipse.h 2367 2005-04-04 16:57:36Z andrew $ -** -** Copyright (C) 2001-2003 RibbonSoft. All rights reserved. -** -** This file is part of the qcadlib Library project. -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. -** -** Licensees holding valid qcadlib Professional Edition licenses may use -** this file in accordance with the qcadlib Commercial License -** Agreement provided with the Software. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -** See http://www.ribbonsoft.com for further details. -** -** Contact info@ribbonsoft.com if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ - - #ifndef RS_ELLIPSE_H #define RS_ELLIPSE_H @@ -33,229 +6,108 @@ /** * Holds the data that defines an ellipse. */ -class RS_EllipseData { -public: - RS_EllipseData(const Vector& center, - const Vector& majorP, - double ratio, - double angle1, double angle2, - bool reversed) { - - this->center = center; - this->majorP = majorP; - this->ratio = ratio; - this->angle1 = angle1; - this->angle2 = angle2; - this->reversed = reversed; - } - - friend class RS_Ellipse; - - friend std::ostream& operator << (std::ostream& os, const RS_EllipseData& ed) { - os << "(" << ed.center << - "/" << ed.majorP << - " " << ed.ratio << - " " << ed.angle1 << - "," << ed.angle2 << - ")"; - return os; - } - -private: - //! Ellipse center - Vector center; - //! Endpoint of major axis relative to center. - Vector majorP; - //! Ratio of minor axis to major axis. - double ratio; - //! Start angle - double angle1; - //! End angle - double angle2; - //! Reversed (cw) flag - bool reversed; +class RS_EllipseData +{ + public: + RS_EllipseData(const Vector & center, const Vector & majorP, double ratio, double angle1, double angle2, bool reversed) + { + this->center = center; + this->majorP = majorP; + this->ratio = ratio; + this->angle1 = angle1; + this->angle2 = angle2; + this->reversed = reversed; + } + + friend class RS_Ellipse; + + friend std::ostream & operator<<(std::ostream & os, const RS_EllipseData & ed) + { + os << "(" << ed.center + << "/" << ed.majorP + << " " << ed.ratio + << " " << ed.angle1 + << "," << ed.angle2 + << ")"; + return os; + } + + private: + //! Ellipse center + Vector center; + //! Endpoint of major axis relative to center. + Vector majorP; + //! Ratio of minor axis to major axis. + double ratio; + //! Start angle + double angle1; + //! End angle + double angle2; + //! Reversed (cw) flag + bool reversed; }; - - - /** * Class for an ellipse entity. All angles are in Rad. * * @author Andrew Mustun */ -class RS_Ellipse : public RS_AtomicEntity { -public: - RS_Ellipse(RS_EntityContainer* parent, - const RS_EllipseData& d); - virtual ~RS_Ellipse() {} - - virtual RS_Entity* clone() { - RS_Ellipse* e = new RS_Ellipse(*this); - e->initId(); - return e; - } - - /** @return RS2::EntityEllipse */ - virtual RS2::EntityType rtti() const { - return RS2::EntityEllipse; - } - - - /** - * @return Start point of the entity. - */ - virtual Vector getStartpoint() const { - Vector p; - p.set(data.center.x + cos(data.angle1) * getMajorRadius(), - data.center.y + sin(data.angle1) * getMinorRadius()); - p.rotate(data.center, getAngle()); - return p; - } - /** - * @return End point of the entity. - */ - virtual Vector getEndpoint() const { - Vector p; - p.set(data.center.x + cos(data.angle2) * getMajorRadius(), - data.center.y + sin(data.angle2) * getMinorRadius()); - p.rotate(data.center, getAngle()); - return p; - } - - virtual void moveStartpoint(const Vector& pos); - virtual void moveEndpoint(const Vector& pos); - - virtual RS2::Ending getTrimPoint(const Vector& coord, - const Vector& trimPoint); - - double getEllipseAngle(const Vector& pos); - - /** @return Copy of data that defines the ellipse. **/ - RS_EllipseData getData() { - return data; - } - - virtual VectorSolutions getRefPoints(); - - /** - * @retval true if the arc is reversed (clockwise), - * @retval false otherwise - */ - bool isReversed() const { - return data.reversed; - } - /** sets the reversed status. */ - void setReversed(bool r) { - data.reversed = r; - } - - /** @return The rotation angle of this ellipse */ - double getAngle() const { - return data.majorP.angle(); - } - - /** @return The start angle of this arc */ - double getAngle1() { - return data.angle1; - } - /** Sets new start angle. */ - void setAngle1(double a1) { - data.angle1 = a1; - } - /** @return The end angle of this arc */ - double getAngle2() { - return data.angle2; - } - /** Sets new end angle. */ - void setAngle2(double a2) { - data.angle2 = a2; - } - - - /** @return The center point (x) of this arc */ - Vector getCenter() { - return data.center; - } - /** Sets new center. */ - void setCenter(const Vector& c) { - data.center = c; - } - - /** @return The endpoint of the major axis (relative to center). */ - Vector getMajorP() { - return data.majorP; - } - /** Sets new major point (relative to center). */ - void setMajorP(const Vector& p) { - data.majorP = p; - } - - /** @return The ratio of minor to major axis */ - double getRatio() { - return data.ratio; - } - /** Sets new ratio. */ - void setRatio(double r) { - data.ratio = r; - } - - - /** - * @return Angle length in rad. - */ - virtual double getAngleLength() const { - if (isReversed()) { - return data.angle1-data.angle2; - } else { - return data.angle2-data.angle1; - } - } - - /** @return The major radius of this ellipse. Same as getRadius() */ - double getMajorRadius() const { - return data.majorP.magnitude(); - } - - /** @return The minor radius of this ellipse */ - double getMinorRadius() const { - return data.majorP.magnitude()*data.ratio; - } - - virtual Vector getNearestEndpoint(const Vector& coord, - double* dist = NULL); - virtual Vector getNearestPointOnEntity(const Vector& coord, - bool onEntity = true, double* dist = NULL, RS_Entity** entity=NULL); - virtual Vector getNearestCenter(const Vector& coord, - double* dist = NULL); - virtual Vector getNearestMiddle(const Vector& coord, - double* dist = NULL); - virtual Vector getNearestDist(double distance, - const Vector& coord, - double* dist = NULL); - virtual double getDistanceToPoint(const Vector& coord, - RS_Entity** entity=NULL, - RS2::ResolveLevel level=RS2::ResolveNone, - double solidDist = RS_MAXDOUBLE); - virtual bool isPointOnEntity(const Vector& coord, - double tolerance=RS_TOLERANCE); - - virtual void move(Vector offset); - virtual void rotate(Vector center, double angle); - virtual void scale(Vector center, Vector factor); - virtual void mirror(Vector axisPoint1, Vector axisPoint2); - virtual void moveRef(const Vector& ref, const Vector& offset); - -// virtual void draw(RS_Painter* painter, RS_GraphicView* view, double patternOffset=0.0); - virtual void draw(PaintInterface * painter, RS_GraphicView * view, double patternOffset = 0.0); - - friend std::ostream & operator<<(std::ostream & os, const RS_Ellipse & a); - - //virtual void calculateEndpoints(); - virtual void calculateBorders(); - -protected: - RS_EllipseData data; +class RS_Ellipse: public RS_AtomicEntity +{ + public: + RS_Ellipse(RS_EntityContainer * parent, const RS_EllipseData & d); + virtual ~RS_Ellipse(); + + virtual RS_Entity * clone(); + virtual RS2::EntityType rtti() const; + virtual Vector getStartpoint() const; + virtual Vector getEndpoint() const; + virtual void moveStartpoint(const Vector & pos); + virtual void moveEndpoint(const Vector & pos); + virtual RS2::Ending getTrimPoint(const Vector & coord, const Vector & trimPoint); + double getEllipseAngle(const Vector & pos); + RS_EllipseData getData(); + virtual VectorSolutions getRefPoints(); + bool isReversed() const; + void setReversed(bool r); + double getAngle() const; + double getAngle1(); + void setAngle1(double a1); + double getAngle2(); + void setAngle2(double a2); + Vector getCenter(); + void setCenter(const Vector & c); + Vector getMajorP(); + void setMajorP(const Vector & p); + double getRatio(); + void setRatio(double r); + virtual double getAngleLength() const; + double getMajorRadius() const; + double getMinorRadius() const; + + virtual Vector getNearestEndpoint(const Vector & coord, double * dist = NULL); + virtual Vector getNearestPointOnEntity(const Vector & coord, bool onEntity = true, double * dist = NULL, RS_Entity ** entity = NULL); + virtual Vector getNearestCenter(const Vector & coord, double * dist = NULL); + virtual Vector getNearestMiddle(const Vector & coord, double * dist = NULL); + virtual Vector getNearestDist(double distance, const Vector & coord, double * dist = NULL); + virtual double getDistanceToPoint(const Vector & coord, RS_Entity ** entity = NULL, RS2::ResolveLevel level = RS2::ResolveNone, double solidDist = RS_MAXDOUBLE); + virtual bool isPointOnEntity(const Vector & coord, double tolerance = RS_TOLERANCE); + + virtual void move(Vector offset); + virtual void rotate(Vector center, double angle); + virtual void scale(Vector center, Vector factor); + virtual void mirror(Vector axisPoint1, Vector axisPoint2); + virtual void moveRef(const Vector & ref, const Vector & offset); + + virtual void draw(PaintInterface * painter, GraphicView * view, double patternOffset = 0.0); + + friend std::ostream & operator<<(std::ostream & os, const RS_Ellipse & a); + + //virtual void calculateEndpoints(); + virtual void calculateBorders(); + + protected: + RS_EllipseData data; }; #endif