void FinishView(ViewInfo* view) { DestroyMesh(view->grid); CleanupEditor(); DestroyMesh(view->test_mesh); DestroyVertexDef(view->boot_vert); delete view; }
bool ON_Brep::Morph( const ON_SpaceMorph& morph ) { bool rc = IsMorphable(); if ( rc ) { ON_Surface* srf = const_cast<ON_Surface*>(m_F[0].SurfaceOf()); if ( srf->IsMorphable() ) { rc = srf->Morph(morph); } else { ON_NurbsSurface* new_srf = srf->NurbsSurface(); if ( !new_srf ) return false; rc = new_srf->Morph(morph); if (rc) { int si = m_F[0].m_si; m_F[0].SetProxySurface(new_srf); delete srf; srf = new_srf; m_S[si] = srf; DestroyMesh(ON::any_mesh,true); } else { delete new_srf; new_srf = 0; } } if ( rc ) { double tol = 0.01; rc = RebuildEdges( m_F[0], tol, true, true ); DestroyMesh(ON::analysis_mesh); DestroyMesh(ON::preview_mesh); ON_Mesh* mesh = const_cast<ON_Mesh*>(m_F[0].Mesh(ON::render_mesh)); if ( mesh ) mesh->EvaluateMeshGeometry( *srf ); } } return rc; }
void FinishView(ViewInfo* view) { DestroyWebView(view->web); DestroyTexture(view->test_texture); DestroyMesh(view->test_mesh); DestroyVertexDef(view->boot_vert); delete view; }
void SceneCredits::Exit() { // Exit SceneBase SceneBase::Exit(); // Delete sound sound->drop(); m_menu->Clear(); DestroyMesh(); }
void CylinderEdges::Rebuild(const std::vector<Edge>& edges) { SYS::ScopedLock lock(_mtx); _edges.clear(); for(unsigned i = 0; i < edges.size(); ++i) _edges.push_back(FatEdge(edges[i])); // RemoveDegeneratedEdges(_edges); if(_edges.empty()) return; for(unsigned i = 0; i < _edges.size(); ++i) { FatEdge& edge = _edges[i]; M::Matrix4 R = AlignZ(edge.p1 - edge.p0); edge.Rt = M::Transpose(R); } _edgeBBoxIndices.clear(); unsigned baseIdx = 0; for(unsigned i = 0; i < _edges.size(); ++i) { const unsigned numVertices = 8; Mesh::Index bboxIndices[] = { 3, 2, 6, 7, 4, 2, 0, 3, 1, 6, 5, 4, 1, 0 }; const unsigned numIndices = 14; for(unsigned i = 0; i < numIndices; ++i) _edgeBBoxIndices.push_back(baseIdx + bboxIndices[i]); _edgeBBoxIndices.push_back(Mesh::RESTART_INDEX); baseIdx += numVertices; } _edgeBBoxVertices.clear(); const unsigned numVerticesPerEdge = 8; _edgeBBoxVertices.resize(numVerticesPerEdge * _edges.size()); for(unsigned i = 0; i < _edges.size(); ++i) RebuildVertices(i, M::Mat4::Identity()); // rebuild mesh _meshDesc.vertices = &_edgeBBoxVertices[0]; _meshDesc.numVertices = _edgeBBoxVertices.size(); _meshDesc.indices = &_edgeBBoxIndices[0]; _meshDesc.numIndices = _edgeBBoxIndices.size(); _meshDesc.primType = GL_TRIANGLE_STRIP; if(_mesh) DestroyMesh(); if(!_edges.empty()) { M::Matrix4 lastTransform = M::Mat4::Identity(); if(_tfmesh) lastTransform = meshMgr.GetMesh(_tfmesh).GetTransform(); _mesh = meshMgr.Create(_meshDesc); _tfmesh = meshMgr.Create(_mesh); meshMgr.GetMesh(_tfmesh).SetTransform(lastTransform); } }
void DestroyMesh(Editor_Mesh* mesh) { DestroyMesh(mesh->gl_mesh); delete mesh; }
void CylinderEdges::DestroyRenderMesh() { DestroyMesh(); }
void LineEdges::Rebuild(const std::vector<Edge>& edges) { SYS::ScopedLock lock(_mtx); _edges = edges; RemoveDegeneratedEdges(_edges); if(_edges.empty()) return; _edgeBBoards.clear(); _edgeBBoards.resize(_edges.size()); // encodes vertex position static const M::Vector2 texCoords[] = { M::Vector2(-0.5f, 1.0f), M::Vector2(-0.5f, 0.0f), M::Vector2( 0.5f, 0.0f), M::Vector2( 0.5f, 1.0f) }; unsigned numEdges = _edges.size(); for(unsigned i = 0; i < numEdges; ++i) { const Edge& edge = _edges[i]; const M::Vector3 axis = edge.p1 - edge.p0; for(unsigned j = 0; j < 4; ++j) { _edgeBBoards[i].verts[j].position = edge.p0; // since line edges are unlit we can use the normal // vector to store the edge axis. // note that height = len(axis) _edgeBBoards[i].verts[j].normal = axis; _edgeBBoards[i].verts[j].texCoords = texCoords[j]; // edgeBBoards[i].verts[j].color = ColorTo3ub(edge.color); // _edgeBBoards[i].verts[j].color = edge.color; // since line edges are opaque we can use the // alpha channel to store the edge radius _edgeBBoards[i].verts[j].color.a = edge.radius; } // set vertex colors R::CopyRGB(_edgeBBoards[i].verts[0].color, edge.color1); R::CopyRGB(_edgeBBoards[i].verts[1].color, edge.color0); R::CopyRGB(_edgeBBoards[i].verts[2].color, edge.color0); R::CopyRGB(_edgeBBoards[i].verts[3].color, edge.color1); } _edgeBBoardIndices.clear(); for(unsigned i = 0; i < 4 * numEdges; ++i) { if(0 < i && 0 == i % 4) _edgeBBoardIndices.push_back(Mesh::RESTART_INDEX); _edgeBBoardIndices.push_back(i); } unsigned numBillboardIndices = M::Max(1u, 5 * numEdges) - 1; // max handles case size = 0 assert(numBillboardIndices == _edgeBBoardIndices.size()); // rebuild mesh _meshDesc.vertices = &_edgeBBoards[0].verts[0]; _meshDesc.numVertices = 4 * _edgeBBoards.size(); _meshDesc.indices = &_edgeBBoardIndices[0]; _meshDesc.numIndices = _edgeBBoardIndices.size(); _meshDesc.primType = GL_TRIANGLE_FAN; if(_mesh) DestroyMesh(); if(!_edges.empty()) { M::Matrix4 lastTransform = M::Mat4::Identity(); if(_tfmesh) lastTransform = meshMgr.GetMesh(_tfmesh).GetTransform(); _mesh = meshMgr.Create(_meshDesc); _tfmesh = meshMgr.Create(_mesh); meshMgr.GetMesh(_tfmesh).SetTransform(lastTransform); } }
void LineEdges::DestroyRenderMesh() { DestroyMesh(); }