~ubuntu-branches/ubuntu/lucid/meshlab/lucid

« back to all changes in this revision

Viewing changes to meshlab/src/meshlabplugins/render_splatpyramid/dialog.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Teemu Ikonen
  • Date: 2009-10-08 16:40:41 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20091008164041-0c2ealqv8b8uc20c
Tags: 1.2.2-1
* New upstream version
* Do not build filter_isoparametrization because liblevmar dependency
  is not (yet) in Debian
* Fix compilation with gcc-4.4, thanks to Jonathan Liu for the patch
  (closes: #539544)
* rules: Add compiler variables to the qmake call (for testing with new
  GCC versions)
* io_3ds.pro: Make LIBS and INCLUDEPATH point to Debian version of lib3ds
* io_epoch.pro: Make LIBS point to Debian version of libbz2
* control:
  - Move Homepage URL to the source package section
  - Update to standards-version 3.8.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "dialog.h"
 
2
#include <QTextStream>
 
3
#include <QFileDialog>
 
4
#include <QMessageBox>
 
5
 
 
6
 
 
7
#define DECFACTOR 100000.0f
 
8
 
 
9
using namespace vcg;
 
10
 
 
11
Dialog::Dialog(PointBasedRenderer* r, QGLWidget* gla, QWidget *parent)
 
12
  : QDockWidget(parent) {
 
13
 
 
14
  renderer = r;
 
15
  glarea = gla;
 
16
 
 
17
  ui.setupUi(this);
 
18
  this->setWidget(ui.frame);
 
19
  this->setFeatures(QDockWidget::AllDockWidgetFeatures);
 
20
  this->setAllowedAreas(Qt::LeftDockWidgetArea);
 
21
  this->setFloating(true);
 
22
 
 
23
  colorSignalMapper = new QSignalMapper(this);
 
24
  valueSignalMapper = new QSignalMapper(this);
 
25
 
 
26
        
 
27
  QGridLayout * qgrid = new QGridLayout(ui.uvTab);
 
28
  qgrid->setColumnMinimumWidth(0, 45);
 
29
  qgrid->setColumnMinimumWidth(1, 40);
 
30
  qgrid->setColumnMinimumWidth(2, 40);
 
31
  qgrid->setColumnMinimumWidth(3, 40);
 
32
 
 
33
  QLabel *perVertexColorLabel = new QLabel(this);
 
34
  perVertexColorLabel->setText("Use PerVertex Color");
 
35
 
 
36
  QCheckBox *perVertexColorCBox = new QCheckBox(this);
 
37
 
 
38
  //    rendMode->colorMode =  GLW::CMNone;
 
39
 
 
40
  connect(perVertexColorCBox, SIGNAL(stateChanged(int)), this, SLOT(setColorMode(int)));
 
41
  qgrid->addWidget(perVertexColorLabel, 0, 0);
 
42
  qgrid->addWidget(perVertexColorCBox, 0, 1);
 
43
        
 
44
  //    connect(colorSignalMapper, SIGNAL(mapped(const QString &)), this, SLOT(setColorValue(const QString &)));
 
45
  //    connect(valueSignalMapper, SIGNAL(mapped(const QString &)), this, SLOT(valuesChanged(const QString &)));
 
46
 
 
47
  QLabel *radiusSizeLabel = new QLabel(this);
 
48
  radiusSizeLabel->setText("Radius Size");
 
49
 
 
50
  QDoubleSpinBox *radiusSizeSBox = new QDoubleSpinBox(this);
 
51
  connect(radiusSizeSBox, SIGNAL(valueChanged(double)), this, SLOT(setRadiusSize(double)));
 
52
  qgrid->addWidget(radiusSizeLabel, 1, 0);
 
53
  qgrid->addWidget(radiusSizeSBox, 1, 1);
 
54
  radiusSizeSBox->setMaximum(99.0);
 
55
  radiusSizeSBox->setValue(0.001);
 
56
  radiusSizeSBox->setDecimals(4);
 
57
  radiusSizeSBox->setSingleStep(0.01);
 
58
 
 
59
 
 
60
  QLabel *prefilterSizeLabel = new QLabel(this);
 
61
  prefilterSizeLabel->setText("Prefilter Size");
 
62
 
 
63
  QDoubleSpinBox *prefilterSizeSBox = new QDoubleSpinBox(this);
 
64
  connect(prefilterSizeSBox, SIGNAL(valueChanged(double)), this, SLOT(setPrefilterSize(double)));
 
65
  qgrid->addWidget(prefilterSizeLabel, 2, 0);
 
66
  qgrid->addWidget(prefilterSizeSBox, 2, 1);
 
67
  prefilterSizeSBox->setMaximum(99.0);
 
68
  prefilterSizeSBox->setValue(1.0);
 
69
  prefilterSizeSBox->setDecimals(3);
 
70
  prefilterSizeSBox->setSingleStep(0.01);
 
71
 
 
72
 
 
73
  QLabel *minimumSizeLabel = new QLabel(this);
 
74
  minimumSizeLabel->setText("Minimum Radius Size");
 
75
 
 
76
  QDoubleSpinBox *minimumSizeSBox = new QDoubleSpinBox(this);
 
77
  connect(minimumSizeSBox, SIGNAL(valueChanged(double)), this, SLOT(setMinimumSize(double)));
 
78
  qgrid->addWidget(minimumSizeLabel, 3, 0);
 
79
  qgrid->addWidget(minimumSizeSBox, 3, 1);
 
80
  minimumSizeSBox->setMaximum(99.0);
 
81
  minimumSizeSBox->setValue(0.1);
 
82
  minimumSizeSBox->setDecimals(3);
 
83
  minimumSizeSBox->setSingleStep(0.01);
 
84
 
 
85
  //    this->setWindowFlags(Qt::WindowStaysOnTopHint);
 
86
  connect(ui.okButton, SIGNAL(clicked()), this, SLOT(accept()));
 
87
}
 
88
 
 
89
Dialog::~Dialog()
 
90
{
 
91
}
 
92
 
 
93
void Dialog::setRadiusSize(double value) {
 
94
  renderer->setReconstructionFilterSize(value);
 
95
  glarea->updateGL();
 
96
}
 
97
 
 
98
void Dialog::setPrefilterSize(double value) {
 
99
  renderer->setPrefilterSize(value);
 
100
  glarea->updateGL();
 
101
}
 
102
 
 
103
void Dialog::setMinimumSize(double value) {
 
104
  renderer->setMinimumRadiusSize(value);
 
105
  glarea->updateGL();
 
106
}
 
107
 
 
108
 
 
109
void Dialog::setColorMode(int state) {
 
110
  if (state == Qt::Checked) {
 
111
        rendMode->colorMode = GLW::CMPerVert;
 
112
  } else {
 
113
        rendMode->colorMode = GLW::CMNone;
 
114
  }
 
115
  glarea->updateGL();
 
116
}
 
117
 
 
118
void Dialog::changeTexturePath(int i) {
 
119
  shaderInfo->textureInfo[i].path = textLineEdits[i]->text();
 
120
  reloadTexture(i);
 
121
}
 
122
 
 
123
void Dialog::browseTexturePath(int i) {
 
124
  QFileDialog fd(0,"Choose new texture");
 
125
 
 
126
  QDir shadersDir = QDir(qApp->applicationDirPath());
 
127
#if defined(Q_OS_WIN)
 
128
  if (shadersDir.dirName() == "debug" || shadersDir.dirName() == "release")
 
129
        shadersDir.cdUp();
 
130
#elif defined(Q_OS_MAC)
 
131
  if (shadersDir.dirName() == "MacOS") {
 
132
        shadersDir.cdUp();
 
133
        shadersDir.cdUp();
 
134
        shadersDir.cdUp();
 
135
  }
 
136
#endif
 
137
  shadersDir.cd("textures");
 
138
        
 
139
  fd.setDirectory(shadersDir);
 
140
  fd.move(500, 100);
 
141
 
 
142
  QStringList newPath;
 
143
  if (fd.exec())
 
144
        {
 
145
          newPath = fd.selectedFiles();
 
146
          textLineEdits[i]->setText(newPath.at(0));
 
147
          shaderInfo->textureInfo[i].path = newPath.at(0);
 
148
          reloadTexture(i);
 
149
        } 
 
150
        
 
151
}
 
152
 
 
153
void Dialog::reloadTexture(int i) {
 
154
  glDeleteTextures( 1, &shaderInfo->textureInfo[i].tId);
 
155
 
 
156
  glEnable(shaderInfo->textureInfo[i].Target);
 
157
  QImage img, imgScaled, imgGL;
 
158
  img.load(shaderInfo->textureInfo[i].path);
 
159
  // image has to be scaled to a 2^n size. We choose the first 2^N <= picture size.
 
160
  int bestW=pow(2.0,floor(::log(double(img.width() ))/::log(2.0)));
 
161
  int bestH=pow(2.0,floor(::log(double(img.height()))/::log(2.0)));
 
162
  imgScaled=img.scaled(bestW,bestH,Qt::IgnoreAspectRatio,Qt::SmoothTransformation);
 
163
  imgGL=QGLWidget::convertToGLFormat(imgScaled);
 
164
 
 
165
  glGenTextures( 1, &(shaderInfo->textureInfo[i].tId) );
 
166
  glBindTexture( shaderInfo->textureInfo[i].Target, shaderInfo->textureInfo[i].tId );
 
167
  glTexImage2D( shaderInfo->textureInfo[i].Target, 0, 3, imgGL.width(), imgGL.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, imgGL.bits() );
 
168
  glTexParameteri( shaderInfo->textureInfo[i].Target, GL_TEXTURE_MIN_FILTER, shaderInfo->textureInfo[i].MinFilter );
 
169
  glTexParameteri( shaderInfo->textureInfo[i].Target, GL_TEXTURE_MAG_FILTER, shaderInfo->textureInfo[i].MagFilter ); 
 
170
  glTexParameteri( shaderInfo->textureInfo[i].Target, GL_TEXTURE_WRAP_S, shaderInfo->textureInfo[i].WrapS ); 
 
171
  glTexParameteri( shaderInfo->textureInfo[i].Target, GL_TEXTURE_WRAP_T, shaderInfo->textureInfo[i].WrapT ); 
 
172
  glTexParameteri( shaderInfo->textureInfo[i].Target, GL_TEXTURE_WRAP_R, shaderInfo->textureInfo[i].WrapR ); 
 
173
 
 
174
  glarea->updateGL();
 
175
}