//----------------------------------------------------------------------------- // Purpose: Reloads the currently loaded model file. //----------------------------------------------------------------------------- void MDLViewer::Refresh( void ) { g_pMaterialSystem->ReloadTextures( ); if ( recentFiles[0][0] != '\0' ) { char szFile[MAX_PATH]; strcpy( szFile, recentFiles[0] ); LoadModelFile( szFile ); } }
void OvrSceneView::LoadWorldModel( const char * sceneFileName, const MaterialParms & materialParms ) { LOG( "OvrSceneView::LoadScene( %s )", sceneFileName ); if ( GlPrograms.ProgSingleTexture == NULL ) { GlPrograms = GetDefaultGLPrograms(); } // Load the scene we are going to draw ModelFile * model = LoadModelFile( sceneFileName, GlPrograms, materialParms ); SetWorldModel( *model ); FreeWorldModelOnChange = true; }
void VrScene::LoadScene( const char * path ) { LOG( "VrScene::LoadScene %s", path ); #if defined( INTENT_TEST_MODEL ) const char * scenePath = "Oculus/tuscany.ovrscene"; #else const char * scenePath = ( path[0] != '\0' ) ? path : "Oculus/tuscany.ovrscene"; #endif if ( !GetFullPath( SearchPaths, scenePath, SceneFile ) ) { LOG( "VrScene::NewIntent SearchPaths failed to find %s", scenePath ); } MaterialParms materialParms; materialParms.UseSrgbTextureFormats = ( app->GetVrParms().colorFormat == COLOR_8888_sRGB ); LOG( "VrScene::LoadScene loading %s", SceneFile.ToCStr() ); Scene.LoadWorldModel( SceneFile, materialParms ); ModelLoaded = true; LOG( "VrScene::LoadScene model is loaded" ); Scene.YawOffset = -M_PI / 2; #if defined( INTENT_TEST_MODEL ) // load a test model const char * testModelPath = intent; if ( testModelPath != NULL && testModelPath[0] != '\0' ) { // Create the render programs we are going to use GlProgram ProgSingleTexture = BuildProgram( SingleTextureVertexShaderSrc, SingleTextureFragmentShaderSrc ); ModelGlPrograms programs( &ProgSingleTexture ); TestObject.SetModelFile( LoadModelFile( testModelPath, programs, materialParms ) ); Scene.AddModel( &TestObject ); } #endif // When launched by an intent, we may be viewing a partial // scene for debugging, so always clear the screen to grey // before drawing, instead of letting partial renders show through. forceScreenClear = ( path[0] != '\0' ); }
CGWIC_BodyPart::CGWIC_BodyPart(irr::io::path modelfile, irr::scene::ISceneNode* parentn, irr::IrrlichtDevice* dev, irrBulletWorld* phy) { std::cout << "BodyPart[] c'tor()" << std::endl; std::cout << "modelfile: " << modelfile.c_str() << std::endl; irDevice = dev; phy_world = phy; scManager = dev->getSceneManager(); irDriver = dev->getVideoDriver(); parent = parentn; mesh = NULL; root = NULL; mass = 2.f; collider = NULL; colmesh = NULL; colbody = NULL; hinge = NULL; slots.push_back(NULL); //zero slot is in-slot success = LoadModelFile(GWIC_BPARTS_DIR+modelfile); active = false; visible = true; }
void OvrSceneView::LoadWorldModel( const char * sceneFileName, const MaterialParms & materialParms, const bool fromApk ) { LOG( "OvrSceneView::LoadScene( %s )", sceneFileName ); if ( GlPrograms.ProgSingleTexture == NULL ) { GlPrograms = GetDefaultGLPrograms(); } ModelFile * model = NULL; // Load the scene we are going to draw if ( fromApk ) { model = LoadModelFileFromApplicationPackage( sceneFileName, GlPrograms, materialParms ); } else { model = LoadModelFile( sceneFileName, GlPrograms, materialParms ); } SetWorldModel( *model ); FreeWorldModelOnChange = true; }
int MDLViewer::handleEvent (mxEvent *event) { MDLCACHE_CRITICAL_SECTION_( g_pMDLCache ); switch (event->event) { case mxEvent::Action: { switch (event->action) { case IDC_FILE_LOADMODEL: { const char *ptr = mxGetOpenFileName (this, 0, "*.mdl"); if (ptr) { LoadModelFile( ptr ); } } break; case IDC_FILE_LOADMODEL_STEAM: { const char *pFilename = SteamGetOpenFilename(); if ( pFilename ) { LoadModelFile( pFilename ); } } break; case IDC_FILE_LOADMERGEDMODEL: { const char *ptr = mxGetOpenFileName (this, 0, "*.mdl"); if (ptr) { strcpy( g_viewerSettings.mergeModelFile[0], ptr ); LoadModelFile( ptr, 0 ); } } break; case IDC_FILE_LOADMERGEDMODEL_STEAM: { const char *pFilename = SteamGetOpenFilename(); if ( pFilename ) { strcpy( g_viewerSettings.mergeModelFile[0], pFilename ); LoadModelFile( pFilename, 0 ); } } break; case IDC_FILE_UNLOADMERGEDMODEL: { // FIXME: move to d_cpl if (g_pStudioExtraModel[0]) { strcpy( g_viewerSettings.mergeModelFile[0], "" ); g_pStudioExtraModel[0]->FreeModel( false ); delete g_pStudioExtraModel[0]; g_pStudioExtraModel[0] = NULL; } } break; case IDC_FILE_REFRESH: { Refresh(); break; } case IDC_FILE_LOADBACKGROUNDTEX: case IDC_FILE_LOADGROUNDTEX: { const char *ptr = mxGetOpenFileName (this, 0, "*.*"); if (ptr) { if (0 /* d_MatSysWindow->loadTexture (ptr, event->action - IDC_FILE_LOADBACKGROUNDTEX) */) { if (event->action == IDC_FILE_LOADBACKGROUNDTEX) d_cpl->setShowBackground (true); else d_cpl->setShowGround (true); } else mxMessageBox (this, "Error loading texture.", g_appTitle, MX_MB_OK | MX_MB_ERROR); } } break; case IDC_FILE_UNLOADGROUNDTEX: { // d_MatSysWindow->loadTexture (0, 1); d_cpl->setShowGround (false); } break; case IDC_FILE_RECENTMODELS1: case IDC_FILE_RECENTMODELS2: case IDC_FILE_RECENTMODELS3: case IDC_FILE_RECENTMODELS4: case IDC_FILE_RECENTMODELS5: case IDC_FILE_RECENTMODELS6: case IDC_FILE_RECENTMODELS7: case IDC_FILE_RECENTMODELS8: { int i = event->action - IDC_FILE_RECENTMODELS1; LoadModelFile( recentFiles[i] ); } break; case IDC_FILE_EXIT: { redraw (); mx::quit (); } break; case IDC_OPTIONS_COLORBACKGROUND: case IDC_OPTIONS_COLORGROUND: case IDC_OPTIONS_COLORLIGHT: case IDC_OPTIONS_COLORAMBIENT: { float *cols[4] = { g_viewerSettings.bgColor, g_viewerSettings.gColor, g_viewerSettings.lColor, g_viewerSettings.aColor }; float *col = cols[event->action - IDC_OPTIONS_COLORBACKGROUND]; int r = (int) (col[0] * 255.0f); int g = (int) (col[1] * 255.0f); int b = (int) (col[2] * 255.0f); if (mxChooseColor (this, &r, &g, &b)) { col[0] = (float) r / 255.0f; col[1] = (float) g / 255.0f; col[2] = (float) b / 255.0f; } } break; case IDC_OPTIONS_CENTERVIEW: d_cpl->centerView (); break; case IDC_OPTIONS_VIEWMODEL: { d_cpl->viewmodelView(); } break; case IDC_OPTIONS_MAKESCREENSHOT: { char *ptr = (char *) mxGetSaveFileName (this, "", "*.tga"); if (ptr) { if (!strstr (ptr, ".tga")) strcat (ptr, ".tga"); d_MatSysWindow->dumpViewport (ptr); } } break; case IDC_OPTIONS_DUMP: d_cpl->dumpModelInfo (); break; case IDC_VIEW_FILEASSOCIATIONS: g_FileAssociation->setAssociation (0); g_FileAssociation->setVisible (true); break; case IDC_VIEW_ACTIVITIES: g_viewerSettings.showActivities = !g_viewerSettings.showActivities; menuView->setChecked( event->action, g_viewerSettings.showActivities ); d_cpl->initSequenceChoices(); d_cpl->resetControlPanel(); break; case IDC_VIEW_HIDDEN: g_viewerSettings.showHidden = !g_viewerSettings.showHidden; menuView->setChecked( event->action, g_viewerSettings.showHidden ); d_cpl->initSequenceChoices(); d_cpl->resetControlPanel(); break; #ifdef WIN32 case IDC_HELP_GOTOHOMEPAGE: ShellExecute (0, "open", "http://www.swissquake.ch/chumbalum-soft/index.html", 0, 0, SW_SHOW); break; #endif case IDC_HELP_ABOUT: mxMessageBox (this, "Half-Life Model Viewer v2.0 (c) 2004 Valve Corp.\n" "Portions (c) 1999 by Mete Ciragan\n\n" "Left-drag inside circle to spin.\n" "Left-drag outside circle to rotate.\n" "Right-drag to zoom.\n" "Shift-left-drag to x-y-pan.\n" "Shift-right-drag to z-pan.\n" "Ctrl-left-drag to move light.\n\n" "Build:\t" __DATE__ ".\n" "Email:\[email protected]\n" "Web:\thttp://www.swissquake.ch/chumbalum-soft/", "About Half-Life Model Viewer", MX_MB_OK | MX_MB_INFORMATION); break; case IDC_ACCEL_WIREFRAME: d_cpl->setOverlayWireframe( !g_viewerSettings.overlayWireframe ); break; case IDC_ACCEL_ATTACHMENTS: d_cpl->setShowAttachments( !g_viewerSettings.showAttachments ); break; case IDC_ACCEL_GROUND: d_cpl->setShowGround( !g_viewerSettings.showGround ); break; case IDC_ACCEL_HITBOXES: d_cpl->setShowHitBoxes( !g_viewerSettings.showHitBoxes ); break; case IDC_ACCEL_BONES: d_cpl->setShowBones( !g_viewerSettings.showBones ); break; case IDC_ACCEL_BACKGROUND: d_cpl->setShowBackground( !g_viewerSettings.showBackground ); break; case IDC_ACCEL_MOVEMENT: d_cpl->setShowMovement( !g_viewerSettings.showMovement ); break; case IDC_ACCEL_NORMALS: d_cpl->setShowNormals( !g_viewerSettings.showNormals ); break; case IDC_ACCEL_TANGENTS: d_cpl->setShowTangentFrame( !g_viewerSettings.showTangentFrame ); break; case IDC_ACCEL_SHADOW: d_cpl->setShowShadow( !g_viewerSettings.showShadow ); break; } //switch (event->action) } // mxEvent::Action break; case mxEvent::Size: { g_viewerSettings.xpos = x(); g_viewerSettings.ypos = y(); g_viewerSettings.width = w(); g_viewerSettings.height = h(); int w = event->width; int h = event->height; int y = mb->getHeight (); #ifdef WIN32 #define HEIGHT 240 #else #define HEIGHT 140 h -= 40; #endif d_MatSysWindow->setBounds (0, y, w, h - HEIGHT); // !! d_cpl->setBounds (0, y + h - HEIGHT, w, HEIGHT); } break; case mxEvent::PosChanged: { g_viewerSettings.xpos = x(); g_viewerSettings.ypos = y(); } break; case KeyDown: d_MatSysWindow->handleEvent(event); d_cpl->handleEvent(event); break; case mxEvent::Activate: { if (event->action) { mx::setIdleWindow( getMatSysWindow() ); } else { mx::setIdleWindow( 0 ); } } break; } // event->event return 1; }
int MDLViewer::handleEvent (mxEvent *event) { int iret = 0; switch (event->event) { case mxEvent::Size: { int width = w2(); int height = h2(); workspace->setBounds( 0, 0, width, height - WINDOW_TAB_OFFSET ); int gridsettingswide = 100; int gridstart = width - gridsettingswide - 5; int windowwide = gridstart * 0.6f; int modelwide = gridstart * 0.4f; gridsettings->setBounds( gridstart, height - WINDOW_TAB_OFFSET + 1, gridsettingswide, WINDOW_TAB_OFFSET - 2 ); windowtab->setBounds( 0, height - WINDOW_TAB_OFFSET, windowwide, WINDOW_TAB_OFFSET ); modeltab->setBounds( windowwide, height - WINDOW_TAB_OFFSET, modelwide, WINDOW_TAB_OFFSET ); iret = 1; } break; case mxEvent::Action: { iret = 1; switch (event->action) { case IDC_WINDOW_TAB: { windowtab->HandleWindowSelect(); } break; case IDC_MODEL_TAB: { modeltab->HandleModelSelect(); } break; case IDC_EDIT_COPY: { Copy(); } break; case IDC_EDIT_PASTE: { Paste(); } break; case IDC_EDIT_UNDO: { Undo(); } break; case IDC_EDIT_REDO: { Redo(); } break; case IDC_FILE_LOADMODEL: { const char *ptr = mxGetOpenFileName( this, FacePoser_MakeWindowsSlashes( va( "%s/models/", GetGameDirectory() ) ), "*.mdl"); if (ptr) { LoadModelFile( ptr ); } } break; case IDC_FILE_REFRESH: { Refresh(); break; } case IDC_FILE_LOADBACKGROUNDTEX: case IDC_FILE_LOADGROUNDTEX: { const char *ptr = mxGetOpenFileName (this, 0, "*.*"); if (ptr) { if (0 /* g_pMatSysWindow->loadTexture (ptr, event->action - IDC_FILE_LOADBACKGROUNDTEX) */) { if (event->action == IDC_FILE_LOADBACKGROUNDTEX) g_pControlPanel->setShowBackground (true); else g_pControlPanel->setShowGround (true); } else mxMessageBox (this, "Error loading texture.", g_appTitle, MX_MB_OK | MX_MB_ERROR); } } break; case IDC_FILE_UNLOADGROUNDTEX: { // g_pMatSysWindow->loadTexture (0, 1); g_pControlPanel->setShowGround (false); } break; case IDC_FILE_RECENTMODELS1: case IDC_FILE_RECENTMODELS2: case IDC_FILE_RECENTMODELS3: case IDC_FILE_RECENTMODELS4: { int i = event->action - IDC_FILE_RECENTMODELS1; LoadModelFile( recentFiles[ i ] ); char tmp[256]; strcpy (tmp, recentFiles[0]); strcpy (recentFiles[0], recentFiles[i]); strcpy (recentFiles[i], tmp); initRecentFiles (); redraw (); } break; case IDC_FILE_EXIT: { redraw (); mx::quit (); } break; case IDC_OPTIONS_COLORBACKGROUND: case IDC_OPTIONS_COLORGROUND: case IDC_OPTIONS_COLORLIGHT: { float *cols[3] = { g_viewerSettings.bgColor, g_viewerSettings.gColor, g_viewerSettings.lColor }; float *col = cols[event->action - IDC_OPTIONS_COLORBACKGROUND]; int r = (int) (col[0] * 255.0f); int g = (int) (col[1] * 255.0f); int b = (int) (col[2] * 255.0f); if (mxChooseColor (this, &r, &g, &b)) { col[0] = (float) r / 255.0f; col[1] = (float) g / 255.0f; col[2] = (float) b / 255.0f; } } break; case IDC_OPTIONS_CENTERVIEW: g_pControlPanel->centerView (); break; case IDC_OPTIONS_CENTERONFACE: g_pControlPanel->CenterOnFace(); break; case IDC_OPTIONS_MAKESCREENSHOT: { char *ptr = (char *) mxGetSaveFileName (this, "", "*.tga"); if (ptr) { if (!strstr (ptr, ".tga")) strcat (ptr, ".tga"); // g_pMatSysWindow->dumpViewport (ptr); } } break; case IDC_OPTIONS_DUMP: g_pControlPanel->dumpModelInfo (); break; #ifdef WIN32 case IDC_HELP_GOTOHOMEPAGE: ShellExecute (0, "open", "http://www.swissquake.ch/chumbalum-soft/index.html", 0, 0, SW_SHOW); break; #endif case IDC_HELP_ABOUT: mxMessageBox (this, "v0.1 (c) 2001, Valve, LLC. All rights reserved.\r\nBuild Date: "__DATE__"", "Valve Face Poser", MX_MB_OK | MX_MB_INFORMATION); break; case IDC_EXPRESSIONS_REDOBITMAPS: { bool saveOverrides = g_pExpressionTrayTool->GetOverridesShowing(); g_pExpressionTrayTool->SetOverridesShowing( false ); CExpClass *active = expressions->GetActiveClass(); if ( active ) { for ( int i = 0; i < active->GetNumExpressions() ; i++ ) { CExpression *exp = active->GetExpression( i ); if ( !exp ) continue; active->SelectExpression( i ); exp->CreateNewBitmap( models->GetActiveModelIndex() ); if ( ! ( i % 5 ) ) { g_pExpressionTrayTool->redraw(); } } if ( active->HasOverrideClass() ) { g_pExpressionTrayTool->SetOverridesShowing( true ); CExpClass *oc = active->GetOverrideClass(); for ( int i = 0; i < oc->GetNumExpressions() ; i++ ) { CExpression *exp = oc->GetExpression( i ); if ( !exp ) continue; oc->SelectExpression( i ); exp->CreateNewBitmap( models->GetActiveModelIndex() ); if ( ! ( i % 5 ) ) { g_pExpressionTrayTool->redraw(); } } } active->SelectExpression( 0 ); } g_pExpressionTrayTool->SetOverridesShowing( saveOverrides ); } break; case IDC_EXPRESSIONS_NEW: { const char *filename = mxGetSaveFileName( this, FacePoser_MakeWindowsSlashes( va( "%s/expressions/", GetGameDirectory() ) ), "*.txt" ); if ( filename && filename[ 0 ] ) { char classfile[ 512 ]; strcpy( classfile, filename ); StripExtension( classfile ); DefaultExtension( classfile, ".txt" ); expressions->CreateNewClass( classfile ); } } break; case IDC_EXPRESSIONS_LOAD: { const char *filename = NULL; filename = mxGetOpenFileName( this, FacePoser_MakeWindowsSlashes( va( "%s/expressions/", GetGameDirectory() ) ), "*.txt" ); if ( filename && filename[ 0 ] ) { expressions->LoadClass( filename ); } } break; case IDC_EXPRESSIONS_SAVE: { CExpClass *active = expressions->GetActiveClass(); if ( active ) { active->Save(); active->Export(); } } break; case IDC_EXPRESSIONS_EXPORT: { CExpClass *active = expressions->GetActiveClass(); if ( active ) { active->Export(); } } break; case IDC_EXPRESSIONS_CLOSE: g_pControlPanel->Close(); break; case IDC_EXPRESSIONS_CLOSEALL: g_pControlPanel->Closeall(); break; case IDC_CHOREOSCENE_NEW: g_pChoreoView->New(); break; case IDC_CHOREOSCENE_LOAD: g_pChoreoView->Load(); break; case IDC_CHOREOSCENE_SAVE: g_pChoreoView->Save(); break; case IDC_CHOREOSCENE_SAVEAS: g_pChoreoView->SaveAs(); break; case IDC_CHOREOSCENE_CLOSE: g_pChoreoView->Close(); break; case IDC_CHOREOSCENE_ADDACTOR: g_pChoreoView->NewActor(); break; case IDC_WINDOW_TILE: { OnTile(); } break; case IDC_WINDOW_TILE_HORIZ: { OnTileHorizontally(); } break; case IDC_WINDOW_TILE_VERT: { OnTileVertically(); } break; case IDC_WINDOW_CASCADE: { OnCascade(); } break; case IDC_WINDOW_HIDEALL: { OnHideAll(); } break; case IDC_WINDOW_SHOWALL: { OnShowAll(); } break; default: { iret = 0; int tool_number = event->action - IDC_WINDOW_FIRSTTOOL; int max_tools = IDC_WINDOW_LASTTOOL - IDC_WINDOW_FIRSTTOOL; if ( tool_number >= 0 && tool_number <= max_tools && tool_number < IFacePoserToolWindow::GetToolCount() ) { iret = 1; IFacePoserToolWindow *tool = IFacePoserToolWindow::GetTool( tool_number ); if ( tool ) { mxWindow *toolw = tool->GetMxWindow(); bool wasvisible = toolw->isVisible(); toolw->setVisible( !wasvisible ); g_MDLViewer->UpdateWindowMenu(); } } } break; } //switch (event->action) } // mxEvent::Action break; case KeyDown: { g_pMatSysWindow->handleEvent(event); iret = 1; } break; case mxEvent::Activate: { if (event->action) { mx::setIdleWindow( g_pMatSysWindow ); } else { mx::setIdleWindow( 0 ); } iret = 1; } break; } // event->event return iret; }
int CScanMgrDlg::SearchModel() { if (!_pCurrExam_ || !_pCurrSub_) return 0; if (_pCurrSub_->strModelName.empty()) return 0; if (_pModel_) SAFE_RELEASE(_pModel_); USES_CONVERSION; std::string strModelName = _pCurrSub_->strModelName; //gb2312 std::string strModelFullPath = T2A(g_strCurrentPath + _T("Model\\")); strModelFullPath += strModelName; bool bExist = false; try { Poco::File fModel(CMyCodeConvert::Gb2312ToUtf8(strModelFullPath)); //考试对应的模板文件存在,则直接解压此模板,否则就通过examID_subID来搜索模板 if (fModel.exists()) bExist = true; } catch (Poco::Exception& e) { } //这部分是加载含有_examID_subID.的模板,即如果没有和科目信息中记录的模板名称一样的模板存在的话,就加载考试ID和科目ID一样的模板 //暂且不用 #if 0 if (!bExist) { std::string strExamSub = Poco::format("_%d_%d.", _pCurrExam_->nExamID, _pCurrSub_->nSubjID); std::string strModelPath = T2A(g_strCurrentPath + _T("Model")); try { Poco::DirectoryIterator it(strModelPath); Poco::DirectoryIterator end; while (it != end) { Poco::Path p(it->path()); if (it->isFile() && p.getExtension() == "mod" && p.getFileName().find(strExamSub) != std::string::npos) { strModelFullPath = CMyCodeConvert::Utf8ToGb2312(p.toString()); bExist = true; break; } ++it; } } catch (Poco::FileException& exc) { std::cerr << exc.displayText() << std::endl; } catch (Poco::Exception& exc) { std::cerr << exc.displayText() << std::endl; } } #endif int nResult = 0; if (bExist) { CZipObj zipObj; zipObj.setLogger(g_pLogger); zipObj.UnZipFile(A2T(strModelFullPath.c_str())); #ifdef TEST_ModelMgr std::string modelPath = T2A(g_strCurrentPath + _T("Model\\")); std::string strModelFilePath = modelPath + strModelName.substr(0, strModelName.rfind('.')); CModelMgr modelObj; modelObj.SetBaseInfo(modelPath, g_strEncPwd); _pModel_ = modelObj.LoadModelFile(strModelFilePath); #else CString strModelFilePath = g_strCurrentPath + _T("Model\\") + A2T(strModelName.c_str()); strModelFilePath = strModelFilePath.Left(strModelFilePath.ReverseFind('.')); _pModel_ = LoadModelFile(strModelFilePath); #endif std::string strLog; if (_pModel_) { strLog = Poco::format("模板%s加载成功", strModelName); nResult = 1; } else { strLog = Poco::format("模板%s加载失败", strModelName); nResult = -1; } g_pLogger->information(strLog); } else nResult = -2; return nResult; }