mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-12 02:40:00 +01:00
Save Views config in Settings
This commit is contained in:
71
Settings.cpp
71
Settings.cpp
@@ -1,10 +1,10 @@
|
||||
#include "Settings.h"
|
||||
#include "tinyxml2Toolkit.h"
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
#include <tinyxml2.h>
|
||||
#include "tinyxml2Toolkit.h"
|
||||
using namespace tinyxml2;
|
||||
|
||||
|
||||
@@ -56,6 +56,33 @@ void Settings::Save()
|
||||
applicationNode->SetAttribute("shader_editor", application.shader_editor);
|
||||
pRoot->InsertEndChild(applicationNode);
|
||||
|
||||
// block: views
|
||||
{
|
||||
XMLElement *viewsNode = xmlDoc.NewElement( "Views" );
|
||||
viewsNode->SetAttribute("current", application.current_view);
|
||||
|
||||
map<int, Settings::ViewConfig>::iterator iter;
|
||||
for (iter=application.views.begin(); iter != application.views.end(); iter++)
|
||||
{
|
||||
const Settings::ViewConfig& v = iter->second;
|
||||
|
||||
XMLElement *view = xmlDoc.NewElement( "View" );
|
||||
view->SetAttribute("name", v.name.c_str());
|
||||
view->SetAttribute("id", iter->first);
|
||||
|
||||
XMLElement *scale = xmlDoc.NewElement("scale");
|
||||
scale->InsertEndChild( XMLElementFromGLM(&xmlDoc, v.scale) );
|
||||
view->InsertEndChild(scale);
|
||||
XMLElement *translation = xmlDoc.NewElement("translation");
|
||||
translation->InsertEndChild( XMLElementFromGLM(&xmlDoc, v.translation) );
|
||||
view->InsertEndChild(translation);
|
||||
|
||||
viewsNode->InsertEndChild(view);
|
||||
}
|
||||
|
||||
pRoot->InsertEndChild(viewsNode);
|
||||
}
|
||||
|
||||
XMLError eResult = xmlDoc.SaveFile(filename.c_str());
|
||||
XMLCheckResult(eResult);
|
||||
}
|
||||
@@ -85,17 +112,17 @@ void Settings::Load()
|
||||
XMLElement * pElement = pRoot->FirstChildElement("Windows");
|
||||
if (pElement == nullptr) return;
|
||||
|
||||
XMLElement* pWindowNode = pElement->FirstChildElement("Window");
|
||||
for( ; pWindowNode ; pWindowNode=pWindowNode->NextSiblingElement())
|
||||
XMLElement* windowNode = pElement->FirstChildElement("Window");
|
||||
for( ; windowNode ; windowNode=windowNode->NextSiblingElement())
|
||||
{
|
||||
const char *pName = pWindowNode->Attribute("name");
|
||||
const char *pName = windowNode->Attribute("name");
|
||||
Settings::WindowConfig w(pName);
|
||||
|
||||
pWindowNode->QueryIntAttribute("x", &w.x); // If this fails, original value is left as-is
|
||||
pWindowNode->QueryIntAttribute("y", &w.y);
|
||||
pWindowNode->QueryIntAttribute("w", &w.w);
|
||||
pWindowNode->QueryIntAttribute("h", &w.h);
|
||||
pWindowNode->QueryBoolAttribute("f", &w.fullscreen);
|
||||
windowNode->QueryIntAttribute("x", &w.x); // If this fails, original value is left as-is
|
||||
windowNode->QueryIntAttribute("y", &w.y);
|
||||
windowNode->QueryIntAttribute("w", &w.w);
|
||||
windowNode->QueryIntAttribute("h", &w.h);
|
||||
windowNode->QueryBoolAttribute("f", &w.fullscreen);
|
||||
|
||||
application.windows.push_back(w);
|
||||
}
|
||||
@@ -109,6 +136,32 @@ void Settings::Load()
|
||||
pElement->QueryBoolAttribute("media_player", &application.media_player);
|
||||
pElement->QueryBoolAttribute("shader_editor", &application.shader_editor);
|
||||
|
||||
// block: views
|
||||
{
|
||||
application.views.clear(); // trash existing list
|
||||
XMLElement * pElement = pRoot->FirstChildElement("Views");
|
||||
if (pElement == nullptr) return;
|
||||
|
||||
pElement->QueryIntAttribute("current", &application.current_view);
|
||||
|
||||
XMLElement* viewNode = pElement->FirstChildElement("View");
|
||||
for( ; viewNode ; viewNode=viewNode->NextSiblingElement())
|
||||
{
|
||||
int id = 0;
|
||||
viewNode->QueryIntAttribute("id", &id);
|
||||
application.views[id].name = viewNode->Attribute("name");
|
||||
|
||||
XMLElement* scaleNode = viewNode->FirstChildElement("scale");
|
||||
tinyxml2::XMLElementToGLM( scaleNode->FirstChildElement("vec3"),
|
||||
application.views[id].scale);
|
||||
|
||||
XMLElement* translationNode = viewNode->FirstChildElement("translation");
|
||||
tinyxml2::XMLElementToGLM( translationNode->FirstChildElement("vec3"),
|
||||
application.views[id].translation);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
11
Settings.h
11
Settings.h
@@ -4,7 +4,9 @@
|
||||
#include "defines.h"
|
||||
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <glm/glm.hpp>
|
||||
|
||||
namespace Settings {
|
||||
|
||||
@@ -21,8 +23,13 @@ struct WindowConfig
|
||||
struct ViewConfig
|
||||
{
|
||||
std::string name;
|
||||
glm::vec3 scale;
|
||||
glm::vec3 translation;
|
||||
|
||||
ViewConfig(std::string n) : name(n) { }
|
||||
ViewConfig() : name("") {
|
||||
scale = glm::vec3(1.f);
|
||||
translation = glm::vec3(0.f);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -40,7 +47,7 @@ struct Application
|
||||
|
||||
// Settings of Views
|
||||
int current_view;
|
||||
std::vector<ViewConfig> views;
|
||||
std::map<int, ViewConfig> views;
|
||||
|
||||
// multiple windows handling
|
||||
std::vector<WindowConfig> windows;
|
||||
|
||||
@@ -605,17 +605,17 @@ void MainWindow::Render()
|
||||
// if ( ImGuiToolkit::ButtonToggle())
|
||||
float width = ImGui::GetContentRegionAvail().x / 3;
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, ImVec2(0.50f, 0.50f));
|
||||
if (ImGui::Selectable( ICON_FA_BULLSEYE " Mixing View", &selected_view[1], 0, ImVec2(width,50)))
|
||||
if (ImGui::Selectable( ICON_FA_BULLSEYE " Mixing", &selected_view[1], 0, ImVec2(width,50)))
|
||||
{
|
||||
Mixer::manager().setCurrentView(View::MIXING);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Selectable( ICON_FA_SIGN " Geometry View", &selected_view[2], 0, ImVec2(width,50)))
|
||||
if (ImGui::Selectable( ICON_FA_SIGN " Geometry", &selected_view[2], 0, ImVec2(width,50)))
|
||||
{
|
||||
Mixer::manager().setCurrentView(View::GEOMETRY);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Selectable( ICON_FA_BARS " Layers View", &selected_view[3], 0, ImVec2(width,50)))
|
||||
if (ImGui::Selectable( ICON_FA_BARS " Layers", &selected_view[3], 0, ImVec2(width,50)))
|
||||
{
|
||||
|
||||
}
|
||||
@@ -642,6 +642,7 @@ void MainWindow::Render()
|
||||
Log::ShowLogWindow(&show_logs_window);
|
||||
if (show_overlay_stats)
|
||||
ShowStats(&show_overlay_stats);
|
||||
|
||||
if (show_icons_window)
|
||||
ImGuiToolkit::ShowIconsWindow(&show_icons_window);
|
||||
if (show_demo_window)
|
||||
|
||||
36
View.cpp
36
View.cpp
@@ -7,6 +7,7 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "Settings.h"
|
||||
#include "View.h"
|
||||
#include "Source.h"
|
||||
#include "Primitives.h"
|
||||
@@ -32,7 +33,15 @@ void View::update(float dt)
|
||||
MixingView::MixingView() : View()
|
||||
{
|
||||
// default settings
|
||||
scene.root()->scale_ = glm::vec3(1.6f, 1.6f, 1.0f);
|
||||
if ( Settings::application.views[View::MIXING].name.empty() ) {
|
||||
Settings::application.views[View::MIXING].name = "Mixing";
|
||||
scene.root()->scale_ = glm::vec3(1.6f, 1.6f, 1.0f);
|
||||
}
|
||||
// restore settings
|
||||
else {
|
||||
scene.root()->scale_ = Settings::application.views[View::MIXING].scale;
|
||||
scene.root()->translation_ = Settings::application.views[View::MIXING].translation;
|
||||
}
|
||||
|
||||
// Mixing scene
|
||||
Mesh *disk = new Mesh("mesh/disk.ply");
|
||||
@@ -66,6 +75,7 @@ void MixingView::zoom( float factor )
|
||||
scene.root()->scale_.x = z;
|
||||
scene.root()->scale_.y = z;
|
||||
|
||||
Settings::application.views[View::MIXING].scale = scene.root()->scale_;
|
||||
}
|
||||
|
||||
void MixingView::drag (glm::vec2 from, glm::vec2 to)
|
||||
@@ -84,7 +94,7 @@ void MixingView::drag (glm::vec2 from, glm::vec2 to)
|
||||
|
||||
// compute delta translation
|
||||
scene.root()->translation_ = start_translation + gl_Position_to - gl_Position_from;
|
||||
|
||||
Settings::application.views[View::MIXING].translation = scene.root()->translation_;
|
||||
}
|
||||
|
||||
|
||||
@@ -164,6 +174,11 @@ uint MixingView::textureMixingQuadratic()
|
||||
RenderView::RenderView() : View(), frame_buffer_(nullptr)
|
||||
{
|
||||
setResolution(1280, 720);
|
||||
|
||||
// default settings
|
||||
if ( Settings::application.views[View::RENDERING].name.empty() ) {
|
||||
Settings::application.views[View::RENDERING].name = "Render";
|
||||
}
|
||||
}
|
||||
|
||||
RenderView::~RenderView()
|
||||
@@ -193,6 +208,18 @@ void RenderView::draw()
|
||||
|
||||
GeometryView::GeometryView() : View()
|
||||
{
|
||||
// default settings
|
||||
if ( Settings::application.views[View::GEOMETRY].name.empty() ) {
|
||||
Settings::application.views[View::GEOMETRY].name = "Geometry";
|
||||
scene.root()->scale_ = glm::vec3(1.2f, 1.2f, 1.0f);
|
||||
}
|
||||
// restore settings
|
||||
else {
|
||||
scene.root()->scale_ = Settings::application.views[View::GEOMETRY].scale;
|
||||
scene.root()->translation_ = Settings::application.views[View::GEOMETRY].translation;
|
||||
}
|
||||
|
||||
|
||||
// Scene
|
||||
Surface *rect = new Surface;
|
||||
backgound_.addChild(rect);
|
||||
@@ -205,8 +232,6 @@ GeometryView::GeometryView() : View()
|
||||
|
||||
scene.root()->addChild(&backgound_);
|
||||
|
||||
// default settings
|
||||
scene.root()->scale_ = glm::vec3(1.2f, 1.2f, 1.f);
|
||||
|
||||
}
|
||||
|
||||
@@ -237,6 +262,7 @@ void GeometryView::zoom( float factor )
|
||||
scene.root()->scale_.x = z;
|
||||
scene.root()->scale_.y = z;
|
||||
|
||||
Settings::application.views[View::GEOMETRY].scale = scene.root()->scale_;
|
||||
}
|
||||
|
||||
void GeometryView::drag (glm::vec2 from, glm::vec2 to)
|
||||
@@ -255,7 +281,7 @@ void GeometryView::drag (glm::vec2 from, glm::vec2 to)
|
||||
|
||||
// compute delta translation
|
||||
scene.root()->translation_ = start_translation + gl_Position_to - gl_Position_from;
|
||||
|
||||
Settings::application.views[View::GEOMETRY].translation = scene.root()->translation_;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,115 +0,0 @@
|
||||
ply
|
||||
format ascii 1.0
|
||||
comment Created by Blender 2.82 (sub 7) - www.blender.org, source file: 'border.blend'
|
||||
element vertex 45
|
||||
property float x
|
||||
property float y
|
||||
property float z
|
||||
property uchar red
|
||||
property uchar green
|
||||
property uchar blue
|
||||
property uchar alpha
|
||||
element face 56
|
||||
property list uchar uint vertex_indices
|
||||
end_header
|
||||
-0.950647 -1.000000 0.000000 255 255 255 255
|
||||
-0.000071 -1.013523 0.000000 255 255 255 255
|
||||
-0.000077 -1.000000 0.000000 255 255 255 255
|
||||
-0.962557 -1.013523 0.000000 255 255 255 255
|
||||
-0.000064 -1.027167 0.000000 255 255 255 255
|
||||
0.963176 -1.013523 0.000000 255 255 255 255
|
||||
0.951244 -1.000000 0.000000 255 255 255 255
|
||||
0.971677 -1.000395 0.000000 255 255 255 255
|
||||
0.982502 -1.011536 0.000000 255 255 255 255
|
||||
0.991868 -0.991539 0.000000 255 255 255 255
|
||||
1.011320 -0.981739 0.000000 255 255 255 255
|
||||
1.002918 -1.002581 0.000000 255 255 255 255
|
||||
1.013443 -0.963042 0.000000 255 255 255 255
|
||||
1.000178 -0.970926 0.000000 255 255 255 255
|
||||
1.027092 -0.976006 0.000000 255 255 255 255
|
||||
1.024939 -0.994955 0.000000 255 255 255 255
|
||||
1.016425 -1.016078 0.000000 255 255 255 255
|
||||
0.995733 -1.025153 0.000000 255 255 255 255
|
||||
0.976147 -1.027167 0.000000 255 255 255 255
|
||||
1.027092 -0.000011 0.000000 255 255 255 255
|
||||
1.013443 0.963025 0.000000 255 255 255 255
|
||||
1.013443 -0.000008 0.000000 255 255 255 255
|
||||
1.027092 0.975985 0.000000 255 255 255 255
|
||||
1.011158 0.987628 0.000000 255 255 255 255
|
||||
1.000017 0.976754 0.000000 255 255 255 255
|
||||
1.000000 0.951104 0.000000 255 255 255 255
|
||||
0.991530 0.992067 0.000000 255 255 255 255
|
||||
0.984469 1.011229 0.000000 255 255 255 255
|
||||
1.002576 1.003111 0.000000 255 255 255 255
|
||||
0.962232 1.013506 0.000000 255 255 255 255
|
||||
0.973622 1.000095 0.000000 255 255 255 255
|
||||
0.975191 1.027145 0.000000 255 255 255 255
|
||||
0.997727 1.024837 0.000000 255 255 255 255
|
||||
1.016078 1.016610 0.000000 255 255 255 255
|
||||
1.024775 1.000919 0.000000 255 255 255 255
|
||||
1.000889 -0.951116 0.000000 255 255 255 255
|
||||
-0.951593 1.000000 0.000000 255 255 255 255
|
||||
-0.000071 1.013506 0.000000 255 255 255 255
|
||||
-0.963515 1.013506 0.000000 255 255 255 255
|
||||
0.950312 1.000000 0.000000 255 255 255 255
|
||||
-0.000064 1.027145 0.000000 255 255 255 255
|
||||
-0.975505 -1.027167 0.000000 255 255 255 255
|
||||
1.000000 0.000000 0.000000 255 255 255 255
|
||||
-0.000064 1.000000 0.000000 255 255 255 255
|
||||
-0.976476 1.027145 0.000000 255 255 255 255
|
||||
3 0 1 2
|
||||
3 3 4 1
|
||||
3 4 5 1
|
||||
3 1 6 2
|
||||
3 5 7 6
|
||||
3 8 9 7
|
||||
3 10 9 11
|
||||
3 12 13 10
|
||||
3 10 14 12
|
||||
3 15 11 16
|
||||
3 11 17 16
|
||||
3 8 18 17
|
||||
3 19 12 14
|
||||
3 19 20 21
|
||||
3 22 23 20
|
||||
3 20 24 25
|
||||
3 23 26 24
|
||||
3 27 26 28
|
||||
3 29 30 27
|
||||
3 27 31 29
|
||||
3 32 28 33
|
||||
3 28 34 33
|
||||
3 25 21 20
|
||||
3 21 35 12
|
||||
3 36 37 38
|
||||
3 37 39 29
|
||||
3 29 40 37
|
||||
3 40 38 37
|
||||
3 0 3 1
|
||||
3 3 41 4
|
||||
3 4 18 5
|
||||
3 1 5 6
|
||||
3 5 8 7
|
||||
3 8 11 9
|
||||
3 10 13 9
|
||||
3 12 35 13
|
||||
3 10 15 14
|
||||
3 15 10 11
|
||||
3 11 8 17
|
||||
3 8 5 18
|
||||
3 19 21 12
|
||||
3 19 22 20
|
||||
3 22 34 23
|
||||
3 20 23 24
|
||||
3 23 28 26
|
||||
3 27 30 26
|
||||
3 29 39 30
|
||||
3 27 32 31
|
||||
3 32 27 28
|
||||
3 28 23 34
|
||||
3 25 42 21
|
||||
3 21 42 35
|
||||
3 36 43 37
|
||||
3 37 43 39
|
||||
3 29 31 40
|
||||
3 40 44 38
|
||||
@@ -43,7 +43,7 @@ XMLElement *tinyxml2::XMLElementFromGLM(XMLDocument *doc, glm::mat4 matrix)
|
||||
|
||||
void tinyxml2::XMLElementToGLM(XMLElement *elem, glm::vec3 &vector)
|
||||
{
|
||||
if ( std::string(elem->Name()).find("vec3") == std::string::npos )
|
||||
if ( !elem || std::string(elem->Name()).find("vec3") == std::string::npos )
|
||||
return;
|
||||
elem->QueryFloatAttribute("x", &vector.x); // If this fails, original value is left as-is
|
||||
elem->QueryFloatAttribute("y", &vector.y);
|
||||
@@ -52,7 +52,7 @@ void tinyxml2::XMLElementToGLM(XMLElement *elem, glm::vec3 &vector)
|
||||
|
||||
void tinyxml2::XMLElementToGLM(XMLElement *elem, glm::vec4 &vector)
|
||||
{
|
||||
if ( std::string(elem->Name()).find("vec4") == std::string::npos )
|
||||
if ( !elem || std::string(elem->Name()).find("vec4") == std::string::npos )
|
||||
return;
|
||||
elem->QueryFloatAttribute("x", &vector.x); // If this fails, original value is left as-is
|
||||
elem->QueryFloatAttribute("y", &vector.y);
|
||||
@@ -62,7 +62,7 @@ void tinyxml2::XMLElementToGLM(XMLElement *elem, glm::vec4 &vector)
|
||||
|
||||
void tinyxml2::XMLElementToGLM(XMLElement *elem, glm::mat4 &matrix)
|
||||
{
|
||||
if ( std::string(elem->Name()).find("mat4") == std::string::npos )
|
||||
if ( !elem || std::string(elem->Name()).find("mat4") == std::string::npos )
|
||||
return;
|
||||
|
||||
// loop over rows of vec4
|
||||
|
||||
Reference in New Issue
Block a user