MeasureDistance

- Abort mode via ESCAPE added

BoxZoom, BoxSelection and BoxElementSelection
- Change the cursor to give the user feedback about active mode.
- Abort mode via ESCAPE
This commit is contained in:
uLeonis
2020-12-21 17:32:14 +01:00
parent 3b449e1ce9
commit 96f2ba2cb5
10 changed files with 299 additions and 45 deletions

View File

@@ -53,6 +53,7 @@
#include <Base/Console.h>
#include <Base/Quantity.h>
#include <Inventor/MarkerBitmaps.h>
#include <Command.h>
using namespace Gui;
@@ -242,11 +243,14 @@ PointMarker::PointMarker(View3DInventorViewer* iv) : view(iv),
vp(new ViewProviderPointMarker)
{
view->addViewProvider(vp);
previousSelectionEn = view->isSelectionEnabled();
view->setSelectionEnabled(false);
}
PointMarker::~PointMarker()
{
view->removeViewProvider(vp);
view->setSelectionEnabled(previousSelectionEn);
delete vp;
}
@@ -318,11 +322,10 @@ void ViewProviderMeasureDistance::measureDistanceCallback(void * ud, SoEventCall
const SoKeyboardEvent * ke = static_cast<const SoKeyboardEvent*>(ev);
const SbBool press = ke->getState() == SoButtonEvent::DOWN ? true : false;
if (ke->getKey() == SoKeyboardEvent::ESCAPE) {
n->setHandled();
// Handle it on key up, because otherwise upper layer will handle it too.
if (!press) {
n->setHandled();
view->setEditing(false);
view->removeEventCallback(SoEvent::getClassTypeId(), measureDistanceCallback, ud);
pm->deleteLater();
endMeasureDistanceMode(ud, view, n, pm);
}
}
}
@@ -350,10 +353,16 @@ void ViewProviderMeasureDistance::measureDistanceCallback(void * ud, SoEventCall
}
}
else if (mbe->getButton() != SoMouseButtonEvent::BUTTON1 && mbe->getState() == SoButtonEvent::UP) {
n->setHandled();
view->setEditing(false);
view->removeEventCallback(SoEvent::getClassTypeId(), measureDistanceCallback, ud);
pm->deleteLater();
endMeasureDistanceMode(ud, view, n, pm);
}
}
}
void ViewProviderMeasureDistance::endMeasureDistanceMode(void * ud, Gui::View3DInventorViewer* view, SoEventCallback * n, PointMarker *pm)
{
n->setHandled();
view->setEditing(false);
view->removeEventCallback(SoEvent::getClassTypeId(), ViewProviderMeasureDistance::measureDistanceCallback, ud);
Application::Instance->commandManager().testActive();
pm->deleteLater();
}