📄 hoopstestview.cpp
字号:
// hoopstestView.cpp :implementation of the ChoopstestView class//// Standard includes#include "StdAfx.h"#include "Resource.h"#include <afxtempl.h>#include "math.h"#include "hc.h"#include "HStream.h"#include "HOpcodeHandler.h"#include "HhoopstestSelectionSet.h"#include "hoopstest.h"#include "hoopstestView.h"#include "hoopstestDoc.h"#include "CHoopsFrm.h"#include "WelcomeDlg.h"// HOOPS/MVO includes#include "HhoopstestView.h"#include "HhoopstestModel.h"#include "HGlobals.h"#include "vlist.h"#include "HBaseOperator.h"#include "HEventInfo.h"#include "HBaseView.h"#include "HBaseOperator.h"#include "HOpCameraPan.h"#include "HOpCameraZoom.h"#include "HOpCameraOrbit.h"#include "HOpCameraZoomBox.h"#include "HOpSelectArea.h"#include "HEventInfo.h"#include "HModelInfo.h"#include "HUtilityLocaleString.h"#include "HOpCreateCone.h"#include "HOpCreateSphere.h"#include "HOpCreateCylinder.h"#include "HOpcodeShell.h"#include "MainFrm.h"#include "HhoopstestSelectionSet.h"#include "HUtility.h"// HNet includes#include "HNetClientDlgBar.h"#include "HNet.h"#include "HSharedKey.h"#include "HNetMessageRegistrar.h"#include "HNetMgr.h"#include ".\hoopstestview.h"
// Dump this macro in OnUpdate... of all the control which you would like// to disable for non-controling HNet clients#define DISABLE_IF_HNETCLIENT_NOT_IN_CONTROL( pCmdUI ) \ if( m_pHNetClientDlgBar && !(m_pHNetClientDlgBar->HasControlToken()) ) \ pCmdUI->Enable(FALSE);extern ChoopstestApp theApp;/////////////////////////////////////////////////////////////////////////////// ChoopstestViewIMPLEMENT_DYNCREATE(ChoopstestView, CHoopsView)ChoopstestView::ChoopstestView(){ m_pHNetClientDlgBar = 0;}ChoopstestView::~ChoopstestView(){ CleanUp();}void ChoopstestView::CleanUp(){ DestroyHNetClient(); delete m_pHView; m_pHView = 0;}BEGIN_MESSAGE_MAP(ChoopstestView, CHoopsView) //{{AFX_MSG_MAP(ChoopstestView) ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs) ON_COMMAND(ID_ZOOM, OnZoom) ON_COMMAND(ID_ZOOM_TO_EXTENTS, OnZoomToExtents) ON_COMMAND(ID_ZOOM_TO_WINDOW, OnZoomToWindow) ON_COMMAND(ID_ORBIT, OnOrbit) ON_COMMAND(ID_PAN, OnPan) ON_COMMAND(ID_WINDOW_SELECT, OnWindowSelect) ON_UPDATE_COMMAND_UI(ID_WINDOW_SELECT, OnUpdateWindowSelect) ON_COMMAND(ID_SELECTION_DELETESELECTION, OnSelectionDeleteselection) ON_UPDATE_COMMAND_UI(ID_SELECTION_DELETESELECTION, OnUpdateSelectionDeleteselection) ON_COMMAND(ID_CREATE_SPHERE, OnCreateSphere) ON_UPDATE_COMMAND_UI(ID_CREATE_SPHERE, OnUpdateCreateSphere) ON_COMMAND(ID_CREATE_CONE, OnCreateCone) ON_UPDATE_COMMAND_UI(ID_CREATE_CONE, OnUpdateCreateCone) ON_COMMAND(ID_CREATE_CYLINDER, OnCreateCylinder) ON_UPDATE_COMMAND_UI(ID_CREATE_CYLINDER, OnUpdateCreateCylinder) ON_UPDATE_COMMAND_UI(ID_ORBIT, OnUpdateOrbit) ON_UPDATE_COMMAND_UI(ID_PAN, OnUpdatePan) ON_UPDATE_COMMAND_UI(ID_ZOOM, OnUpdateZoom) ON_UPDATE_COMMAND_UI(ID_ZOOM_TO_WINDOW, OnUpdateZoomToWindow) ON_COMMAND(ID_TOOLS_RENDERMODE_GOURAUDSHADED, OnToolsRendermodeGouraudshaded) ON_COMMAND(ID_TOOLS_RENDERMODE_HIDDENLINE, OnToolsRendermodeHiddenline) ON_COMMAND(ID_TOOLS_RENDERMODE_WIREFRAME, OnToolsRendermodeWireframe) ON_UPDATE_COMMAND_UI(ID_TOOLS_RENDERMODE_WIREFRAME, OnUpdateToolsRendermodeWireframe) ON_UPDATE_COMMAND_UI(ID_TOOLS_RENDERMODE_GOURAUDSHADED, OnUpdateToolsRendermodeGouraudshaded) ON_UPDATE_COMMAND_UI(ID_TOOLS_RENDERMODE_HIDDENLINE, OnUpdateToolsRendermodeHiddenline) ON_COMMAND(ID_FILE_LOAD, OnFileLoad) ON_UPDATE_COMMAND_UI(ID_FILE_LOAD, OnUpdateFileLoad) ON_COMMAND(ID_BUTTON1, OnLeftMenu1)
ON_COMMAND(ID_BUTTON2, OnLeftMenu2)
ON_COMMAND(ID_BUTTON3, OnLeftMenu3)
ON_COMMAND(ID_BUTTON4, OnLeftMenu4)
ON_COMMAND(ID_DANBAI1, OnDanbai1)
ON_COMMAND(ID_DANBAI2, OnDanbai2)
ON_COMMAND(ID_DANBAI3, OnDanbai3)
ON_COMMAND(ID_DANBAI4, OnDanbai4)
ON_WM_TIMER()
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEWHEEL()
ON_COMMAND(ID_TANHUANG1, OnTanhuang1)
ON_COMMAND(ID_TANHUANG2, OnTanhuang2)
ON_COMMAND(ID_TANHUANG3, OnTanhuang3)
ON_COMMAND(ID_TANHUANG4, OnTanhuang4)
ON_WM_LBUTTONDBLCLK()
ON_COMMAND(ID_LOGIN, onEnterLab)
ON_COMMAND(ID_LOGOFF, onLeaveLab)
ON_UPDATE_COMMAND_UI(ID_DANBAI1, OnUpdateDanbai1)
ON_UPDATE_COMMAND_UI(ID_DANBAI2, OnUpdateDanbai2)
ON_UPDATE_COMMAND_UI(ID_DANBAI3, OnUpdateDanbai3)
ON_UPDATE_COMMAND_UI(ID_DANBAI4, OnUpdateDanbai4)
ON_UPDATE_COMMAND_UI(ID_TANHUANG1, OnUpdateTanhuang1)
ON_UPDATE_COMMAND_UI(ID_TANHUANG2, OnUpdateTanhuang2)
ON_UPDATE_COMMAND_UI(ID_TANHUANG3, OnUpdateTanhuang3)
ON_UPDATE_COMMAND_UI(ID_TANHUANG4, OnUpdateTanhuang4)
ON_UPDATE_COMMAND_UI(ID_LOGIN, OnUpdateLogin)
ON_UPDATE_COMMAND_UI(ID_LOGOFF, OnUpdateLogoff)
ON_WM_MOUSEMOVE()
ON_WM_KEYUP()
ON_WM_LBUTTONUP()
ON_WM_SIZE()
//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// ChoopstestView diagnostics#ifdef _DEBUGvoid ChoopstestView::AssertValid() const{ CHoopsView::AssertValid();}void ChoopstestView::Dump(CDumpContext& dc) const{ CHoopsView::Dump(dc);}#endif //_DEBUGvoid ChoopstestView::LocalSetOperator(HBaseOperator * NewOperator) { HBaseOperator * op = GetSolidView()->GetOperator(); if (op) delete op; GetSolidView()->SetOperator(NewOperator);} /////////////////////////////////////////////////////////////////////////////// ChoopstestView message handlersvoid ChoopstestView::OnFileSaveAs() { CString filter; CString vanilla_filter = "HOOPS Stream File (*.hsf)|*.hsf|HOOPS Metafile (*.hmf)|*.hmf||"; CString solid_mod_filter = "HOOPS Stream File (*.hsf)|*.hsf|HOOPS Metafile (*.hmf)|*.hmf||"; filter = solid_mod_filter; vanilla_filter = solid_mod_filter; char def_file_ext[10] = ".hsf"; if (!((HhoopstestModel *)(m_pHView->GetModel()))->IsSolidModel()) filter = vanilla_filter; else filter = solid_mod_filter; CFileDialog my_dlg(FALSE, H_TEXT(def_file_ext), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_NOREADONLYRETURN, filter , NULL); if (my_dlg.DoModal() != IDOK) return; SaveFile( my_dlg.GetPathName());}bool ChoopstestView::SaveFile( LPCTSTR csFilePathName ){ assert( CString(csFilePathName).IsEmpty() == FALSE ); int width = 500, height = 500; ChoopstestDoc * pDoc = (ChoopstestDoc *)GetDocument(); HC_Control_Update_By_Key (m_pHView->GetViewKey(), "redraw everything"); m_pHView->Update(); char extension[1024]; unsigned int i; extension[0]='\0'; HC_Parse_String(H_ASCII_TEXT(csFilePathName), ".", -1, extension); // make it lower case for(i = 0; i < strlen(extension); i++) extension[i] = (char) tolower(extension[i]); if(_tcscmp(csFilePathName, _T(""))) { char extension[1024]; unsigned int i; bool result = true; extension[0]='\0'; HC_Parse_String(H_ASCII_TEXT(csFilePathName), ".", -1, extension); for(i = 0; i < strlen(extension); i++) extension[i] = (char) tolower(extension[i]); if (streq(extension, "hsf")) // Write HOOPS Stream File { HC_Open_Segment_By_Key(m_pHView->GetModel()->GetModelKey()); HStreamFileToolkit *mytool = new HStreamFileToolkit; if (((HhoopstestModel *)m_pHView->GetModel())->IsSolidModel()) { HC_Set_User_Value(1L); } if (HTK_Write_Stream_File(H_ASCII_TEXT(csFilePathName),mytool) == TK_Error) result = false; delete mytool; HC_Close_Segment(); } else ((HhoopstestModel*)pDoc->m_pHoopsModel)->Write(H_ASCII_TEXT(csFilePathName), m_pHView, 0, width, height); AfxGetApp()->AddToRecentFileList(csFilePathName); } return true;}// resets the camera to view the world space extents of the modelvoid ChoopstestView::OnZoomToExtents() { m_pHView->ZoomToExtents(); m_pHView->Update();}void ChoopstestView::OnZoom() { LocalSetOperator(new HOpCameraZoom(m_pHView)); ((HOpCameraZoom *)m_pHView->GetOperator())->SetLightFollowsCamera(true);}void ChoopstestView::OnZoomToWindow() { LocalSetOperator(new HOpCameraZoomBox(m_pHView)); ((HOpCameraZoomBox *)m_pHView->GetOperator())->SetLightFollowsCamera(true);}void ChoopstestView::OnOrbit() { LocalSetOperator(new HOpCameraOrbit(m_pHView)); ((HOpCameraOrbit *)m_pHView->GetOperator())->SetLightFollowsCamera(true);}void ChoopstestView::OnPan() { LocalSetOperator(new HOpCameraPan(m_pHView));}void ChoopstestView::OnWindowSelect() { LocalSetOperator(new HOpSelectArea(m_pHView));}void ChoopstestView::OnSelectionDeleteselection() { m_pHView->DeleteSelectionList(true); m_pHView->Update(); }void ChoopstestView::OnUpdateSelectionDeleteselection(CCmdUI* pCmdUI) { HhoopstestSelectionSet* sel_set = (HhoopstestSelectionSet*) m_pHView->GetSelection(); if(sel_set->GetSize() > 0) pCmdUI->Enable(1); else pCmdUI->Enable(0);}void ChoopstestView::OnUpdateGouraud(CCmdUI* pCmdUI) { if (m_pHView->GetRenderMode() == HRenderGouraud) pCmdUI->SetCheck (1); else pCmdUI->SetCheck (0);}void ChoopstestView::OnUpdateHiddenLine(CCmdUI* pCmdUI) { if (m_pHView->GetRenderMode() == HRenderHiddenLine) pCmdUI->SetCheck (1); else pCmdUI->SetCheck (0); }void ChoopstestView::OnUpdateOrbit(CCmdUI* pCmdUI) { if (streq(m_pHView->GetOperator()->GetName(), "HOpCameraOrbit")) pCmdUI->SetCheck (1); else pCmdUI->SetCheck (0);}void ChoopstestView::OnUpdatePan(CCmdUI* pCmdUI) { if (streq(m_pHView->GetOperator()->GetName(), "HOpCameraPan")) pCmdUI->SetCheck (1); else pCmdUI->SetCheck (0);}void ChoopstestView::OnUpdateZoom(CCmdUI* pCmdUI) { if (streq(m_pHView->GetOperator()->GetName(),"HOpCameraZoom")) pCmdUI->SetCheck (1); else pCmdUI->SetCheck (0); }void ChoopstestView::OnUpdateZoomToWindow(CCmdUI* pCmdUI) { if (streq(m_pHView->GetOperator()->GetName(), "HOpCameraZoomBox")) pCmdUI->SetCheck (1); else pCmdUI->SetCheck (0); }void ChoopstestView::OnUpdateWindowSelect(CCmdUI* pCmdUI) { if (streq(m_pHView->GetOperator()->GetName(), "HOpSelectArea")) pCmdUI->SetCheck (1); else pCmdUI->SetCheck (0); DISABLE_IF_HNETCLIENT_NOT_IN_CONTROL( pCmdUI )}void ChoopstestView::OnCreateSphere() { LocalSetOperator(new HOpCreateSphere(m_pHView)); }void ChoopstestView::OnUpdateCreateSphere(CCmdUI* pCmdUI) { if (streq(m_pHView->GetOperator()->GetName(), "HOpCreateSphere")) pCmdUI->SetCheck (1); else pCmdUI->SetCheck (0); DISABLE_IF_HNETCLIENT_NOT_IN_CONTROL( pCmdUI )}void ChoopstestView::OnCreateCone() { LocalSetOperator(new HOpCreateCone(m_pHView));}void ChoopstestView::OnCreateCylinder() { LocalSetOperator(new HOpCreateCylinder(m_pHView)); }void ChoopstestView::OnUpdateCreateCone(CCmdUI* pCmdUI) { if (streq(m_pHView->GetOperator()->GetName(), "HOpCreateCone")) pCmdUI->SetCheck (1); else pCmdUI->SetCheck (0); DISABLE_IF_HNETCLIENT_NOT_IN_CONTROL( pCmdUI )}void ChoopstestView::OnUpdateCreateCylinder(CCmdUI* pCmdUI) { if (streq(m_pHView->GetOperator()->GetName(), "HOpCreateCylinder")) pCmdUI->SetCheck (1); else pCmdUI->SetCheck (0); DISABLE_IF_HNETCLIENT_NOT_IN_CONTROL( pCmdUI )}// this functions creates a new HhoopstestView Object, and initializes its camera,// render mode, query dialog, and operatorvoid ChoopstestView::OnInitialUpdate() { char szTemp[256]; // we must call the base class initialization first to get the proper palette for this view // (either the same palette is shared among all views, or this view has a unique palette) CHoopsView::OnInitialUpdate(); // create the the Hoops View object to be associated with this MFC View // as well as a generic HOOPS segment hierarchy ChoopstestDoc * pDoc = (ChoopstestDoc *)GetDocument(); ASSERT_VALID(pDoc); HBaseModel * hmodel = pDoc->GetHoopsModel(); // create the HOOPS ParaView object corresponding with this MFC View, passing in the // Model Object, the MFC View's window handle, and palette m_pHView = new HhoopstestView(hmodel, "?Picture", "opengl", 0, (void *) m_hWnd, (void *)(HPALETTE)*(GetPalette())); // initialize and set the default conditions viz. operator, rendermode etc. ((HhoopstestView *)m_pHView)->Init(); // set the DEBUG_NO_WINDOWS_HOOK debug bit since the app will manage // all palette and update messages long debug_flags = DEBUG_NO_WINDOWS_HOOK; // since memory on gfx cards is often limited let's use a 16 bit OpenGL z-buffer // (with OpenGL we're double buffering and often running on true color devices) if (streq(m_pHView->GetDriverType(), "opengl")) debug_flags |= DEBUG_16BIT_ZBUFFER; sprintf (szTemp, "debug = %u", debug_flags); HC_Open_Segment_By_Key(m_pHView->GetViewKey()); HC_Set_Driver_Options(szTemp); HC_Set_Driver_Options("special events, update interrupts"); //HC_Control_Update(".", "redraw everything");///////////////////////smallnew HC_Control_Update(".", "redraw geometry"); HC_Close_Segment(); LocalSetOperator(new HOpCameraOrbit(m_pHView)); ((HOpCameraOrbit *)m_pHView->GetOperator())->SetLightFollowsCamera(true); m_pHView->RenderGouraud(); // set the render mode to gouraud m_pHView->FitWorld(); // fit the camera to the scene extents m_pHView->CameraPositionChanged();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -