ELVE  1
ELVE Logic Visualization Explorer
/home/travis/build/stdgregwar/elve/Core/System.h
00001 #ifndef SYSTEM_H
00002 #define SYSTEM_H
00003 
00004 #include "Point.h"
00005 #include "Spring.h"
00006 #include "Force.h"
00007 #include "Gravity.h"
00008 #include "Damp.h"
00009 #include "Constraint.h"
00010 #include "Graph.h"
00011 #include "BoxConstraint.h"
00012 #include "interfaces/NodeLook.h"
00013 
00014 #include <vector>
00015 #include <unordered_map>
00016 
00017 namespace Elve {
00018 
00019 enum GravityMode {
00020     FULL,
00021     GHOST,
00022     NONE
00023 };
00024 
00025 typedef std::unordered_map<NodeID,QVector2D> NodePositions;
00026 typedef std::unordered_map<NodeID,Point*> PointsByID;
00027 
00028 class System
00029 {
00030 public:
00031     System();
00032     void tick(float dt,bool update = true);
00033     Point* addPoint(qreal mass, const NodeID& id, QVector2D pos, qreal damp, GravityMode g = FULL);
00034     Point* point(const NodeID& id);
00035     void addSpring(unsigned i, unsigned j, qreal k, qreal l0);
00036     void addSpring(Point* mi, Point* mj, qreal k, qreal l0);
00037     void addVConstraint(Point* m, qreal height);
00038     void addHConstraint(Point* m, qreal pos);
00039     void addPConstrain(Point* m, const QVector2D& p);
00040     void addForce(Point* m, Force* f);
00041     void pin(const NodeID& id, const QVector2D& pnt);
00042     void unpin(const NodeID& id);
00043     void clear();
00044     const PointsByID& pinnedPoints() const;
00045     void clearMovables();
00046     size_t massCount() const;
00047     size_t forceCount() const;
00048     const Point* nearest(const QVector2D& p) const;
00049     NodePositions positions() const;
00050     const PointsByID& pointsByID() const;
00051     void debug(QPainter* p) const;
00052     void setSizeHint(const QRectF& rect);
00053     void setOrientationHint(OrientationHint hint);
00054     void setRepulsionForce(float f);
00055     OrientationHint orientationHint() const;
00056     QVector2D transformPoint(const QVector2D& p) const;
00057     const QRectF& sizeHint() const;
00058     ~System();
00059 private:
00060     QRectF mSizeHint;
00061     QRectF mGSizeHint;
00062     OrientationHint mOrHint;
00063     void computeForces(size_t from,size_t until);
00064     Gravity mGravity;
00065     Damp mDamp;
00066     BoxConstraint mBox;
00067     std::vector<Point*> mPoints;
00068     PointsByID mPointsById;
00069     PointsByID mPinnedPoints;
00070     std::vector<Force*> mForces;
00071     std::vector<Constraint*> mConstraints;
00072 };
00073 
00074 }
00075 
00076 #endif // SYSTEM_H
 All Classes Functions