Added terrain base noise preview + main window refactoring

This commit is contained in:
Michaël Lemaire 2013-06-09 18:08:01 +02:00
parent 06764427a6
commit d60a169751
12 changed files with 732 additions and 57 deletions

View file

@ -6,6 +6,9 @@
<file>images/explore.png</file> <file>images/explore.png</file>
<file>images/render.png</file> <file>images/render.png</file>
<file>images/about.png</file> <file>images/about.png</file>
<file>images/load.png</file>
<file>images/new.png</file>
<file>images/save.png</file>
</qresource> </qresource>
<qresource prefix="/tabs"> <qresource prefix="/tabs">
<file>images/tab_atmosphere.png</file> <file>images/tab_atmosphere.png</file>
@ -15,4 +18,10 @@
<file>images/tab_textures.png</file> <file>images/tab_textures.png</file>
<file>images/tab_water.png</file> <file>images/tab_water.png</file>
</qresource> </qresource>
<qresource prefix="/logo">
<file>images/logo_16.png</file>
<file>images/logo_32.png</file>
<file>images/logo_64.png</file>
<file>images/logo_256.png</file>
</qresource>
</RCC> </RCC>

View file

@ -1,10 +1,10 @@
#include "mainwindow.h" #include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QApplication> #include <QApplication>
#include <QMenuBar> #include <QMenuBar>
#include <QMenu> #include <QMenu>
#include <QIcon> #include <QIcon>
#include <QToolBar>
#include <QFileDialog> #include <QFileDialog>
#include <QTabWidget> #include <QTabWidget>
#include <QTranslator> #include <QTranslator>
@ -63,7 +63,7 @@ int main(int argc, char** argv)
BasePreview::initDrawers(); BasePreview::initDrawers();
window = new MainWindow(); window = new MainWindow();
window->show(); window->showMaximized();
splash->finish(window); splash->finish(window);
delete splash; delete splash;
@ -79,68 +79,59 @@ int main(int argc, char** argv)
} }
MainWindow::MainWindow(QWidget *parent) : MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent) QMainWindow(parent),
ui(new Ui::MainWindow)
{ {
ui->setupUi(this);
BaseForm* form; BaseForm* form;
QTabWidget* tabs;
QToolBar* toolbar;
tabs = new QTabWidget(this); connect(ui->action_explore, SIGNAL(triggered()), this, SLOT(explore3D()));
tabs->setIconSize(QSize(32, 32)); connect(ui->action_quick_render, SIGNAL(triggered()), this, SLOT(quickPreview()));
connect(ui->action_final_render, SIGNAL(triggered()), this, SLOT(finalRender()));
connect(ui->action_file_new, SIGNAL(triggered()), this, SLOT(fileNew()));
connect(ui->action_file_save, SIGNAL(triggered()), this, SLOT(fileSave()));
connect(ui->action_file_load, SIGNAL(triggered()), this, SLOT(fileLoad()));
connect(ui->action_about, SIGNAL(triggered()), this, SLOT(showAboutDialog()));
tabs->addTab(new MainTerrainForm(tabs), QIcon(getDataPath("images/tab_terrain.png")), tr("Landscape shape")); form = new FormTextures(ui->tabs);
ui->tabs->addTab(form, QIcon(getDataPath("images/tab_textures.png")), tr("Textures"));
form = new FormTextures(tabs);
tabs->addTab(form, QIcon(getDataPath("images/tab_textures.png")), tr("Textures"));
QObject::connect(form, SIGNAL(configApplied()), this, SLOT(refreshAll()), Qt::QueuedConnection); QObject::connect(form, SIGNAL(configApplied()), this, SLOT(refreshAll()), Qt::QueuedConnection);
_forms.append(form); _forms.append(form);
form = new FormWater(tabs); form = new FormWater(ui->tabs);
tabs->addTab(form, QIcon(getDataPath("images/tab_water.png")), tr("Water")); ui->tabs->addTab(form, QIcon(getDataPath("images/tab_water.png")), tr("Water"));
QObject::connect(form, SIGNAL(configApplied()), this, SLOT(refreshAll()), Qt::QueuedConnection); QObject::connect(form, SIGNAL(configApplied()), this, SLOT(refreshAll()), Qt::QueuedConnection);
_forms.append(form); _forms.append(form);
form = new FormAtmosphere(tabs); form = new FormAtmosphere(ui->tabs);
tabs->addTab(form, QIcon(getDataPath("images/tab_atmosphere.png")), tr("Atmosphere")); ui->tabs->addTab(form, QIcon(getDataPath("images/tab_atmosphere.png")), tr("Atmosphere"));
QObject::connect(form, SIGNAL(configApplied()), this, SLOT(refreshAll()), Qt::QueuedConnection); QObject::connect(form, SIGNAL(configApplied()), this, SLOT(refreshAll()), Qt::QueuedConnection);
_forms.append(form); _forms.append(form);
form = new FormClouds(tabs); form = new FormClouds(ui->tabs);
tabs->addTab(form, QIcon(getDataPath("images/tab_clouds.png")), tr("Clouds")); ui->tabs->addTab(form, QIcon(getDataPath("images/tab_clouds.png")), tr("Clouds"));
QObject::connect(form, SIGNAL(configApplied()), this, SLOT(refreshAll()), Qt::QueuedConnection); QObject::connect(form, SIGNAL(configApplied()), this, SLOT(refreshAll()), Qt::QueuedConnection);
_forms.append(form); _forms.append(form);
_form_render = new FormRender(tabs); _form_render = new FormRender(ui->tabs);
tabs->addTab(_form_render, QIcon(getDataPath("images/tab_render.png")), tr("Render")); ui->tabs->addTab(_form_render, QIcon(getDataPath("images/tab_render.png")), tr("Render"));
_forms.append(_form_render); _forms.append(_form_render);
toolbar = new QToolBar(this); // TODO Decide this according to platform / screen size
toolbar->setOrientation(Qt::Vertical); ui->toolBar->hide();
toolbar->setAllowedAreas(Qt::LeftToolBarArea); ui->menuBar->hide();
toolbar->setMovable(false);
toolbar->setFloatable(false);
toolbar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
toolbar->toggleViewAction()->setEnabled(false);
toolbar->setIconSize(QSize(32, 32));
addToolBar(Qt::LeftToolBarArea, toolbar);
toolbar->addAction(QIcon(getDataPath("images/new.png")), tr("&New"), this, SLOT(fileNew()))->setShortcut(QKeySequence(tr("Crtl+N")));
toolbar->addAction(QIcon(getDataPath("images/save.png")), tr("&Save"), this, SLOT(fileSave()))->setShortcut(QKeySequence(tr("Crtl+S")));
toolbar->addAction(QIcon(getDataPath("images/load.png")), tr("&Load"), this, SLOT(fileLoad()))->setShortcut(QKeySequence(tr("Crtl+L")));
toolbar->addAction(QIcon(getDataPath("images/explore.png")), tr("&Explore (F2)"), this, SLOT(explore3D()))->setShortcut(QKeySequence(tr("F2")));
toolbar->addAction(QIcon(getDataPath("images/render.png")), tr("&Quick\nrender (F5)"), this, SLOT(quickPreview()))->setShortcut(QKeySequence(tr("F5")));
toolbar->addAction(QIcon(getDataPath("images/about.png")), tr("&About"), this, SLOT(showAboutDialog()));
setCentralWidget(tabs);
setWindowTitle("Paysages 3D");
setWindowIcon(QIcon(getDataPath("images/logo_32.png")));
scenerySetCustomDataCallback(MainWindow::guiSaveCallback, MainWindow::guiLoadCallback, this); scenerySetCustomDataCallback(MainWindow::guiSaveCallback, MainWindow::guiLoadCallback, this);
refreshAll(); refreshAll();
} }
MainWindow::~MainWindow()
{
delete ui;
}
bool MainWindow::event(QEvent* event) bool MainWindow::event(QEvent* event)
{ {
if (event->type() == QEvent::WindowActivate) if (event->type() == QEvent::WindowActivate)
@ -160,6 +151,7 @@ void MainWindow::refreshAll()
{ {
_forms[i]->revertConfig(); _forms[i]->revertConfig();
} }
// TODO Refresh free forms
// Refresh preview OSD // Refresh preview OSD
CameraDefinition* camera = cameraCreateDefinition(); CameraDefinition* camera = cameraCreateDefinition();
@ -244,6 +236,16 @@ void MainWindow::quickPreview()
_form_render->startQuickRender(); _form_render->startQuickRender();
} }
void MainWindow::finalRender()
{
_form_render->startRender();
}
void MainWindow::showLastRender()
{
_form_render->showRender();
}
void MainWindow::explore3D() void MainWindow::explore3D()
{ {
CameraDefinition* camera; CameraDefinition* camera;

View file

@ -1,16 +1,25 @@
#ifndef _PAYSAGES_QT_MAINWINDOW_H_ #ifndef MAINWINDOW_H
#define _PAYSAGES_QT_MAINWINDOW_H_ #define MAINWINDOW_H
#include <QMainWindow> #include <QMainWindow>
#include "formrender.h" #include <QVector>
#include "rendering/tools/pack.h" #include "rendering/tools/pack.h"
class BaseForm;
class FormRender;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow class MainWindow : public QMainWindow
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit MainWindow(QWidget *parent = 0); explicit MainWindow(QWidget *parent = 0);
~MainWindow();
virtual bool event(QEvent* event); virtual bool event(QEvent* event);
static void guiSaveCallback(PackStream* stream, void* data); static void guiSaveCallback(PackStream* stream, void* data);
@ -26,9 +35,14 @@ public slots:
void showAboutDialog(); void showAboutDialog();
void quickPreview(); void quickPreview();
void finalRender();
void showLastRender();
void explore3D(); void explore3D();
private: private:
Ui::MainWindow *ui;
void guiSave(PackStream* stream); void guiSave(PackStream* stream);
void guiLoad(PackStream* stream); void guiLoad(PackStream* stream);
@ -36,4 +50,4 @@ private:
FormRender* _form_render; FormRender* _form_render;
}; };
#endif #endif // MAINWINDOW_H

