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;
}

效果如下



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值