Skip to content

Commit 2ba732f

Browse files
author
RubioJr9
committed
Added percentage scaling option
1 parent 1803ca3 commit 2ba732f

8 files changed

+153
-38
lines changed

src/Interface/Modules/Fields/GeneratePointSamplesFromField.ui

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>300</width>
10-
<height>81</height>
9+
<width>305</width>
10+
<height>108</height>
1111
</rect>
1212
</property>
1313
<property name="minimumSize">
@@ -20,20 +20,10 @@
2020
<string>Dialog</string>
2121
</property>
2222
<layout class="QGridLayout" name="gridLayout">
23-
<item row="0" column="0">
24-
<widget class="QLabel" name="label">
23+
<item row="3" column="0">
24+
<widget class="QLabel" name="label_3">
2525
<property name="text">
26-
<string>Number of Seeds</string>
27-
</property>
28-
</widget>
29-
</item>
30-
<item row="0" column="1">
31-
<widget class="QSpinBox" name="numberOfSeedsSpinBox_">
32-
<property name="maximum">
33-
<number>999999</number>
34-
</property>
35-
<property name="value">
36-
<number>1</number>
26+
<string>Percentage of BBox</string>
3727
</property>
3828
</widget>
3929
</item>
@@ -44,6 +34,13 @@
4434
</property>
4535
</widget>
4636
</item>
37+
<item row="0" column="0">
38+
<widget class="QLabel" name="label">
39+
<property name="text">
40+
<string>Number of Seeds</string>
41+
</property>
42+
</widget>
43+
</item>
4744
<item row="1" column="1">
4845
<widget class="QDoubleSpinBox" name="seedSizeDoubleSpinBox_">
4946
<property name="decimals">
@@ -60,6 +57,36 @@
6057
</property>
6158
</widget>
6259
</item>
60+
<item row="3" column="1">
61+
<widget class="QDoubleSpinBox" name="bboxScaleDoubleSpinBox_">
62+
<property name="maximum">
63+
<double>1.000000000000000</double>
64+
</property>
65+
<property name="singleStep">
66+
<double>0.050000000000000</double>
67+
</property>
68+
<property name="value">
69+
<double>0.100000000000000</double>
70+
</property>
71+
</widget>
72+
</item>
73+
<item row="0" column="1">
74+
<widget class="QSpinBox" name="numberOfSeedsSpinBox_">
75+
<property name="maximum">
76+
<number>999999</number>
77+
</property>
78+
<property name="value">
79+
<number>1</number>
80+
</property>
81+
</widget>
82+
</item>
83+
<item row="2" column="0" colspan="2">
84+
<widget class="QCheckBox" name="bboxScaleCheckBox_">
85+
<property name="text">
86+
<string>Set size as percentage of bounding box</string>
87+
</property>
88+
</widget>
89+
</item>
6390
</layout>
6491
</widget>
6592
<resources/>

src/Interface/Modules/Fields/GeneratePointSamplesFromFieldDialog.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,6 @@ GeneratePointSamplesFromFieldDialog::GeneratePointSamplesFromFieldDialog(const s
4444

4545
addDoubleSpinBoxManager(seedSizeDoubleSpinBox_, Parameters::ProbeScale);
4646
addSpinBoxManager(numberOfSeedsSpinBox_, Parameters::NumSeeds);
47+
addDoubleSpinBoxManager(bboxScaleDoubleSpinBox_, Parameters::BBoxScale);
48+
addCheckBoxManager(bboxScaleCheckBox_, Parameters::UseBBoxScale);
4749
}

src/Interface/Modules/Fields/GenerateSinglePointProbeFromField.ui

