Open Inventor练习-一维拖拽器SoTranslate1Dragger

拖拽器是Open Inventor坐标变换节点,用来交互用户对显示物体的操作,这个例子是演示SoTranslate1Dragger关联一个SoSphere球体,用来操作拖拽器就可以相应的改变球体的位置。SoTranslate2Dragger与SoTranslate1Dragger类似,只是操作的是二维变换而已。

// 预定义COIN宏 #define COIN_DLL #define SOWIN_DLL // 加载COIN库文件 #ifdef _DEBUG #pragma comment(lib, "SoWin1d.lib") #pragma comment(lib, "Coin3d.lib") #else #pragma comment(lib, "SoWin1.lib") #pragma comment(lib, "Coin3.lib") #endif // 添加COIN头文件-Window操作显示库和节点库 #include <Inventor/Win/viewers/SoWinExaminerViewer.h> // Open Inventor在Windows下的库头文件 #include <Inventor/Win/SoWin.h> // Open Inventor节点头文件 #include <Inventor/nodes/SoSeparator.h> // Open Inventor球体节点头文件 #include <Inventor/nodes/SoSphere.h> // Open Inventor立方体节点头文件 #include <Inventor/nodes/SoCube.h> // Open Inventor材料节点头文件 #include <Inventor/nodes/SoMaterial.h> // Open Inventor变换节点头文件 #include <Inventor/nodes/SoTranslation.h> // Open Inventor操作回调节点头文件 #include <Inventor/actions/SoCallbackAction.h> // Open Inventor拖拽变换节点头文件 #include <Inventor/draggers/SoTranslate1Dragger.h> // 产生变换节点 SoNode * makeTranslation(float x, float y, float z) { SoTranslation * t = new SoTranslation; t->translation.setValue(SbVec3f(x, y, z)); return t; } // 产生Open Inventor视图场景内容 SoNode * makeSceneGraph(void) { // 此视图下根节点 SoSeparator * root = new SoSeparator; // 拖拽节点 SoSeparator * dragsep = new SoSeparator; // 拖拽节点下的移动坐标变换节点 SoTranslation * offset = new SoTranslation; // 拖拽器节点 SoTranslate1Dragger * dragger = new SoTranslate1Dragger; dragsep->addChild(offset); dragsep->addChild(new SoSphere); root->addChild(dragsep); root->addChild(makeTranslation(-3, 0, 0)); root->addChild(new SoCube); root->addChild(makeTranslation(6, 0, 0)); root->addChild(new SoCube); root->addChild(makeTranslation(-3, 2, 0)); root->addChild(dragger); offset->translation.connectFrom(&dragger->translation); return root; } int main(int argc, char ** argv) { HWND hWnd = SoWin::init(argv[0]); SoWinExaminerViewer * viewer = new SoWinExaminerViewer(hWnd); viewer->show(); SoWin::show(hWnd); viewer->setViewing(FALSE); viewer->setSceneGraph(makeSceneGraph()); SoWin::mainLoop(); delete viewer; return 0; }
效果如下



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值