#include <cmath>
#include <msp/gl/meshbuilder.h>
#include <msp/gl/renderer.h>
+#include <msp/input/keys.h>
#include <msp/strings/format.h>
#include "designer.h"
#include "3d/layout.h"
using namespace R2C2;
using namespace Msp;
-Measure::Measure(Designer &d, Input::Mouse &m, const set<Object *> &):
- Tool(d, m),
+Measure::Measure(Designer &d, Input::Keyboard &k, Input::Mouse &m):
+ Tool(d, k, m),
start_pinned(false),
mesh((GL::COLOR4_UBYTE, GL::VERTEX3))
{
designer.get_layout_3d().get_scene().remove(*this);
}
+void Measure::back()
+{
+ if(start_pinned)
+ {
+ start_pinned = false;
+ update_mesh();
+ }
+ else
+ set_done(true);
+}
+
+void Measure::key_press(unsigned key)
+{
+ if(key==Input::KEY_ESC)
+ back();
+ else
+ Tool::key_press(key);
+}
+
void Measure::button_press(unsigned btn)
{
if(btn==1)
start_pinned = true;
}
else if(btn==3)
- {
- if(start_pinned)
- {
- start_pinned = false;
- update_mesh();
- }
- else
- {
- done = true;
- signal_done.emit();
- }
- }
+ back();
}
-void Measure::axis_motion(unsigned axis, float x, float y)
+void Measure::pointer_motion()
{
- Tool::axis_motion(axis, x, y);
-
Snap sn = start;
sn.position = ground_pointer;
snap_to_tracks(sn);