MWCPolyTool.h
Classes
- MWCPolyTool -- Base class for WorldCanvas event-based polygon tools (full description)
Types
- Off
-
- Def
-
Nothing exists yet
- Ready
-
defining initial polygon
- Move
-
polygon finished, no current activity
- Resize
-
moving entire polygon
Interface
- Public Members
- MWCPolyTool(Display::KeySym keysym = Display::K_Pointer_Button1, const Bool persistent = False)
- virtual ~MWCPolyTool()
- virtual void disable()
- virtual void reset(Bool skipRefresh=False)
- Protected Members
- virtual void keyPressed(const WCPositionEvent &ev)
- virtual void moved(const WCMotionEvent &ev)
- virtual void keyReleased(const WCPositionEvent &ev)
- virtual void otherKeyPressed(const WCPositionEvent &ev)
- virtual void draw(const WCRefreshEvent&)
- virtual void doubleInside()
- virtual void doubleOutside()
- virtual void polygonReady()
- virtual void get(Vector<Int> &x, Vector<Int> &y) const
- virtual void get(Int &x, Int &y, const Int pt) const
- Private Members
- virtual void set(const Vector<Int> &x, const Vector<Int> &y)
- virtual void set(const Int x, const Int y, const Int pt)
- void pushPoint(Int x1, Int y1)
- void popPoint()
- Bool inPolygon(const Int &x, const Int &y) const
- Bool inHandle(const Int &pt, const Int &x, const Int &y) const
Review Status
- Date Reviewed:
- yyyy/mm/dd
WCTool
Etymology
MWCPolyTool stands for Multi-WorldCanvas Polygon Tool
Synopsis
This class adds to its base MWCTool to provide a tool for drawing,
reshaping and moving polygons on a WorldCanvas. While MWCPolyTool
is not abstract, it performs no useful function. The programmer
should derive from this class and override the functions doubleInside
and doubleOutside at the very least. These are called when the user
double-clicks a particular key or mouse button inside or outside an
existing polygon respectively. It is up to the programmer to decide
what these events mean, but it is recommended that an internal double-
click correspond to the main action of the tool, eg. emitting the
polygon vertices to the application, and that an external double-click
correspond to a secondary action of the tool, if indeed there are
additional actions suitable to the tool.
The polygon is drawn by clicking at each of the vertices, and
clicking again on the last or first vertex to complete the polygon.
Once drawn, the vertices can be moved by dragging their handles,
and the entire polygon relocated by dragging inside the polygon.
The polygon is removed from the display when the Esc key is
pressed.
Example
Motivation
Many activities on the WorldCanvas will be based on the user drawing
a polygon and using the polygon in some operation.
To Do
- Add time constraint to double click detection
Member Description
MWCPolyTool(Display::KeySym keysym = Display::K_Pointer_Button1, const Bool persistent = False)
Constructor
Destructor
virtual void disable()
Switch the tool off - this calls the base class disable,
and then erases the polygon if it's around
virtual void reset(Bool skipRefresh=False)
reset to non-existent, non-active polygon.
Refreshes if necessary to erase (unless skipRefresh==True).
(Does not unregister from WCs or disable future event handling).
Functions called by the base class event handling operators--and
normally only those. This is the input that controls the polygon's
appearance and action. When the polygon is ready and double-click
is received, the doubleInside/Outside routine is invoked.
draw the polygon (if any) on the object's currently active WC.
Only to be called by the base class refresh event handler. Derived
objects should use refresh() if they need to redraw, but even that
is normally handled automatically by this class.
Output callback functions--to be overridden in derived class as needed.
Called when there is a double click inside/outside the polygon
Function called when a polygon is ready and not being
edited. (Unused so far on the glish level (12/01)).
virtual void get(Vector<Int> &x, Vector<Int> &y) const
virtual void get(Int &x, Int &y, const Int pt) const
Retrieve polygon vertices, or a single vertex, in screen pixels.
Valid results during the callback functions; to be used by them,
as well as internally.
virtual void set(const Vector<Int> &x, const Vector<Int> &y)
Set the polygon vertices. itsNPoints should already be set, and
x and y must contain (at least) this many points.
virtual void set(const Int x, const Int y, const Int pt)
replace a single vertex.
push/pop last vertex
Bool inPolygon(const Int &x, const Int &y) const
are we inside the polygon?
Bool inHandle(const Int &pt, const Int &x, const Int &y) const
are we within the specified handle?
state of the polygon tool