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

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordaid <daid303@gmail.com>2015-03-03 13:37:04 +0300
committerdaid <daid303@gmail.com>2015-03-03 13:37:04 +0300
commit7b2b9630c7b5ec5e4534de94b46bb37004cccb88 (patch)
tree80dfbbc8a66a6d4ab24015763fb4d0b69381fa98
parent5a6ebd4156a96d2006d32004d71586feebff2be8 (diff)
parent4621d77a17403b009c4362dc97a5da596e90d3e7 (diff)
Merge pull request #161 from mosh1/infill_perimeter_ordering15.04.215.04
Add option to change print order of infill vs perimeters. Default prints...
-rw-r--r--src/fffProcessor.h119
-rw-r--r--src/settings.cpp7
-rw-r--r--src/settings.h1
3 files changed, 73 insertions, 54 deletions
diff --git a/src/fffProcessor.h b/src/fffProcessor.h
index 425a3b1db3..1b7e05a669 100644
--- a/src/fffProcessor.h
+++ b/src/fffProcessor.h
@@ -604,65 +604,22 @@ private:
gcodeLayer.setAlwaysRetract(false);
}
- Polygons infillPolygons;
int fillAngle = 45;
if (layerNr & 1)
fillAngle += 90;
int extrusionWidth = config.extrusionWidth;
if (layerNr == 0)
extrusionWidth = config.layer0extrusionWidth;
- if (config.sparseInfillLineDistance > 0)
- {
- switch (config.infillPattern)
- {
- case INFILL_AUTOMATIC:
- generateAutomaticInfill(
- part->sparseOutline, infillPolygons, extrusionWidth,
- config.sparseInfillLineDistance,
- config.infillOverlap, fillAngle);
- break;
-
- case INFILL_GRID:
- generateGridInfill(part->sparseOutline, infillPolygons,
- extrusionWidth,
- config.sparseInfillLineDistance,
- config.infillOverlap, fillAngle);
- break;
-
- case INFILL_LINES:
- generateLineInfill(part->sparseOutline, infillPolygons,
- extrusionWidth,
- config.sparseInfillLineDistance,
- config.infillOverlap, fillAngle);
- break;
-
- case INFILL_CONCENTRIC:
- generateConcentricInfill(
- part->sparseOutline, infillPolygons,
- config.sparseInfillLineDistance);
- break;
- }
- }
-
- gcodeLayer.addPolygonsByOptimizer(infillPolygons, &infillConfig);
- //sendPolygonsToGui("infill", layerNr, layer->z, fillPolygons);
- if (config.insetCount > 0)
+ // Add either infill or perimeter first depending on option
+ if (!config.perimeterBeforeInfill)
{
- if (config.spiralizeMode)
- {
- if (static_cast<int>(layerNr) >= config.downSkinCount)
- inset0Config.spiralize = true;
- if (static_cast<int>(layerNr) == config.downSkinCount && part->insets.size() > 0)
- gcodeLayer.addPolygonsByOptimizer(part->insets[0], &insetXConfig);
- }
- for(int insetNr=part->insets.size()-1; insetNr>-1; insetNr--)
- {
- if (insetNr == 0)
- gcodeLayer.addPolygonsByOptimizer(part->insets[insetNr], &inset0Config);
- else
- gcodeLayer.addPolygonsByOptimizer(part->insets[insetNr], &insetXConfig);
- }
+ addInfillToGCode(part, gcodeLayer, layerNr, extrusionWidth, fillAngle);
+ addInsetToGCode(part, gcodeLayer, layerNr);
+ }else
+ {
+ addInsetToGCode(part, gcodeLayer, layerNr);
+ addInfillToGCode(part, gcodeLayer, layerNr, extrusionWidth, fillAngle);
}
Polygons skinPolygons;
@@ -688,6 +645,66 @@ private:
gcodeLayer.setCombBoundary(nullptr);
}
+ void addInfillToGCode(SliceLayerPart* part, GCodePlanner& gcodeLayer, int layerNr, int extrusionWidth, int fillAngle)
+ {
+ Polygons infillPolygons;
+ if (config.sparseInfillLineDistance > 0)
+ {
+ switch (config.infillPattern)
+ {
+ case INFILL_AUTOMATIC:
+ generateAutomaticInfill(
+ part->sparseOutline, infillPolygons, extrusionWidth,
+ config.sparseInfillLineDistance,
+ config.infillOverlap, fillAngle);
+ break;
+
+ case INFILL_GRID:
+ generateGridInfill(part->sparseOutline, infillPolygons,
+ extrusionWidth,
+ config.sparseInfillLineDistance,
+ config.infillOverlap, fillAngle);
+ break;
+
+ case INFILL_LINES:
+ generateLineInfill(part->sparseOutline, infillPolygons,
+ extrusionWidth,
+ config.sparseInfillLineDistance,
+ config.infillOverlap, fillAngle);
+ break;
+
+ case INFILL_CONCENTRIC:
+ generateConcentricInfill(
+ part->sparseOutline, infillPolygons,
+ config.sparseInfillLineDistance);
+ break;
+ }
+ }
+
+ gcodeLayer.addPolygonsByOptimizer(infillPolygons, &infillConfig);
+ }
+
+ void addInsetToGCode(SliceLayerPart* part, GCodePlanner& gcodeLayer, int layerNr)
+ {
+ if (config.insetCount > 0)
+ {
+ if (config.spiralizeMode)
+ {
+ if (static_cast<int>(layerNr) >= config.downSkinCount)
+ inset0Config.spiralize = true;
+ if (static_cast<int>(layerNr) == config.downSkinCount && part->insets.size() > 0)
+ gcodeLayer.addPolygonsByOptimizer(part->insets[0], &insetXConfig);
+ }
+ for(int insetNr=part->insets.size()-1; insetNr>-1; insetNr--)
+ {
+ if (insetNr == 0)
+ gcodeLayer.addPolygonsByOptimizer(part->insets[insetNr], &inset0Config);
+ else
+ gcodeLayer.addPolygonsByOptimizer(part->insets[insetNr], &insetXConfig);
+ }
+ }
+ }
+
void addSupportToGCode(SliceDataStorage& storage, GCodePlanner& gcodeLayer, int layerNr)
{
if (!storage.support.generated)
diff --git a/src/settings.cpp b/src/settings.cpp
index 5274eb7b00..2952f714a4 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -44,6 +44,7 @@ ConfigSettings::ConfigSettings()
SETTING(infillSpeed, 50);
SETTING(infillPattern, INFILL_AUTOMATIC);
SETTING(skinSpeed, 50);
+ SETTING(perimeterBeforeInfill, 0);
SETTING(supportType, SUPPORT_TYPE_GRID);
SETTING(supportAngle, -1);
@@ -199,7 +200,7 @@ bool ConfigSettings::readSettings(const char* path) {
if(!config.good()) return false;
- while(config.good()) {
+ while(config.good()) {
bool multilineContent = false;
size_t pos = std::string::npos;
std::getline(config, line);
@@ -223,7 +224,7 @@ bool ConfigSettings::readSettings(const char* path) {
// Are we about to read a multiline string?
if(val == CONFIG_MULTILINE_SEPARATOR) {
- val = "";
+ val = "";
multilineContent = true;
bool done_multiline = false;
@@ -245,7 +246,7 @@ bool ConfigSettings::readSettings(const char* path) {
// to the parsed value
RTRIM_STRING(val);
}
- else {
+ else {
line += "\n";
val += line;
}
diff --git a/src/settings.h b/src/settings.h
index bf8825c834..7ffa05e359 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -167,6 +167,7 @@ public:
int infillSpeed;
int infillPattern;
int skinSpeed;
+ int perimeterBeforeInfill;
//Support material
int supportType;