Beispiel #1
0
cylinder::cylinder(int edgeSize): meshData(edgeSize*1000, edgeSize*1000)
{
     n_indices = 0;
     n_edges = edgeSize;
     n_levels = 0;
     cylinderHeightPos = 0;

    float revStep = 360/edgeSize;
    for(int i = 0; i < edgeSize; i++){

        float x, z;
        x = cos(PI*(i*revStep)/180);
        z = sin(PI*(i*revStep)/180);
        vertexList[i].Set(Vert(x, cylinderHeightPos, z));
    }
    for(int i = 0; i < edgeSize; i++){

        float x, z;
        x = cos(PI*(i*revStep)/180);
        z = sin(PI*(i*revStep)/180);
        vertexList[i+edgeSize].Set(Vert(x, cylinderHeightPos+1, z));
    }
    listSize += edgeSize*2;
    int i;
    for( i = 0; i < edgeSize-1; i++){
        connectEdge(i, i+1, getIndexAtLevel(1, i), getIndexAtLevel(1, i+1));
    }
   // i++;
    connectEdge(i, 0,  getIndexAtLevel(1, i), getIndexAtLevel(1, 0));
    n_levels += 1;
    cylinderHeightPos +=2;

}
Beispiel #2
0
void cylinder::connectCap(int start, int end){
    int i;
    int startPos = getIndexAtLevel(start,0);
    for(i = startPos; i < startPos+n_edges-1; i++){
        connectEdge(i, i+1, i+(n_edges), i+1+n_edges);
    }
    connectEdge(i, startPos,  i+n_edges, startPos+n_edges);
}
Beispiel #3
0
// -------------------------------------------------------------------------
bool GraphDefinition::addEdge(edge_t edgeIn)
{
    // long lTest;
    Long2LongMap::iterator itMap = m_mapEdgeId2Index.find(edgeIn.id);
    if(itMap != m_mapEdgeId2Index.end())    
        return false;

    
    GraphEdgeInfo* newEdge = new GraphEdgeInfo();
    newEdge->m_vecStartConnectedEdge.clear();
    newEdge->m_vecEndConnedtedEdge.clear();
    newEdge->m_vecRestrictedEdge.clear();
    newEdge->m_lEdgeID = edgeIn.id;
    newEdge->m_lEdgeIndex = m_vecEdgeVector.size();    
    newEdge->m_lStartNode = edgeIn.source;
    newEdge->m_lEndNode = edgeIn.target;
    newEdge->m_dCost = edgeIn.cost;
    newEdge->m_dReverseCost = edgeIn.reverse_cost;

    if(edgeIn.id > max_edge_id)
    {
        max_edge_id = edgeIn.id;
    }

    if(newEdge->m_lStartNode > max_node_id)
    {
        max_node_id = newEdge->m_lStartNode;
    }
    if(newEdge->m_lEndNode > max_node_id)
    {
        max_node_id = newEdge->m_lEndNode;
    }

    //Searching the start node for connectivity
    Long2LongVectorMap::iterator itNodeMap = m_mapNodeId2Edge.find(edgeIn.source);
    if(itNodeMap != m_mapNodeId2Edge.end())
    {
        //Connect current edge with existing edge with start node
        //connectEdge(
        long lEdgeCount = itNodeMap->second.size();
        long lEdgeIndex;
        for(lEdgeIndex = 0; lEdgeIndex < lEdgeCount; lEdgeIndex++)
        {
            long lEdge = itNodeMap->second.at(lEdgeIndex);    
            connectEdge(*newEdge, *m_vecEdgeVector[lEdge], true);
        }
    }


    //Searching the end node for connectivity
    itNodeMap = m_mapNodeId2Edge.find(edgeIn.target);
    if(itNodeMap != m_mapNodeId2Edge.end())
    {
        //Connect current edge with existing edge with end node
        //connectEdge(
        long lEdgeCount = itNodeMap->second.size();
        long lEdgeIndex;
        for(lEdgeIndex = 0; lEdgeIndex < lEdgeCount; lEdgeIndex++)
        {
            long lEdge = itNodeMap->second.at(lEdgeIndex);    
            connectEdge(*newEdge, *m_vecEdgeVector[lEdge], false);
        }
    }



    //Add this node and edge into the data structure
    m_mapNodeId2Edge[edgeIn.source].push_back(newEdge->m_lEdgeIndex);
    m_mapNodeId2Edge[edgeIn.target].push_back(newEdge->m_lEdgeIndex);


    //Adding edge to the list
    m_mapEdgeId2Index.insert(std::make_pair(newEdge->m_lEdgeID, m_vecEdgeVector.size()));
    m_vecEdgeVector.push_back(newEdge);

    //


    return true;
}