*/
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];
};
/**
*/
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