void GCodePlanner::addTravel(Point p) { GCodePath* path = getLatestPathWithConfig(&travelConfig); if (forceRetraction) { if (!shorterThen(lastPosition - p, retractionMinimalDistance)) { path->retract = true; } forceRetraction = false; }else if (comb != NULL) { vector<Point> pointList; if (comb->calc(lastPosition, p, pointList)) { for(unsigned int n=0; n<pointList.size(); n++) { path->points.push_back(pointList[n]); } }else{ if (!shorterThen(lastPosition - p, retractionMinimalDistance)) path->retract = true; } }else if (alwaysRetract) { if (!shorterThen(lastPosition - p, retractionMinimalDistance)) path->retract = true; } path->points.push_back(p); lastPosition = p; }
void GCodePlanner::addTravel_simple(Point p, GCodePath* path) { if (alwaysRetract) { path = getLatestPathWithConfig(&travelConfig); if (!shorterThen(lastPosition - p, last_retraction_config->retraction_min_travel_distance)) { path->retract = true; } } if (path == nullptr) { path = getLatestPathWithConfig(&travelConfig); } path->points.push_back(p); lastPosition = p; }
void GCodePlanner::addTravel_simple(Point p, GCodePath* path) { if (path == nullptr) { path = getLatestPathWithConfig(&travelConfig); } path->points.push_back(p); lastPosition = p; }
void GCodePlanner::addExtrusionMove(Point p, GCodePathConfig* config) { getLatestPathWithConfig(config)->points.push_back(p); lastPosition = p; }
void GCodePlanner::addTravel(Point p) { GCodePath* path = nullptr; if (comb != nullptr && lastPosition != Point(0,0)) { CombPaths combPaths; if (comb->calc(lastPosition, p, combPaths, was_combing, is_going_to_comb)) { bool retract = combPaths.size() > 1; { // check whether we want to retract if (!retract && combPaths.size() == 1 && combPaths[0].throughAir && combPaths[0].size() > 2) { // retract when avoiding obstacles through air retract = true; } for (unsigned int path_idx = 0; path_idx < combPaths.size() && !retract; path_idx++) { // retract when path moves through a boundary if (combPaths[path_idx].cross_boundary) { retract = true; } } } if (retract && last_retraction_config->zHop > 0) { // TODO: stop comb calculation early! (as soon as we see we don't end in the same part as we began) path = getLatestPathWithConfig(&travelConfig); if (!shorterThen(lastPosition - p, last_retraction_config->retraction_min_travel_distance)) { path->retract = true; } } else { for (CombPath& combPath : combPaths) { // add all comb paths (don't do anything special for paths which are moving through air) if (combPath.size() == 0) { continue; } path = getLatestPathWithConfig(&travelConfig); path->retract = retract; for (Point& combPoint : combPath) { path->points.push_back(combPoint); } lastPosition = combPath.back(); } } } else { path = getLatestPathWithConfig(&travelConfig); if (!shorterThen(lastPosition - p, last_retraction_config->retraction_min_travel_distance)) { path->retract = true; } } was_combing = is_going_to_comb; } addTravel_simple(p, path); }