View file

@ -0,0 +1,557 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>946</width>
<height>651</height>
</rect>
</property>
<property name="windowTitle">
<string>Paysages 3D</string>
</property>
<property name="windowIcon">
<iconset resource="../../../data/ui_pictures.qrc">
<normaloff>:/logo/images/logo_32.png</normaloff>:/logo/images/logo_32.png</iconset>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QWidget" name="tool_panel" native="true">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:14pt; font-weight:600;&quot;&gt;Paysages 3D&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;:/logo/images/logo_32.png&quot;/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QRadioButton" name="radioButton_3">
<property name="text">
<string>Preview</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_2">
<property name="text">
<string>3D</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton">
<property name="text">
<string>Top</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<property name="lineWidth">
<number>3</number>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<property name="sizeConstraint">
<enum>QLayout::SetMinimumSize</enum>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QWidget" name="widget" native="true">
<property name="minimumSize">
<size>
<width>200</width>
<height>150</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>400</width>
<height>300</height>
</size>
</property>
</widget>
</item>
</layout>
<zorder>widget</zorder>
<zorder>widget</zorder>
</widget>
</item>
<item>
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Actions</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QPushButton" name="button_explore">
<property name="text">
<string>Explore in 3D</string>
</property>
<property name="icon">
<iconset resource="../../../data/ui_pictures.qrc">
<normaloff>:/buttons/logo/images/explore.png</normaloff>:/buttons/logo/images/explore.png</iconset>
</property>
<property name="shortcut">
<string>F2</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="button_render">
<property name="text">
<string>Render</string>
</property>
<property name="icon">
<iconset resource="../../../data/ui_pictures.qrc">
<normaloff>:/buttons/logo/images/render.png</normaloff>:/buttons/logo/images/render.png</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>File</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QPushButton" name="button_file_new">
<property name="text">
<string>New</string>
</property>
<property name="icon">
<iconset resource="../../../data/ui_pictures.qrc">
<normaloff>:/buttons/logo/images/new.png</normaloff>:/buttons/logo/images/new.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="button_file_save">
<property name="text">
<string>Save</string>
</property>
<property name="icon">
<iconset resource="../../../data/ui_pictures.qrc">
<normaloff>:/buttons/logo/images/save.png</normaloff>:/buttons/logo/images/save.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="button_file_load">
<property name="text">
<string>Load</string>
</property>
<property name="icon">
<iconset resource="../../../data/ui_pictures.qrc">
<normaloff>:/buttons/logo/images/load.png</normaloff>:/buttons/logo/images/load.png</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QTabWidget" name="tabs">
<property name="currentIndex">
<number>0</number>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<widget class="MainTerrainForm" name="tab_terrain">
<attribute name="icon">
<iconset resource="../../../data/ui_pictures.qrc">
<normaloff>:/tabs/images/tab_terrain.png</normaloff>:/tabs/images/tab_terrain.png</iconset>
</attribute>
<attribute name="title">
<string>Lanscape shape</string>
</attribute>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QToolBar" name="toolBar">
<property name="windowTitle">
<string>toolBar</string>
</property>
<property name="movable">
<bool>false</bool>
</property>
<property name="allowedAreas">
<set>Qt::LeftToolBarArea</set>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextUnderIcon</enum>
</property>
<property name="floatable">
<bool>false</bool>
</property>
<attribute name="toolBarArea">
<enum>LeftToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="action_file_new"/>
<addaction name="action_file_save"/>
<addaction name="action_file_load"/>
<addaction name="separator"/>
<addaction name="action_explore"/>
<addaction name="action_final_render"/>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>946</width>
<height>25</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
<property name="title">
<string>File</string>
</property>
<addaction name="action_file_new"/>
<addaction name="action_file_save"/>
<addaction name="action_file_load"/>
</widget>
<widget class="QMenu" name="menuActions">
<property name="title">
<string>Actions</string>
</property>
<addaction name="action_explore"/>
<addaction name="action_quick_render"/>
<addaction name="action_final_render"/>
<addaction name="action_last_render"/>
</widget>
<widget class="QMenu" name="menuHelp">
<property name="title">
<string>Help</string>
</property>
<addaction name="action_about"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuActions"/>
<addaction name="menuHelp"/>
</widget>
<action name="action_explore">
<property name="icon">
<iconset resource="../../../data/ui_pictures.qrc">
<normaloff>:/buttons/logo/images/explore.png</normaloff>:/buttons/logo/images/explore.png</iconset>
</property>
<property name="text">
<string>Explore in 3D</string>
</property>
<property name="toolTip">
<string>Start exploring your scenery in real-time 3D</string>
</property>
<property name="shortcut">
<string>F2</string>
</property>
</action>
<action name="action_file_new">
<property name="icon">
<iconset resource="../../../data/ui_pictures.qrc">
<normaloff>:/buttons/logo/images/new.png</normaloff>:/buttons/logo/images/new.png</iconset>
</property>
<property name="text">
<string>New scene</string>
</property>
<property name="toolTip">
<string>Create a virgin scene</string>
</property>
<property name="shortcut">
<string>Ctrl+N</string>
</property>
</action>
<action name="action_file_load">
<property name="icon">
<iconset resource="../../../data/ui_pictures.qrc">
<normaloff>:/buttons/logo/images/load.png</normaloff>:/buttons/logo/images/load.png</iconset>
</property>
<property name="text">
<string>Load scene</string>
</property>
<property name="toolTip">
<string>Load a scenery from a file</string>
</property>
<property name="shortcut">
<string>Ctrl+O</string>
</property>
</action>
<action name="action_file_save">
<property name="icon">
<iconset resource="../../../data/ui_pictures.qrc">
<normaloff>:/buttons/logo/images/save.png</normaloff>:/buttons/logo/images/save.png</iconset>
</property>
<property name="text">
<string>Save scene</string>
</property>
<property name="toolTip">
<string>Save a scenery to a file</string>
</property>
<property name="shortcut">
<string>Ctrl+S</string>
</property>
</action>
<action name="action_quick_render">
<property name="icon">
<iconset resource="../../../data/ui_pictures.qrc">
<normaloff>:/buttons/logo/images/render.png</normaloff>:/buttons/logo/images/render.png</iconset>
</property>
<property name="text">
<string>Quick render</string>
</property>
<property name="toolTip">
<string>Start a quick render</string>
</property>
<property name="shortcut">
<string>F5</string>
</property>
</action>
<action name="action_final_render">
<property name="icon">
<iconset resource="../../../data/ui_pictures.qrc">
<normaloff>:/buttons/logo/images/render.png</normaloff>:/buttons/logo/images/render.png</iconset>
</property>
<property name="text">
<string>Final render</string>
</property>
<property name="toolTip">
<string>Start the final rendering processs</string>
</property>
<property name="shortcut">
<string>Ctrl+F5</string>
</property>
</action>
<action name="action_about">
<property name="icon">
<iconset resource="../../../data/ui_pictures.qrc">
<normaloff>:/buttons/logo/images/about.png</normaloff>:/buttons/logo/images/about.png</iconset>
</property>
<property name="text">
<string>About</string>
</property>
<property name="toolTip">
<string>Display information on this software</string>
</property>
<property name="shortcut">
<string>F1</string>
</property>
</action>
<action name="action_last_render">
<property name="icon">
<iconset resource="../../../data/ui_pictures.qrc">
<normaloff>:/buttons/logo/images/render.png</normaloff>:/buttons/logo/images/render.png</iconset>
</property>
<property name="text">
<string>Show last render</string>
</property>
<property name="toolTip">
<string>Display the last render done</string>
</property>
<property name="shortcut">
<string>F6</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
<class>MainTerrainForm</class>
<extends>QWidget</extends>
<header>terrain/mainterrainform.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources>
<include location="../../../data/ui_pictures.qrc"/>
</resources>
<connections>
<connection>
<sender>button_explore</sender>
<signal>clicked()</signal>
<receiver>action_explore</receiver>
<slot>trigger()</slot>
<hints>
<hint type="sourcelabel">
<x>127</x>
<y>380</y>
</hint>
<hint type="destinationlabel">
<x>-1</x>
<y>-1</y>
</hint>
</hints>
</connection>
<connection>
<sender>button_render</sender>
<signal>clicked()</signal>
<receiver>action_final_render</receiver>
<slot>trigger()</slot>
<hints>
<hint type="sourcelabel">
<x>213</x>
<y>425</y>
</hint>
<hint type="destinationlabel">
<x>213</x>
<y>425</y>
</hint>
</hints>
</connection>
<connection>
<sender>button_file_new</sender>
<signal>clicked()</signal>
<receiver>action_file_new</receiver>
<slot>trigger()</slot>
<hints>
<hint type="sourcelabel">
<x>213</x>
<y>522</y>
</hint>
<hint type="destinationlabel">
<x>-1</x>
<y>-1</y>
</hint>
</hints>
</connection>
<connection>
<sender>button_file_load</sender>
<signal>clicked()</signal>
<receiver>action_file_load</receiver>
<slot>trigger()</slot>
<hints>
<hint type="sourcelabel">
<x>213</x>
<y>588</y>
</hint>
<hint type="destinationlabel">
<x>-1</x>
<y>-1</y>
</hint>
</hints>
</connection>
<connection>
<sender>button_file_save</sender>
<signal>clicked()</signal>
<receiver>action_file_save</receiver>
<slot>trigger()</slot>
<hints>
<hint type="sourcelabel">
<x>213</x>
<y>555</y>
</hint>
<hint type="destinationlabel">
<x>-1</x>
<y>-1</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View file

