Add base UI layout

master
Jeremy Hu 2018-03-11 11:18:24 +08:00
parent 10a4a21183
commit 283e76b1b6
4 changed files with 105 additions and 19 deletions

View File

@ -9,6 +9,9 @@ HEADERS += src/mainwindow.h
SOURCES += src/modelingwidget.cpp SOURCES += src/modelingwidget.cpp
HEADERS += src/modelingwidget.h HEADERS += src/modelingwidget.h
SOURCES += src/skeletoneditwidget.cpp
HEADERS += src/skeletoneditwidget.h
SOURCES += src/mesh.cpp SOURCES += src/mesh.cpp
HEADERS += src/mesh.h HEADERS += src/mesh.h

View File

@ -1,19 +1,33 @@
#include <QApplication> #include <QApplication>
#include <QDesktopWidget> #include <QDesktopWidget>
#include <QStyleFactory>
#include "mainwindow.h" #include "mainwindow.h"
#include "meshlite.h" #include "meshlite.h"
int main(int argc, char ** argv) int main(int argc, char ** argv)
{ {
/*
void *lite = meshlite_create_context();
int first = meshlite_import(lite, "/Users/jeremy/cube.obj");
int second = meshlite_import(lite, "/Users/jeremy/ball.obj");
meshlite_scale(lite, first, 0.65);
int result = meshlite_intersect(lite, first, second);
meshlite_export(lite, result, "/Users/jeremy/testlib.obj");
*/
QApplication app(argc, argv); QApplication app(argc, argv);
// QuantumCD/Qt 5 Dark Fusion Palette
// https://gist.github.com/QuantumCD/6245215
qApp->setStyle(QStyleFactory::create("Fusion"));
QPalette darkPalette;
darkPalette.setColor(QPalette::Window, QColor(53,53,53));
darkPalette.setColor(QPalette::WindowText, Qt::white);
darkPalette.setColor(QPalette::Base, QColor(25,25,25));
darkPalette.setColor(QPalette::AlternateBase, QColor(53,53,53));
darkPalette.setColor(QPalette::ToolTipBase, Qt::white);
darkPalette.setColor(QPalette::ToolTipText, Qt::white);
darkPalette.setColor(QPalette::Text, Qt::white);
darkPalette.setColor(QPalette::Button, QColor(53,53,53));
darkPalette.setColor(QPalette::ButtonText, Qt::white);
darkPalette.setColor(QPalette::BrightText, Qt::red);
darkPalette.setColor(QPalette::Link, QColor(42, 130, 218));
darkPalette.setColor(QPalette::Highlight, QColor(42, 130, 218));
darkPalette.setColor(QPalette::HighlightedText, Qt::black);
qApp->setPalette(darkPalette);
qApp->setStyleSheet("QToolTip { color: #ffffff; background-color: #2a82da; border: 1px solid white; }");
QCoreApplication::setApplicationName("Dust 3D"); QCoreApplication::setApplicationName("Dust 3D");
MainWindow mainWindow; MainWindow mainWindow;
mainWindow.resize(mainWindow.sizeHint()); mainWindow.resize(mainWindow.sizeHint());

View File

@ -1,9 +1,78 @@
#include "mainwindow.h" #include "mainwindow.h"
#include "skeletoneditwidget.h"
#include <QVBoxLayout>
#include <QPushButton>
#include <QButtonGroup>
#include <QGridLayout>
#include <QToolBar>
MainWindow::MainWindow() MainWindow::MainWindow()
{ {
modelingWidget = new ModelingWidget(this); QPushButton *skeletonButton = new QPushButton("Skeleton");
setCentralWidget(modelingWidget); QPushButton *motionButton = new QPushButton("Motion");
QPushButton *modelButton = new QPushButton("Model");
QButtonGroup *pageButtonGroup = new QButtonGroup;
pageButtonGroup->addButton(skeletonButton);
pageButtonGroup->addButton(motionButton);
pageButtonGroup->addButton(modelButton);
skeletonButton->setCheckable(true);
motionButton->setCheckable(true);
modelButton->setCheckable(true);
pageButtonGroup->setExclusive(true);
skeletonButton->setChecked(true);
QHBoxLayout *topLayout = new QHBoxLayout;
topLayout->addStretch();
topLayout->addWidget(skeletonButton);
topLayout->addWidget(motionButton);
topLayout->addWidget(modelButton);
topLayout->addStretch();
skeletonButton->adjustSize();
motionButton->adjustSize();
modelButton->adjustSize();
SkeletonEditWidget *skeletonEditWidget = new SkeletonEditWidget;
ModelingWidget *modelViewWidget = new ModelingWidget;
modelViewWidget->setFixedSize(128, 128);
QPushButton *changeTurnaroundButton = new QPushButton("Change turnaround..");
QVBoxLayout *rightLayout = new QVBoxLayout;
rightLayout->addWidget(modelViewWidget);
rightLayout->addSpacing(10);
rightLayout->addWidget(changeTurnaroundButton);
rightLayout->addStretch();
QToolBar *toolbar = new QToolBar;
toolbar->setOrientation(Qt::Vertical);
QAction *addAction = new QAction(tr("Add"), this);
QAction *selectAction = new QAction(tr("Select"), this);
toolbar->addAction(addAction);
toolbar->addAction(selectAction);
QVBoxLayout *leftLayout = new QVBoxLayout;
leftLayout->addWidget(toolbar);
leftLayout->addStretch();
QHBoxLayout *middleLayout = new QHBoxLayout;
middleLayout->addLayout(leftLayout);
middleLayout->addWidget(skeletonEditWidget);
middleLayout->addLayout(rightLayout);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(topLayout);
mainLayout->addSpacing(20);
mainLayout->addLayout(middleLayout);
QWidget *centralWidget = new QWidget;
centralWidget->setLayout(mainLayout);
setCentralWidget(centralWidget);
setWindowTitle(tr("Dust 3D"));
} }

View File

@ -27,12 +27,12 @@ ModelingWidget::ModelingWidget(QWidget *parent)
} }
void *lite = meshlite_create_context(); void *lite = meshlite_create_context();
int first = meshlite_import(lite, "/Users/jeremy/cube.obj"); int first = meshlite_import(lite, "../assets/cube.obj");
int second = meshlite_import(lite, "/Users/jeremy/ball.obj"); int second = meshlite_import(lite, "../assets/ball.obj");
meshlite_scale(lite, first, 0.65); meshlite_scale(lite, first, 0.65);
int intersect = meshlite_intersect(lite, first, second); int merged = meshlite_union(lite, first, second);
int triangulate = meshlite_triangulate(lite, intersect); int triangulate = meshlite_triangulate(lite, merged);
meshlite_export(lite, triangulate, "/Users/jeremy/testlib.obj"); //meshlite_export(lite, triangulate, "/Users/jeremy/testlib.obj");
Mesh *mesh = new Mesh(lite, triangulate); Mesh *mesh = new Mesh(lite, triangulate);
updateMesh(mesh); updateMesh(mesh);
} }
@ -126,7 +126,7 @@ static const char *fragmentShaderSourceCore =
"void main() {\n" "void main() {\n"
" highp vec3 L = normalize(lightPos - vert);\n" " highp vec3 L = normalize(lightPos - vert);\n"
" highp float NL = max(dot(normalize(vertNormal), L), 0.0);\n" " highp float NL = max(dot(normalize(vertNormal), L), 0.0);\n"
" highp vec3 color = vec3(0.39, 1.0, 0.0);\n" " highp vec3 color = vec3(1.0, 1.0, 1.0);\n"
" highp vec3 col = clamp(color * 0.2 + color * 0.8 * NL, 0.0, 1.0);\n" " highp vec3 col = clamp(color * 0.2 + color * 0.8 * NL, 0.0, 1.0);\n"
" fragColor = vec4(col, 1.0);\n" " fragColor = vec4(col, 1.0);\n"
"}\n"; "}\n";
@ -152,7 +152,7 @@ static const char *fragmentShaderSource =
"void main() {\n" "void main() {\n"
" highp vec3 L = normalize(lightPos - vert);\n" " highp vec3 L = normalize(lightPos - vert);\n"
" highp float NL = max(dot(normalize(vertNormal), L), 0.0);\n" " highp float NL = max(dot(normalize(vertNormal), L), 0.0);\n"
" highp vec3 color = vec3(0.39, 1.0, 0.0);\n" " highp vec3 color = vec3(1.0, 1.0, 1.0);\n"
" highp vec3 col = clamp(color * 0.2 + color * 0.8 * NL, 0.0, 1.0);\n" " highp vec3 col = clamp(color * 0.2 + color * 0.8 * NL, 0.0, 1.0);\n"
" gl_FragColor = vec4(col, 1.0);\n" " gl_FragColor = vec4(col, 1.0);\n"
"}\n"; "}\n";
@ -169,7 +169,7 @@ void ModelingWidget::initializeGL()
connect(context(), &QOpenGLContext::aboutToBeDestroyed, this, &ModelingWidget::cleanup); connect(context(), &QOpenGLContext::aboutToBeDestroyed, this, &ModelingWidget::cleanup);
initializeOpenGLFunctions(); initializeOpenGLFunctions();
glClearColor(0, 0, 0, m_transparent ? 0 : 1); glClearColor(0.2078, 0.2078, 0.2078, m_transparent ? 0 : 1);
m_program = new QOpenGLShaderProgram; m_program = new QOpenGLShaderProgram;
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, m_core ? vertexShaderSourceCore : vertexShaderSource); m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, m_core ? vertexShaderSourceCore : vertexShaderSource);