Volume Rendering Measure UI and interact logic.

This commit is contained in:
Krad
2022-11-25 10:48:29 +08:00
parent 18d54e39c7
commit bac9e425eb
5 changed files with 55 additions and 13 deletions

View File

@@ -27,7 +27,7 @@
#include "Rendering/Widget/ClickableOrientationMarkerWidget.h" #include "Rendering/Widget/ClickableOrientationMarkerWidget.h"
#include "Rendering/Core/SmartFixedPointVolumeRayCastMapper.h" #include "Rendering/Core/SmartFixedPointVolumeRayCastMapper.h"
#include "IO/DICOM/ExtendMedicalImageProperties.h" #include "IO/DICOM/ExtendMedicalImageProperties.h"
#include "Rendering/Measure/ArrowAnnotationActor.h" #include "Rendering/Measure/VolRulerAnnotationActor.h"
#include "Rendering/Measure/VolArrowAnnotationActor.h" #include "Rendering/Measure/VolArrowAnnotationActor.h"
namespace { namespace {
@@ -619,10 +619,10 @@ void VolumeRenderingViewer::pressedOrientationMarker(vtkObject* sender, unsigned
} }
} }
void VolumeRenderingViewer::ActiveArrow() { void VolumeRenderingViewer::ActiveMeasure(int type) {
auto style = VolumeInteractorStyle::SafeDownCast(this->InteractorStyle); auto style = VolumeInteractorStyle::SafeDownCast(this->InteractorStyle);
if (style){ if (style){
style->ActiveMeasure(VolArrowAnnotationActor::New()); style->ActiveMeasure((type==0?(Measure*)VolRulerAnnotationActor::New():VolArrowAnnotationActor::New()));
} }
} }

View File

@@ -91,7 +91,7 @@ public:
void ResetZoomFitWindow(); void ResetZoomFitWindow();
void ActiveArrow(); void ActiveMeasure(int type);
void UnActiveMeasure(); void UnActiveMeasure();

View File

@@ -8,10 +8,21 @@
#include <QButtonGroup> #include <QButtonGroup>
#include <QActionGroup> #include <QActionGroup>
#include <QMenu> #include <QMenu>
#include <tuple>
#include "Common/QGlobals.h"
#include "Rendering/Core/RenderingDefines.h" #include "Rendering/Core/RenderingDefines.h"
VolumeRenderingToolBar::VolumeRenderingToolBar(QWidget *parent) : QToolBar(parent) {
typedef std::tuple<const char *, const char *, int> ActionProperty;
namespace {
const ActionProperty MEASURE_ACTIIONS[2] = {
{"Length", ":/InfiniteViewer/Icon/distance.png", 0},
{"Arrow", ":/InfiniteViewer/Icon/arrow.png", 1},
};}
VolumeRenderingToolBar::VolumeRenderingToolBar(QWidget *parent) : QToolBar(parent)
, mBtnMeasure(new QToolButton(this)){
auto btnReset = new QToolButton(this); auto btnReset = new QToolButton(this);
addButton(btnReset, "reset"); addButton(btnReset, "reset");
connect(btnReset,&QToolButton::clicked,[=](){ connect(btnReset,&QToolButton::clicked,[=](){
@@ -78,11 +89,32 @@ VolumeRenderingToolBar::VolumeRenderingToolBar(QWidget *parent) : QToolBar(paren
connect(group, static_cast<void(QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked),this,&VolumeRenderingToolBar::modeButtonClicked); connect(group, static_cast<void(QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked),this,&VolumeRenderingToolBar::modeButtonClicked);
addSeparator(); addSeparator();
auto btnMeasure = new QToolButton(this);
addButton(btnMeasure, "measure"); addButton(mBtnMeasure, "measure");
connect(btnMeasure,&QToolButton::clicked,[=](){ mBtnMeasure->setCheckable(true);
emit activeArrow(); QMenu *m;
m = new QMenu(this);
m->addAction(tr("Ruler"), this, [=] {
mBtnMeasure->setChecked(true);
QPixmap map(std::get<1>(MEASURE_ACTIIONS[0]));
mBtnMeasure->setIcon(QIcon(map));
mMeasureType = 0;
emit activeMeasure(mMeasureType);
}); });
m->addAction(tr("Arrow"), this, [=] {
mBtnMeasure->setChecked(true);
QPixmap map(std::get<1>(MEASURE_ACTIIONS[1]));
mBtnMeasure->setIcon(QIcon(map));
mMeasureType = 1;
emit activeMeasure(mMeasureType);
});
connect(mBtnMeasure, &QToolButton::clicked, [=](){
emit activeMeasure(mMeasureType);
});
mBtnMeasure->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
mBtnMeasure->setToolTip(QString("Measurements"));
mBtnMeasure->setPopupMode(QToolButton::MenuButtonPopup);
mBtnMeasure->setMenu(m);
addSeparator(); addSeparator();
auto btnPreset = new QToolButton(this); auto btnPreset = new QToolButton(this);
addButton(btnPreset, "preset"); addButton(btnPreset, "preset");
@@ -119,3 +151,7 @@ QAction* VolumeRenderingToolBar::addButton(QToolButton* button, const char* obje
button->setToolButtonStyle(Qt::ToolButtonIconOnly); button->setToolButtonStyle(Qt::ToolButtonIconOnly);
return addWidget(button); return addWidget(button);
} }
void VolumeRenderingToolBar::unActiveMeasure() {
if (mBtnMeasure)mBtnMeasure->setChecked(false);
}

View File

@@ -15,15 +15,19 @@ public:
explicit VolumeRenderingToolBar(QWidget *parent = nullptr); explicit VolumeRenderingToolBar(QWidget *parent = nullptr);
~VolumeRenderingToolBar() override; ~VolumeRenderingToolBar() override;
void unActiveMeasure();
signals: signals:
void modeButtonClicked(int id); void modeButtonClicked(int id);
void viewDirectionChanged(int id); void viewDirectionChanged(int id);
void resetView(); void resetView();
void fitWindow(); void fitWindow();
void activeArrow(); void activeMeasure(int type);
private: private:
QAction* addButton(QToolButton* button, const char* objectName); QAction* addButton(QToolButton* button, const char* objectName);
QToolButton* mBtnMeasure = nullptr;
int mMeasureType = 0;
}; };

View File

@@ -40,8 +40,8 @@ VolumeRenderingWindow::VolumeRenderingWindow(QWidget *parent , Qt::WindowFlags f
mViewer->ResetView(); mViewer->ResetView();
mViewer->Render(); mViewer->Render();
}); });
connect(toolBar, &VolumeRenderingToolBar::activeArrow,[=](){ connect(toolBar, &VolumeRenderingToolBar::activeMeasure,[=](int type){
mViewer->ActiveArrow(); mViewer->ActiveMeasure(type);
mViewer->Render(); mViewer->Render();
}); });
connect(toolBar, &VolumeRenderingToolBar::fitWindow,[=](){ connect(toolBar, &VolumeRenderingToolBar::fitWindow,[=](){
@@ -50,7 +50,9 @@ VolumeRenderingWindow::VolumeRenderingWindow(QWidget *parent , Qt::WindowFlags f
}); });
connect(toolBar, &VolumeRenderingToolBar::modeButtonClicked,[=](int mode){ connect(toolBar, &VolumeRenderingToolBar::modeButtonClicked,[=](int mode){
mViewer->SetInteractorStyleMode(mode); mViewer->SetInteractorStyleMode(mode);
toolBar->unActiveMeasure();
mViewer->UnActiveMeasure(); mViewer->UnActiveMeasure();
}); });
connect(toolBar, &VolumeRenderingToolBar::viewDirectionChanged, [=](int direction){ connect(toolBar, &VolumeRenderingToolBar::viewDirectionChanged, [=](int direction){