diff --git a/BasePlugin/PluginFunctions.cc b/BasePlugin/PluginFunctions.cc index e76bd28fc470d98ffccea8c6da67471c3ecfaabd..5130864f18e597d8a41d768e8412724c0918a0bf 100644 --- a/BasePlugin/PluginFunctions.cc +++ b/BasePlugin/PluginFunctions.cc @@ -448,8 +448,9 @@ bool scenegraphRegionPick( const unsigned int _examiner, //Warning : Dont use template function as external static pointer for examiner widget is not resolved correctly!! void traverse( ACG::SceneGraph::MouseEventAction &_action ) { - ACG::SceneGraph::traverse(sceneGraphRootNode_, - _action,viewerProperties().glState() ); + // Single pass action, as the mouse action will only update the graph. + // If its changed, it will be set to dirty and an automatic redraw is triggered. + ACG::SceneGraph::traverse(sceneGraphRootNode_, _action,viewerProperties().glState() ); } //Warning : Dont use template function as external static pointer for examiner widget is not resolved correctly!! @@ -460,6 +461,8 @@ void traverse( const unsigned int _examiner, ACG::SceneGraph::MouseEventAction return; } + // Single pass action, as the mouse action will only update the graph. + // If its changed, it will be set to dirty and an automatic redraw is triggered. ACG::SceneGraph::traverse(sceneGraphRootNode_, _action,viewerProperties(_examiner).glState() ); } diff --git a/Core/Core.cc b/Core/Core.cc index 0a82ecf17c58e630e34a763bada44d81b221ea69..1ec217ac055659bc69ec031b92f037505b4bdbed 100644 --- a/Core/Core.cc +++ b/Core/Core.cc @@ -769,8 +769,11 @@ void Core::updateView() { void Core::checkScenegraphDirty() { if ( true ) { + // This is a single pass traversal as we only need to check if there is still one node dirty in the graph ACG::SceneGraph::CheckDirtyAction action; ACG::SceneGraph::traverse( root_node_scenegraph_, action ); + + // If the scenegraph is dirty, we have to redraw if ( action.isDirty () ) emit updateView (); } diff --git a/Core/PluginLoader.cc b/Core/PluginLoader.cc index 92b1522b4a5dc43a2dba818c9aa8ad06caeea6f9..6d94c9126abc62342010e7a388072460fad2be5a 100644 --- a/Core/PluginLoader.cc +++ b/Core/PluginLoader.cc @@ -1140,6 +1140,8 @@ void Core::loadPlugin(QString filename, bool silent){ ft.loadFilters = filePlugin->getLoadFilters(); ft.saveFilters = filePlugin->getSaveFilters(); ft.plugin = filePlugin; + + std::cerr << ft.type << std::endl; supportedTypes_.push_back(ft); } diff --git a/common/BaseObjectData.cc b/common/BaseObjectData.cc index 903842596843243935e0fc2f9bdd1a5983339441..bb65c3577b63dc8b9687ff06a055d58679c2b5e5 100644 --- a/common/BaseObjectData.cc +++ b/common/BaseObjectData.cc @@ -251,6 +251,7 @@ void BaseObjectData::manipPlaced( bool _placed ) { void BaseObjectData::getBoundingBox(ACG::Vec3d& bbmin, ACG::Vec3d& bbmax){ + // Single pass action, as the bounding box is not influenced by multipass traversal ACG::SceneGraph::BoundingBoxAction act; ACG::SceneGraph::traverse(separatorNode_, act);