From 6d95d8fc9c548f07f0da03efd524f54917c99a4e Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 3 Aug 2023 00:05:20 +0200 Subject: [PATCH] Gui: expose grabFramebuffer to Python --- src/Gui/View3DViewerPy.cpp | 14 ++++++++++++++ src/Gui/View3DViewerPy.h | 1 + 2 files changed, 15 insertions(+) diff --git a/src/Gui/View3DViewerPy.cpp b/src/Gui/View3DViewerPy.cpp index 2fa740d948..abe03b58fb 100644 --- a/src/Gui/View3DViewerPy.cpp +++ b/src/Gui/View3DViewerPy.cpp @@ -30,6 +30,7 @@ #include #include +#include "PythonWrapper.h" #include "View3DViewerPy.h" #include "View3DInventorViewer.h" @@ -93,6 +94,8 @@ void View3DInventorViewerPy::init_type() "setRedirectToSceneGraph(bool): enables or disables to redirect events directly to the scene graph."); add_varargs_method("isRedirectedToSceneGraph", &View3DInventorViewerPy::isRedirectedToSceneGraph, "isRedirectedToSceneGraph() -> bool: check whether event redirection is enabled."); + add_varargs_method("grabFramebuffer", &View3DInventorViewerPy::grabFramebuffer, + "grabFramebuffer() -> QImage: renders and returns a 32-bit RGB image of the framebuffer."); add_varargs_method("setEnabledNaviCube", &View3DInventorViewerPy::setEnabledNaviCube, "setEnabledNaviCube(bool): enables or disables the navi cube of the viewer."); add_varargs_method("isEnabledNaviCube", &View3DInventorViewerPy::isEnabledNaviCube, @@ -556,6 +559,17 @@ Py::Object View3DInventorViewerPy::isRedirectedToSceneGraph(const Py::Tuple& arg return Py::Boolean(ok); } +Py::Object View3DInventorViewerPy::grabFramebuffer(const Py::Tuple& args) +{ + if (!PyArg_ParseTuple(args.ptr(), "")) + throw Py::Exception(); + QImage img = _viewer->grabFramebuffer(); + + PythonWrapper wrap; + wrap.loadGuiModule(); + return wrap.fromQImage(img.mirrored()); +} + Py::Object View3DInventorViewerPy::setEnabledNaviCube(const Py::Tuple& args) { PyObject* m=Py_False; diff --git a/src/Gui/View3DViewerPy.h b/src/Gui/View3DViewerPy.h index e157c30be8..efbbf8a0f7 100644 --- a/src/Gui/View3DViewerPy.h +++ b/src/Gui/View3DViewerPy.h @@ -72,6 +72,7 @@ public: Py::Object setBackgroundColor(const Py::Tuple& args); Py::Object setRedirectToSceneGraph(const Py::Tuple& args); Py::Object isRedirectedToSceneGraph(const Py::Tuple& args); + Py::Object grabFramebuffer(const Py::Tuple& args); // NaviCube handling Py::Object setEnabledNaviCube(const Py::Tuple& args);