本文整理汇总了C++中Polyline::lines方法的典型用法代码示例。如果您正苦于以下问题:C++ Polyline::lines方法的具体用法?C++ Polyline::lines怎么用?C++ Polyline::lines使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Polyline
的用法示例。
在下文中一共展示了Polyline::lines方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
// This method accepts &point in print coordinates.
std::string
GCode::travel_to(const Point &point, ExtrusionRole role, std::string comment)
{
/* Define the travel move as a line between current position and the taget point.
This is expressed in print coordinates, so it will need to be translated by
$self->origin in order to get G-code coordinates. */
Polyline travel;
travel.append(this->last_pos());
travel.append(point);
// check whether a straight travel move would need retraction
bool needs_retraction = this->needs_retraction(travel, role);
// if a retraction would be needed, try to use avoid_crossing_perimeters to plan a
// multi-hop travel path inside the configuration space
if (needs_retraction
&& this->config.avoid_crossing_perimeters
&& !this->avoid_crossing_perimeters.disable_once) {
travel = this->avoid_crossing_perimeters.travel_to(*this, point);
// check again whether the new travel path still needs a retraction
needs_retraction = this->needs_retraction(travel, role);
}
// Re-allow avoid_crossing_perimeters for the next travel moves
this->avoid_crossing_perimeters.disable_once = false;
this->avoid_crossing_perimeters.use_external_mp_once = false;
// generate G-code for the travel move
std::string gcode;
if (needs_retraction) gcode += this->retract();
// use G1 because we rely on paths being straight (G0 may make round paths)
Lines lines = travel.lines();
for (Lines::const_iterator line = lines.begin(); line != lines.end(); ++line)
gcode += this->writer.travel_to_xy(this->point_to_gcode(line->b), comment);
return gcode;
}
示例2:
// This method accepts &point in print coordinates.
std::string
GCode::travel_to(const Point &point, ExtrusionRole role, std::string comment)
{
/* Define the travel move as a line between current position and the taget point.
This is expressed in print coordinates, so it will need to be translated by
this->origin in order to get G-code coordinates. */
Polyline travel;
travel.append(this->last_pos());
travel.append(point);
std::string gcode;
// check whether a straight travel move would need retraction
bool needs_retraction = this->needs_retraction(travel, role);
std::stringstream ss;
ss << ";needs retr 1: " << needs_retraction << "\n";
gcode += ss.str();
// if a retraction would be needed, try to use avoid_crossing_perimeters to plan a
// multi-hop travel path inside the configuration space
if (needs_retraction
&& this->config.avoid_crossing_perimeters
&& !this->avoid_crossing_perimeters.disable_once) {
travel = this->avoid_crossing_perimeters.travel_to(*this, point);
gcode += ";HERE!!!!!\n";
// check again whether the new travel path still needs a retraction
needs_retraction = this->needs_retraction(travel, role);
std::stringstream ss;
ss << ";needs retr 2: " << needs_retraction << "\n";
gcode += ss.str();
//if (needs_retraction && this->layer_index > 1) exit(0);
}
//needs_retraction = true; //vladi
//if (this->first_layer) needs_retraction = false;//vladi
// Re-allow avoid_crossing_perimeters for the next travel moves
this->avoid_crossing_perimeters.disable_once = false;
this->avoid_crossing_perimeters.use_external_mp_once = false;
// generate G-code for the travel move
//if (travel.lines().begin()->length() * SCALING_FACTOR > 2 && this->first_layer) needs_retraction = true;
//std::size_t found = comment.find("infill");
bool willDoInfill = (comment.find("infill") != std::string::npos);
//if (comment.find("infill") != std::string::npos && this->first_layer) needs_retraction = false;
if (needs_retraction) gcode += this->retract();
// use G1 because we rely on paths being straight (G0 may make round paths)
Lines lines = travel.lines();
double path_length = 0;
for (Lines::const_iterator line = lines.begin(); line != lines.end(); ++line) {
const double line_length = line->length() * SCALING_FACTOR;
path_length += line_length;
std::stringstream ss1;
ss1 << ";Will Travel: " << line_length << ", on layer height: " << this->layer->print_z << ", id" << this->layer->id() << "\n";
gcode += ss1.str();
if (this->first_layer && line_length > 3 && !willDoInfill) {
if (needs_retraction) {
gcode += this->unretract();
gcode += this->writer.travel_to_z(this->layer->print_z, "extrude move on layer height");
} else {
gcode += this->writer.travel_to_z(0.1, "extrude move 333");
}
double fil_sq = 3.14f *1.75f*1.75f/4;
double exr_line = 0.1f*0.4f;
double e = exr_line *line_length/fil_sq;
//double e_per_mm = this->writer.extruder()->e_per_mm3 * path.mm3_per_mm;
// gcode += "G1 F6000\n";
gcode += this->writer.extrude_to_xy(this->point_to_gcode(line->b), e, comment);
gcode += this->writer.travel_to_z(this->layer->print_z, "return");
lowerSpeed = true;
} else {
gcode += this->writer.travel_to_xy(this->point_to_gcode(line->b), comment);
}
}
if (this->config.cooling)
this->elapsed_time += path_length / this->config.get_abs_value("travel_speed");
return gcode;
}