void Route::DeletePoint( RoutePoint *rp, bool bRenamePoints ) { // n.b. must delete Selectables and update config before deleting the point if( rp->m_bIsInLayer ) return; pSelect->DeleteAllSelectableRoutePoints( this ); pSelect->DeleteAllSelectableRouteSegments( this ); pConfig->DeleteWayPoint( rp ); pRoutePointList->DeleteObject( rp ); if( ( rp->m_GUID.Len() ) && ( wxNOT_FOUND != RoutePointGUIDList.Index( rp->m_GUID ) ) ) RoutePointGUIDList.Remove( rp->m_GUID ); delete rp; if( bRenamePoints ) RenameRoutePoints(); if( GetnPoints() > 1 ) { pSelect->AddAllSelectableRouteSegments( this ); pSelect->AddAllSelectableRoutePoints( this ); pConfig->UpdateRoute( this ); RebuildGUIDList(); // ensure the GUID list is intact and good FinalizeForRendering(); UpdateSegmentDistances(); } }
void Route::AddPoint( RoutePoint *pNewPoint, bool b_rename_in_sequence, bool b_deferBoxCalc ) { if( pNewPoint->m_bIsolatedMark ) { pNewPoint->m_bKeepXRoute = true; } pNewPoint->m_bIsolatedMark = false; // definitely no longer isolated pNewPoint->m_bIsInRoute = true; RoutePoint *prev = GetLastPoint(); pRoutePointList->Append( pNewPoint ); if( !b_deferBoxCalc ) FinalizeForRendering(); if( prev ) UpdateSegmentDistance( prev, pNewPoint ); if( b_rename_in_sequence && pNewPoint->GetName().IsEmpty() && !pNewPoint->m_bKeepXRoute ) { wxString name; name.Printf( _T ( "%03d" ), GetnPoints() ); pNewPoint->SetName( name ); pNewPoint->m_bDynamicName = true; } return; }
RoutePoint *Route::InsertPointAfter( RoutePoint *pRP, double rlat, double rlon, bool bRenamePoints ) { int nRP = pRoutePointList->IndexOf( pRP ); if( nRP >= GetnPoints() - 1 ) return NULL; nRP++; RoutePoint *newpoint = new RoutePoint( rlat, rlon, wxString( _T ( "diamond" ) ), GetNewMarkSequenced(), GPX_EMPTY_STRING ); newpoint->m_bIsInRoute = true; newpoint->m_bDynamicName = true; newpoint->SetNameShown( false ); pRoutePointList->Insert( nRP, newpoint ); RoutePointGUIDList.Insert( pRP->m_GUID, nRP ); if( bRenamePoints ) RenameRoutePoints(); FinalizeForRendering(); UpdateSegmentDistances(); return ( newpoint ); }
// The following is used only for route splitting, assumes just created, empty route // void Route::CloneRoute( Route *psourceroute, int start_nPoint, int end_nPoint, const wxString & suffix) { m_bIsTrack = psourceroute->m_bIsTrack; m_RouteNameString = psourceroute->m_RouteNameString + suffix; m_RouteStartString = psourceroute->m_RouteStartString; m_RouteEndString = psourceroute->m_RouteEndString; int i; for( i = start_nPoint; i <= end_nPoint; i++ ) { if( !psourceroute->m_bIsInLayer ) AddPoint( psourceroute->GetPoint( i ), false ); else { RoutePoint *psourcepoint = psourceroute->GetPoint( i ); RoutePoint *ptargetpoint = new RoutePoint( psourcepoint->m_lat, psourcepoint->m_lon, psourcepoint->GetIconName(), psourcepoint->GetName(), GPX_EMPTY_STRING, false ); AddPoint( ptargetpoint, false ); CloneAddedRoutePoint( m_pLastAddedPoint, psourcepoint ); } } FinalizeForRendering(); }
ODPoint *EBL::InsertPointBefore( ODPoint *pOP, double lat, double lon, bool bRenamePoints ) { ODPoint *newpoint = ODPath::InsertPointBefore( pOP, lat, lon ); newpoint->m_IconName = g_sEBLStartIconName; newpoint->m_sTypeString = wxT("EBL Point"); newpoint->m_ODPointName = wxT("Start"); FinalizeForRendering(); return newpoint; }
void Route::CloneTrack( Route *psourceroute, int start_nPoint, int end_nPoint, const wxString & suffix) { if( psourceroute->m_bIsInLayer ) return; m_bIsTrack = psourceroute->m_bIsTrack; m_RouteNameString = psourceroute->m_RouteNameString + suffix; m_RouteStartString = psourceroute->m_RouteStartString; m_RouteEndString = psourceroute->m_RouteEndString; bool b_splitting = GetnPoints() == 0; int startTrkSegNo; if( b_splitting ) startTrkSegNo = psourceroute->GetPoint( start_nPoint )->m_GPXTrkSegNo; else startTrkSegNo = this->GetLastPoint()->m_GPXTrkSegNo; int i; for( i = start_nPoint; i <= end_nPoint; i++ ) { RoutePoint *psourcepoint = psourceroute->GetPoint( i ); RoutePoint *ptargetpoint = new RoutePoint( psourcepoint->m_lat, psourcepoint->m_lon, psourcepoint->GetIconName(), psourcepoint->GetName(), GPX_EMPTY_STRING, false ); AddPoint( ptargetpoint, false ); // This is a hack, need to undo the action of Route::AddPoint ptargetpoint->m_bIsInRoute = false; ptargetpoint->m_bIsInTrack = true; CloneAddedTrackPoint( m_pLastAddedPoint, psourcepoint ); int segment_shift = psourcepoint->m_GPXTrkSegNo; if( start_nPoint == 2 ) segment_shift = psourcepoint->m_GPXTrkSegNo - 1; // continue first segment if tracks share the first point if( b_splitting ) m_pLastAddedPoint->m_GPXTrkSegNo = ( psourcepoint->m_GPXTrkSegNo - startTrkSegNo ) + 1; else m_pLastAddedPoint->m_GPXTrkSegNo = startTrkSegNo + segment_shift; } FinalizeForRendering(); }
void EBL::UpdateEBL( void ) { g_pODSelect->DeleteAllSelectablePathSegments( this ); g_pODSelect->DeleteAllSelectableODPoints( this ); g_pODSelect->AddAllSelectablePathSegments( this ); g_pODSelect->AddAllSelectableODPoints( this ); FinalizeForRendering(); UpdateSegmentDistances(); bool prev_bskip = g_pODConfig->m_bSkipChangeSetUpdate; g_pODConfig->m_bSkipChangeSetUpdate = false; if(m_iPersistenceType == ID_EBL_PERSISTENT || m_iPersistenceType == ID_EBL_PERSISTENT_CRASH) g_pODConfig->UpdatePath( this ); g_pODConfig->m_bSkipChangeSetUpdate = prev_bskip; for( unsigned int ip = 0; ip < m_pODPointList->GetCount(); ip++ ) { ODPath *pp = (ODPath *) m_pODPointList->Item( ip ); if( g_pPathMan->IsPathValid(pp) ) { pp->FinalizeForRendering(); pp->UpdateSegmentDistances(); pp->m_bIsBeingEdited = false; g_pODConfig->UpdatePath( pp ); pp->SetHiLite( 0 ); } } // Update the PathProperties Dialog, if currently shown if( ( NULL != g_pEBLPropDialog ) && ( g_pEBLPropDialog->IsShown() ) ) { if( m_pODPointList ) { for( unsigned int ip = 0; ip < m_pODPointList->GetCount(); ip++ ) { ODPath *pp = (ODPath *) m_pODPointList->Item( ip ); if( g_pPathMan->IsPathValid(pp) ) { g_pEBLPropDialog->SetPathAndUpdate( pp, true ); } } } } }
void Route::RemovePoint( RoutePoint *rp, bool bRenamePoints ) { if( rp->m_bIsActive && this->IsActive() ) //FS#348 g_pRouteMan->DeactivateRoute(); pSelect->DeleteAllSelectableRoutePoints( this ); pSelect->DeleteAllSelectableRouteSegments( this ); pRoutePointList->DeleteObject( rp ); if( wxNOT_FOUND != RoutePointGUIDList.Index( rp->m_GUID ) ) RoutePointGUIDList.Remove( rp->m_GUID ); m_nPoints -= 1; // check all other routes to see if this point appears in any other route Route *pcontainer_route = g_pRouteMan->FindRouteContainingWaypoint( rp ); if( pcontainer_route == NULL ) { rp->m_bIsInRoute = false; // Take this point out of this (and only) route rp->m_bDynamicName = false; rp->m_bIsolatedMark = true; // This has become an isolated mark } if( bRenamePoints ) RenameRoutePoints(); // if ( m_nPoints > 1 ) { pSelect->AddAllSelectableRouteSegments( this ); pSelect->AddAllSelectableRoutePoints( this ); pConfig->UpdateRoute( this ); RebuildGUIDList(); // ensure the GUID list is intact and good FinalizeForRendering(); UpdateSegmentDistances(); } }