~ubuntu-branches/ubuntu/utopic/slic3r/utopic

« back to all changes in this revision

Viewing changes to xs/src/ExtrusionEntity.hpp

  • Committer: Package Import Robot
  • Author(s): Chow Loong Jin
  • Date: 2014-06-17 01:27:26 UTC
  • Revision ID: package-import@ubuntu.com-20140617012726-2wrs4zdo251nr4vg
Tags: upstream-1.1.4+dfsg
ImportĀ upstreamĀ versionĀ 1.1.4+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef slic3r_ExtrusionEntity_hpp_
 
2
#define slic3r_ExtrusionEntity_hpp_
 
3
 
 
4
#include <myinit.h>
 
5
#include "Polygon.hpp"
 
6
#include "Polyline.hpp"
 
7
 
 
8
namespace Slic3r {
 
9
 
 
10
class ExPolygonCollection;
 
11
class ExtrusionEntityCollection;
 
12
class Extruder;
 
13
 
 
14
/* Each ExtrusionRole value identifies a distinct set of { extruder, speed } */
 
15
enum ExtrusionRole {
 
16
    erPerimeter,
 
17
    erExternalPerimeter,
 
18
    erOverhangPerimeter,
 
19
    erInternalInfill,
 
20
    erSolidInfill,
 
21
    erTopSolidInfill,
 
22
    erBridgeInfill,
 
23
    erGapFill,
 
24
    erSkirt,
 
25
    erSupportMaterial,
 
26
    erSupportMaterialInterface,
 
27
};
 
28
 
 
29
/* Special flags describing loop */
 
30
enum ExtrusionLoopRole {
 
31
    elrDefault,
 
32
    elrExternalPerimeter,
 
33
    elrContourInternalPerimeter,
 
34
};
 
35
 
 
36
class ExtrusionEntity
 
37
{
 
38
    public:
 
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;
 
44
};
 
45
 
 
46
typedef std::vector<ExtrusionEntity*> ExtrusionEntitiesPtr;
 
47
 
 
48
class ExtrusionPath : public ExtrusionEntity
 
49
{
 
50
    public:
 
51
    Polyline polyline;
 
52
    ExtrusionRole role;
 
53
    double mm3_per_mm;  // mm^3 of plastic per mm of linear head motion
 
54
    float width;
 
55
    float height;
 
56
    
 
57
    ExtrusionPath(ExtrusionRole role) : role(role), mm3_per_mm(-1), width(-1), height(-1) {};
 
58
    ExtrusionPath* clone() const;
 
59
    void reverse();
 
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;
 
68
    bool is_fill() 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;
 
73
 
 
74
    private:
 
75
    void _inflate_collection(const Polylines &polylines, ExtrusionEntityCollection* collection) const;
 
76
};
 
77
 
 
78
typedef std::vector<ExtrusionPath> ExtrusionPaths;
 
79
 
 
80
class ExtrusionLoop : public ExtrusionEntity
 
81
{
 
82
    public:
 
83
    ExtrusionPaths paths;
 
84
    ExtrusionLoopRole role;
 
85
    
 
86
    ExtrusionLoop(ExtrusionLoopRole role = elrDefault) : role(role) {};
 
87
    operator Polygon() const;
 
88
    ExtrusionLoop* clone() const;
 
89
    bool make_clockwise();
 
90
    bool make_counter_clockwise();
 
91
    void reverse();
 
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;
 
100
};
 
101
 
 
102
}
 
103
 
 
104
#endif