Skip to content

Commit

Permalink
Gui: allow to dump only the visible part of the scene graph
Browse files Browse the repository at this point in the history
Gui.ActiveDocument.ActiveView.dump("scene.iv", True)
The second parameter is optional and by default False
  • Loading branch information
wwmayer committed Jan 16, 2020
1 parent 8b2e318 commit e6b3fad
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 7 deletions.
19 changes: 16 additions & 3 deletions src/Gui/View3DInventor.cpp
Expand Up @@ -823,16 +823,29 @@ void View3DInventor::restoreOverrideCursor()
_viewer->getWidget()->setCursor(QCursor(Qt::ArrowCursor));
}

void View3DInventor::dump(const char* filename)
// defined in SoFCDB.cpp
extern SoNode* replaceSwitchesInSceneGraph(SoNode*);

void View3DInventor::dump(const char* filename, bool onlyVisible)
{
SoGetPrimitiveCountAction action;
action.setCanApproximate(true);
action.apply(_viewer->getSceneGraph());

SoNode* node = _viewer->getSceneGraph();
if (onlyVisible) {
node = replaceSwitchesInSceneGraph(node);
node->ref();
}

if ( action.getTriangleCount() > 100000 || action.getPointCount() > 30000 || action.getLineCount() > 10000 )
_viewer->dumpToFile(_viewer->getSceneGraph(), filename, true);
_viewer->dumpToFile(node, filename, true);
else
_viewer->dumpToFile(_viewer->getSceneGraph(), filename, false);
_viewer->dumpToFile(node, filename, false);

if (onlyVisible) {
node->unref();
}
}

void View3DInventor::windowStateChanged(MDIView* view)
Expand Down
2 changes: 1 addition & 1 deletion src/Gui/View3DInventor.h
Expand Up @@ -113,7 +113,7 @@ public Q_SLOTS:
void setOverrideCursor(const QCursor&);
void restoreOverrideCursor();

void dump(const char* filename);
void dump(const char* filename, bool onlyVisible=false);

protected Q_SLOTS:
void stopAnimating();
Expand Down
7 changes: 4 additions & 3 deletions src/Gui/View3DPy.cpp
Expand Up @@ -113,7 +113,7 @@ void View3DInventorPy::init_type()
add_varargs_method("stopAnimating",&View3DInventorPy::stopAnimating,"stopAnimating()");
add_varargs_method("setAnimationEnabled",&View3DInventorPy::setAnimationEnabled,"setAnimationEnabled()");
add_varargs_method("isAnimationEnabled",&View3DInventorPy::isAnimationEnabled,"isAnimationEnabled()");
add_varargs_method("dump",&View3DInventorPy::dump,"dump()");
add_varargs_method("dump",&View3DInventorPy::dump,"dump(filename, [onlyVisible=False])");
add_varargs_method("dumpNode",&View3DInventorPy::dumpNode,"dumpNode(node)");
add_varargs_method("setStereoType",&View3DInventorPy::setStereoType,"setStereoType()");
add_varargs_method("getStereoType",&View3DInventorPy::getStereoType,"getStereoType()");
Expand Down Expand Up @@ -1233,11 +1233,12 @@ Py::Object View3DInventorPy::listCameraTypes(const Py::Tuple& args)
Py::Object View3DInventorPy::dump(const Py::Tuple& args)
{
char* filename;
if (!PyArg_ParseTuple(args.ptr(), "s", &filename))
PyObject *onlyVisible = Py_False;
if (!PyArg_ParseTuple(args.ptr(), "s|O", &filename, &onlyVisible))
throw Py::Exception();

try {
_view->dump(filename);
_view->dump(filename, PyObject_IsTrue(onlyVisible));
return Py::None();
}
catch (const Base::Exception& e) {
Expand Down

0 comments on commit e6b3fad

Please sign in to comment.