OCC之HelloWorld

2024-03-26 23:40
文章标签 helloworld occ

本文主要是介绍OCC之HelloWorld,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


一个Viewer管理多个view对象,一个view就是一个视图。它不与具体的窗口关联。
构造一个view需要两个对象: 一个是Aspect_WindowDriver的子类对象,一个是Viewer。

Aspect_WindowDriver的父类是Aspect_Driver,它有画直线段,多边形等纯虚函数。

可以把它看成是抽象的GDI,即用来画图。在windows平台下,可使用Aspect_WindowDriver

的子类WNT_WDriver。构造这个对象只需要一个WNT_Window对象。它是Aspect_Window的子类。

WNT_Window是一个被包装的窗口。传入父窗体句柄,然后调用CreateWindow的API,创建一个Windows OS

的窗口。New 一个WNT_Window需要父窗口句柄和WNT_GraphicDevice对象。它的父类是

Aspect_GraphicDevice,是一个颜色管理类。在Windows,X-Window ,及各种显卡,它们显

示颜色方式不统一,OCC为是可移植到其它系统上,创建了这个颜色管理类。

WNT_GraphicDevice是它的子类,针对Windows NT平台。只要new 一个

WNT_GraphicDevice就可以用了。


好了,我们用代码描述创建一个OCC窗口的过程。

device = new WNT_GraphicDevice;

 win = new WNT_Window(device, 父窗口句柄);

Driver = new WNT_WDriver(win);

View = newV2d_View(driver,已先创建的Viewer对象);

创建Viewer对象,需要一个WNT_GraphicDevice对象。

下面的例子,显示了一个金黄色的窗口。

附加包含目录 $(CASROOT)\inc

附加依赖项 TKernel.lib TKService.lib TKV2d.lib

代码如下

//mfc.h
#include <Handle_V2d_View.hxx>class CMFCApp : public CWinApp
{
public:virtual BOOL InitInstance();};class CMainWindow : public CFrameWnd
{
public:CMainWindow();
protected:Handle_V2d_View  pV2dView;	
protected:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);DECLARE_MESSAGE_MAP ()
};//MFC.cpp
#include <afxwin.h>
#include "resource.h"
#include "MFC.H"
#include "OCCMgr.h"
#include <Quantity_Color.hxx>
#include <V2d_View.hxx>CMFCApp theApp;BOOL CMFCApp::InitInstance()
{m_pMainWnd = new CMainWindow; m_pMainWnd->ShowWindow(m_nCmdShow);m_pMainWnd->UpdateWindow();return TRUE;
}BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd)//ON_WM_PAINT ()ON_WM_CREATE()
END_MESSAGE_MAP ()CMainWindow::CMainWindow()
{Create(NULL,_T("A Simple MFC Program!"));
}int CMainWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)
{pV2dView = OCCMgr::Get()->CreatView(this->m_hWnd);pV2dView->SetBackground(Quantity_Color(Quantity_NOC_GOLD));return 0;
}//OCCMgr.h
#pragma once
#include <v2d_viewer.hxx>
#include <Handle_WNT_GraphicDevice.hxx>
#include <Handle_V2d_View.hxx>
#include <Handle_WNT_WDriver.hxx>
#include <Handle_WNT_Window.hxx>class OCCMgr
{
public:static OCCMgr * Get();Handle_V2d_View CreatView(HWND parentHwnd);
protected:OCCMgr();
protected:Handle_V2d_Viewer m_pViewer;Handle_WNT_GraphicDevice m_pGraphicDevice;Handle_V2d_View m_pView;};//OCCMgr.cpp
#include "afxwin.h"
#include "OCCMgr.h"
#include <WNT_WClass.hxx>
#include <WNT_Window.hxx>
#include <WNT_WDriver.hxx>
#include <V2d_View.hxx>
#include <WNT_GraphicDevice.hxx>OCCMgr * OCCMgr::Get()
{static OCCMgr mgr;return & mgr;
}OCCMgr::OCCMgr()
{try{m_pGraphicDevice = new WNT_GraphicDevice();}catch(Standard_Failure){AfxMessageBox("Fatal error during graphic initialization",MB_ICONSTOP);ExitProcess(1);}TCollection_ExtendedString Name("Viewer 2D");TCollection_AsciiString Domain("My Domain");m_pViewer = new V2d_Viewer(m_pGraphicDevice,Name.ToExtString(),Domain.ToCString());
}Handle_V2d_View OCCMgr::CreatView(HWND parentHwnd)
{Handle_WNT_Window pWin = new WNT_Window(m_pGraphicDevice, parentHwnd);Handle_WNT_WDriver pDriver = new WNT_WDriver(pWin);m_pView = new V2d_View(pDriver, m_pViewer);return m_pView;
}





