1 /*
2  * This file is part of OctoMap - An Efficient Probabilistic 3D Mapping
3  * Framework Based on Octrees
4  * http://octomap.github.io
5  *
6  * Copyright (c) 2009-2014, K.M. Wurm and A. Hornung, University of Freiburg
7  * All rights reserved. License for the viewer octovis: GNU GPL v2
8  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
9  *
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License as published by
13  * the Free Software Foundation; either version 2 of the License, or
14  * (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful, but
17  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
18  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  * for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program. If not, see http://www.gnu.org/licenses/.
23  */
24 
25 #include <octovis/ViewerSettingsPanel.h>
26 
ViewerSettingsPanel(QWidget * parent)27 ViewerSettingsPanel::ViewerSettingsPanel(QWidget *parent)
28     : QWidget(parent), m_currentScan(0), m_numberScans(0), m_treeDepth(_TREE_MAX_DEPTH), m_resolution(0.1)
29 {
30 	ui.setupUi(this);
31 	connect(ui.treeDepth, SIGNAL(valueChanged(int)), this, SLOT(setTreeDepth(int)));
32 
33 	scanProgressChanged();
34 	leafSizeChanged();
35 }
36 
~ViewerSettingsPanel()37 ViewerSettingsPanel::~ViewerSettingsPanel()
38 {
39 
40 }
41 
on_nextScanButton_clicked()42 void ViewerSettingsPanel::on_nextScanButton_clicked(){
43   if (m_currentScan < m_numberScans){
44     m_currentScan++;
45     scanProgressChanged();
46     emit addNextScans(1);
47   }
48 }
49 
on_fastFwdScanButton_clicked()50 void ViewerSettingsPanel::on_fastFwdScanButton_clicked(){
51   unsigned increase = int(m_numberScans)-int(m_currentScan);
52   if (increase > 5) increase = 5;
53   m_currentScan += increase;
54   scanProgressChanged();
55   emit addNextScans(increase);
56 }
57 
on_lastScanButton_clicked()58 void ViewerSettingsPanel::on_lastScanButton_clicked(){
59   unsigned increase = int(m_numberScans)-int(m_currentScan);
60   m_currentScan += increase;
61   scanProgressChanged();
62   emit addNextScans(increase);
63 }
64 
on_firstScanButton_clicked()65 void ViewerSettingsPanel::on_firstScanButton_clicked(){
66   m_currentScan = 1;
67   scanProgressChanged();
68   emit gotoFirstScan();
69 }
70 
scanProgressChanged()71 void ViewerSettingsPanel::scanProgressChanged(){
72   if (int(m_numberScans) > 1)
73     ui.scanProgressBar->setMaximum(int(m_numberScans));
74   else
75     ui.scanProgressBar->setMaximum(1);
76 
77   if (m_currentScan == m_numberScans){
78     ui.nextScanButton->setEnabled(false);
79     ui.fastFwdScanButton->setEnabled(false);
80     ui.lastScanButton->setEnabled(false);
81 
82   } else{
83     ui.nextScanButton->setEnabled(true);
84     ui.fastFwdScanButton->setEnabled(true);
85     ui.lastScanButton->setEnabled(true);
86   }
87 
88   if (m_currentScan < 2){
89     ui.firstScanButton->setEnabled(false);
90   } else{
91     ui.firstScanButton->setEnabled(true);
92   }
93 
94   ui.scanProgressBar->setValue(m_currentScan);
95   // queue a redraw:
96   ui.scanProgressBar->update();
97 }
98 
setNumberOfScans(unsigned scans)99 void ViewerSettingsPanel::setNumberOfScans(unsigned scans){
100   m_numberScans = scans;
101   scanProgressChanged();
102 }
103 
setCurrentScan(unsigned scan)104 void ViewerSettingsPanel::setCurrentScan(unsigned scan){
105   m_currentScan = scan;
106   scanProgressChanged();
107 }
108 
setResolution(double resolution)109 void ViewerSettingsPanel::setResolution(double resolution){
110   m_resolution = resolution;
111   leafSizeChanged();
112 }
113 
setTreeDepth(int depth)114 void ViewerSettingsPanel::setTreeDepth(int depth){
115   emit treeDepthChanged(depth);
116   m_treeDepth = depth;
117   ui.treeDepth->setValue(depth);
118   ui.treeDepthSlider->setValue(depth);
119   leafSizeChanged();
120 }
121 
leafSizeChanged()122 void ViewerSettingsPanel::leafSizeChanged(){
123   double leafSize = m_resolution * pow(2.0, (int) (_TREE_MAX_DEPTH-m_treeDepth));
124   ui.leafSize->setText(QString::number(leafSize)+" m");
125 }
126