OpenCasCade学习笔记(三):加载显示STEP格式图片,并实现平移、缩放和旋转操作

OpenCasCade学习笔记(三):加载显示STEP格式图片,并实现平移、缩放和旋转操作

C3DWidget.h

#pragma once

#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include "qevent.h"
#include "stable.h"

#define BUTTON_OFF	0
#define BUTTON_ON	1

class C3DWidget : public QWidget
{
   
	Q_OBJECT

public:
	C3DWidget(QWidget *parent = Q_NULLPTR);

protected:
	//!三维场景转换模式
	enum CurrentAction3d
	{
   
		CurAction3d_Nothing,
		CurAction3d_DynamicPanning, //平移
		CurAction3d_DynamicZooming, //缩放
		CurAction3d_DynamicRotation //旋转
	};

	//!覆写绘图事件
	void paintEvent(QPaintEvent *);
	//!覆写窗口尺寸变化事件
	void resizeEvent(QResizeEvent *);
	//!返回窗口的绘制引擎
	QPaintEngine *paintEngine() const;
	//!覆写键盘按键按下事件
	//void keyPressEvent(QKeyEvent *event);
	//!覆写键盘按键释放事件
	//void keyReleaseEvent(QKeyEvent *event);
	//!覆写鼠标按键按下事件
	void mousePressEvent(QMouseEvent *event);
	//!覆写鼠标按键释放事件
	void mouseReleaseEvent(QMouseEvent *event);
	//!覆写鼠标移动事件
	void mouseMoveEvent(QMouseEvent *event);
	//!覆写鼠标滚轮事件
	void wheelEvent(QWheelEvent *event);

	//加载step模型
	void loadSTEP();
	//显示STEP模型
	void displaySTEP();
	
	//把屏幕坐标转换为窗口坐标
	gp_Pnt ConvertClickToPoint(Standard_Real theX, Standard_Real theY, Handle(V3d_View) theView);
	void DrawLineByMouse(gp_Pnt thePntStart, gp_Pnt thePntEnd);

private:
	//!交互式上下文能够管理一个或多个查看器(viewer)中的图形行为和交互式对象的选择
	Handle(AIS_InteractiveContext) m_context;
	//!定义查看器(viewer)类型对象上的服务
	Handle(V3d_Viewer) m_viewer;
	//!创建一个视图
	Handle(V3d_View) m_view;
	//!创建3d接口定义图形驱动程序
	Handle(Graphic3d_GraphicDriver) m_graphic_driver;
	//存储STEP模型形状
	TopoDS_Shape m_Shape;
	Handle_AIS_Shape myAISShape;
	//线的模型
	Handle_AIS_Shape myLine;

	Standard_Integer m_x_max;    //!记录鼠标平移坐标X
	Standard_Integer m_y_max;    //!记录鼠标平移坐标Y
	CurrentAction3d m_current_mode; //!三维场景转换模式(平移\缩放\旋转)

	bool leftMouseBtn = BUTTON_OFF; //记录鼠标左键状态
	gp_Pnt m_line_start_point;      //记录鼠标画线开始点
	//gp_Pnt m_line_end_point;      //记录鼠标画线结束点
//	bool draw_line = false;
};

C3DWidget.cpp

#include "C3DWidget.h"
#include "ProjLib.hxx"
#include "ELSLib.hxx"
#include "GC_MakeSegment.hxx"
#include "BRepBuilderAPI_MakeEdge.hxx"
#include <gl\GLU.h>
#include <GeomAPI_IntCS.hxx>
#include "qdebug.h"


C3DWidget::C3DWidget(QWidget *parent)
	: QWidget(parent)
{
   
	//若交互式上下文为空,则创建对象
	if (m_context.IsNull())
	{
   
		//此对象提供与X server的连接,在Windows和Mac OS中不起作用
		Handle(Aspect_DisplayConnection) m_display_donnection = new Aspect_DisplayConnection();
		//创建OpenGl图形驱动
		if (m_graphic_driver.IsNull())
		{
   
			m_graphic_driver = new OpenGl_GraphicDriver(m_display_donnection);
		}
		//获取QWidget的窗口系统标识符
		WId window_handle = (WId)winId();
		//创建Windows NT 窗口
		Handle(WNT_Window) wind = new WNT_Window((Aspect_Handle)window_handle);
		//创建3D查看器
		m_viewer = new V3d_Viewer(m_graphic_driver, Standard_ExtString("viewer3d"));
		//创建视图
		m_view = m_viewer->CreateView();
		m_view->SetWindow(wind);
		//打开窗口</
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值