1 /****************************************************************************
2 * VCGLib o o *
3 * Visual and Computer Graphics Library o o *
4 * _ O _ *
5 * Copyright(C) 2004 \/)\/ *
6 * Visual Computing Lab /\/| *
7 * ISTI - Italian National Research Council | *
8 * \ *
9 * All rights reserved. *
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, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
19 * GNU General Public License (http://www.gnu.org/licenses/gpl.txt) *
20 * for more details. *
21 * *
22 ****************************************************************************/
23
24 #include "ui_savemaskexporter.h"
25 #include "savemaskexporter.h"
26 #include "changetexturename.h"
27
28 #include <QFileInfo>
29
SaveMaskExporterDialog(QWidget * parent,MeshModel * m,int capability,int defaultBits,RichParameterSet * _parSet,GLArea * glar)30 SaveMaskExporterDialog::SaveMaskExporterDialog(QWidget *parent,MeshModel *m,int capability,int defaultBits, RichParameterSet *_parSet,GLArea* glar):
31 QDialog(parent),m(m),mask(0),capability(capability),defaultBits(defaultBits),parSet(_parSet),glar(glar)
32 {
33 ui = new Ui::MaskExporterDialog();
34 InitDialog();
35 }
36
InitDialog()37 void SaveMaskExporterDialog::InitDialog()
38 {
39 SaveMaskExporterDialog::ui->setupUi(this);
40 connect(ui->okButton, SIGNAL(clicked()), this, SLOT(SlotOkButton()));
41 connect(ui->cancelButton, SIGNAL(clicked()), this, SLOT(SlotCancelButton()));
42 connect(ui->renametextureButton,SIGNAL(clicked()),this,SLOT(SlotRenameTexture()));
43 connect(ui->listTextureName,SIGNAL(itemSelectionChanged()),this,SLOT(SlotSelectionTextureName()));
44 connect(ui->AllButton,SIGNAL(clicked()),this,SLOT(SlotSelectionAllButton()));
45 connect(ui->NoneButton,SIGNAL(clicked()),this,SLOT(SlotSelectionNoneButton()));
46 ui->renametextureButton->setDisabled(true);
47
48 stdParFrame = new StdParFrame(this,glar);
49 stdParFrame->loadFrameContent(*parSet);
50 QVBoxLayout *vbox = new QVBoxLayout(this);
51 vbox->addWidget(stdParFrame);
52 ui->saveParBox->setLayout(vbox);
53 QFileInfo fi(m->fullName());
54 this->setWindowTitle("Choose Saving Options for: '"+ fi.baseName() +"'");
55 // Show the additional parameters only for formats that have some.
56 if(parSet->isEmpty()) ui->saveParBox->hide();
57 else ui->saveParBox->show();
58 //all - none
59 ui->AllButton->setChecked(true);
60 //ui->NoneButton->setChecked(true);
61
62 SetTextureName();
63 SetMaskCapability();
64 }
65
SetTextureName()66 void SaveMaskExporterDialog::SetTextureName()
67 {
68 if( m->cm.textures.size() == 0 )
69 {
70 ui->check_iom_wedgtexcoord->setDisabled(true);
71 ui->check_iom_wedgtexcoord->setChecked(false);
72 }
73
74 for(unsigned int i=0;i<m->cm.textures.size();i++)
75 {
76 QString item(m->cm.textures[i].c_str());
77 ui->listTextureName->addItem(item);
78 }
79 }
80
GetNewMask()81 int SaveMaskExporterDialog::GetNewMask()
82 {
83 return this->mask;
84 }
85
86 /*
87 there are three things that are looked when setting the initial states of the checkbox of this dialog
88 - this->capabilityBit
89 - this->defaultBit
90
91
92 setDisabled(true): uncheckable
93 setDisabled(false) : checkable
94
95 true : when the information is not present or in the Capability or in the MeshModel Mask
96 false : when the information is present in the Capability and in the Mask MeshModel
97
98 setChecked(true) : checked
99 setChecked(false): unchecked
100
101 true : the information is present both in the Capability and the MeshModel Mask
102 false : otherwise.
103
104 */
shouldBeChecked(int bit,int,int defaultBits)105 bool SaveMaskExporterDialog::shouldBeChecked(int bit, int /*capabilityBits*/, int defaultBits)
106 {
107 if(!m->hasDataMask(MeshModel::io2mm(bit))) return false;
108 //if( (bit & meshBits) == 0 ) return false;
109 if( (bit & defaultBits) == 0 ) return false;
110 return true;
111 }
112
shouldBeEnabled(int iobit,int capabilityBits,int)113 bool SaveMaskExporterDialog::shouldBeEnabled(int iobit, int capabilityBits, int /*defaultBits*/)
114 {
115 if( (iobit & capabilityBits) == 0 ) return false;
116 int mmbit = MeshModel::io2mm(iobit);
117 if(!m->hasDataMask(mmbit)) return false;
118 return true;
119 }
120
checkAndEnable(QCheckBox * qcb,int bit,int capabilityBits,int defaultBits)121 void SaveMaskExporterDialog::checkAndEnable(QCheckBox *qcb,int bit, int capabilityBits, int defaultBits)
122 {
123 qcb->setEnabled(shouldBeEnabled (bit,capabilityBits, defaultBits) );
124 qcb->setChecked(shouldBeChecked (bit,capabilityBits, defaultBits) );
125 }
126
SetMaskCapability()127 void SaveMaskExporterDialog::SetMaskCapability()
128 {
129 //vert
130 checkAndEnable(ui->check_iom_vertquality, vcg::tri::io::Mask::IOM_VERTQUALITY, capability, defaultBits );
131 checkAndEnable(ui->check_iom_vertflags, vcg::tri::io::Mask::IOM_VERTFLAGS, capability, defaultBits);
132 checkAndEnable(ui->check_iom_vertcolor, vcg::tri::io::Mask::IOM_VERTCOLOR, capability, defaultBits);
133 checkAndEnable(ui->check_iom_verttexcoord, vcg::tri::io::Mask::IOM_VERTTEXCOORD, capability, defaultBits);
134 checkAndEnable(ui->check_iom_vertnormal, vcg::tri::io::Mask::IOM_VERTNORMAL, capability, defaultBits);
135 checkAndEnable(ui->check_iom_vertradius, vcg::tri::io::Mask::IOM_VERTRADIUS, capability, defaultBits);
136
137 // point cloud fix: if a point cloud, probably you'd want to save vertex normals
138 if ((m->cm.fn == 0) && (m->cm.en == 0))
139 ui->check_iom_vertnormal->setChecked(true);
140
141 //face
142 checkAndEnable(ui->check_iom_facequality, vcg::tri::io::Mask::IOM_FACEQUALITY, capability, defaultBits );
143 checkAndEnable(ui->check_iom_faceflags, vcg::tri::io::Mask::IOM_FACEFLAGS, capability, defaultBits );
144 checkAndEnable(ui->check_iom_facecolor, vcg::tri::io::Mask::IOM_FACECOLOR, capability, defaultBits );
145 checkAndEnable(ui->check_iom_facenormal, vcg::tri::io::Mask::IOM_FACENORMAL, capability, defaultBits );
146
147 //wedge
148 checkAndEnable(ui->check_iom_wedgcolor, vcg::tri::io::Mask::IOM_WEDGCOLOR, capability, defaultBits );
149 checkAndEnable(ui->check_iom_wedgtexcoord, vcg::tri::io::Mask::IOM_WEDGTEXCOORD, capability, defaultBits );
150 checkAndEnable(ui->check_iom_wedgnormal, vcg::tri::io::Mask::IOM_WEDGNORMAL, capability, defaultBits );
151
152 checkAndEnable(ui->check_iom_polygonal, vcg::tri::io::Mask::IOM_BITPOLYGONAL, capability, defaultBits );
153
154 //camera THIS ONE HAS TO BE CORRECTED !!!!
155 //bool camval = m->cm.shot.IsValid();
156 //int res = capability & vcg::tri::io::Mask::IOM_CAMERA;
157 ui->check_iom_camera->setDisabled( ((capability & vcg::tri::io::Mask::IOM_CAMERA)==0) || (m->cm.shot.IsValid() == false));
158 ui->check_iom_camera->setChecked ( ((capability & vcg::tri::io::Mask::IOM_CAMERA)!=0) && (m->cm.shot.IsValid()));
159
160 if(capability == 0)
161 ui->NoneButton->setChecked(true);
162 }
163
164
updateMask()165 void SaveMaskExporterDialog::updateMask()
166 {
167 int newmask = 0;
168
169 if( ui->check_iom_vertflags->isChecked() ) { newmask |= vcg::tri::io::Mask::IOM_VERTFLAGS;}
170 if( ui->check_iom_vertcolor->isChecked() ) { newmask |= vcg::tri::io::Mask::IOM_VERTCOLOR;}
171 if( ui->check_iom_vertquality->isChecked() ) { newmask |= vcg::tri::io::Mask::IOM_VERTQUALITY;}
172 if( ui->check_iom_verttexcoord->isChecked() ) { newmask |= vcg::tri::io::Mask::IOM_VERTTEXCOORD;}
173 if( ui->check_iom_vertnormal->isChecked() ) { newmask |= vcg::tri::io::Mask::IOM_VERTNORMAL;}
174 if( ui->check_iom_vertradius->isChecked() ) { newmask |= vcg::tri::io::Mask::IOM_VERTRADIUS;}
175
176 if( ui->check_iom_faceflags->isChecked() ) { newmask |= vcg::tri::io::Mask::IOM_FACEFLAGS;}
177 if( ui->check_iom_facecolor->isChecked() ) { newmask |= vcg::tri::io::Mask::IOM_FACECOLOR;}
178 if( ui->check_iom_facequality->isChecked() ) { newmask |= vcg::tri::io::Mask::IOM_FACEQUALITY;}
179 if( ui->check_iom_facenormal->isChecked() ) { newmask |= vcg::tri::io::Mask::IOM_FACENORMAL;}
180
181 if( ui->check_iom_wedgcolor->isChecked() ) { newmask |= vcg::tri::io::Mask::IOM_WEDGCOLOR;}
182 if( ui->check_iom_wedgtexcoord->isChecked() ) { newmask |= vcg::tri::io::Mask::IOM_WEDGTEXCOORD;}
183 if( ui->check_iom_wedgnormal->isChecked() ) { newmask |= vcg::tri::io::Mask::IOM_WEDGNORMAL;}
184
185 if( ui->check_iom_camera->isChecked() ) { newmask |= vcg::tri::io::Mask::IOM_CAMERA;}
186 if( ui->check_iom_polygonal->isChecked() ) { newmask |= vcg::tri::io::Mask::IOM_BITPOLYGONAL;}
187
188 for(unsigned int i=0;i<m->cm.textures.size();i++)
189 m->cm.textures[i] = ui->listTextureName->item(i)->text().toStdString();
190 this->mask=newmask;
191 }
192
193 //slot
SlotOkButton()194 void SaveMaskExporterDialog::SlotOkButton()
195 {
196 updateMask();
197 stdParFrame->readValues(*parSet);
198 }
199
SlotCancelButton()200 void SaveMaskExporterDialog::SlotCancelButton()
201 {
202 this->mask=-1;
203 }
204
SlotRenameTexture()205 void SaveMaskExporterDialog::SlotRenameTexture()
206 {
207 int row = ui->listTextureName->currentRow();
208 ChangeTextureNameDialog dialog(this,m->cm.textures[row].c_str());
209 dialog.exec();
210 std::string newtexture = dialog.GetTextureName();
211 dialog.close();
212 if(newtexture.size()>0)
213 {
214 QStringList lists = QString(newtexture.c_str()).split('/');
215 (ui->listTextureName->currentItem())->setText(lists[lists.size()-1]);
216 }
217 }
218
SlotSelectionTextureName()219 void SaveMaskExporterDialog::SlotSelectionTextureName()
220 {
221 ui->renametextureButton->setDisabled(false);
222 }
223
SlotSelectionAllButton()224 void SaveMaskExporterDialog::SlotSelectionAllButton()
225 {
226 //vert
227 ui->check_iom_vertquality->setChecked(ui->check_iom_vertquality->isEnabled());
228 ui->check_iom_vertflags->setChecked(ui->check_iom_vertflags->isEnabled());
229 ui->check_iom_vertcolor->setChecked(ui->check_iom_vertcolor->isEnabled());
230 ui->check_iom_verttexcoord->setChecked(ui->check_iom_verttexcoord->isEnabled());
231 ui->check_iom_vertnormal->setChecked(ui->check_iom_vertnormal->isEnabled());
232 ui->check_iom_vertradius->setChecked(ui->check_iom_vertradius->isEnabled());
233
234 //face
235 ui->check_iom_facequality->setChecked(ui->check_iom_facequality->isEnabled());
236 ui->check_iom_faceflags->setChecked(ui->check_iom_faceflags->isEnabled());
237 ui->check_iom_facenormal->setChecked(ui->check_iom_facenormal->isEnabled());
238 ui->check_iom_facecolor->setChecked(ui->check_iom_facecolor->isEnabled());
239
240 //wedg
241 ui->check_iom_wedgcolor->setChecked(ui->check_iom_wedgcolor->isEnabled());
242 ui->check_iom_wedgtexcoord->setChecked(ui->check_iom_wedgtexcoord->isEnabled());
243 ui->check_iom_wedgnormal->setChecked(ui->check_iom_wedgnormal->isEnabled());
244
245 //camera
246 ui->check_iom_camera->setChecked(ui->check_iom_camera->isEnabled());
247 }
248
SlotSelectionNoneButton()249 void SaveMaskExporterDialog::SlotSelectionNoneButton()
250 {
251 //vert
252 ui->check_iom_vertquality->setChecked(false);
253 ui->check_iom_vertflags->setChecked(false);
254 ui->check_iom_vertcolor->setChecked(false);
255 ui->check_iom_verttexcoord->setChecked(false);
256 ui->check_iom_vertnormal->setChecked(false);
257 ui->check_iom_vertradius->setChecked(false);
258
259 //face
260 ui->check_iom_facequality->setChecked(false);
261 ui->check_iom_faceflags->setChecked(false);
262 ui->check_iom_facenormal->setChecked(false);
263 ui->check_iom_facecolor->setChecked(false);
264
265 //wedg
266 ui->check_iom_wedgcolor->setChecked(false);
267 ui->check_iom_wedgtexcoord->setChecked(false);
268 ui->check_iom_wedgnormal->setChecked(false);
269
270 //camera
271 ui->check_iom_camera->setChecked(false);
272 }
273
on_check_help_stateChanged(int)274 void SaveMaskExporterDialog::on_check_help_stateChanged(int)
275 {
276 stdParFrame->toggleHelp();
277 }
278
~SaveMaskExporterDialog()279 SaveMaskExporterDialog::~SaveMaskExporterDialog()
280 {
281 delete ui;
282 }
283