Skip to content

Commit 66c747d

Browse files
committed
Add parameter dependencies
1 parent 66aae01 commit 66c747d

File tree

9 files changed

+55
-1
lines changed

9 files changed

+55
-1
lines changed

libs/base/iAAttributes.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,16 @@ void addAttr(iAAttributes& attributes, QString const& name, iAValueType valueTyp
160160
attributes.push_back(iAAttributeDescriptor::createParam(name, valueType, defaultValue, min, max));
161161
}
162162

163+
void setDependencies(iAAttributes& attributes, QString const& name, QStringList const & dependencies)
164+
{
165+
attributes[findAttribute(attributes, name)]->setDependencies(dependencies);
166+
}
167+
168+
void setDependency(iAAttributes& attributes, QString const& name, QString const& dependency)
169+
{
170+
setDependencies(attributes, name, QStringList() << dependency);
171+
}
172+
163173
#include "iASettings.h"
164174

165175
#include <QDomElement>

libs/base/iAAttributes.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,14 @@ iAbase_API void addAttr(iAAttributes& attributes,
6767
double min = std::numeric_limits<double>::lowest(),
6868
double max = std::numeric_limits<double>::max());
6969

70+
//! store attributes to XML
7071
iAbase_API void storeAttributeValues(QDomElement& xml, iAAttributes const& attributes);
7172

73+
//! load attributes from XML
7274
iAbase_API void loadAttributeValues(QDomNamedNodeMap const & xml, iAAttributes & attributes);
75+
76+
//! set attribute with name to depend on the list of attributes in dependencies
77+
//! (i.e. attribute name is only effective if dependencies are set - currently only boolean dependencies are supported!)
78+
iAbase_API void setDependencies(iAAttributes& attributes, QString const& name, QStringList const& dependencies);
79+
//! set attribute with name to depend on a single other attribute; @see setDependencies for more details
80+
iAbase_API void setDependency(iAAttributes& attributes, QString const& name, QString const& dependency);

libs/base/iAFilter.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,16 @@ void iAFilter::addParameter(QString const & name, iAValueType valueType,
426426
addAttr(m_parameters, name, valueType, defaultValue, min, max);
427427
}
428428

429+
void iAFilter::setDependency(QString const& name, QString const& dependency)
430+
{
431+
setDependencies(name, QStringList() << dependency);
432+
}
433+
434+
void iAFilter::setDependencies(QString const& name, QStringList const& dependencies)
435+
{
436+
::setDependencies(paramsWritable(), name, dependencies);
437+
}
438+
429439
QVector<QString> const & iAFilter::outputValueNames() const
430440
{
431441
return m_outputValueNames;

libs/base/iAFilter.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ class iAbase_API iAFilter: public iAAbortListener
111111
QVariant defaultValue = 0.0,
112112
double min = std::numeric_limits<double>::lowest(),
113113
double max = std::numeric_limits<double>::max());
114+
//! set a single dependency for a specific parameter name
115+
void setDependency(QString const& name, QString const& dependency);
116+
//! set multiple dependencies for a specific parameter name
117+
void setDependencies(QString const& name, QStringList const& dependencies);
114118
//! Returns the number of input images required by this filter.
115119
//! For typical image filters, this returns 1.
116120
//! @return the number of images required as input

libs/gui/mainwindow.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -767,6 +767,8 @@ void MainWindow::prefs()
767767
addAttr(params, "Log to file", iAValueType::Boolean, iALogWidget::get()->isLogToFileOn());
768768
addAttr(params, "Log File Name", iAValueType::FileNameSave, iALogWidget::get()->logFileName());
769769
addAttr(params, "File Log Level", iAValueType::Categorical, fileLogLevels);
770+
setDependency(params, "Log File Name", "Log to file");
771+
setDependency(params, "File Log Level", "Log to file");
770772
addAttr(params, "Looks", iAValueType::Categorical, looks);
771773
addAttr(params, "Font size", iAValueType::Discrete, QString::number(p.FontSize), 4, 120);
772774
addAttr(params, "Size limit for automatic 3D rendering (MB)", iAValueType::Discrete, p.LimitForAuto3DRender, 0);

