osgWidget.FunctionCallback
是一个回调函数类,用于处理用户在 osgWidget
中进行的各种事件。
osg::Referenced
osgWidget::Callback
osgWidget::FunctionCallback
osgWidget::FunctionCallback::FunctionCallback(Function func);
void osgWidget::FunctionCallback::setFunction(Function func);
设置回调函数。
void osgWidget::FunctionCallback::operator()(Event& ev);
调用回调函数。
以下是一个示例代码,展示了如何使用 osgWidget.FunctionCallback
。
#include <osgWidget/WindowManager>
#include <osgWidget/Box>
#include <osgWidget/Label>
#include <osgWidget/EventInterface>
#include <osg/Geometry>
#include <osg/Geode>
// 实现回调函数
void myCallback(osgWidget::Event& ev)
{
std::cout << "Button clicked!" << std::endl;
// 在这里添加自己的代码
}
int main()
{
// 创建窗口管理器
osgWidget::WindowManager* wm = new osgWidget::WindowManager(
0, 800, 0, 600, "Window Manager");
// 创建一个标签
osgWidget::Label* label = new osgWidget::Label("Hello World!");
// 设置标签大小和位置
label->setWidth(200);
label->setHeight(50);
label->setAlignment(osgWidget::Widget::ALIGN_CENTER_TOP);
label->setAnchor(osgWidget::Widget::ANCHOR_TOP_LEFT);
// 创建一个按钮
osgWidget::Button* button = new osgWidget::Button("Click Me!");
// 设置按钮大小和位置
button->setWidth(100);
button->setHeight(50);
button->setAlignment(osgWidget::Widget::ALIGN_CENTER_TOP);
button->setAnchor(osgWidget::Widget::ANCHOR_TOP_CENTER);
// 添加回调函数
button->addCallback(new osgWidget::FunctionCallback(&myCallback));
// 创建一个Box
osgWidget::Box* box = new osgWidget::Box();
box->setChildSpacing(10);
box->addChild(label);
box->addChild(button);
// 添加Box到窗口管理器
wm->addChild(box);
// 创建一个场景图
osg::Geometry* geo = new osg::Geometry();
geo->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::TRIANGLE_STRIP, 0, 4));
geo->setVertexArray(new osg::Vec3Array(4));
(*geo->getVertexArray())[0].set(-1.0f, -1.0f, 0.0f);
(*geo->getVertexArray())[1].set(-1.0f, 1.0f, 0.0f);
(*geo->getVertexArray())[2].set(1.0f, -1.0f, 0.0f);
(*geo->getVertexArray())[3].set(1.0f, 1.0f, 0.0f);
osg::Geode* geode = new osg::Geode();
geode->addDrawable(geo);
// 创建一个相机
osg::Camera* camera = new osg::Camera();
camera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
camera->setClearColor(osg::Vec4(0.0, 0.0, 0.0, 0.0));
camera->setViewport(0, 0, 800, 600);
camera->setProjectionMatrixAsPerspective(60.0, 1.33, 0.1, 100.0);
camera->setViewMatrixAsLookAt(osg::Vec3d(0.0, 0.0, 5.0), osg::Vec3d(0.0, 0.0, 0.0), osg::Vec3d(0.0, 1.0, 0.0));
camera->addChild(geode);
// 将窗口管理器设置为相机的 HUD
camera->addChild(wm->createParentOrthoCamera());
// 创建一个场景根节点
osg::Group* root = new osg::Group();
root->addChild(camera);
// 运行场景
osgViewer::Viewer viewer;
viewer.setSceneData(root);
viewer.run();
return 0;
}