Lines changed: 63 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@
7777
</item>
7878
<item row="1" column="1">
7979
<widget class="QDoubleSpinBox" name="yLocationDoubleSpinBox_">
80+
<property name="layoutDirection">
81+
<enum>Qt::LeftToRight</enum>
82+
</property>
8083
<property name="decimals">
8184
<number>15</number>
8285
</property>
@@ -225,37 +228,30 @@
225228
</property>
226229
<layout class="QGridLayout" name="gridLayout_2">
227230
<item row="3" column="0">
228-
<widget class="QLabel" name="label_10">
231+
<widget class="QLabel" name="label_12">
229232
<property name="text">
230-
<string>Color</string>
233+
<string>Percentage of BBox</string>
231234
</property>
232235
</widget>
233236
</item>
234-
<item row="2" column="2">
235-
<widget class="QLineEdit" name="probeLabelLineEdit_"/>
236-
</item>
237-
<item row="3" column="2">
238-
<widget class="QPushButton" name="colorChooserPushButton_">
237+
<item row="0" column="0">
238+
<widget class="QLabel" name="label_6">
239239
<property name="text">
240-
<string>Choose...</string>
240+
<string>Size</string>
241241
</property>
242242
</widget>
243243
</item>
244-
<item row="2" column="0">
244+
<item row="4" column="1">
245+
<widget class="QLineEdit" name="probeLabelLineEdit_"/>
246+
</item>
247+
<item row="4" column="0">
245248
<widget class="QLabel" name="label_9">
246249
<property name="text">
247250
<string>Label</string>
248251
</property>
249252
</widget>
250253
</item>
251-
<item row="0" column="0">
252-
<widget class="QLabel" name="label_6">
253-
<property name="text">
254-
<string>Size</string>
255-
</property>
256-
</widget>
257-
</item>
258-
<item row="0" column="2">
254+
<item row="0" column="1">
259255
<widget class="QDoubleSpinBox" name="sizeDoubleSpinBox_">
260256
<property name="decimals">
261257
<number>8</number>
@@ -271,11 +267,61 @@
271267
</property>
272268
</widget>
273269
</item>
270+
<item row="5" column="0">
271+
<widget class="QLabel" name="label_10">
272+
<property name="text">
273+
<string>Color</string>
274+
</property>
275+
</widget>
276+
</item>
277+
<item row="5" column="1">
278+
<widget class="QPushButton" name="colorChooserPushButton_">
279+
<property name="text">
280+
<string>Choose...</string>
281+
</property>
282+
</widget>
283+
</item>
284+
<item row="2" column="0" colspan="2">
285+
<widget class="QCheckBox" name="bboxScaleCheckBox_">
286+
<property name="text">
287+
<string>Set size as percentage of bounding box</string>
288+
</property>
289+
</widget>
290+
</item>
291+
<item row="3" column="1">
292+
<widget class="QDoubleSpinBox" name="bboxScaleDoubleSpinBox_">
293+
<property name="maximum">
294+
<double>1.000000000000000</double>
295+
</property>
296+
<property name="singleStep">
297+
<double>0.050000000000000</double>
298+
</property>
299+
<property name="value">
300+
<double>0.100000000000000</double>
301+
</property>
302+
</widget>
303+
</item>
274304
</layout>
275305
</widget>
276306
</item>
277307
</layout>
278308
</widget>
309+
<tabstops>
310+
<tabstop>moveToComboBox_</tabstop>
311+
<tabstop>xLocationDoubleSpinBox_</tabstop>
312+
<tabstop>yLocationDoubleSpinBox_</tabstop>
313+
<tabstop>zLocationDoubleSpinBox_</tabstop>
314+
<tabstop>fieldValueLineEdit_</tabstop>
315+
<tabstop>fieldNodeSpinBox_</tabstop>
316+
<tabstop>snapToNodeCheckBox_</tabstop>
317+
<tabstop>fieldElemSpinBox_</tabstop>
318+
<tabstop>snapToElementCheckBox_</tabstop>
319+
<tabstop>sizeDoubleSpinBox_</tabstop>
320+
<tabstop>bboxScaleCheckBox_</tabstop>
321+
<tabstop>bboxScaleDoubleSpinBox_</tabstop>
322+
<tabstop>probeLabelLineEdit_</tabstop>
323+
<tabstop>colorChooserPushButton_</tabstop>
324+
</tabstops>
279325
<resources/>
280326
<connections/>
281327
</ui>

src/Interface/Modules/Fields/GenerateSinglePointProbeFromFieldDialog.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ GenerateSinglePointProbeFromFieldDialog::GenerateSinglePointProbeFromFieldDialog
5656
addCheckBoxManager(snapToNodeCheckBox_, Parameters::SnapToNode);
5757
addCheckBoxManager(snapToElementCheckBox_, Parameters::SnapToElement);
5858