@ -21,14 +21,12 @@ public slots:
virtual void revertConfig(); virtual void revertConfig();
virtual void applyConfig(); virtual void applyConfig();
void startQuickRender(); void startQuickRender();
void startRender();
void showRender();
protected slots: protected slots:
virtual void configChangeEvent(); virtual void configChangeEvent();
private slots:
void startRender();
void showRender();
private: private:
RenderParams _params; RenderParams _params;
CameraDefinition* _camera; CameraDefinition* _camera;

View file

@ -31,7 +31,6 @@ HEADERS += \
previewosd.h \ previewosd.h \
previewmaterial.h \ previewmaterial.h \
previewcolorgradation.h \ previewcolorgradation.h \
mainwindow.h \
inputnoise.h \ inputnoise.h \
inputmaterial.h \ inputmaterial.h \
inputlayers.h \ inputlayers.h \
@ -70,7 +69,9 @@ HEADERS += \
common/freeformhelper.h \ common/freeformhelper.h \
terrain/previewterrainshape.h \ terrain/previewterrainshape.h \
common/widgetsliderdecimal.h \ common/widgetsliderdecimal.h \
common/previewrenderer.h common/previewrenderer.h \
terrain/widgetterrainbasenoisepreview.h \
common/mainwindow.h
SOURCES += \ SOURCES += \
terrain/widgetheightmap.cpp \ terrain/widgetheightmap.cpp \
@ -80,7 +81,6 @@ SOURCES += \
previewosd.cpp \ previewosd.cpp \
previewmaterial.cpp \ previewmaterial.cpp \
previewcolorgradation.cpp \ previewcolorgradation.cpp \
mainwindow.cpp \
inputnoise.cpp \ inputnoise.cpp \
inputmaterial.cpp \ inputmaterial.cpp \
inputlayers.cpp \ inputlayers.cpp \
@ -119,12 +119,15 @@ SOURCES += \
common/freeformhelper.cpp \ common/freeformhelper.cpp \
terrain/previewterrainshape.cpp \ terrain/previewterrainshape.cpp \
common/widgetsliderdecimal.cpp \ common/widgetsliderdecimal.cpp \
common/previewrenderer.cpp common/previewrenderer.cpp \
terrain/widgetterrainbasenoisepreview.cpp \
common/mainwindow.cpp
FORMS += \ FORMS += \
terrain/dialogterrainpainting.ui \ terrain/dialogterrainpainting.ui \
common/widgetglobalformbuttons.ui \ common/widgetglobalformbuttons.ui \
terrain/mainterrainform.ui terrain/mainterrainform.ui \
common/mainwindow.ui
RESOURCES += \ RESOURCES += \
../../data/ui_pictures.qrc ../../data/ui_pictures.qrc

