Skip to content

Commit 5709222

Browse files
authored
ENH: Let user turn ON/OFF collision detection
In many laptops, the algorithm eats up a lot of RAM and freezes the computer for some seconds. So disable it by default, and only turn it on actively by the user, so that he sees why this is happening. In some cases, we do not want to calculate collisions, just to play around and show functionality as well as quickly visually see where there might be collisions. Once beam angle is decided, we can activate numerical collision detection, and get more accurate results.
1 parent 169eed7 commit 5709222

File tree

4 files changed

+28
-6
lines changed

4 files changed

+28
-6
lines changed

RoomsEyeView/Logic/vtkMRMLRoomsEyeViewNode.cxx

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ vtkMRMLNodeNewMacro(vtkMRMLRoomsEyeViewNode);
7272
vtkMRMLRoomsEyeViewNode::vtkMRMLRoomsEyeViewNode()
7373
: PatientBodySegmentID(nullptr)
7474
, TreatmentMachineDescriptorFilePath(nullptr)
75-
, CollisionDetectionEnabled(true)
75+
, CollisionDetectionEnabled(false)
7676
, GantryRotationAngle(0.0)
7777
, CollimatorRotationAngle(0.0)
7878
, ImagingPanelMovement(-68.50)

RoomsEyeView/Resources/UI/qSlicerRoomsEyeViewModule.ui

+10-3
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@
258258
<item row="2" column="0" colspan="3">
259259
<widget class="QLabel" name="CollisionDetectionStatusLabel">
260260
<property name="text">
261-
<string>No collisions detected.</string>
261+
<string>Collision computation disabled</string>
262262
</property>
263263
</widget>
264264
</item>
@@ -278,14 +278,21 @@
278278
</property>
279279
</spacer>
280280
</item>
281-
<item row="0" column="0">
281+
<item row="0" column="0" colspan="2">
282+
<widget class="QCheckBox" name="ActivateCollisionComputationCheckBox">
283+
<property name="text">
284+
<string>Enable computation</string>
285+
</property>
286+
</widget>
287+
</item>
288+
<item row="1" column="0">
282289
<widget class="QLabel" name="label_7">
283290
<property name="text">
284291
<string>Patient body:</string>
285292
</property>
286293
</widget>
287294
</item>
288-
<item row="0" column="1">
295+
<item row="1" column="1">
289296
<widget class="qMRMLSegmentSelectorWidget" name="SegmentSelectorWidget_PatientBody" native="true">
290297
<property name="noneEnabled" stdset="0">
291298
<bool>true</bool>

RoomsEyeView/qSlicerRoomsEyeViewModuleWidget.cxx

+16-2
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,9 @@ void qSlicerRoomsEyeViewModuleWidget::setup()
392392
// 3D camera control
393393
connect(d->FixedCameraCheckBox, SIGNAL(toggled(bool)), this, SLOT(setFixedReferenceCameraEnabled(bool)));
394394

395+
// Collision detection control
396+
connect(d->ActivateCollisionComputationCheckBox, SIGNAL(toggled(bool)), this, SLOT(setCollisionComputationEnabled(bool)));
397+
395398
// Disable treatment machine geometry controls until a machine is loaded
396399
d->GantryRotationSlider->setEnabled(false);
397400
d->CollimatorRotationSlider->setEnabled(false);
@@ -400,7 +403,7 @@ void qSlicerRoomsEyeViewModuleWidget::setup()
400403
d->LongitudinalTableTopDisplacementSlider->setEnabled(false);
401404
d->LateralTableTopDisplacementSlider->setEnabled(false);
402405
d->ImagingPanelMovementSlider->setEnabled(false);
403-
406+
404407
// Handle scene change event if occurs
405408
qvtkConnect(d->logic(), vtkCommand::ModifiedEvent, this, SLOT(onLogicModified()));
406409
}
@@ -1004,7 +1007,7 @@ void qSlicerRoomsEyeViewModuleWidget::checkForCollisions()
10041007
Q_D(qSlicerRoomsEyeViewModuleWidget);
10051008

10061009
vtkMRMLRoomsEyeViewNode* paramNode = vtkMRMLRoomsEyeViewNode::SafeDownCast(d->MRMLNodeComboBox_ParameterSet->currentNode());
1007-
if (!paramNode || !d->ModuleWindowInitialized)
1010+
if (!paramNode || !d->ModuleWindowInitialized|| !paramNode->GetCollisionDetectionEnabled())
10081011
{
10091012
return;
10101013
}
@@ -1093,3 +1096,14 @@ void qSlicerRoomsEyeViewModuleWidget::setFixedReferenceCameraEnabled(bool toggle
10931096
}
10941097
cameraNode->SetAndObserveTransformNodeID(nullptr);
10951098
}
1099+
1100+
//-----------------------------------------------------------------------------
1101+
void qSlicerRoomsEyeViewModuleWidget::setCollisionComputationEnabled(bool toggled)
1102+
{
1103+
Q_D(qSlicerRoomsEyeViewModuleWidget);
1104+
vtkMRMLRoomsEyeViewNode* paramNode = vtkMRMLRoomsEyeViewNode::SafeDownCast(d->MRMLNodeComboBox_ParameterSet->currentNode());
1105+
paramNode->SetCollisionDetectionEnabled(toggled);
1106+
QString collisionsMessage(toggled ? tr("Collision computation enabled") : tr("Collision computation disabled"));
1107+
d->CollisionDetectionStatusLabel->setText(collisionsMessage);
1108+
d->CollisionDetectionStatusLabel->setStyleSheet("color: black");
1109+
}

RoomsEyeView/qSlicerRoomsEyeViewModuleWidget.h

+1
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public slots:
6868
void updateTreatmentOrientationMarker();
6969

7070
void setFixedReferenceCameraEnabled(bool);
71+
void setCollisionComputationEnabled(bool);
7172

7273
protected slots:
7374
void onLoadTreatmentMachineButtonClicked();

0 commit comments

Comments
 (0)