void sObstructionMap::RemoveSegmentByPoint(int x, int y) { // if there aren't any segments, don't do anything if (m_Segments.size() == 0) { return; } // find minimum distance double distance = DistanceToSegment(x, y, 0); int point = 0; for (int i = 1; i < m_Segments.size(); i++) { double new_distance = DistanceToSegment(x, y, i); if (new_distance < distance) { distance = new_distance; point = i; } } // remove that point RemoveSegment(point); }
void SectionSelector::SelectSection(SelectionTracker* tracker, const SectionInfo& si) { if(!si.bb.IsInside(tracker->GetPoint())) return; const Vector2d* last = nullptr; for(const Vector2d& p : si.pixels) { if(last == nullptr) { last = &p; continue; } Vector2d nearest; double distanceSeg = DistanceToSegment(tracker->GetPoint(), *last, p, &nearest); if(tracker->Validate(distanceSeg, this)) { mSection = si.section; mNearest = nearest; } last = &p; } }
void WayPointSelector::SelectWayPoint(SelectionTracker* tracker, const SectionInfo& si) { if(!si.bb.IsInside(tracker->GetPoint())) return; const Vector2d* last = nullptr; Section::LocationList::const_iterator it = si.section->GetLocations().begin(); for(const Vector2d& p : si.pixels) { if(last == nullptr) { last = &p; it++; continue; } Vector2d nearest; double distanceSeg = DistanceToSegment(tracker->GetPoint(), *last, p, &nearest); if(tracker->Validate(distanceSeg, this)) { delete mWayPoint; mWayPoint = new WayPoint(si.section, it - 1, tracker->GetViewport()->PixelToLocation(nearest)); } last = &p; it++; } }