X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fbase%2Frs_solid.h;h=d2f8761a020c36a131d685f9e35724f55d72f2b1;hb=27d4a138d23453e93a833e9347444b828a971cb4;hp=ab7a543a9b41911e23beb7ab814b3f923a689964;hpb=89e127aa3dbd74d3158e6dbe0ca1703420c04395;p=architektonas diff --git a/src/base/rs_solid.h b/src/base/rs_solid.h index ab7a543..d2f8761 100644 --- a/src/base/rs_solid.h +++ b/src/base/rs_solid.h @@ -9,57 +9,53 @@ */ class RS_SolidData { -public: - /** - * Default constructor. Leaves the data object uninitialized. - */ - RS_SolidData() { - for (int i=0; i<4; ++i) { - corner[i] = Vector(false); - } - } - - /** - * Constructor for a solid with 3 corners. - */ - RS_SolidData(const Vector& corner1, - const Vector& corner2, - const Vector& corner3) { - - corner[0] = corner1; - corner[1] = corner2; - corner[2] = corner3; - corner[3] = Vector(false); - } - - /** - * Constructor for a solid with 4 corners. - */ - RS_SolidData(const Vector& corner1, - const Vector& corner2, - const Vector& corner3, - const Vector& corner4) { - - corner[0] = corner1; - corner[1] = corner2; - corner[2] = corner3; - corner[3] = corner4; - } - - friend class RS_Solid; - - friend std::ostream& operator << (std::ostream& os, - const RS_SolidData& pd) { - os << "("; - for (int i=0; i<4; i++) { - os << pd.corner[i]; - } - os << ")"; - return os; - } - -private: - Vector corner[4]; + public: + /** + * Default constructor. Leaves the data object uninitialized. + */ + RS_SolidData() + { + for(int i=0; i<4; ++i) + corner[i] = Vector(false); + } + + /** + * Constructor for a solid with 3 corners. + */ + RS_SolidData(const Vector & corner1, const Vector & corner2, const Vector & corner3) + { + corner[0] = corner1; + corner[1] = corner2; + corner[2] = corner3; + corner[3] = Vector(false); + } + + /** + * Constructor for a solid with 4 corners. + */ + RS_SolidData(const Vector & corner1, const Vector & corner2, const Vector & corner3, const Vector & corner4) + { + corner[0] = corner1; + corner[1] = corner2; + corner[2] = corner3; + corner[3] = corner4; + } + + friend class RS_Solid; + + friend std::ostream & operator<<(std::ostream & os, const RS_SolidData & pd) + { + os << "("; + + for(int i=0; i<4; i++) + os << pd.corner[i]; + + os << ")"; + return os; + } + + private: + Vector corner[4]; }; /** @@ -69,75 +65,39 @@ private: */ class RS_Solid: public RS_AtomicEntity { -public: - RS_Solid(RS_EntityContainer* parent, - const RS_SolidData& d); - - virtual RS_Entity* clone() { - RS_Solid* s = new RS_Solid(*this); - s->initId(); - return s; - } - - /** @return RS_ENTITY_POINT */ - virtual RS2::EntityType rtti() const { - return RS2::EntitySolid; - } - - /** - * @return Start point of the entity. - */ - virtual Vector getStartpoint() const { - return Vector(false); - } - /** - * @return End point of the entity. - */ - virtual Vector getEndpoint() const { - return Vector(false); - } - - - /** @return Copy of data that defines the point. */ - RS_SolidData getData() const { - return data; - } - - /** @return true if this is a triangle. */ - bool isTriangle() { - return !data.corner[3].valid; - } - - Vector getCorner(int num); - - void shapeArrow(const Vector & point, double angle, double arrowSize); - - 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 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 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_Solid & p); - - /** Recalculates the borders of this entity. */ - virtual void calculateBorders (); - -protected: - RS_SolidData data; - //Vector point; + public: + RS_Solid(RS_EntityContainer * parent, const RS_SolidData & d); + + virtual RS_Entity * clone(); + virtual RS2::EntityType rtti() const; + virtual Vector getStartpoint() const; + virtual Vector getEndpoint() const; + RS_SolidData getData() const; + bool isTriangle(); + Vector getCorner(int num); + void shapeArrow(const Vector & point, double angle, double arrowSize); + + 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 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 draw(PaintInterface * painter, GraphicView * view, double patternOffset = 0.0); + + friend std::ostream & operator<<(std::ostream & os, const RS_Solid & p); + + /** Recalculates the borders of this entity. */ + virtual void calculateBorders (); + + protected: + RS_SolidData data; }; #endif