void LandsideIntersectionInSim::InitGraphLink( LandsideRouteGraph* pGraph ) const { for( int i=0;i< GetLinkageCount();i++) { const LandsideIntersectLaneLinkInSim* linkage = GetLinkage(i); pGraph->AddEdge(linkage->getFromNode(),linkage->getToNode(),linkage->getDistance() ); } }
//LandsideVehicleInSim* LandsideIntersectionInSim::GetAheadVehicle(LandsideVehicleInSim* mpVehicle, const CPath2008& pathInode, const CPoint2008& curPos, // double& dDistToAhead )const //{ // LandsideVehicleInSim* pAheadVehicle = NULL; // double mMidDist = 0; // double conflictDist = mpVehicle->GetLength()*2; // int nVehicleIndex = GetVehicleIndex(mpVehicle); // // for(int i=0;i<GetInResVehicleCount();i++) // { // LandsideVehicleInSim* pVehicle = GetInResVehicle(i); // if(pVehicle==mpVehicle) // break; // // //get vehicle state // //double dCurDistInPath = pathInode.GetPointDist(curPos); // // MobileState& dstate = pVehicle->getState(); // { // //DistancePointPath3D distPoint(midState.pos,pathInode); // //if( distPoint.GetSquared() < conflictDist*conflictDist ) //in conflict area // { // //int otherIndex = GetVehicleIndex(pVehicle); // double distToOther = curPos.distance3D(dstate.pos); // // //bool bIsHead = otherIndex < nVehicleIndex; // //if(bIsHead){ // if(!pAheadVehicle) //init ahead // { // mMidDist = distToOther; // pAheadVehicle = pVehicle; // // } // else if(distToOther < mMidDist) //find the nearest vehicle // { // mMidDist = distToOther; // pAheadVehicle = pVehicle; // // } // //} // // } // } // } // // //clear not lane vehicles // dDistToAhead = mMidDist; // return pAheadVehicle; //} // LandsideIntersectLaneLinkInSim* LandsideIntersectionInSim::GetLinkage( LandsideLaneExit* pExit,LandsideLaneEntry* pEntry ) const { for(int i=0;i<GetLinkageCount();i++) { LandsideIntersectLaneLinkInSim* pLink = GetLinkage(i); if(pLink->getToNode() == pEntry && pLink->getFromNode() == pExit) {// return pLink; } } return NULL; }
void LandsideIntersectionInSim::GenerateCtrlEvents(CIntersectionTrafficControlIntersection *pTrafficCtrlNode,LandsideResourceManager* pResManager,OutputLandside* pOutput,ElapsedTime startTime,ElapsedTime endTime/*=0*/) { //Generate traffic control events for every linkage group. //Maybe not all the group id in the default page of setting //dlg exist in intersection. LandsideIntersectionNode* mpNode = (LandsideIntersectionNode*)getInput(); if(mpNode->getNodeType()==LandsideIntersectionNode::_Unsignalized) return; GroupMap m_mapGroup; for (int i=0;i<GetLinkageCount();i++) { LandsideIntersectLaneLinkInSim *pLinkInSim=GetLinkage(i); int nGroupID=pLinkInSim->GetGroupID(); m_mapGroup[nGroupID].push_back(pLinkInSim); } //calculate the ctrl time of link in same group int nCycleTime=0;//the time of one ctrl cycle GroupMap::iterator iter; for (iter=m_mapGroup.begin();iter!=m_mapGroup.end();iter++) { CString groupName = mpNode->GetGroupName(iter->first); TrafficCtrlTime ctrlTime=pTrafficCtrlNode->GetGroupCtrlTime(groupName); nCycleTime+=ctrlTime.activeTime; nCycleTime+=ctrlTime.bufferTime; } int nFirstCloseTime=0; for (int i=0;i<(int)m_vLinkGroups.size();i++) { delete m_vLinkGroups.at(i); } m_vLinkGroups.clear(); for (int i=0;i<pTrafficCtrlNode->GetItemCount();i++) { CString nGroupNum=pTrafficCtrlNode->GetItem(i)->GetLinkGroupName(); int groupID = mpNode->GetGroupID(nGroupNum); iter=m_mapGroup.find(groupID); if (iter!=m_mapGroup.end()) { TrafficCtrlTime ctrlTime=pTrafficCtrlNode->GetGroupCtrlTime(nGroupNum); ctrlTime.closeTime=nCycleTime-ctrlTime.activeTime-ctrlTime.bufferTime; LandsideIntersectLinkGroupInSim *pLinkGroupInSim=new LandsideIntersectLinkGroupInSim(this,iter->first); LandsideIntersectionNode *pIntersection=(LandsideIntersectionNode*)m_pInput; if (pResManager && pIntersection) { //add cross walk in sim for (int k=0;k<pResManager->m_vTrafficObjectList.getCount();k++) { if( CCrossWalkInSim* pCross =pResManager->m_vTrafficObjectList.getItem(k)->toCrossWalk()) { if (pCross->GetLinkIntersectionID()==pIntersection->getID() && pCross->GetLinkGroup()==groupID /*nGroupNum*/) { pLinkGroupInSim->AddLinkCrossWalk(pCross); //pCross->InitLogEntry(pOutput); } } } } pLinkGroupInSim->InitLogEntry(pOutput); pLinkGroupInSim->SetState(LS_ACTIVE); pLinkGroupInSim->SetCtrlTime(ctrlTime); pLinkGroupInSim->SetFirstCloseTime(nFirstCloseTime); pLinkGroupInSim->SetEndTime(endTime); pLinkGroupInSim->Activate(startTime+(long)pTrafficCtrlNode->GetOffsetSimTime()); pLinkGroupInSim->WriteLog(startTime); m_vLinkGroups.push_back(pLinkGroupInSim); nFirstCloseTime+=ctrlTime.activeTime+ctrlTime.bufferTime; } } }
PLOTLIB_INLINE ClusterMapPlot &ClusterMapPlot::SetMethod( Linkage linkage ) { mStream << ", method=" << GetLinkage( linkage ); return *this; }