X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fobject.h;h=d36104fa3deed081c5ae26cb29cf89b4e3cf9606;hb=7a36d396eded897c421424905b2c938d770df341;hp=206ec336d8e1cb99b1dd26f9dad09ea9bd3907a3;hpb=2910db1364914c0ab98a0f80250cc39137821577;p=r2c2.git diff --git a/source/libr2c2/object.h b/source/libr2c2/object.h index 206ec33..d36104f 100644 --- a/source/libr2c2/object.h +++ b/source/libr2c2/object.h @@ -3,6 +3,7 @@ #include "geometry.h" #include "objecttype.h" +#include "snap.h" namespace R2C2 { @@ -13,7 +14,7 @@ class Object protected: Layout &layout; Vector position; - float rotation; + Angle rotation; Object(Layout &l): layout(l) { } public: @@ -23,10 +24,27 @@ public: virtual const ObjectType &get_type() const = 0; Layout &get_layout() const { return layout; } virtual void set_position(const Vector &) = 0; - virtual void set_rotation(float) = 0; + virtual void set_rotation(const Angle &) = 0; const Vector &get_position() const { return position; } - float get_rotation() const { return rotation; } + const Angle &get_rotation() const { return rotation; } virtual Object *get_parent() const { return 0; } + + virtual unsigned get_n_snap_nodes() const { return 0; } + virtual Snap get_snap_node(unsigned) const; + virtual bool snap(Snap &, float, SnapType = SNAP_DEFAULT) const; + virtual bool snap_to(const Object &, float, SnapType = SNAP_DEFAULT); +protected: + virtual SnapType get_default_snap_type_to(const Object &) const { return NO_SNAP; } + +public: + virtual unsigned get_n_link_slots() const { return 0; } + virtual Object *get_link(unsigned) const; + virtual int get_link_slot(const Object &) const { return -1; } + virtual bool link_to(Object &) { return false; } + virtual bool break_link(Object &); + virtual bool break_link(unsigned) { return false; } + virtual void break_links(); + virtual bool collide_ray(const Vector &, const Vector &) const = 0; };