这篇关于OCC之HelloWorld的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/850244

相关文章

OCC开发_变高箱梁全桥建模

概述     上一篇文章《OCC开发_箱梁梁体建模》中详细介绍了箱梁梁体建模的过程。但是,对于实际桥梁,截面可能存在高度、腹板厚度、顶底板厚度变化,全桥的结构中心线存在平曲线和竖曲线。针对实际情况,通过一个截面拉伸来实现全桥建模显然不可能。因此,针对变高箱梁,本文新的思路来实现全桥建模。 思路 上一篇文章通过一个截面拉伸生成几何体的方式行不通,我们可以通过不同面来形成棱柱的方式实现。具体步骤

Python简单入门教程helloworld

Python 学习资源 推荐书籍: Python核心编程(第二版) (强烈推荐,建议有一定基础的看,或者看完简明Python教程再看) Python 基础教程 第二版 (入门,没有核心编程好,但也不错) 编写高质量代码:改善Python程序的91个建议 (进阶,有一定基础再看) 书籍下载: Python 教程(部分内容来源于网络, 历时一年多总结整理的,给刚刚入门的

OCC开发_箱梁梁体建模

概述     OCC(全称OpenCascade)是一个近年来比较受欢迎的开源三维CAD建模平台,曲线、曲面、实体、渲染等方面功能强大,并且在机械、航空、船舶等许多领域应用广泛。基于OCC的强大功能考虑,本人尝试将其引入桥梁领域。桥梁设计中,比较常见的梁体类型是箱梁,因此本文将在OCC上实现箱梁梁体建模。 基本思路 实现箱梁梁体建模步骤如下: 通过点创建闭合的外轮廓(顺时针),生成面;通过

HelloWorld 模块

helloworld.c 代码 #include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){printk(KERN_ALERT "Hello world\n");return 0;}static void hello_exit(v

ROS程序设计系列 - 5.实例helloworld

ROS程序设计系列 - 5.实例helloworld 1. 源由2. 步骤Step 1:安装ROS系统Step 2:创建框架工程Step 3:检查工程结构Step 4:创建CPP文件Step 5:修改配置文件Step 6:编译工程 3. 测试Step 1: 启动ROS CoreStep 2: 启动Hello程序 4. 总结5. 参考资料6. 补充 1. 源由 在做《Ardupil

使用命令行窗口新建一个Java文件,输出HelloWorld

进入桌面 cd desktop 在桌面新建文件夹 mkdir zwt 进入文件夹,新建.Java文件 cd zwtecho. > helloWorld.java 使用记事本打开文件编写代码 notepad HelloWorld.java 此时电脑就会自动打开文件,直接编写代码 public class HelloWorld(){public static void mi

Qwen-7B-Chat大模型安装训练推理-helloworld

初始大模型之helloworld编写 开发环境:modelscope GPU版本上测试的,GPU免费36小时 ps:可以不用conda直接用环境自带的python环境使用 魔搭社区 安装conda wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh 1.2 bash Minicond

Shiro HelloWorld (二)从数据库中获得数据

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1、创建users表,插入一条记录</span> <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb

Shiro HelloWorld

Maven工程结构图如下: pom.xml中依赖如下: <span style="white-space:pre"> </span><dependencies><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.2.4</version></de

Canvas(1)之HelloWorld

/*1.要使用canvas必须先设置其width和height属性2.接着获取绘制上下文,并指定能力,为2D还是3D3.绘制方式有填充和描边两种方式,即fillStyle 填充属性 fillRect()strokeStyle 描边属性 strokeRect()*/var drawing = document.getElementById('drawing');if(drawing