diff options
author | daid <daid303@gmail.com> | 2015-03-03 13:37:04 +0300 |
---|---|---|
committer | daid <daid303@gmail.com> | 2015-03-03 13:37:04 +0300 |
commit | 7b2b9630c7b5ec5e4534de94b46bb37004cccb88 (patch) | |
tree | 80dfbbc8a66a6d4ab24015763fb4d0b69381fa98 | |
parent | 5a6ebd4156a96d2006d32004d71586feebff2be8 (diff) | |
parent | 4621d77a17403b009c4362dc97a5da596e90d3e7 (diff) |
Add option to change print order of infill vs perimeters. Default prints...
-rw-r--r-- | src/fffProcessor.h | 119 | ||||
-rw-r--r-- | src/settings.cpp | 7 | ||||
-rw-r--r-- | src/settings.h | 1 |
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; |