예제 #1
0
void FinishView(ViewInfo* view)
{
    DestroyMesh(view->grid);
    CleanupEditor();

    DestroyMesh(view->test_mesh);
    DestroyVertexDef(view->boot_vert);
    delete view;
}
예제 #2
0
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;
}
예제 #3
0
void FinishView(ViewInfo* view)
{
    DestroyWebView(view->web);

    DestroyTexture(view->test_texture);
    DestroyMesh(view->test_mesh);
    DestroyVertexDef(view->boot_vert);
    delete view;
}
예제 #4
0
void SceneCredits::Exit()
{
	// Exit SceneBase
	SceneBase::Exit();

	// Delete sound
	sound->drop();

	m_menu->Clear();
	DestroyMesh();
}
예제 #5
0
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);
    }
}
예제 #6
0
void DestroyMesh(Editor_Mesh* mesh)
{
    DestroyMesh(mesh->gl_mesh);
    delete mesh;
}
예제 #7
0
void CylinderEdges::DestroyRenderMesh() {
    DestroyMesh();
}
예제 #8
0
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);
    }
}
예제 #9
0
void LineEdges::DestroyRenderMesh() {
    DestroyMesh();
}