59+
addDoubleSpinBoxManager(bboxScaleDoubleSpinBox_, Parameters::BBoxSize);
60+
addCheckBoxManager(bboxScaleCheckBox_, Parameters::UseBBoxSize);
61+
5962
connect(moveToComboBox_, SIGNAL(activated(const QString&)), this, SLOT(enableWidgets(const QString&)));
6063
connect(colorChooserPushButton_, SIGNAL(clicked()), this, SLOT(assignDefaultMeshColor()));
6164
connectButtonToExecuteSignal(colorChooserPushButton_);

src/Modules/Legacy/Fields/GeneratePointSamplesFromField.cc

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ using namespace Graphics::Datatypes;
6666
ALGORITHM_PARAMETER_DEF(Fields, NumSeeds);
6767
ALGORITHM_PARAMETER_DEF(Fields, ProbeScale);
6868
ALGORITHM_PARAMETER_DEF(Fields, PointPositions);
69+
ALGORITHM_PARAMETER_DEF(Fields, BBoxScale);
70+
ALGORITHM_PARAMETER_DEF(Fields, UseBBoxScale);
6971

7072
MODULE_INFO_DEF(GeneratePointSamplesFromField, NewField, SCIRun)
7173

@@ -120,6 +122,8 @@ void GeneratePointSamplesFromField::setStateDefaults()
120122
state->setValue(Parameters::NumSeeds, 1);
121123
state->setValue(Parameters::ProbeScale, 0.23);
122124
state->setValue(Parameters::PointPositions, VariableList());
125+
state->setValue(Parameters::BBoxScale, 0.1);
126+
state->setValue(Parameters::UseBBoxScale, false);
123127
getOutputPort(GeneratedWidget)->connectConnectionFeedbackListener([this](const ModuleFeedback& var) { processWidgetFeedback(var); });
124128
}
125129

@@ -190,6 +194,11 @@ FieldHandle GeneratePointSamplesFromField::GenerateOutputField()
190194

191195
auto bbox = ifieldhandle->vmesh()->get_bounding_box();
192196

197+
// First, the total needs to be scaled to half since we need the radius instead of the diameter
198+
// Second, we want to divide by 3 to get the average of the bbox lengths
199+
const static double SCALE_CORRECTION = 1.0 / 6.0;
200+
double fieldScale = SCALE_CORRECTION * (bbox.x_length() + bbox.y_length() + bbox.z_length());
201+
193202
Point center;
194203
Point bmin = bbox.get_min();
195204
Point bmax = bbox.get_max();
@@ -221,7 +230,12 @@ FieldHandle GeneratePointSamplesFromField::GenerateOutputField()
221230

222231
auto state = get_state();
223232
auto numSeeds = state->getValue(Parameters::NumSeeds).toInt();
224-
auto scale = state->getValue(Parameters::ProbeScale).toDouble();
233+
double scale;
234+
if (state->getValue(Parameters::UseBBoxScale).toBool())
235+
scale = fieldScale * state->getValue(Parameters::BBoxScale).toDouble();
236+
else
237+
scale = state->getValue(Parameters::ProbeScale).toDouble();
238+
225239
auto widgetName = [](int i) { return "GPSFF(" + std::to_string(i) + ")"; };
226240
if (impl_->pointWidgets_.size() != numSeeds)
227241
{

src/Modules/Legacy/Fields/GeneratePointSamplesFromField.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ namespace SCIRun {
4444
ALGORITHM_PARAMETER_DECL(NumSeeds);
4545
ALGORITHM_PARAMETER_DECL(ProbeScale);
4646
ALGORITHM_PARAMETER_DECL(PointPositions);
47+
ALGORITHM_PARAMETER_DECL(BBoxScale);
48+
ALGORITHM_PARAMETER_DECL(UseBBoxScale);
4749
}
4850
}
4951
}

src/Modules/Legacy/Fields/GenerateSinglePointProbeFromField.cc

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ ALGORITHM_PARAMETER_DEF(Fields, ProbeLabel);
6565
ALGORITHM_PARAMETER_DEF(Fields, ProbeColor);
6666
ALGORITHM_PARAMETER_DEF(Fields, SnapToNode);
6767
ALGORITHM_PARAMETER_DEF(Fields, SnapToElement);
68+
ALGORITHM_PARAMETER_DEF(Fields, BBoxSize);
69+
ALGORITHM_PARAMETER_DEF(Fields, UseBBoxSize);
6870

