1
#ifndef slic3r_ExtrusionEntity_hpp_
2
#define slic3r_ExtrusionEntity_hpp_
6
#include "Polyline.hpp"
10
class ExPolygonCollection;
11
class ExtrusionEntityCollection;
14
/* Each ExtrusionRole value identifies a distinct set of { extruder, speed } */
26
erSupportMaterialInterface,
29
/* Special flags describing loop */
30
enum ExtrusionLoopRole {
33
elrContourInternalPerimeter,
39
virtual ExtrusionEntity* clone() const = 0;
40
virtual ~ExtrusionEntity() {};
41
virtual void reverse() = 0;
42
virtual Point first_point() const = 0;
43
virtual Point last_point() const = 0;
46
typedef std::vector<ExtrusionEntity*> ExtrusionEntitiesPtr;
48
class ExtrusionPath : public ExtrusionEntity
53
double mm3_per_mm; // mm^3 of plastic per mm of linear head motion
57
ExtrusionPath(ExtrusionRole role) : role(role), mm3_per_mm(-1), width(-1), height(-1) {};
58
ExtrusionPath* clone() const;
60
Point first_point() const;
61
Point last_point() const;
62
void intersect_expolygons(const ExPolygonCollection &collection, ExtrusionEntityCollection* retval) const;
63
void subtract_expolygons(const ExPolygonCollection &collection, ExtrusionEntityCollection* retval) const;
64
void clip_end(double distance);
65
void simplify(double tolerance);
66
double length() const;
67
bool is_perimeter() const;
69
bool is_bridge() const;
70
std::string gcode(Extruder* extruder, double e, double F,
71
double xofs, double yofs, std::string extrusion_axis,
72
std::string gcode_line_suffix) const;
75
void _inflate_collection(const Polylines &polylines, ExtrusionEntityCollection* collection) const;
78
typedef std::vector<ExtrusionPath> ExtrusionPaths;
80
class ExtrusionLoop : public ExtrusionEntity
84
ExtrusionLoopRole role;
86
ExtrusionLoop(ExtrusionLoopRole role = elrDefault) : role(role) {};
87
operator Polygon() const;
88
ExtrusionLoop* clone() const;
89
bool make_clockwise();
90
bool make_counter_clockwise();
92
Point first_point() const;
93
Point last_point() const;
94
void polygon(Polygon* polygon) const;
95
double length() const;
96
void split_at_vertex(const Point &point);
97
void split_at(const Point &point);
98
void clip_end(double distance, ExtrusionPaths* paths) const;
99
bool has_overhang_point(const Point &point) const;