View file

@ -22,7 +22,7 @@ MainTerrainForm::MainTerrainForm(QWidget *parent) :
_form_helper->addDoubleInputSlider(ui->input_scaling, &_terrain->scaling, 0.1, 3.0, 0.03, 0.3); _form_helper->addDoubleInputSlider(ui->input_scaling, &_terrain->scaling, 0.1, 3.0, 0.03, 0.3);
_form_helper->addDoubleInputSlider(ui->input_height, &_terrain->height, 1.0, 90.0, 0.5, 5.0); _form_helper->addDoubleInputSlider(ui->input_height, &_terrain->height, 1.0, 90.0, 0.5, 5.0);
_form_helper->addDoubleInputSlider(ui->input_shadow_smoothing, &_terrain->shadow_smoothing, 0.0, 0.3, 0.003, 0.03); _form_helper->addDoubleInputSlider(ui->input_shadow_smoothing, &_terrain->shadow_smoothing, 0.0, 0.3, 0.003, 0.03);
_form_helper->addDoubleInputSlider(ui->input_water_height, &_terrain->water_height, -2.0, 2.0, 0.01, 0.1); _form_helper->addDoubleInputSlider(ui->input_water_height, &_terrain->water_height, -1.0, 1.0, 0.01, 0.1);
_form_helper->setApplyButton(ui->button_apply); _form_helper->setApplyButton(ui->button_apply);
_form_helper->setRevertButton(ui->button_revert); _form_helper->setRevertButton(ui->button_revert);
@ -55,6 +55,8 @@ void MainTerrainForm::refreshFromLocalData()
{ {
_form_helper->setLabelText("label_painting_info", tr("No manual scuplting done")); _form_helper->setLabelText("label_painting_info", tr("No manual scuplting done"));
} }
ui->widget_base_noise_preview->setNoise(_terrain->_height_noise);
} }
void MainTerrainForm::refreshFromFellowData() void MainTerrainForm::refreshFromFellowData()

