projects
/
laserbrain_demo
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
exhibit drawing is now handled by the Renderer
[laserbrain_demo]
/
src
/
exman.cc
diff --git
a/src/exman.cc
b/src/exman.cc
index
d6cac9c
..
31ee1ae
100644
(file)
--- a/
src/exman.cc
+++ b/
src/exman.cc
@@
-4,6
+4,8
@@
#include "exhibit.h"
#include "blob_exhibit.h"
#include "treestore.h"
#include "exhibit.h"
#include "blob_exhibit.h"
#include "treestore.h"
+#include "app.h"
+#include "geomdraw.h"
static Exhibit *create_exhibit(const char *type);
static Exhibit *create_exhibit(const char *type);
@@
-114,13
+116,10
@@
ExhibitManager::~ExhibitManager()
void ExhibitManager::clear()
{
void ExhibitManager::clear()
{
- int num = (int)items.size();
- for(int i=0; i<num; i++) {
- delete items[i];
- }
+ // not deleting exhibit objects, as they will be deleted the own_scn destructor
items.clear();
items.clear();
- num = (int)exslots.size();
+ int num = (int)exslots.size();
for(int i=0; i<num; i++) {
delete exslots[i];
}
for(int i=0; i<num; i++) {
delete exslots[i];
}
@@
-134,6
+133,8
@@
void ExhibitManager::add(Exhibit *ex)
std::vector<Exhibit*>::iterator it = std::find(items.begin(), items.end(), ex);
if(it == items.end()) {
items.push_back(ex);
std::vector<Exhibit*>::iterator it = std::find(items.begin(), items.end(), ex);
if(it == items.end()) {
items.push_back(ex);
+ own_scn->add_object(ex);
+ if(ex->node) own_scn->add_node(ex->node);
}
}
}
}
@@
-142,6
+143,8
@@
bool ExhibitManager::remove(Exhibit *ex)
std::vector<Exhibit*>::iterator it = std::find(items.begin(), items.end(), ex);
if(it != items.end()) {
items.erase(it);
std::vector<Exhibit*>::iterator it = std::find(items.begin(), items.end(), ex);
if(it != items.end()) {
items.erase(it);
+ own_scn->remove_object(ex);
+ if(ex->node) own_scn->remove_node(ex->node);
return true;
}
return false;
return true;
}
return false;
@@
-156,8
+159,10
@@
bool ExhibitManager::load(MetaScene *mscn, const char *fname)
return false;
}
return false;
}
- // create our own scene to manage all exhibits not already in an existing scene
- // and add it to the metascene
+ /* create our own scene to manage all exhibits not already in an existing scene
+ * and add it to the metascene.
+ * Also exhibit drawing happens due to the renderer drawing the metascene
+ */
if(!own_scn) {
own_scn = new Scene;
own_scn->name = "ad-hoc exhibits";
if(!own_scn) {
own_scn = new Scene;
own_scn->name = "ad-hoc exhibits";
@@
-192,13
+197,15
@@
bool ExhibitManager::load(MetaScene *mscn, const char *fname)
}
}
}
}
+ // add everything to our data structures
+ // equivalent to add_exhibit(ex), but without all the searching
+ own_scn->add_object(ex);
if(!snode) {
snode = new SceneNode;
snode->set_name(ex->get_name());
own_scn->add_node(snode);
}
ex->set_node(snode);
if(!snode) {
snode = new SceneNode;
snode->set_name(ex->get_name());
own_scn->add_node(snode);
}
ex->set_node(snode);
-
items.push_back(ex);
float *apos = ts_get_attr_vec(node, "pos");
items.push_back(ex);
float *apos = ts_get_attr_vec(node, "pos");
@@
-336,9
+343,10
@@
void ExhibitManager::draw() const
{
int num = items.size();
for(int i=0; i<num; i++) {
{
int num = items.size();
for(int i=0; i<num; i++) {
- items[i]->pre_draw();
- items[i]->draw();
- items[i]->post_draw();
+ if(exsel_hover.ex == items[i]) {
+ const AABox &bvol = items[i]->get_aabox();
+ draw_geom_object(&bvol);
+ }
}
}
}
}