如何在MFC程序中使用Open Inventor

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

 

如何在MFC程序中使用Open Inventor
 
       本文将介绍如何在MFC程序中使用Open Inventor(以下简称OIV)开发库。文中将使用VC 2003作为开发环境,使用SIM公司( www.coin3d.org)公司提供的Coin3D OIV作为Open Inventor开发库。关于OIV在Visual C++中的设置,请阅读网站 “Open Inventor-Coin3D开发环境” 中的内容。
 
1 .创建工程
首先启动VC 2003,使用MFC Wizards创建一个MDI 应用程序(本文只讨论MDI类型的应用程序,但SDI或Dialog程序只需要稍微做一些修改,也是同样可以使用OIV的)。我们假定MDI应用程序的名称叫做“MFCViewer”。
 
       2 .增加 Coin SoWin 代码
1.         打开MFCViewer.cpp文件,在文件开始部分增加下列头文件:
    #include <Inventor/Win/SoWin.h>  

编辑CMFCViewerApp::InitInstance(),在函数中增加上:                    
             SoWin::init("");
这行代码将初始化SoWin和Coin库,必须在调用任何Coin或SoWin函数之前调用这行代码。
 
2.         打开MFCViewerView.h文件,增加下列头文件列表(增加到预编译头文件-#ifdef/#pragma once/#endif 序列之后)
              #include <Inventor/Win/SoWin.h>
              #include <Inventor/Win/viewers/SoWinExaminerViewer.h>
增加一个公共数据成员变量
SoWinExaminerViewer * viewer;
SoWinExaminerViewer主要用于渲染我们的场景,以可以和显示的内容做交互式操作(像旋转物体,选择部分场景等)
 
3.         打开MFCViewerView.cpp文件,修改构造函数:
CMFCViewerView::CMFCViewerView()
{
         viewer = NULL;
}
修改析构函数:
        CMFCViewerView::CMFCViewerView()
        {
             if (viewer != NULL)
                  delete viewer;
        }
 
3 .创建场景
我们希望当用户创建了一个新文档后(点击菜单File | New),新创建的窗口中会有一个OIV场景。
 
1.         打开MFCViewerDoc.h文件,在CMFCViewerDoc类定义之上增加下列代码:
class SoSeparator;
                            这行代码主要是告诉编译器,我们要使用一个叫做SoSeparator的类。
2.         向CMFCViewerDoc类增加一个公共数据成员变量:
SoSeparator *root;
                   这是我们场景的根节点。
3.         打开MFCViewerDoc.cpp文件,增加下列头文件:
#include <Inventor/nodes/SoSeparator.h>
#include <Inventor/nodes/SoMaterial.h>
#include <Inventor/nodes/SoCone.h>
#include <Inventor/nodes/SoTranslation.h>
#include <Inventor/nodes/SoText2.h>
                   这些都是我们准备在场景中使用的节点,因此需要首先包含它们的头文件。
 
4.         修改函数OnNewDocument()      
BOOL CMFCViewerDoc::OnNewDocument()
{
 if (!CDocument::OnNewDocument())
    return FALSE;
 
 root = new SoSeparator;
 root->ref();
 SoMaterial *myMaterial;
 root->addChild(myMaterial = new SoMaterial);
 myMaterial->diffuseColor.setValue(1.0, 0.0, 0.0);
 root->addChild(new SoCone);
 
 SoSeparator * instructsep = new SoSeparator;
 root->addChild(instructsep);
 
 instructsep->addChild(myMaterial = new SoMaterial);
 myMaterial->diffuseColor.setValue(0.5, 1.0, 1.0);
 
 SoTranslation * instructtrans = new SoTranslation;
 instructtrans->translation = SbVec3f(-2.0f, 1.3f, 2.0f);
 instructsep->addChild(instructtrans);
 
 SoText2 * instructions = new SoText2;
 const char * str[] = {
    "Instructions for the MFCViewer tutorial",
    "",
    "Left mouse button = rotate",
    "Middle mouse button = move",
    "CTRL + middle mouse button = zoom",
    "Right mouse button = options"
    };
 instructions->string.setValues(0, sizeof(str) / sizeof(char *), str);
 instructions->justification = SoText2::LEFT;
 instructsep->addChild(instructions);
 
 return TRUE;
} 
                   我们通过向根节点增加子节点来建立场景。请记住,OIV会自己删除所有的场景对象,因此这里不需要程序员记住这些对象的指针,在以后的时候删除它们。(事实上如果这样做将会发生内存错误)。OIV是通过一种叫做引用计数的技术来实现这个功能的。
 
5.         修改构造和析构函数,增加上下列代码:
CMFCViewerDoc::CMFCViewerDoc()
{
 root = NULL;
}
 
CMFCViewerDoc::~CMFCViewerDoc()
{
 if (root)
    root->unref();
}
                    调用 root->unref(),告诉OIV,我们已经不再使用根节点对象了。所以OIV将会自动删除根节点。
 
6.         打开MFCViewerView.cpp文件,增加上下列代码:
#include <Inventor/nodes/SoSeparator.h>
                   修改函数CMFCViewerView::OnDraw(CDC* pDC):
                     void CMFCViewerView::OnDraw(CDC* pDC)
                           {
 CMFCViewerDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 if (viewer == NULL)
 {
    viewer = new SoWinExaminerViewer( m_hWnd );
    viewer->setDecoration(FALSE);
 
    SoSeparator *root = GetDocument()->root;
    viewer->setSceneGraph(root);
 }
}
      上面的代码将WinExaminerViewer嵌入到CMFCViewerView窗口中,其中WinExaminerViewer四周的 Toolbar(即Decoration)是不显示的。
编译并执行此应用程序
      
 
 
COIN3D+帮助文件 COIN3D+帮助文件 COIN3D+帮助文件 COIN3D+帮助文件 立即下载

相关推荐

openinventor实现选择

程序是利用open inventor的核心组件库coin3d编写平台是vc实现选择功能

MFC界面上显示pcl点云数据

MFC的环境配置和控制台下的配置相同,下面说明如何在MFC界面上添加控件显示用pcl读入的三维点云数据。 新建一个基于对话框的MFC窗体应用程序,添加一个按钮和一个Picture Control, IDC修改为IDC_VTK1 工程目录如下: 打开MFCApplication2.h头文件,在#include "resource.h"下添加如下pcl的头文件 #include <pcl/filters/voxel_grid.h> #include <pcl/filters/f

jiugeshao的专栏 3108

MFC使用OpenCasCade示例

目录: 一、OpenCasCade开发环境搭建 二、创建一个MFC应用程序 三、在MFC工程中添加代码 四、画个瓶子 一、OpenCasCade开发环境搭建 参见《OpenCasCade开发环境搭建》,这篇文章最后运行示例前所做的工作为以后开发OpenCasCade工程铺平了路,无需额外的配置,只需在新建的工程中加你的代码即可。 二、创建一个MFC应用程序 到此步,点...

积累点滴,保持自我 1万+

OpenInventor中文字符的显示和解决方法

很多人问我如何显示汉字,总是一个一个地说,很麻烦,特此写在这里—— 原因:OpenInventor支持Freetype字体,但汉字采用Unicode编码,故而无法直接正确显示 解决:使用Freetype字体,或者,将Unicode编码转换为Freetype可以识别的字体(使用内置的Freetype引擎) 本文采用第二种方法。 效果两个: 1 楷体 2微软雅黑...

huozheleisi 365

Open Inventor练习-SoWin中SoWinExaminerViewer显示三维场景

#define COIN_DLL #define SOWIN_DLL // 加载COIN库文件 #ifdef _DEBUG #pragma comment(lib, "SoWin1d.lib") #pragma comment(lib, "

Augusdi的专栏 2717

Open Inventor 简介

Open Inventor 简介 简介Open Inventor(以下简称OIV)是SGI公司开发的基于OpenGL的面向对象三维图形软件开发包。使用OIV开发包,程序员可以快速、简洁地开发出各种类型的交互式三维图形软件。OIV具有平台无关性,它可以在Microsoft Windows、Unix、Linux等多种操作系统中使用。OIV允许使用C、C++、Java、DotNet多种编程语

RobinHao的专栏 2万+

Open Inventor Coin3D

一、软件集成:C++调用Open Invetor 库函数显示3D点云 通过三维操作菜单进入数据采集的对话框部分 通过三维操作菜单进入点云显示(工程文件为SDIshow3D),读取Pts三维坐标点云文件 二、Coin3D与 Visual Studio 2008 配置 Coin3D 是一款免费的Open Inventor图形库,下载地址:http://www.coin3

zengshaoqing的博客 5039
上一篇: Open Inventor-Coin3D开发环境
下一篇: The Inventor Mentor翻译计划
RobinHao
博客等级 码龄25年 234粉丝 55原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值