观察的方向一般有上、下、左、右、前、后,这些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.
点击后面的按钮也是如此,这里就不逐个进行展示了。。。。。