6971
namespace SCIRun
7072
{
@@ -82,7 +84,7 @@ namespace SCIRun
8284
int widgetid_;
8385
double l2norm_;
8486
bool color_changed_;
85-
GeometryHandle buildWidgetObject(FieldHandle field, ModuleStateHandle state, const GeometryIDGenerator& idGenerator);
87+
GeometryHandle buildWidgetObject(FieldHandle field, double fieldScale, ModuleStateHandle state, const GeometryIDGenerator& idGenerator);
8688
RenderState getWidgetRenderState(ModuleStateHandle state);
8789
Transform previousTransform_;
8890
};
@@ -167,6 +169,8 @@ void GenerateSinglePointProbeFromField::setStateDefaults()
167169
state->setValue(ProbeColor, ColorRGB(1, 1, 1).toString());
168170
state->setValue(SnapToNode, false);
169171
state->setValue(SnapToElement, false);
172+
state->setValue(Parameters::BBoxSize, 0.1);
173+
state->setValue(Parameters::UseBBoxSize, false);
170174

171175
getOutputPort(GeneratedWidget)->connectConnectionFeedbackListener([this](const ModuleFeedback& var) { processWidgetFeedback(var); });
172176
}
@@ -181,6 +185,17 @@ Point GenerateSinglePointProbeFromField::currentLocation() const
181185
void GenerateSinglePointProbeFromField::execute()
182186
{
183187
auto ifieldOption = getOptionalInput(InputField);
188+
189+
// First, the total needs to be scaled to half since we need the radius instead of the diameter
190+
// Second, we want to divide by 3 to get the average of the bbox lengths
191+
const static double SCALE_CORRECTION = 1.0 / 6.0;
192+
double fieldScale = 0.0;
193+
if (ifieldOption)
194+
{
195+
auto bbox = ifieldOption->get()->vmesh()->get_bounding_box();
196+
fieldScale = SCALE_CORRECTION * (bbox.x_length() + bbox.y_length() + bbox.z_length());
197+
}
198+
184199
if (needToExecute())
185200
{
186201
auto field = GenerateOutputField(ifieldOption);
@@ -189,7 +204,7 @@ void GenerateSinglePointProbeFromField::execute()
189204
auto index = GenerateIndex();
190205
sendOutput(ElementIndex, boost::make_shared<Int32>(static_cast<int>(index)));
191206

192-
auto geom = impl_->buildWidgetObject(field, get_state(), *this);
207+
auto geom = impl_->buildWidgetObject(field, fieldScale, get_state(), *this);
193208
sendOutput(GeneratedWidget, geom);
194209
}
195210
}
@@ -468,13 +483,17 @@ index_type GenerateSinglePointProbeFromField::GenerateIndex()
468483
return index;
469484
}
470485

471-
GeometryHandle GenerateSinglePointProbeFromFieldImpl::buildWidgetObject(FieldHandle field, ModuleStateHandle state, const GeometryIDGenerator& idGenerator)
486+
GeometryHandle GenerateSinglePointProbeFromFieldImpl::buildWidgetObject(FieldHandle field, double fieldScale, ModuleStateHandle state, const GeometryIDGenerator& idGenerator)
472487
{
473488
using namespace Parameters;
474-
double radius = state->getValue(ProbeSize).toDouble();
475489
auto mesh = field->vmesh();
476-
mesh->synchronize(Mesh::NODES_E);
490+
double radius;
491+
if (state->getValue(UseBBoxSize).toBool())
492+
radius = fieldScale * state->getValue(BBoxSize).toDouble();
493+
else
494+
radius = state->getValue(ProbeSize).toDouble();
477495

496+
mesh->synchronize(Mesh::NODES_E);
478497
// todo: quicker way to get a single point
479498
VMesh::Node::iterator eiter;
480499
mesh->begin(eiter);

src/Modules/Legacy/Fields/GenerateSinglePointProbeFromField.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ namespace SCIRun {
5454
ALGORITHM_PARAMETER_DECL(ProbeColor);
5555
ALGORITHM_PARAMETER_DECL(SnapToNode);
5656
ALGORITHM_PARAMETER_DECL(SnapToElement);
57+
ALGORITHM_PARAMETER_DECL(BBoxSize);
58+
ALGORITHM_PARAMETER_DECL(UseBBoxSize);
5759
}
5860
}
5961
}

0 commit comments

Comments
 (0)