c++ - Save screenshot using keyboard callback event -
i trying save screenshot inside pcl visualizer window using keyboard callback event. below code snippet:
#include <pcl/io/pcd_io.h> #include <pcl/visualization/pcl_visualizer.h> void keyboardeventoccurred (const pcl::visualization::keyboardevent &event, void* viewer) { if (event.getkeysym () == "s" && event.keydown ()) { viewer->savescreenshot("image.png"); } } int main (int argc, char** argv) { pcl::visualization::pclvisualizer viewer("cloud viewer"); pcl::pointcloud<pcl::pointxyzrgba>::ptr body (new pcl::pointcloud<pcl::pointxyzrgba>); pcl::io::loadpcdfile ("body.pcd", *body); viewer.addpointcloud (body,"body"); viewer.registerkeyboardcallback (keyboardeventoccurred, &viewer); viewer.spin(); return 0; }
however, there mismatch between data fields , returning following error:
[100%] building cxx object cmakefiles/pcl_visualizer.dir/pcl_visualizer.cpp.o /home/ravi/pcl_visualizer/pcl_visualizer.cpp: in function ‘void keyboardeventoccurred(const pcl::visualization::keyboardevent&, void*)’: /home/ravi/pcl_visualizer/pcl_visualizer.cpp:8:11: error: ‘void*’ not pointer-to-object type viewer->savescreenshot("image.png"); ^ make[2]: *** [cmakefiles/pcl_visualizer.dir/pcl_visualizer.cpp.o] error 1
any workaround, please?
the error message have telling really; point of void* in callback callback provider doesn't know, or care, type of pointer being used callback.
you seem pass pointer viewer object, compiler knows or cares it's n bit number represents memory provide callback.
by removing concept of type using void*, there's no way compiler establish meant viewer->xxx.
to resolve problem, easiest way cast pointer think should be;
pcl::visualization::pclvisualizer* v = static_cast<pcl::visualization::pclvisualizer*>(viewer)
you can v->xxx()
on side note, suggest brush on pointers in c++ book.
Comments
Post a Comment