libs/guibase/iAVolumeRenderer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ inline constexpr char VolumeRendererName[] = "Default Settings/Dataset Renderer:
7272
class iAVolumeRendererSettings : iASettingsObject<VolumeRendererName, iAVolumeRendererSettings>
7373
{
7474
public:
75-
static iAAttributes& defaultAttributes() {
75+
static iAAttributes& defaultAttributes()
76+
{
7677
static iAAttributes attr;
7778
if (attr.isEmpty())
7879
{

libs/renderer/iARendererImpl.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,17 @@ class iARendererSettings : iASettingsObject<RendererSettingsName, iARendererSett
112112
addAttr(attr, iARendererImpl::UseStyleBGColor, iAValueType::Boolean, false); // true - use background color from style (bright/dark), false - use BackgroundTop/BackgroundBottom
113113
addAttr(attr, iARendererImpl::BackgroundTop, iAValueType::Color, "#7FAAFF"); // top color used in background gradient
114114
addAttr(attr, iARendererImpl::BackgroundBottom, iAValueType::Color, "#FFFFFF"); // bottom color used in background gradient
115+
setDependency(attr, iARendererImpl::BackgroundTop, QString("!%1").arg(iARendererImpl::UseStyleBGColor));
116+
setDependency(attr, iARendererImpl::BackgroundBottom, QString("!%1").arg(iARendererImpl::UseStyleBGColor));
115117
addAttr(attr, iARendererImpl::UseFXAA, iAValueType::Boolean, true); // whether to use FXAA anti-aliasing, if supported
116118
addAttr(attr, iARendererImpl::MultiSamples, iAValueType::Discrete, 0); // number of multi-samples; needs to be 0 for depth peeling to work!
117119
addAttr(attr, iARendererImpl::StereoRenderMode, iAValueType::Categorical, stereoModes); // whether to use a stereo rendering mode and if so, which one, for the render window
118120
addAttr(attr, iARendererImpl::InteractionStyle, iAValueType::Categorical, interactionStyles); // the interaction style to be used
119121
addAttr(attr, iARendererImpl::UseDepthPeeling, iAValueType::Boolean, true); // whether to use depth peeling (improves depth ordering in rendering of multiple objects), if false, alpha blending is used
120122
addAttr(attr, iARendererImpl::DepthPeelOcclusionRatio, iAValueType::Continuous, 0.0); // In case of use of depth peeling technique for rendering translucent material, define the threshold under which the algorithm stops to iterate over peel layers (see <a href="https://vtk.org/doc/nightly/html/classvtkRenderer.html">vtkRenderer documentation</a>
121123
addAttr(attr, iARendererImpl::DepthPeelsMax, iAValueType::Discrete, 4, 0); // maximum number of depth peels to use (if enabled via UseDepthPeeling). The more the higher quality, but also slower rendering
124+
setDependency(attr, iARendererImpl::DepthPeelOcclusionRatio, iARendererImpl::UseDepthPeeling);
125+
setDependency(attr, iARendererImpl::DepthPeelsMax, iARendererImpl::UseDepthPeeling);
122126
addAttr(attr, iARendererImpl::MagicLensSize, iAValueType::Discrete, DefaultMagicLensSize, MinimumMagicLensSize, MaximumMagicLensSize); // size (width & height) of the 3D magic lens (in pixels / pixel-equivalent units considering scaling)
123127
addAttr(attr, iARendererImpl::MagicLensFrameWidth, iAValueType::Discrete, DefaultMagicLensFrameWidth, 0); // width of the frame of the 3D magic lens
124128
addAttr(attr, iARendererImpl::ShowFPS, iAValueType::Boolean, false); // whether to show frames per second
@@ -127,6 +131,11 @@ class iARendererSettings : iASettingsObject<RendererSettingsName, iARendererSett
127131
addAttr(attr, iARendererImpl::SSAOBias, iAValueType::Continuous, 0.01); // SSAO: The bias when comparing samples
128132
addAttr(attr, iARendererImpl::SSAOKernelSize, iAValueType::Discrete, 32); // SSAO: The number of samples
129133
addAttr(attr, iARendererImpl::SSAOBlur, iAValueType::Boolean, false); // SSAO: Whether the ambient occlusion should be blurred (can help to improve the result if samples number is low).
134+
135+
setDependency(attr, iARendererImpl::SSAORadius, iARendererImpl::UseSSAO);
136+
setDependency(attr, iARendererImpl::SSAOBias, iARendererImpl::UseSSAO);
137+
setDependency(attr, iARendererImpl::SSAOKernelSize, iARendererImpl::UseSSAO);
138+
setDependency(attr, iARendererImpl::SSAOBlur, iARendererImpl::UseSSAO);
130139
selfRegister();
131140
}
132141
return attr;

libs/slicer/iASlicerImpl.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ class iASingleSlicerSettings : iASettingsObject<SlicerSettingsName, iASingleSlic
135135
addAttr(attr, iASlicerImpl::NumberOfIsoLines, iAValueType::Discrete, 5);
136136
addAttr(attr, iASlicerImpl::MinIsoValue, iAValueType::Continuous, 20000); // should probably be dependent on the value range of the image ...?
137137
addAttr(attr, iASlicerImpl::MaxIsoValue, iAValueType::Continuous, 40000); // should probably be dependent on the value range of the image ...?
138+
setDependency(attr, iASlicerImpl::NumberOfIsoLines, iASlicerImpl::ShowIsoLines);
139+
setDependency(attr, iASlicerImpl::MinIsoValue, iASlicerImpl::ShowIsoLines);
140+
setDependency(attr, iASlicerImpl::MaxIsoValue, iASlicerImpl::ShowIsoLines);
138141
// }
139142
selfRegister();
140143
}

modules/CommonImageFilters/iACastImageFilter.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,13 @@ iACastImageFilter::iACastImageFilter() :
160160
addParameter("Use Full Output Range", iAValueType::Boolean, true);
161161
addParameter("Output Min", iAValueType::Continuous, 0);
162162
addParameter("Output Max", iAValueType::Continuous, 1);
163+
164+
setDependency("Automatic Input Range", "Rescale Range");
165+
setDependencies("Input Min", QStringList() << "Rescale Range" << "!Automatic Input Range");
166+
setDependencies("Input Max", QStringList() << "Rescale Range" << "!Automatic Input Range");
167+
setDependency("Use Full Output Range", "Rescale Range");
168+
setDependencies("Output Min", QStringList() << "Rescale Range" << "!Use Full Output Range");
169+
setDependencies("Output Max", QStringList() << "Rescale Range" << "!Use Full Output Range");
163170
}
164171

165172

0 commit comments

Comments
 (0)