View file

@ -54,7 +54,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QWidget" name="widget" native="true"> <widget class="WidgetTerrainBaseNoisePreview" name="widget_base_noise_preview" native="true">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>1</horstretch> <horstretch>1</horstretch>
@ -447,6 +447,12 @@
<extends>QSlider</extends> <extends>QSlider</extends>
<header>common/widgetsliderdecimal.h</header> <header>common/widgetsliderdecimal.h</header>
</customwidget> </customwidget>
<customwidget>
<class>WidgetTerrainBaseNoisePreview</class>
<extends>QWidget</extends>
<header>terrain/widgetterrainbasenoisepreview.h</header>
<container>1</container>
</customwidget>
</customwidgets> </customwidgets>
<resources> <resources>
<include location="../../../data/ui_pictures.qrc"/> <include location="../../../data/ui_pictures.qrc"/>

View file

@ -5,6 +5,7 @@
PreviewTerrainShape::PreviewTerrainShape(TerrainDefinition* terrain) PreviewTerrainShape::PreviewTerrainShape(TerrainDefinition* terrain)
{ {
_terrain = terrain; _terrain = terrain;
_highlight_enabled = true;
// TODO Don't delete the base renderer, just alter it // TODO Don't delete the base renderer, just alter it
rendererDelete(renderer); rendererDelete(renderer);
@ -14,6 +15,7 @@ PreviewTerrainShape::PreviewTerrainShape(TerrainDefinition* terrain)
void PreviewTerrainShape::bindEvent(BasePreview* preview) void PreviewTerrainShape::bindEvent(BasePreview* preview)
{ {
preview->addOsd(QString("geolocation")); preview->addOsd(QString("geolocation"));
//preview->addToggle("highlight", tr("Coverage highlight"), true);
preview->configScaling(20.0, 1000.0, 20.0, 50.0); preview->configScaling(20.0, 1000.0, 20.0, 50.0);
preview->configScrolling(-1000.0, 1000.0, 0.0, -1000.0, 1000.0, 0.0); preview->configScrolling(-1000.0, 1000.0, 0.0, -1000.0, 1000.0, 0.0);
@ -26,5 +28,13 @@ void PreviewTerrainShape::updateEvent()
Color PreviewTerrainShape::getColor2D(double x, double y, double scaling) Color PreviewTerrainShape::getColor2D(double x, double y, double scaling)
{ {
return terrainGetPreviewColor(renderer, x, y, scaling); return waterGetPreviewCoverage(renderer, x, y, scaling, _highlight_enabled ? 1 : 0);
}
void PreviewTerrainShape::toggleChangeEvent(QString key, bool value)
{
if (key == "highlight")
{
_highlight_enabled = value;
}
} }

View file

@ -15,9 +15,12 @@ protected:
virtual void bindEvent(BasePreview* preview); virtual void bindEvent(BasePreview* preview);
virtual void updateEvent(); virtual void updateEvent();
virtual Color getColor2D(double x, double y, double scaling); virtual Color getColor2D(double x, double y, double scaling);
virtual void toggleChangeEvent(QString key, bool value);
private: private:
TerrainDefinition* _terrain; TerrainDefinition* _terrain;
bool _highlight_enabled;
double _water_height;
}; };
#endif // PREVIEWTERRAINSHAPE_H #endif // PREVIEWTERRAINSHAPE_H

View file

@ -0,0 +1,45 @@
#include "widgetterrainbasenoisepreview.h"
#include <QPainter>
#include <QPaintEvent>
#include "tools.h"
WidgetTerrainBaseNoisePreview::WidgetTerrainBaseNoisePreview(QWidget* parent) :
QWidget(parent)
{
_noise = NULL;
}
void WidgetTerrainBaseNoisePreview::setNoise(NoiseGenerator* noise)
{
_noise = noise;
update();
}
void WidgetTerrainBaseNoisePreview::paintEvent(QPaintEvent* event)
{
QPainter painter(this);
painter.setBrush(Qt::SolidPattern);
painter.drawRect(rect());
int height = this->height();
if (_noise)
{
QRect boundaries = event->region().boundingRect();
double value, factor;
double minvalue, maxvalue;
noiseGetRange(_noise, &minvalue, &maxvalue);
factor = ((double)height) / (maxvalue - minvalue);
for (int x = boundaries.left(); x <= boundaries.right(); x++)
{
value = noiseGet1DTotal(_noise, 100.0 * ((double)x) / factor);
painter.setPen(Qt::white);
painter.drawLine(x, height - 1 - (value - minvalue) * factor, x, height - 1);
}
}
}

View file

@ -0,0 +1,26 @@
#ifndef _PAYSAGES_EDITING_TERRAIN_WIDGETTERRAINBASENOISEPREVIEW_H_
#define _PAYSAGES_EDITING_TERRAIN_WIDGETTERRAINBASENOISEPREVIEW_H_
#include <QWidget>
#include "rendering/noise.h"
class WidgetTerrainBaseNoisePreview : public QWidget
{
Q_OBJECT
public:
explicit WidgetTerrainBaseNoisePreview(QWidget* parent = 0);
void setNoise(NoiseGenerator* noise);
protected:
virtual void paintEvent(QPaintEvent* event);
signals:
public slots:
private:
NoiseGenerator* _noise;
};
#endif