⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hoopstestview.cpp

📁 使用HOOPS库开发的一个教学演示工具。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// 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 + -