<rect>
<x>0</x>
<y>0</y>
- <width>267</width>
- <height>59</height>
+ <width>264</width>
+ <height>120</height>
</rect>
</property>
<property name="windowTitle">
<iconset resource="../vvIcons.qrc">
<normaloff>:/common/icons/ducky.png</normaloff>:/common/icons/ducky.png</iconset>
</property>
- <layout class="QGridLayout">
- <item row="0" column="0">
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="bottomMargin">
+ <number>3</number>
+ </property>
+ <item>
<widget class="QLabel" name="textLabel">
<property name="text">
<string>Opening image </string>
</property>
</widget>
</item>
- <item row="2" column="0">
+ <item>
+ <widget class="QProgressBar" name="progressBar">
+ <property name="value">
+ <number>24</number>
+ </property>
+ </widget>
+ </item>
+ <item>
<widget class="QLabel" name="progressLabel">
<property name="text">
<string>Please wait ...</string>
</property>
</widget>
</item>
- <item row="1" column="0">
- <widget class="QProgressBar" name="progressBar">
- <property name="value">
- <number>24</number>
+ <item>
+ <widget class="QDialogButtonBox" name="mCancelButton">
+ <property name="font">
+ <font>
+ <weight>50</weight>
+ <bold>false</bold>
+ </font>
+ </property>
+ <property name="layoutDirection">
+ <enum>Qt::LeftToRight</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel</set>
+ </property>
+ <property name="centerButtons">
+ <bool>true</bool>
</property>
</widget>
</item>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <class>Form</class>
- <widget class="QWidget" name="Form">
+ <class>vvToolConnectedComponentLabeling</class>
+ <widget class="QWidget" name="vvToolConnectedComponentLabeling">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
- <width>400</width>
- <height>300</height>
+ <width>259</width>
+ <height>487</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
- <widget class="QLabel" name="label">
- <property name="geometry">
- <rect>
- <x>30</x>
- <y>20</y>
- <width>191</width>
- <height>16</height>
- </rect>
- </property>
- <property name="text">
- <string>Connected component labeling</string>
- </property>
- </widget>
- <widget class="QRadioButton" name="radioButton_5">
- <property name="geometry">
- <rect>
- <x>200</x>
- <y>80</y>
- <width>131</width>
- <height>19</height>
- </rect>
- </property>
- <property name="text">
- <string>Sort label by size</string>
- </property>
- </widget>
- <widget class="QWidget" name="">
- <property name="geometry">
- <rect>
- <x>60</x>
- <y>50</y>
- <width>93</width>
- <height>81</height>
- </rect>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <widget class="QRadioButton" name="radioButton">
- <property name="text">
- <string>6 connectivity</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="radioButton_2">
- <property name="text">
- <string>18 connexity</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="radioButton_3">
- <property name="text">
- <string>26 connexity</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="radioButton_4">
- <property name="text">
- <string>26 connexity</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <widget class="QLabel" name="label_7">
- <property name="geometry">
- <rect>
- <x>32</x>
- <y>247</y>
- <width>16</width>
- <height>16</height>
- </rect>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- <widget class="QWidget" name="">
- <property name="geometry">
- <rect>
- <x>30</x>
- <y>160</y>
- <width>321</width>
- <height>51</height>
- </rect>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QRadioButton" name="radioButton_6">
- <property name="layoutDirection">
- <enum>Qt::LeftToRight</enum>
- </property>
- <property name="text">
- <string>Keep n first greater labels</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QLabel" name="label_6">
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSlider" name="horizontalSlider">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="spinBox"/>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
+ <layout class="QHBoxLayout" name="horizontalLayout_6">
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Connected components labeling</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="vvIntensityValueSlider" name="mBGValueSlider" native="true"/>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <widget class="QLabel" name="dimensionStaticLabel_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Min size</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="mMinSizeSpinBox">
+ <property name="maximum">
+ <number>999999</number>
+ </property>
+ <property name="value">
+ <number>100</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="mFullConnectivityCheckBox">
+ <property name="text">
+ <string>Full connectivity</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="tristate">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_5">
+ <item>
+ <spacer name="horizontalSpacer_6">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="mLabelizeButton">
+ <property name="toolTip">
+ <string/>
+ </property>
+ <property name="autoFillBackground">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Labelize</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_7">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="mLabelGroupBox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="title">
+ <string>Labels selection</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QTableWidget" name="m_LabelTable">
+ <property name="alternatingRowColors">
+ <bool>true</bool>
+ </property>
+ <property name="showGrid">
+ <bool>false</bool>
+ </property>
+ <row>
+ <property name="text">
+ <string>1</string>
+ </property>
+ </row>
+ <row>
+ <property name="text">
+ <string>2</string>
+ </property>
+ </row>
+ <column>
+ <property name="text">
+ <string>Size</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Keep ?</string>
+ </property>
+ </column>
+ <item row="0" column="0">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="flags">
+ <set>ItemIsSelectable|ItemIsDragEnabled|ItemIsEnabled</set>
+ </property>
+ </item>
+ <item row="0" column="1">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="checkState">
+ <enum>Checked</enum>
+ </property>
+ </item>
+ <item row="1" column="1">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="checkState">
+ <enum>Unchecked</enum>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="mChangeColorButton_2">
+ <property name="toolTip">
+ <string/>
+ </property>
+ <property name="autoFillBackground">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Apply keep/remove</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <spacer name="horizontalSpacer_5">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="mChangeColorButton_3">
+ <property name="toolTip">
+ <string/>
+ </property>
+ <property name="autoFillBackground">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Done</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QWidget" name="mRightWidget" native="true"/>
+ </item>
+ </layout>
</widget>
- <resources/>
- <connections>
- <connection>
- <sender>spinBox</sender>
- <signal>valueChanged(int)</signal>
- <receiver>horizontalSlider</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>319</x>
- <y>197</y>
- </hint>
- <hint type="destinationlabel">
- <x>246</x>
- <y>199</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>horizontalSlider</sender>
- <signal>valueChanged(int)</signal>
- <receiver>spinBox</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>207</x>
- <y>202</y>
- </hint>
- <hint type="destinationlabel">
- <x>332</x>
- <y>201</y>
- </hint>
- </hints>
- </connection>
- </connections>
+ <customwidgets>
+ <customwidget>
+ <class>vvIntensityValueSlider</class>
+ <extends>QWidget</extends>
+ <header>vvIntensityValueSlider.h</header>
+ <container>1</container>
+ </customwidget>
+ </customwidgets>
+ <resources>
+ <include location="../vvIcons.qrc"/>
+ </resources>
+ <connections/>
</ui>
<rect>
<x>0</x>
<y>0</y>
- <width>412</width>
- <height>384</height>
+ <width>349</width>
+ <height>378</height>
</rect>
</property>
<property name="windowTitle">
<item>
<widget class="QGroupBox" name="mMaskLoaderBox">
<property name="title">
- <string>GroupBox</string>
+ <string>Choose input patient binary mask</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
- <widget class="vvLabelImageLoaderWidget" name="mPatientMaskInputWidget" native="true">
- <zorder>mOptionsBox</zorder>
- <zorder>mOptionsBox</zorder>
- </widget>
+ <widget class="vvLabelImageLoaderWidget" name="mPatientMaskInputWidget" native="true"/>
</item>
</layout>
</widget>
<item>
<widget class="QGroupBox" name="mOptionsBox">
<property name="title">
- <string>GroupBox</string>
+ <string>Extract Lung Options</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<property name="enabled">
<bool>false</bool>
</property>
- <zorder>mPatientMaskInputWidget</zorder>
</widget>
</item>
<item row="1" column="1">
<rect>
<x>0</x>
<y>0</y>
- <width>844</width>
- <height>456</height>
+ <width>740</width>
+ <height>472</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
- <widget class="QTabWidget" name="tabWidget">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>851</width>
- <height>611</height>
- </rect>
- </property>
- <property name="currentIndex">
- <number>0</number>
- </property>
- <widget class="QWidget" name="tab_3">
- <attribute name="title">
- <string>Manual</string>
- </attribute>
- <widget class="QWidget" name="gridLayoutWidget">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>841</width>
- <height>571</height>
- </rect>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QTabWidget" name="tabWidget">
+ <property name="currentIndex">
+ <number>0</number>
</property>
- <layout class="QGridLayout" name="gridLayout_4">
- <item row="0" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_28">
- <item>
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Rotation Center(X,Y,Z)</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLineEdit" name="Xval"/>
- </item>
- <item>
- <widget class="QLineEdit" name="Yval"/>
- </item>
- <item>
- <widget class="QLineEdit" name="Zval"/>
- </item>
- <item>
- <widget class="QPushButton" name="resetbutton">
- <property name="text">
- <string>Reset</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="1" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_29">
- <item>
- <widget class="QLabel" name="ytans">
- <property name="text">
- <string>X Trans</string>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_37"/>
- </item>
- <item>
- <widget class="QSlider" name="xtrans_slider">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QDoubleSpinBox" name="xtrans_sb"/>
- </item>
- </layout>
- </item>
- <item row="4" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_32">
- <item>
- <widget class="QLabel" name="yrot">
- <property name="text">
- <string>Y Rot </string>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_40"/>
- </item>
- <item>
- <widget class="QSlider" name="yrot_slider">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QDoubleSpinBox" name="yrot_sb"/>
- </item>
- </layout>
- </item>
- <item row="5" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_33">
- <item>
- <widget class="QLabel" name="xrot">
- <property name="text">
- <string>X Rot </string>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_42"/>
- </item>
- <item>
- <widget class="QSlider" name="xrot_slider">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QDoubleSpinBox" name="xrot_sb"/>
- </item>
- </layout>
- </item>
- <item row="6" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_34">
- <item>
- <widget class="QLabel" name="zrot">
- <property name="text">
- <string>Z Rot </string>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_43"/>
- </item>
- <item>
- <widget class="QSlider" name="zrot_slider">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QDoubleSpinBox" name="zrot_sb"/>
- </item>
- </layout>
- </item>
- <item row="9" column="0">
- <layout class="QGridLayout" name="gridLayout_6">
- <item row="1" column="3">
- <widget class="QTextEdit" name="textEdit"/>
- </item>
+ <widget class="QWidget" name="tab_3">
+ <attribute name="title">
+ <string>Manual</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QGridLayout" name="gridLayout_4">
+ <item row="0" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_28">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Rotation Center(X,Y,Z)</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="Xval"/>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="Yval"/>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="Zval"/>
+ </item>
+ <item>
+ <widget class="QPushButton" name="resetbutton">
+ <property name="text">
+ <string>Reset</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_29">
+ <item>
+ <widget class="QLabel" name="ytans">
+ <property name="text">
+ <string>X Trans</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_37"/>
+ </item>
+ <item>
+ <widget class="QSlider" name="xtrans_slider">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDoubleSpinBox" name="xtrans_sb"/>
+ </item>
+ </layout>
+ </item>
+ <item row="4" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_32">
+ <item>
+ <widget class="QLabel" name="yrot">
+ <property name="text">
+ <string>Y Rot </string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_40"/>
+ </item>
+ <item>
+ <widget class="QSlider" name="yrot_slider">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDoubleSpinBox" name="yrot_sb"/>
+ </item>
+ </layout>
+ </item>
+ <item row="5" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_33">
+ <item>
+ <widget class="QLabel" name="xrot">
+ <property name="text">
+ <string>X Rot </string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_42"/>
+ </item>
+ <item>
+ <widget class="QSlider" name="xrot_slider">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDoubleSpinBox" name="xrot_sb"/>
+ </item>
+ </layout>
+ </item>
+ <item row="6" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_34">
+ <item>
+ <widget class="QLabel" name="zrot">
+ <property name="text">
+ <string>Z Rot </string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_43"/>
+ </item>
+ <item>
+ <widget class="QSlider" name="zrot_slider">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDoubleSpinBox" name="zrot_sb"/>
+ </item>
+ </layout>
+ </item>
+ <item row="9" column="0">
+ <layout class="QGridLayout" name="gridLayout_6">
+ <item row="1" column="3">
+ <widget class="QTextEdit" name="textEdit">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QPushButton" name="loadbutton">
+ <property name="text">
+ <string>Load</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QPushButton" name="savebutton">
+ <property name="text">
+ <string>Save</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QTextEdit" name="textEdit_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Initial Transform</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignBottom|Qt::AlignHCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="3">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Current Transform</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="3" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_31">
+ <item>
+ <widget class="QLabel" name="ztrans">
+ <property name="text">
+ <string>Z Trans</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_39"/>
+ </item>
+ <item>
+ <widget class="QSlider" name="ztrans_slider">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDoubleSpinBox" name="ztrans_sb"/>
+ </item>
+ </layout>
+ </item>
+ <item row="2" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_30">
+ <item>
+ <widget class="QLabel" name="ytrans">
+ <property name="text">
+ <string>Y Trans</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_38"/>
+ </item>
+ <item>
+ <widget class="QSlider" name="ytrans_slider">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDoubleSpinBox" name="ytrans_sb"/>
+ </item>
+ </layout>
+ </item>
+ <item row="9" column="1">
+ <layout class="QHBoxLayout" name="horizontalLayout_49"/>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab_4">
+ <attribute name="title">
+ <string>Automatic</string>
+ </attribute>
+ <widget class="QWidget" name="gridLayoutWidget_2">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>841</width>
+ <height>571</height>
+ </rect>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_5">
<item row="1" column="0">
- <widget class="QPushButton" name="loadbutton">
- <property name="text">
- <string>Load</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QPushButton" name="savebutton">
- <property name="text">
- <string>Save</string>
- </property>
- </widget>
- </item>
- <item row="1" column="2">
- <widget class="QTextEdit" name="textEdit_2"/>
- </item>
- <item row="0" column="2">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Initial Transform</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignBottom|Qt::AlignHCenter</set>
- </property>
- </widget>
- </item>
- <item row="0" column="3">
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Current Transform</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="3" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_31">
- <item>
- <widget class="QLabel" name="ztrans">
- <property name="text">
- <string>Z Trans</string>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_39"/>
- </item>
- <item>
- <widget class="QSlider" name="ztrans_slider">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QDoubleSpinBox" name="ztrans_sb"/>
- </item>
- </layout>
- </item>
- <item row="2" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_30">
- <item>
- <widget class="QLabel" name="ytrans">
- <property name="text">
- <string>Y Trans</string>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_38"/>
- </item>
- <item>
- <widget class="QSlider" name="ytrans_slider">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QDoubleSpinBox" name="ytrans_sb"/>
- </item>
- </layout>
- </item>
- <item row="9" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout_49"/>
- </item>
- </layout>
- </widget>
- </widget>
- <widget class="QWidget" name="tab_4">
- <attribute name="title">
- <string>Automatic</string>
- </attribute>
- <widget class="QWidget" name="gridLayoutWidget_2">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>841</width>
- <height>571</height>
- </rect>
- </property>
- <layout class="QGridLayout" name="gridLayout_5">
- <item row="1" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_45"/>
- </item>
- <item row="2" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_46"/>
- </item>
- <item row="0" column="1">
- <widget class="QTextEdit" name="tab2textedit"/>
- </item>
- <item row="0" column="0">
- <layout class="QHBoxLayout" name="horizontalLayout_44">
- <item>
- <widget class="QPushButton" name="tab2loadbutton">
- <property name="text">
- <string>Load</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="tab2applybutton">
- <property name="text">
- <string>Apply</string>
- </property>
- </widget>
+ <layout class="QHBoxLayout" name="horizontalLayout_45"/>
+ </item>
+ <item row="2" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_46"/>
+ </item>
+ <item row="0" column="1">
+ <widget class="QTextEdit" name="tab2textedit"/>
+ </item>
+ <item row="0" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_44">
+ <item>
+ <widget class="QPushButton" name="tab2loadbutton">
+ <property name="text">
+ <string>Load</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="tab2applybutton">
+ <property name="text">
+ <string>Apply</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
</layout>
- </item>
- </layout>
+ </widget>
+ </widget>
</widget>
- </widget>
- </widget>
+ </item>
+ </layout>
</widget>
<resources/>
<connections/>
--- /dev/null
+/*=========================================================================
+ Program: vv http://www.creatis.insa-lyon.fr/rio/vv
+
+ Authors belong to:
+ - University of LYON http://www.universite-lyon.fr/
+ - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
+ - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the copyright notices for more information.
+
+ It is distributed under dual licence
+
+ - BSD See included LICENSE.txt file
+ - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ ======================================================================-====*/
+
+// vv
+#include "vvProgressDialog.h"
+
+//------------------------------------------------------------------------------
+vvProgressDialog::vvProgressDialog(std::string message, bool show_progress)
+{
+ setupUi(this);
+ connect(mCancelButton, SIGNAL(rejected()), this, SLOT(reject()));
+ textLabel->setText(message.c_str());
+ if (show_progress)
+ progressBar->show();
+ else
+ progressBar->hide();
+ this->show();
+}
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+void vvProgressDialog::SetText(std::string message)
+{
+ textLabel->setText(message.c_str());
+}
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+void vvProgressDialog::AddToText(std::string message)
+{
+ textLabel->setText(QString("%1\n%2").arg(textLabel->text()).arg(message.c_str()));
+}
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+void vvProgressDialog::SetProgress(unsigned int current,unsigned int max)
+{
+ progressBar->setMaximum(max);
+ progressBar->setValue(current);
+}
+//------------------------------------------------------------------------------
+
--- /dev/null
+/*=========================================================================
+ Program: vv http://www.creatis.insa-lyon.fr/rio/vv
+
+ Authors belong to:
+ - University of LYON http://www.universite-lyon.fr/
+ - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
+ - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the copyright notices for more information.
+
+ It is distributed under dual licence
+
+ - BSD See included LICENSE.txt file
+ - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ ======================================================================-====*/
+
+// vv
+#include "vvThreadedFilter.h"
+#include "vvProgressDialog.h"
+
+// Qt
+#include <QMessageBox>
+
+//------------------------------------------------------------------------------
+vvThreadedFilter::vvThreadedFilter():
+ QThread()
+{
+ DD("vvThreadedFilter");
+ m_Filter = NULL;
+}
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+vvThreadedFilter::~vvThreadedFilter()
+{
+}
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+void vvThreadedFilter::SetFilter(clitk::ImageToImageGenericFilterBase * f)
+{
+ DD("SetFilter");
+ m_Filter = f;
+}
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+void vvThreadedFilter::Update()
+{
+ assert(m_Filter != NULL);
+
+ // Show a progress bar while computing
+ vvProgressDialog progress("Computing ...",100);
+ connect(&progress, SIGNAL(rejected()), this, SLOT(reject()));
+ this->start();
+ this->setTerminationEnabled(true);
+ std::string temp;
+ while (this->isRunning()) {
+ DD(this->isRunning());
+ m_FilterBase = m_Filter->GetFilterBase(); // get filterbase only after Update
+ if (m_FilterBase != NULL) {
+ progress.SetProgress(m_FilterBase->GetCurrentStepNumber(),
+ m_FilterBase->GetNumberOfSteps());
+ if (temp != m_FilterBase->GetCurrentStepName()) {
+ progress.AddToText(m_FilterBase->GetCurrentStepName());
+ }
+ temp = m_FilterBase->GetCurrentStepName();
+ }
+ this->wait(200); // in milisecond
+ qApp->processEvents();
+ }
+ DD("after loop");
+}
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+void vvThreadedFilter::run()
+{
+ assert(m_Filter != NULL);
+ m_Filter->Update();
+}
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+void vvThreadedFilter::reject()
+{
+ DD("vvThreadedFilter::reject");
+ this->quit();
+ // if (m_Filter != NULL) {
+// m_Filter->MustStop();
+// }
+ DD("after terminate");
+}
+//------------------------------------------------------------------------------
+
+
+
+
--- /dev/null
+/*=========================================================================
+ Program: vv http://www.creatis.insa-lyon.fr/rio/vv
+
+ Authors belong to:
+ - University of LYON http://www.universite-lyon.fr/
+ - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
+ - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the copyright notices for more information.
+
+ It is distributed under dual licence
+
+ - BSD See included LICENSE.txt file
+ - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+======================================================================-====*/
+
+#ifndef VVTHREADEDFILTER_H
+#define VVTHREADEDFILTER_H
+
+// clitk
+#include "clitkImageToImageGenericFilterBase.h"
+
+// qt
+#include <QThread>
+
+//------------------------------------------------------------------------------
+class vvThreadedFilter: public QThread
+{
+ Q_OBJECT
+ public:
+ vvThreadedFilter();
+ ~vvThreadedFilter();
+
+ // Called from the main thread, runs the reader and displays the progress bar
+ void SetFilter(clitk::ImageToImageGenericFilterBase * f);
+ void Update();
+
+public slots:
+ void reject();
+
+protected:
+ void run();
+ clitk::ImageToImageGenericFilterBase * m_Filter;
+ clitk::FilterBase * m_FilterBase;
+
+}; // end class vvThreadedFilter
+//------------------------------------------------------------------------------
+
+#endif
+