wizard.cpp
#include "wizard.h"
#include "ui_wizard.h"
#include "topo-blend.h"
#include "graphs-manager.h"
#include "SynthesisManager.h"
#include "correspondence-manager.h"
#include "Scheduler.h"
#include "SchedulerWidget.h"
#include <QParallelAnimationGroup>
#include <QPropertyAnimation>
#include <QGraphicsOpacityEffect>
Q_DECLARE_METATYPE(QGraphicsOpacityEffect*)
QtAwesome* awesome = new QtAwesome( qApp );
// Styling
QString style_ok = "color: rgb(81, 163, 81)";
QString style_wait = "color: rgb(248, 148, 6)";
QString style_bad = "color: rgb(189, 54, 47)";
QString style_info = "color: rgb(47, 150, 180)";
Wizard::Wizard(topoblend *tobo_blend, QWidget * parentWidget) : QWidget(parentWidget), tb(tobo_blend), ui(new Ui::Wizard)
{
awesome->initFontAwesome();
ui->setupUi(this);
// Connections
{
this->connect(ui->loadAButton, SIGNAL(clicked()), SLOT(loadShapeA()));
this->connect(ui->loadBButton, SIGNAL(clicked()), SLOT(loadShapeB()));
this->connect(ui->matchingButton, SIGNAL(clicked()), SLOT(matchingButton()));
this->connect(ui->generateButton, SIGNAL(clicked()), SLOT(generateBlend()));
}
// Layouts
{
layouts.push_back(ui->layoutLoading);
layouts.push_back(ui->layoutMatching);
layouts.push_back(ui->layoutOrder);
layouts.push_back(ui->layoutQuality);
layouts.push_back(ui->layoutGenerate);
foreach(QLayout * l, layouts){
for(int i = 0; i < l->count(); i++){
QWidget * item = l->itemAt(i)->widget();
if(!item) continue;
// Add transparency effect
QGraphicsOpacityEffect * effect = new QGraphicsOpacityEffect(item);
effect->setOpacity(0);
item->setGraphicsEffect(effect);
QVariant var; var.setValue(effect);
item->setProperty("opacity", var);
}
}
}
// Icons / check marks
{
icons.push_back(ui->checkLoad);
icons.push_back(ui->checkMatch);
icons.push_back(ui->checkOrder);
icons.push_back(ui->checkQuality);
QFont fnt = awesome->font(16);
foreach(QLabel * l, icons) {
l->setFont( fnt );
l->setStyleSheet( style_wait );
}
}
// Fade window in
if(false){
this->setWindowOpacity(0);
QPropertyAnimation *animation = new QPropertyAnimation(this,"windowOpacity");
animation->setDuration(1000);
animation->setStartValue(0.0);
animation->setEndValue(1.0);
animation->setEasingCurve(QEasingCurve::OutCubic);
animation->start();
}
// Fade first step in
setOpacity("layoutLoading", 1.0);
}
void Wizard::setOpacity( QString objName, double toValue )
{
QParallelAnimationGroup * animGroup = new QParallelAnimationGroup;
foreach(QLayout * l, layouts){
if(l->objectName() != objName) continue;
for(int i = 0; i < l->count(); i++){
QWidget * item = l->itemAt(i)->widget();
if(!item) continue;
QGraphicsOpacityEffect * opacityEffect = item->property("opacity").value<QGraphicsOpacityEffect*>();
QPropertyAnimation* anim = new QPropertyAnimation;
anim->setTargetObject(opacityEffect);
anim->setPropertyName("opacity");
anim->setDuration(1000);
anim->setStartValue(opacityEffect->opacity());
anim->setEndValue(toValue);
anim->setEasingCurve(QEasingCurve::OutQuad);
animGroup->addAnimation(anim);
}
}
animGroup->start( QAbstractAnimation::DeleteWhenStopped );
}
Wizard::~Wizard()
{
delete ui;
}
void Wizard::loadShapeA()
{
tb->g_manager->loadModel();
tb->c_manager->visualizeAsSolids();
ui->loadAButton->setStyleSheet(style_ok);
tb->updateDrawArea();
}
void Wizard::loadShapeB()
{
tb->g_manager->loadModel();
tb->c_manager->visualizeAsSolids();
ui->loadBButton->setStyleSheet(style_ok);
setOpacity("layoutMatching", 1.0);
setOpacity("layoutQuality", 1.0);
tb->updateDrawArea();
}
void Wizard::matchingButton()
{
if(ui->matchingButton->text().contains("Set..")){
ui->matchingButton->setText("Done?");
tb->c_manager->correspondenceMode();
}else{
ui->matchingButton->setText("Done");
ui->matchingButton->setStyleSheet(style_ok);
//setOpacity("layoutOrder", 1.0);
setOpacity("layoutGenerate", 1.0);
tb->doBlend();
double synthQuality = (ui->synthQuality->value()) / 100.0;
if(synthQuality > 0){
int samplesCount = 25000 * pow(synthQuality, 2);
tb->widget->setSynthSamplesCount( samplesCount );
tb->s_manager->generateSynthesisData();
}
}
tb->updateDrawArea();
}
void Wizard::generateBlend()
{
tb->scheduler->doBlend();
tb->updateDrawArea();
}