osgPresentation.CompileSlideCallback
是一个OpenSceneGraph(OSG)类,用于编译幻灯片。
编译幻灯片时,可以使用该类定义自定义的回调函数,以从场景图中收集幻灯片的信息,包括幻灯片的图像、标题和注释等。
class CompileSlideCallback : public osg::Referenced
{
public:
virtual void compileSlide(const std::string& filename, const osg::ref_ptr<osg::Node>& slideNode, osgDB::ReaderWriter* writer) const = 0;
};
该类只有一个成员函数:compileSlide
。该函数在幻灯片被编译时被调用,用于收集幻灯片的信息。其参数如下:
virtual void compileSlide(const std::string& filename, const osg::ref_ptr<osg::Node>& slideNode, osgDB::ReaderWriter* writer) const = 0;
filename
:幻灯片的文件名,类型为std::string
。slideNode
:一个osg::Node
指针,指向场景图中的幻灯片节点。writer
:幻灯片编译器所使用的osgDB::ReaderWriter
指针。该函数没有返回值。
使用CompileSlideCallback
时,需要自定义一个回调函数并将其分配给幻灯片编译器的实例。
以下示例代码定义了一个名为MyCompileSlideCallback
的回调函数,并将其分配给场景图的任意osgPresentation
实例。在这个例子中,回调函数收集幻灯片的图像和注释,并保存到磁盘上。
class MyCompileSlideCallback : public osgPresentation::CompileSlideCallback
{
public:
virtual void compileSlide(const std::string& filename, const osg::ref_ptr<osg::Node>& slideNode, osgDB::ReaderWriter* writer) const
{
// 创建一个osg::Image,该图像包含幻灯片节点的图像数据。
osg::ref_ptr<osg::Image> image = myCaptureFunction(slideNode);
// 创建一个osgDB::Options,用于控制写入磁盘的图像格式。
osgDB::Options* options = new osgDB::Options;
options->setOptionString("ImageWriter::UseOriginalFilename");
// 将图像和注释写入磁盘。
std::string imageFile = filename + ".png";
osgDB::writeImageFile(*image, imageFile, writer, options);
std::string notesFile = filename + ".txt";
osgPresentation::Presentation::writeMetaData(notesFile, "notes", myExtractNotesFunction(slideNode));
}
private:
osg::ref_ptr<osg::Image> myCaptureFunction(const osg::ref_ptr<osg::Node>& node) const;
std::string myExtractNotesFunction(const osg::ref_ptr<osg::Node>& node) const;
};
...
// 对场景图调用编译函数,分配自定义的回调函数。
osgPresentation::Presentation presentation;
presentation.setCompileSlideCallback(new MyCompileSlideCallback);
presentation.compile(...);