OpenCASCADE(OCC)模型视角的自由切换(二)——按钮事件响应的实现

观察的方向一般有上、下、左、右、前、后,这些OCC均给我们提供了,除了这些方向外,OCC还提供了其他的方向。

提供视角观看的函封装在了V3d_View.hxx中,

 

 OCC中提供的方向枚举:

指针的传递和获取:

 下面就可以调用SetProj()函数进行模型视角的切换,首先在调用函数之前,要先搞清楚MFC多文档之间的指针获取。

因为添加的消息事件在主框架CMainFrame类中,要想获取到View类视图中的指针,应该先获取Doc文档中的指针;具体思路:

主框架CMainFrame中获取Doc指针,接着Doc文档框架中获取View视图的指针,继而可以实现CMainFrame框架获取View视图指针。

根据上述思路来撰写代码;

首先在*****View.h中进行函数声明:

public:
	void OnTopView();    //显示顶部
	void OnBottomView(); //显示底部
	void OnLeftView();   //显示左侧
	void OnRightView();  //显示右侧
	void OnFrontView();  //显示前面
	void OnBackView();   //显示后面

对应函数的实现:

void COCCmfcMDIView::OnTopView()
{
	myView->SetProj(V3d_Zpos);
}

void COCCmfcMDIView::OnBottomView()
{
	myView->SetProj(V3d_Zneg);
}

void COCCmfcMDIView::OnLeftView()
{
	myView->SetProj(V3d_Xneg);
}

void COCCmfcMDIView::OnRightView()
{
	myView->SetProj(V3d_Xpos);
}

void COCCmfcMDIView::OnFrontView()
{
	myView->SetProj(V3d_Yneg);
}

void COCCmfcMDIView::OnBackView()
{
	myView->SetProj(V3d_Ypos);
}

接着在Doc类中获取View指针:

    CMDIFrameWnd* pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
	CMDIChildWnd* pChild = (CMDIChildWnd*)pFrame->GetActiveFrame();
	COCCmfcMDIView* pView = (COCCmfcMDIView*)pChild->GetActiveView();

上面是获取View指针的代码;具体声明和实现如下:

在*****Doc.h中声明一下函数:

public:
	//展示模型的面
	void TopView();
	void BottomView();
	void LeftView();
	void RightView();
	void FrontView();
	void BackView();

对应函数的实现:

void COCCmfcMDIDoc::TopView()
{
	CMDIFrameWnd* pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
	CMDIChildWnd* pChild = (CMDIChildWnd*)pFrame->GetActiveFrame();
	COCCmfcMDIView* pView = (COCCmfcMDIView*)pChild->GetActiveView();
	pView->OnTopView();
	pView->fitAll();
}

void COCCmfcMDIDoc::BottomView()
{
	CMDIFrameWnd* pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
	CMDIChildWnd* pChild = (CMDIChildWnd*)pFrame->GetActiveFrame();
	COCCmfcMDIView* pView = (COCCmfcMDIView*)pChild->GetActiveView();
	pView->OnBottomView();
	pView->fitAll();
}

void COCCmfcMDIDoc::LeftView()
{
	CMDIFrameWnd* pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
	CMDIChildWnd* pChild = (CMDIChildWnd*)pFrame->GetActiveFrame();
	COCCmfcMDIView* pView = (COCCmfcMDIView*)pChild->GetActiveView();
	pView->OnLeftView();
	pView->fitAll();
}

void COCCmfcMDIDoc::RightView()
{
	CMDIFrameWnd* pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
	CMDIChildWnd* pChild = (CMDIChildWnd*)pFrame->GetActiveFrame();
	COCCmfcMDIView* pView = (COCCmfcMDIView*)pChild->GetActiveView();
	pView->OnRightView();
	pView->fitAll();
}

