#ifndef __OBJECT_H__
#define __OBJECT_H__
+#include <stdio.h>
#include <vector> // This is a container
#include "vector.h" // This is the mathematical construct
+#include "connection.h"
+#include <QRectF>
class Painter;
class QFont;
class Dimension;
+//class FILE;
enum ObjectState { OSInactive, OSSelected };
+enum ObjectType { OTNone, OTObject, OTLine, OTCircle, OTArc, OTDimension, OTEllipse, OTContainer };
class Object
{
virtual void PointerMoved(Vector);
virtual void PointerReleased(void);
virtual bool NeedsUpdate(void);
+ virtual bool HitTest(Point);
virtual void Transmute(Object *, Object *);
virtual Object * GetParent(void);
virtual void Add(Object *);
+ virtual Vector * GetPointAt(Vector);
+ virtual void Enumerate(FILE *);
+ virtual Object * Copy(void);
+ virtual Vector GetPointAtParameter(double parameter);
+ virtual void Connect(Object *, double);
+ virtual void Disconnect(Object *, double);
+ virtual void DisconnectAll(Object *);
+ virtual QRectF Extents(void);
+// virtual ObjectType Type(void);// = 0; // Pure virtual, must be implemented
+ virtual void Translate(Vector);
+ virtual void Rotate(Vector, double);
+ virtual void Scale(Vector, double);
ObjectState GetState(void);
void Reparent(Object *);
+// Dimension * GetAttachedDimension(void);
//Hm. Object * Connect(Object *);
// Class methods
Object * parent;
// Pen pen;
// Fill fill;
+ public:
+ ObjectType type;
ObjectState state;
+ protected:
ObjectState oldState;
bool needUpdate;
- Dimension * attachedDimension;
- std::vector<Object *> connected;
+// Dimension * attachedDimension;
+ std::vector<Connection> connected;
// Class variables
static QFont * font;
static int viewportHeight;
static bool deleteActive;
static bool dimensionActive;
+ public:
static bool snapToGrid;
+ static bool ignoreClicks;
+ static bool dontMove;
+ public:
+ static bool selectionInProgress;
+ static QRectF selection;
};
#endif // __OBJECT_H__