Measure: Implement quick measure as command and make it toggable

The quick measure can considerably slow down the system when selecting
part elements. With this change the user is able to turn off this
bottleneck.
This commit is contained in:
wmayer
2025-01-21 23:26:46 +01:00
committed by Ladislav Michl
parent 2b2a82d901
commit 5d3f9cac3f
3 changed files with 68 additions and 6 deletions

View File

@@ -723,6 +723,7 @@ MenuItem* StdWorkbench::setupMenuBar() const
<< "Separator";
#endif
*tool << "Std_Measure"
<< "Std_QuickMeasure"
<< "Std_UnitsCalculator"
<< "Separator"
<< "Std_ViewLoadImage"
@@ -812,7 +813,7 @@ ToolBarItem* StdWorkbench::setupToolBars() const
auto view = new ToolBarItem( root );
view->setCommand("View");
*view << "Std_ViewFitAll" << "Std_ViewFitSelection" << "Std_ViewGroup" << "Std_AlignToSelection"
<< "Separator" << "Std_DrawStyle" << "Std_TreeViewActions" << "Std_Measure";
<< "Separator" << "Std_DrawStyle" << "Std_TreeViewActions" << "Std_Measure" << "Std_QuickMeasure";
// Individual views
auto individualViews = new ToolBarItem(root, ToolBarItem::DefaultVisibility::Hidden);

View File

@@ -32,7 +32,6 @@
#include <Gui/WidgetFactory.h>
#include "DlgPrefsMeasureAppearanceImp.h"
#include "QuickMeasure.h"
#include "QuickMeasurePy.h"
#include "ViewProviderMeasureAngle.h"
#include "ViewProviderMeasureDistance.h"
@@ -112,9 +111,5 @@ PyMOD_INIT_FUNC(MeasureGui)
Base::Interpreter().addType(&MeasureGui::QuickMeasurePy::Type, mod, "QuickMeasure");
// Create a QuickMeasure instance
auto measure = new MeasureGui::QuickMeasure(QApplication::instance());
Q_UNUSED(measure)
PyMOD_Return(mod);
}

View File

@@ -20,8 +20,13 @@
**************************************************************************/
#include "PreCompiled.h"
#ifndef _PreComp_
#include <QApplication>
#endif
#include <App/Application.h>
#include <App/Document.h>
#include <Gui/Action.h>
#include <Gui/Application.h>
#include <Gui/Command.h>
#include <Gui/Control.h>
@@ -30,6 +35,7 @@
#include <Gui/View3DInventor.h>
#include <Gui/View3DInventorViewer.h>
#include "QuickMeasure.h"
#include "TaskMeasure.h"
@@ -76,6 +82,65 @@ bool StdCmdMeasure::isActive()
return false;
}
class StdCmdQuickMeasure: public Gui::Command
{
public:
StdCmdQuickMeasure()
: Command("Std_QuickMeasure")
{
sGroup = "Measure";
sMenuText = QT_TR_NOOP("&Quick measure");
sToolTipText = QT_TR_NOOP("Toggle quick measure");
sWhatsThis = "Std_QuickMeasure";
sStatusTip = QT_TR_NOOP("Toggle quick measure");
accessParameter();
}
~StdCmdQuickMeasure() override = default;
StdCmdQuickMeasure(const StdCmdQuickMeasure&) = delete;
StdCmdQuickMeasure(StdCmdQuickMeasure&&) = delete;
StdCmdQuickMeasure& operator=(const StdCmdQuickMeasure&) = delete;
StdCmdQuickMeasure& operator=(StdCmdQuickMeasure&&) = delete;
const char* className() const override
{
return "StdCmdQuickMeasure";
}
protected:
void activated(int iMsg) override
{
if (parameter.isValid()) {
parameter->SetBool("EnableQuickMeasure", iMsg > 0);
}
if (iMsg == 0) {
quickMeasure.reset();
}
else {
quickMeasure = std::make_unique<MeasureGui::QuickMeasure>(QApplication::instance());
}
}
Gui::Action* createAction() override
{
Gui::Action* action = Gui::Command::createAction();
action->setCheckable(true);
action->setChecked(parameter->GetBool("EnableQuickMeasure", false));
return action;
}
void accessParameter()
{
// clang-format off
parameter = App::GetApplication().GetUserParameter().
GetGroup("BaseApp/Preferences/Mod/Measure");
// clang-format on
}
private:
std::unique_ptr<MeasureGui::QuickMeasure> quickMeasure;
ParameterGrp::handle parameter;
};
void CreateMeasureCommands()
{
Gui::CommandManager& rcCmdMgr = Gui::Application::Instance->commandManager();
@@ -83,4 +148,5 @@ void CreateMeasureCommands()
auto cmd = new StdCmdMeasure();
cmd->initAction();
rcCmdMgr.addCommand(cmd);
rcCmdMgr.addCommand(new StdCmdQuickMeasure);
}