int Controller::LoadMesh(Render *re, SceneRenderLayer *srl) { BlenderFileLoader loader(re, srl); loader.setRenderMonitor(_pRenderMonitor); _Chrono.start(); NodeGroup *blenderScene = loader.Load(); if (blenderScene == NULL) { if (G.debug & G_DEBUG_FREESTYLE) { cout << "Cannot load scene" << endl; } return 1; } if (blenderScene->numberOfChildren() < 1) { if (G.debug & G_DEBUG_FREESTYLE) { cout << "Empty scene" << endl; } blenderScene->destroy(); delete blenderScene; return 1; } real duration = _Chrono.stop(); if (G.debug & G_DEBUG_FREESTYLE) { cout << "Scene loaded" << endl; printf("Mesh cleaning : %lf\n", duration); printf("View map cache : %s\n", _EnableViewMapCache ? "enabled" : "disabled"); } _SceneNumFaces += loader.numFacesRead(); #if 0 if (loader.minEdgeSize() < _minEdgeSize) { _minEdgeSize = loader.minEdgeSize(); } #endif #if 0 // DEBUG ScenePrettyPrinter spp; blenderScene->accept(spp); #endif _RootNode->AddChild(blenderScene); _RootNode->UpdateBBox(); // FIXME: Correct that by making a Renderer to compute the bbox _pView->setModel(_RootNode); //_pView->FitBBox(); if (_pRenderMonitor->testBreak()) return 0; if (_EnableViewMapCache) { NodeCamera *cam; if (g_freestyle.proj[3][3] != 0.0) cam = new NodeOrthographicCamera; else cam = new NodePerspectiveCamera; double proj[16]; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { proj[i * 4 + j] = g_freestyle.proj[i][j]; } } cam->setProjectionMatrix(proj); _RootNode->AddChild(cam); _RootNode->AddChild(new NodeSceneRenderLayer(*re->scene, *srl)); sceneHashFunc.reset(); //blenderScene->accept(sceneHashFunc); _RootNode->accept(sceneHashFunc); if (G.debug & G_DEBUG_FREESTYLE) { cout << "Scene hash : " << sceneHashFunc.toString() << endl; } if (hitViewMapCache()) { ClearRootNode(); return 0; } else { delete _ViewMap; _ViewMap = NULL; } } _Chrono.start(); WXEdgeBuilder wx_builder; wx_builder.setRenderMonitor(_pRenderMonitor); blenderScene->accept(wx_builder); _winged_edge = wx_builder.getWingedEdge(); duration = _Chrono.stop(); if (G.debug & G_DEBUG_FREESTYLE) { printf("WEdge building : %lf\n", duration); } #if 0 _pView->setDebug(_DebugNode); // delete stuff if (0 != ws_builder) { delete ws_builder; ws_builder = 0; } soc QFileInfo qfi(iFileName); soc string basename((const char*)qfi.fileName().toAscii().data()); char cleaned[FILE_MAX]; BLI_strncpy(cleaned, iFileName, FILE_MAX); BLI_cleanup_file(NULL, cleaned); string basename = string(cleaned); #endif _ListOfModels.push_back("Blender_models"); _Scene3dBBox = _RootNode->bbox(); _bboxDiag = (_RootNode->bbox().getMax() - _RootNode->bbox().getMin()).norm(); if (G.debug & G_DEBUG_FREESTYLE) { cout << "Triangles nb : " << _SceneNumFaces << " imported, " << _winged_edge->getNumFaces() << " retained" << endl; cout << "Bounding Box : " << _bboxDiag << endl; } ClearRootNode(); _SceneNumFaces = _winged_edge->getNumFaces(); if (_SceneNumFaces == 0) { DeleteWingedEdge(); return 1; } return 0; }
int Controller::LoadMesh(Render *re, SceneRenderLayer *srl) { BlenderFileLoader loader(re, srl); loader.setRenderMonitor(_pRenderMonitor); _Chrono.start(); NodeGroup *blenderScene = loader.Load(); if (blenderScene == NULL) { if (G.debug & G_DEBUG_FREESTYLE) { cout << "Cannot load scene" << endl; } return 1; } if (blenderScene->numberOfChildren() < 1) { if (G.debug & G_DEBUG_FREESTYLE) { cout << "Empty scene" << endl; } blenderScene->destroy(); delete blenderScene; return 1; } real duration = _Chrono.stop(); if (G.debug & G_DEBUG_FREESTYLE) { cout << "Scene loaded" << endl; printf("Mesh cleaning : %lf\n", duration); } _SceneNumFaces += loader.numFacesRead(); if (loader.minEdgeSize() < _minEdgeSize) { _minEdgeSize = loader.minEdgeSize(); } #if 0 // DEBUG ScenePrettyPrinter spp; blenderScene->accept(spp); #endif _RootNode->AddChild(blenderScene); _RootNode->UpdateBBox(); // FIXME: Correct that by making a Renderer to compute the bbox _pView->setModel(_RootNode); //_pView->FitBBox(); if (_pRenderMonitor->testBreak()) return 0; _Chrono.start(); WXEdgeBuilder wx_builder; wx_builder.setRenderMonitor(_pRenderMonitor); blenderScene->accept(wx_builder); _winged_edge = wx_builder.getWingedEdge(); duration = _Chrono.stop(); if (G.debug & G_DEBUG_FREESTYLE) { printf("WEdge building : %lf\n", duration); } #if 0 _pView->setDebug(_DebugNode); // delete stuff if (0 != ws_builder) { delete ws_builder; ws_builder = 0; } soc QFileInfo qfi(iFileName); soc string basename((const char*)qfi.fileName().toAscii().data()); char cleaned[FILE_MAX]; BLI_strncpy(cleaned, iFileName, FILE_MAX); BLI_cleanup_file(NULL, cleaned); string basename = string(cleaned); #endif _ListOfModels.push_back("Blender_models"); _Scene3dBBox = _RootNode->bbox(); _bboxDiag = (_RootNode->bbox().getMax() - _RootNode->bbox().getMin()).norm(); if (G.debug & G_DEBUG_FREESTYLE) { cout << "Triangles nb : " << _SceneNumFaces << endl; cout << "Bounding Box : " << _bboxDiag << endl; } ClearRootNode(); return 0; }