]> Shamusworld >> Repos - architektonas/blob - src/dimension.h
Fixed Dimension class to rotate, translate & mirror correctly.
[architektonas] / src / dimension.h
1 #ifndef __DIMENSION_H__
2 #define __DIMENSION_H__
3
4 #include "object.h"
5
6 class Line;
7
8 enum DimensionType { DTLinear, DTLinearVert, DTLinearHorz, DTRadial, DTDiametric, DTCircumferential, DTAngular, DTLeader };
9
10 class Dimension: public Object
11 {
12         friend class Line;
13         friend class Geometry;
14
15         public:
16                 Dimension(Vector, Vector, DimensionType dt = DTLinear, Object * p = 0);
17                 ~Dimension();
18
19                 virtual void Draw(Painter *);
20                 virtual Vector Center(void);
21                 virtual bool Collided(Vector);
22                 virtual bool PointerMoved(Vector);
23                 virtual void PointerReleased(void);
24                 virtual bool HitTest(Point);
25                 virtual void Translate(Vector);
26                 virtual void Rotate(Point, double);
27                 virtual void Mirror(Point, Point);
28                 virtual void Save(void);
29                 virtual void Restore(void);
30                 virtual void Enumerate(FILE *);
31                 virtual Object * Copy(void);
32                 virtual Vector GetPointAtParameter(double parameter);
33                 virtual void MovePointAtParameter(double parameter, Vector);
34                 virtual QRectF Extents(void);
35                 void FlipSides(void);
36
37         protected:
38                 void SaveHitState(void);
39                 bool HitStateChanged(void);
40
41         protected:
42                 Vector endpoint;                                        // Starting point is Object::position
43                 Vector oldPoint;                                        // Used for dragging
44                 Point oldEndpoint;
45                 Point linePt1, linePt2;                         // Used for testing dimension line hits
46
47         private:
48                 bool dragging;
49                 bool draggingHandle1;
50                 bool draggingHandle2;
51                 bool objectWasDragged;
52                 double length;
53                 DimensionType dimensionType;
54                 bool hitPoint1;
55                 bool hitPoint2;
56                 bool hitLine;
57                 bool hitFlipSwitch;
58                 bool hitChangeSwitch1;
59                 bool hitChangeSwitch2;
60                 bool oldHitPoint1, oldHitPoint2, oldHitLine, oldHitFlipSwitch, oldHitChangeSwitch1, oldHitChangeSwitch2;
61         public:
62                 double size;                                            // Size of arrows/text in base units
63 };
64
65 #endif  // __DIMENSION_H__