void LinePolygonsCrossings::getCombingPath(CombPath& combPath) { if (shorterThen(endPoint - startPoint, Comb::max_comb_distance_ignored) || !lineSegmentCollidesWithBoundary()) { //We're not crossing any boundaries. So skip the comb generation. combPath.push_back(startPoint); combPath.push_back(endPoint); return; } calcScanlineCrossings(); CombPath basicPath; getBasicCombingPath(basicPath); optimizePath(basicPath, combPath); }
bool LinePolygonsCrossings::getCombingPath(CombPath& combPath, int64_t max_comb_distance_ignored, bool fail_on_unavoidable_obstacles) { if (shorterThen(endPoint - startPoint, max_comb_distance_ignored) || !lineSegmentCollidesWithBoundary()) { //We're not crossing any boundaries. So skip the comb generation. combPath.push_back(startPoint); combPath.push_back(endPoint); return true; } bool success = calcScanlineCrossings(fail_on_unavoidable_obstacles); if (!success) { return false; } CombPath basicPath; getBasicCombingPath(basicPath); optimizePath(basicPath, combPath); // combPath = basicPath; // uncomment to disable comb path optimization return true; }