void COCCmfcMDIDoc::FrontView()
{
	CMDIFrameWnd* pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
	CMDIChildWnd* pChild = (CMDIChildWnd*)pFrame->GetActiveFrame();
	COCCmfcMDIView* pView = (COCCmfcMDIView*)pChild->GetActiveView();
	pView->OnFrontView();
	pView->fitAll();
}

void COCCmfcMDIDoc::BackView()
{
	CMDIFrameWnd* pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
	CMDIChildWnd* pChild = (CMDIChildWnd*)pFrame->GetActiveFrame();
	COCCmfcMDIView* pView = (COCCmfcMDIView*)pChild->GetActiveView();
	pView->OnBackView();
	pView->fitAll();
}

这样以来,在Doc文档类中就获得了View视图指针并对View类中的函数进行了调用。

那么现在就可以处理CMainFrame主框架中的消息事件了,OK  !!!

来到MainFrm.h中,添加*****Doc.h头文件;在CMainFrame框架中获取Doc文档类指针:

CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
COCCmfcMDIDoc* pDoc = (COCCmfcMDIDoc*)pMain->GetActiveDocument();

最后来到按钮消息事件进行响应处理:

public:
	
	afx_msg void OnButtonWire();
	afx_msg void OnButtonShape();
	afx_msg void OnButtonUp();
	afx_msg void OnButtonBottom();
	afx_msg void OnButtonLeft();
	afx_msg void OnButtonRight();
	afx_msg void OnButtonFront();
	afx_msg void OnButtonBack();

分别对函数进行实现:

void CMainFrame::OnButtonWire()
{
	// TODO: 在此添加命令处理程序代码
	AfxMessageBox(_T("您按了 ButtonWire 按钮"));
	
}


void CMainFrame::OnButtonShape()
{
	// TODO: 在此添加命令处理程序代码
	AfxMessageBox(_T("您按了 ButtonShape 按钮"));

}


void CMainFrame::OnButtonUp()
{
	// TODO: 在此添加命令处理程序代码
	//AfxMessageBox(_T("您按了 ButtonUp 按钮"));
	CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
	COCCmfcMDIDoc* pDoc = (COCCmfcMDIDoc*)pMain->GetActiveDocument();
	pDoc->TopView();
}


void CMainFrame::OnButtonBottom()
{
	// TODO: 在此添加命令处理程序代码
	//AfxMessageBox(_T("您按了 ButtonBottom 按钮"));
	CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
	COCCmfcMDIDoc* pDoc = (COCCmfcMDIDoc*)pMain->GetActiveDocument();
	pDoc->BottomView();
}


void CMainFrame::OnButtonLeft()
{
	// TODO: 在此添加命令处理程序代码
	//AfxMessageBox(_T("您按了 ButtonLeft 按钮"));
	CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
	COCCmfcMDIDoc* pDoc = (COCCmfcMDIDoc*)pMain->GetActiveDocument();
	pDoc->LeftView();
}


void CMainFrame::OnButtonRight()
{
	// TODO: 在此添加命令处理程序代码
	//AfxMessageBox(_T("您按了 ButtonRight按钮"));
	CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
	COCCmfcMDIDoc* pDoc = (COCCmfcMDIDoc*)pMain->GetActiveDocument();
	pDoc->RightView();
}


void CMainFrame::OnButtonFront()
{
	// TODO: 在此添加命令处理程序代码
	//AfxMessageBox(_T("您按了 ButtonFront按钮"));
	CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
	COCCmfcMDIDoc* pDoc = (COCCmfcMDIDoc*)pMain->GetActiveDocument();
	pDoc->FrontView();
}


void CMainFrame::OnButtonBack()
{
	// TODO: 在此添加命令处理程序代码
	//AfxMessageBox(_T("您按了 ButtonBack按钮"));
	CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
	COCCmfcMDIDoc* pDoc = (COCCmfcMDIDoc*)pMain->GetActiveDocument();
	pDoc->BackView();
}

点击运行》》

1.

 

2.

 点击后面的按钮也是如此,这里就不逐个进行展示了。。。。。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值