# HG changeset patch # User John Tsiombikas # Date 1399372012 -10800 # Node ID ab66cdabf6f2cdf4acfcb88858a3019a99784699 # Parent 9862541fdcf582f69cca6400dc7f02da97054b57 loading scene files (no vis yet) diff -r 9862541fdcf5 -r ab66cdabf6f2 exporters/maxgoat/resource.h Binary file exporters/maxgoat/resource.h has changed diff -r 9862541fdcf5 -r ab66cdabf6f2 goatview/goatview.vcxproj --- a/goatview/goatview.vcxproj Tue May 06 03:57:11 2014 +0300 +++ b/goatview/goatview.vcxproj Tue May 06 13:26:52 2014 +0300 @@ -102,7 +102,8 @@ Console true - qtmaind.lib;Qt5Cored.lib;Qt5Widgetsd.lib;Qt5OpenGLd.lib;opengl32.lib;%(AdditionalDependencies) + goat3d-x64.lib;qtmaind.lib;Qt5Cored.lib;Qt5Widgetsd.lib;Qt5OpenGLd.lib;opengl32.lib;libvmath-x64-dbg.lib;libanim-x64-dbg.lib;pthreadVC2_x64.lib;%(AdditionalDependencies) + $(OutDir);%(AdditionalLibraryDirectories) @@ -153,7 +154,8 @@ true true true - qtmain.lib;Qt5Widgets.lib;Qt5OpenGL.lib;opengl32.lib;%(AdditionalDependencies) + goat3d-x64.lib;qtmain.lib;Qt5Widgets.lib;Qt5OpenGL.lib;opengl32.lib;libvmath-x64.lib;libanim-x64.lib;pthreadVC2_x64.lib;%(AdditionalDependencies) + $(OutDir) diff -r 9862541fdcf5 -r ab66cdabf6f2 goatview/src/goatview.cc --- a/goatview/src/goatview.cc Tue May 06 03:57:11 2014 +0300 +++ b/goatview/src/goatview.cc Tue May 06 13:26:52 2014 +0300 @@ -1,4 +1,7 @@ #include "goatview.h" +#include "goat3d.h" + +goat3d *scene; GoatView::GoatView() { @@ -77,7 +80,21 @@ void GoatView::open_scene() { - statusBar()->showMessage("opening scene..."); + std::string fname = QFileDialog::getOpenFileName(this, "Open scene file", "", + "Goat3D Scene (*.goatsce);;All Files (*)").toStdString(); + if(fname.empty()) { + statusBar()->showMessage("Abort: No file selected!"); + return; + } + + if(scene) { + goat3d_free(scene); + } + + statusBar()->showMessage("opening scene file"); + if(!(scene = goat3d_create()) || goat3d_load(scene, fname.c_str()) == -1) { + statusBar()->showMessage("failed to load scene file"); + } } void GoatView::open_anim() diff -r 9862541fdcf5 -r ab66cdabf6f2 goatview/src/goatview.h --- a/goatview/src/goatview.h Tue May 06 03:57:11 2014 +0300 +++ b/goatview/src/goatview.h Tue May 06 13:26:52 2014 +0300 @@ -3,6 +3,9 @@ #include #include +#include "goat3d.h" + +extern goat3d *scene; class GoatView : public QMainWindow { Q_OBJECT diff -r 9862541fdcf5 -r ab66cdabf6f2 src/goat3d.cc --- a/src/goat3d.cc Tue May 06 03:57:11 2014 +0300 +++ b/src/goat3d.cc Tue May 06 13:26:52 2014 +0300 @@ -31,12 +31,6 @@ using namespace g3dimpl; -struct goat3d { - Scene *scn; - unsigned int flags; - char *search_path; -}; - struct goat3d_material : public Material {}; struct goat3d_mesh : public Mesh {}; struct goat3d_light : public Light {}; @@ -56,6 +50,7 @@ goat->flags = 0; goat->search_path = 0; goat->scn = new Scene; + goat->scn->goat = goat; goat3d_setopt(goat, GOAT3D_OPT_SAVEXML, 1); return goat; diff -r 9862541fdcf5 -r ab66cdabf6f2 src/goat3d_impl.h --- a/src/goat3d_impl.h Tue May 06 03:57:11 2014 +0300 +++ b/src/goat3d_impl.h Tue May 06 13:26:52 2014 +0300 @@ -28,6 +28,17 @@ #include "node.h" namespace g3dimpl { +class Scene; +} + +struct goat3d { + g3dimpl::Scene *scn; + unsigned int flags; + char *search_path; +}; + + +namespace g3dimpl { extern int goat_log_level; @@ -55,6 +66,8 @@ std::vector nodes; public: + goat3d *goat; + Scene(); ~Scene(); diff -r 9862541fdcf5 -r ab66cdabf6f2 src/goat3d_readxml.cc --- a/src/goat3d_readxml.cc Tue May 06 03:57:11 2014 +0300 +++ b/src/goat3d_readxml.cc Tue May 06 13:26:52 2014 +0300 @@ -211,7 +211,12 @@ if((elem = xml_mesh->FirstChildElement("file"))) { const char *fname = elem->Attribute("string"); if(fname) { - if(!mesh->load(fname)) { + char *path = (char*)fname; + if(scn->goat->search_path) { + path = (char*)alloca(strlen(fname) + strlen(scn->goat->search_path) + 2); + sprintf(path, "%s/%s", scn->goat->search_path, fname); + } + if(!mesh->load(path)) { delete mesh; return 0; } diff -r 9862541fdcf5 -r ab66cdabf6f2 src/scene.cc --- a/src/scene.cc Tue May 06 03:57:11 2014 +0300 +++ b/src/scene.cc Tue May 06 13:26:52 2014 +0300 @@ -25,6 +25,7 @@ Scene::Scene() : name("unnamed"), ambient(0.05, 0.05, 0.05) { + goat = 0; } Scene::~Scene()