#include "object.h"
-enum DimensionType { DTLinear, DTRadial, DTDiametric, DTCircumferential, DTLeader };
+class Line;
+
+enum DimensionType { DTLinear, DTLinearVert, DTLinearHorz, DTRadial, DTDiametric, DTCircumferential, DTAngular, DTLeader };
class Dimension: public Object
{
+ friend class Line;
+ friend class Geometry;
+
public:
Dimension(Vector, Vector, DimensionType dt = DTLinear, Object * p = 0);
- Dimension(Vector *, Vector *, DimensionType dt = DTLinear, Object * p = 0);
~Dimension();
virtual void Draw(Painter *);
virtual Vector Center(void);
virtual bool Collided(Vector);
- virtual void PointerMoved(Vector);
+ virtual bool PointerMoved(Vector);
virtual void PointerReleased(void);
+ virtual bool HitTest(Point);
virtual void Enumerate(FILE *);
virtual Object * Copy(void);
- void SetPoint1(Vector *);
- void SetPoint2(Vector *);
- Vector GetPoint1(void);
- Vector GetPoint2(void);
+ virtual Vector GetPointAtParameter(double parameter);
+ virtual void MovePointAtParameter(double parameter, Vector);
+ virtual QRectF Extents(void);
void FlipSides(void);
+ protected:
+ void SaveHitState(void);
+ bool HitStateChanged(void);
+
protected:
Vector endpoint; // Starting point is Object::position
Vector oldPoint; // Used for dragging
+ Point oldEndpoint;
+ Point linePt1, linePt2; // Used for testing dimension line hits
private:
bool dragging;
bool draggingHandle2;
bool objectWasDragged;
double length;
- DimensionType type;
-
- Vector * point1; // These couple to external points; if there
- Vector * point2; // are none then fall back to endpoint/position
+ DimensionType dimensionType;
+ bool hitPoint1;
+ bool hitPoint2;
+ bool hitLine;
+ bool hitFlipSwitch;
+ bool oldHitPoint1, oldHitPoint2, oldHitLine, oldHitFlipSwitch;
+ public:
+ double size; // Size of arrows/text in base units
};
#endif // __DIMENSION_H__