Welcome to mirror list, hosted at ThFree Co, Russian Federation.

FillSmooth.hpp « Fill « libslic3r « src « xs - github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: eb558f088b5e73b7425dd501605ae18b4f2d2295 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#ifndef slic3r_FillSmooth_hpp_
#define slic3r_FillSmooth_hpp_

#include "../libslic3r.h"

#include "FillBase.hpp"

namespace Slic3r {

class FillSmooth : public Fill
{
public:
    FillSmooth() {
		nbPass = 2;
		anglePass[0] = float(M_PI/4);
		anglePass[1] = -float(M_PI/4);
		anglePass[2] = 0;
		fillPattern[0] = InfillPattern::ipRectilinear;
		fillPattern[1] = InfillPattern::ipRectilinear;
		fillPattern[2] = InfillPattern::ipRectilinear;
		rolePass[0] = erSolidInfill;
		rolePass[1] = erTopSolidInfill;
		rolePass[2] = erSolidInfill;
		percentWidth[0] = 0.9;
		percentWidth[1] = 2;
		percentWidth[2] = 1.0;
		percentFlow[0] = 0.7;
		percentFlow[1] = 0.3;
		percentFlow[2] = 0.0;
		double extrusionMult = 1.0;
		percentFlow[0] *= extrusionMult;
		percentFlow[1] *= extrusionMult;
		percentFlow[2] *= extrusionMult;
	}
    virtual Fill* clone() const { return new FillSmooth(*this); }

	virtual Polylines fill_surface(const Surface *surface, const FillParams &params);
    virtual void fill_surface_extrusion(const Surface *surface, const FillParams &params,
        const Flow &flow, const ExtrusionRole &role, ExtrusionEntitiesPtr &out);
	
protected:
	int nbPass=2;
	double percentWidth[3];
	double percentFlow[3];
	float anglePass[3];
	ExtrusionRole rolePass[3];
	InfillPattern fillPattern[3];
};


class FillSmoothTriple : public FillSmooth
{
public:
	FillSmoothTriple() {
		nbPass = 3;
		anglePass[0] = float(M_PI / 4);
		anglePass[1] = -float(M_PI / 4);
		anglePass[2] = float(M_PI / 12); //align with nothing
		fillPattern[0] = InfillPattern::ipRectilinear;
		fillPattern[1] = InfillPattern::ipConcentric;
		fillPattern[2] = InfillPattern::ipRectilinear;
		rolePass[0] = erSolidInfill;
		rolePass[1] = erSolidInfill;
		rolePass[2] = erTopSolidInfill;
		percentWidth[0] = 0.8;
		percentWidth[1] = 1.5;
		percentWidth[2] = 2.8;
		percentFlow[0] = 0.7;
		percentFlow[1] = 0.2;
		percentFlow[2] = 0.1;
		double extrusionMult = 1.0;
		percentFlow[0] *= extrusionMult;
		percentFlow[1] *= extrusionMult;
		percentFlow[2] *= extrusionMult;
	}
	virtual Fill* clone() const { return new FillSmoothTriple(*this); }

};

class FillSmoothHilbert : public FillSmooth
{
public:
	FillSmoothHilbert() {
		nbPass = 2;
		anglePass[0] = 0;
		anglePass[1] = -float(M_PI / 4);
		anglePass[2] = float(M_PI / 4);
		fillPattern[0] = InfillPattern::ipHilbertCurve; //ipHilbertCurve
		fillPattern[1] = InfillPattern::ipRectilinear;
		fillPattern[2] = InfillPattern::ipRectilinear;
		rolePass[0] = erSolidInfill;
		rolePass[1] = erSolidInfill;
		rolePass[2] = erTopSolidInfill;
		percentWidth[0] = 1.0;
		percentWidth[1] = 1.0;
		percentWidth[2] = 1.0;
		percentFlow[0] = 0.8;
		percentFlow[1] = 0.1;
		percentFlow[2] = 0.1;
		double extrusionMult = 1.0;
		percentFlow[0] *= extrusionMult;
		percentFlow[1] *= extrusionMult;
		percentFlow[2] *= extrusionMult;
	}
	virtual Fill* clone() const { return new FillSmoothHilbert(*this); }

};


} // namespace Slic3r

#endif // slic3r_FillSmooth_hpp_