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