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; }
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); }
// ------------------------------------------------------------------------- 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; }