Skip to content

Commit ff2572e

Browse files
authored
Merge pull request #2267 from RubioJr9/sphere_scaling
Closes #1524
2 parents 9bba219 + a0ac051 commit ff2572e

10 files changed

+188
-44
lines changed

src/Interface/Modules/Fields/GeneratePointSamplesFromField.ui

Lines changed: 47 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,24 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>300</width>
10-
<height>81</height>
9+
<width>350</width>
10+
<height>120</height>
1111
</rect>
1212
</property>
1313
<property name="minimumSize">
1414
<size>
15-
<width>300</width>
16-
<height>81</height>
15+
<width>350</width>
16+
<height>120</height>
1717
</size>
1818
</property>
1919
<property name="windowTitle">
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,39 @@
6057
</property>
6158
</widget>
6259
</item>
60+
<item row="3" column="1">
61+
<widget class="QDoubleSpinBox" name="bboxScaleDoubleSpinBox_">
62+
<property name="enabled">
63+
<bool>false</bool>
64+
</property>
65+
<property name="maximum">
66+
<double>100.000000000000000</double>
67+
</property>
68+
<property name="singleStep">
69+
<double>5.000000000000000</double>
70+
</property>
71+
<property name="value">
72+
<double>10.000000000000000</double>
73+
</property>
74+
</widget>
75+
</item>
76+
<item row="0" column="1">
77+
<widget class="QSpinBox" name="numberOfSeedsSpinBox_">
78+
<property name="maximum">
79+
<number>999999</number>
80+
</property>
81+
<property name="value">
82+
<number>1</number>
83+
</property>
84+
</widget>
85+
</item>
86+
<item row="2" column="0" colspan="2">
87+
<widget class="QCheckBox" name="bboxScaleCheckBox_">
88+
<property name="text">
89+
<string>Set size as percentage of bounding box</string>
90+
</property>
91+
</widget>
92+
</item>
6393
</layout>
6494
</widget>
6595
<resources/>

src/Interface/Modules/Fields/GeneratePointSamplesFromFieldDialog.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,14 @@ 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);
49+
50+
connect(bboxScaleCheckBox_, SIGNAL(stateChanged(int)), this, SLOT(toggleSpinBoxes()));
51+
}
52+
53+
void GeneratePointSamplesFromFieldDialog::toggleSpinBoxes()
54+
{
55+
bboxScaleDoubleSpinBox_->setEnabled(!bboxScaleDoubleSpinBox_->isEnabled());
56+
seedSizeDoubleSpinBox_->setEnabled(!seedSizeDoubleSpinBox_->isEnabled());
4757
}

src/Interface/Modules/Fields/GeneratePointSamplesFromFieldDialog.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ namespace SCIRun {
4545
GeneratePointSamplesFromFieldDialog(const std::string& name,
4646
SCIRun::Dataflow::Networks::ModuleStateHandle state,
4747
QWidget* parent = nullptr);
48+
private Q_SLOTS:
49+
void toggleSpinBoxes();
4850
};
4951

5052
}

src/Interface/Modules/Fields/GenerateSinglePointProbeFromField.ui

Lines changed: 69 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77
<x>0</x>
88
<y>0</y>
99
<width>436</width>
10-
<height>430</height>
10+
<height>460</height>
1111
</rect>
1212
</property>
1313
<property name="minimumSize">
1414
<size>
1515
<width>436</width>
16-
<height>430</height>
16+
<height>460</height>
1717
</size>
1818
</property>
1919
<property name="windowTitle">
@@ -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>
@@ -217,45 +220,38 @@
217220
<property name="minimumSize">
218221
<size>
219222
<width>100</width>
220-
<height>150</height>
223+
<height>170</height>
221224
</size>
222225
</property>
223226
<property name="title">
224227
<string>Widget Settings</string>
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,64 @@
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="enabled">
294+
<bool>false</bool>
295+
</property>
296+
<property name="maximum">
297+
<double>100.000000000000000</double>
298+
</property>
299+
<property name="singleStep">
300+
<double>5.000000000000000</double>
301+
</property>
302+
<property name="value">
303+
<double>10.000000000000000</double>
304+
</property>
305+
</widget>
306+
</item>
274307
</layout>
275308
</widget>
276309
</item>
277310
</layout>
278311
</widget>
312+
<tabstops>
313+
<tabstop>moveToComboBox_</tabstop>
314+
<tabstop>xLocationDoubleSpinBox_</tabstop>
315+
<tabstop>yLocationDoubleSpinBox_</tabstop>
316+
<tabstop>zLocationDoubleSpinBox_</tabstop>
317+
<tabstop>fieldValueLineEdit_</tabstop>
318+
<tabstop>fieldNodeSpinBox_</tabstop>
319+
<tabstop>snapToNodeCheckBox_</tabstop>
320+
<tabstop>fieldElemSpinBox_</tabstop>
321+
<tabstop>snapToElementCheckBox_</tabstop>
322+
<tabstop>sizeDoubleSpinBox_</tabstop>
323+
<tabstop>bboxScaleCheckBox_</tabstop>
324+
<tabstop>bboxScaleDoubleSpinBox_</tabstop>
325+
<tabstop>probeLabelLineEdit_</tabstop>
326+
<tabstop>colorChooserPushButton_</tabstop>
327+
</tabstops>
279328
<resources/>
280329
<connections/>
281330
</ui>

src/Interface/Modules/Fields/GenerateSinglePointProbeFromFieldDialog.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,13 @@ 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_);
65+
connect(bboxScaleCheckBox_, SIGNAL(stateChanged(int)), this, SLOT(toggleSpinBoxes()));
6266
}
6367

6468
void GenerateSinglePointProbeFromFieldDialog::enableWidgets(const QString& mode)
@@ -98,3 +102,9 @@ void GenerateSinglePointProbeFromFieldDialog::pushColor()
98102
{
99103
state_->setValue(Parameters::ProbeColor, ColorRGB(defaultMeshColor_.redF(), defaultMeshColor_.greenF(), defaultMeshColor_.blueF()).toString());
100104
}
105+
106+
void GenerateSinglePointProbeFromFieldDialog::toggleSpinBoxes()
107+
{
108+
bboxScaleDoubleSpinBox_->setEnabled(!bboxScaleDoubleSpinBox_->isEnabled());
109+
sizeDoubleSpinBox_->setEnabled(!sizeDoubleSpinBox_->isEnabled());
110+
}

src/Interface/Modules/Fields/GenerateSinglePointProbeFromFieldDialog.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ namespace SCIRun {
5353
void enableWidgets(const QString& mode);
5454
void pushColor();
5555
void assignDefaultMeshColor();
56+
void toggleSpinBoxes();
5657

5758
private:
5859
QColor defaultMeshColor_;

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, 10.0);
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 * (0.01*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
}

0 commit comments

Comments
 (0)