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

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

OCC 里面的容器类 occ模型_mfc

 

OCC 里面的容器类 occ模型_命令处理程序_02

 OCC中提供的方向枚举:

OCC 里面的容器类 occ模型_1024程序员节_03

指针的传递和获取:

 下面就可以调用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.

OCC 里面的容器类 occ模型_c++_04

 

2.

OCC 里面的容器类 occ模型_c++_05

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