From b3888e441018c6a290b2bee4a43c0918da516bcc Mon Sep 17 00:00:00 2001 From: daid Date: Mon, 19 Mar 2012 18:15:44 +0100 Subject: [PATCH] Added minimal feedrate setting to cool settings (enhancing skeinforge!) --- SkeinPyPy/fabmetheus_utilities/settings.py | 1 + SkeinPyPy/newui/advancedConfig.py | 9 ++++++--- .../skeinforge_plugins/craft_plugins/cool.py | 6 +++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/SkeinPyPy/fabmetheus_utilities/settings.py b/SkeinPyPy/fabmetheus_utilities/settings.py index 72b54232..783dde0c 100644 --- a/SkeinPyPy/fabmetheus_utilities/settings.py +++ b/SkeinPyPy/fabmetheus_utilities/settings.py @@ -283,6 +283,7 @@ def getSkeinPyPyProfileInformation(): 'Orbital_Outset_millimeters': DEFSET, 'Turn_Fan_On_at_Beginning': DEFSET, 'Turn_Fan_Off_at_Ending': DEFSET, + 'Minimum_feed_rate_mm/s': storedSetting("cool_min_feedrate"), },'hop': { 'Activate_Hop': "False", 'Hop_Over_Layer_Thickness_ratio': DEFSET, diff --git a/SkeinPyPy/newui/advancedConfig.py b/SkeinPyPy/newui/advancedConfig.py index bb2beac7..e9ccbcab 100644 --- a/SkeinPyPy/newui/advancedConfig.py +++ b/SkeinPyPy/newui/advancedConfig.py @@ -26,6 +26,12 @@ class advancedConfigWindow(configBase.configWindowBase): c = configBase.SettingRow(left, "Print order sequence", 'sequence', ['Loops > Perimeter > Infill', 'Loops > Infill > Perimeter', 'Infill > Loops > Perimeter', 'Infill > Perimeter > Loops', 'Perimeter > Infill > Loops', 'Perimeter > Loops > Infill'], 'Sequence of printing. The perimeter is the outer print edge, the loops are the insides of the walls, and the infill is the insides.'); c = configBase.SettingRow(left, "Force first layer sequence", 'force_first_layer_sequence', True, 'This setting forces the order of the first layer to be \'Perimeter > Loops > Infill\'') + configBase.TitleRow(left, "Cool") + c = configBase.SettingRow(left, "Minimum feedrate (mm/s)", 'cool_min_feedrate', False, 'The minimal layer time can cause the print to slow down so much it starts to ooze. The minimal feedrate protects against this. Even if a print gets slown down it will never be slower then this minimal feedrate.') + + configBase.TitleRow(left, "Joris") + c = configBase.SettingRow(left, "Joris the outer edge", 'joris', False, '[Joris] is a code name for smoothing out the Z move of the outer edge. This will create a steady Z increase over the whole print. It is intended to be used with a single walled wall thickness to make cups/vases.') + configBase.TitleRow(right, "Infill") c = configBase.SettingRow(right, "Infill pattern", 'infill_type', ['Line', 'Grid Circular', 'Grid Hexagonal', 'Grid Rectangular'], 'Pattern of the none-solid infill. Line is default, but grids can provide a strong print.') c = configBase.SettingRow(right, "Solid infill top", 'solid_top', True, 'Create a solid top surface, if set to false the top is filled with the fill percentage. Useful for cups/vases.') @@ -35,9 +41,6 @@ class advancedConfigWindow(configBase.configWindowBase): c = configBase.SettingRow(right, "Support material amount (%)", 'support_rate', '100', 'Amount of material used for support, less material gives a weaker support structure which is easier to remove.') c = configBase.SettingRow(right, "Support distance from object (mm)", 'support_distance', '0.5', 'Distance between the support structure and the object.') - configBase.TitleRow(left, "Joris") - c = configBase.SettingRow(left, "Joris the outer edge", 'joris', False, '[Joris] is a code name for smoothing out the Z move of the outer edge. This will create a steady Z increase over the whole print. It is intended to be used with a single walled wall thickness to make cups/vases.') - main.Fit() self.Fit() diff --git a/SkeinPyPy/skeinforge_application/skeinforge_plugins/craft_plugins/cool.py b/SkeinPyPy/skeinforge_application/skeinforge_plugins/craft_plugins/cool.py index d8572d36..419eab9f 100644 --- a/SkeinPyPy/skeinforge_application/skeinforge_plugins/craft_plugins/cool.py +++ b/SkeinPyPy/skeinforge_application/skeinforge_plugins/craft_plugins/cool.py @@ -161,6 +161,8 @@ class CoolRepository: self.turnFanOnAtBeginning = settings.BooleanSetting().getFromValue('Turn Fan On at Beginning', self, True) self.turnFanOffAtEnding = settings.BooleanSetting().getFromValue('Turn Fan Off at Ending', self, True) self.executeTitle = 'Cool' + + self.minimumFeedRate = settings.FloatSpin().getFromValue(0.0, 'Minimum feed rate (mm/s):', self, 10.0, 5.0) def execute(self): 'Cool button has been clicked.' @@ -188,6 +190,7 @@ class CoolSkein: self.oldFlowRateString = None self.oldLocation = None self.oldTemperature = None + self.minFeedrate = 0 def addCoolOrbits(self, remainingOrbitTime): 'Add the minimum radius cool orbits.' @@ -245,7 +248,7 @@ class CoolSkein: def getCoolMove(self, line, location, splitLine): 'Get cool line according to time spent on layer.' self.feedRateMinute = gcodec.getFeedRateMinute(self.feedRateMinute, splitLine) - return self.distanceFeedRate.getLineWithFeedRate(self.multiplier * self.feedRateMinute, line, splitLine) + return self.distanceFeedRate.getLineWithFeedRate(max(self.minFeedrate, self.multiplier * self.feedRateMinute), line, splitLine) def getCraftedGcode(self, gcodeText, repository): 'Parse gcode text and store the cool gcode.' @@ -255,6 +258,7 @@ class CoolSkein: self.halfCorner = complex(repository.minimumOrbitalRadius.value, repository.minimumOrbitalRadius.value) self.lines = archive.getTextLines(gcodeText) self.minimumArea = 4.0 * repository.minimumOrbitalRadius.value * repository.minimumOrbitalRadius.value + self.minFeedrate = repository.minimumFeedRate.value * 60 self.parseInitialization() self.boundingRectangle = gcodec.BoundingRectangle().getFromGcodeLines(self.lines[self.lineIndex :], 0.5 * self.edgeWidth) margin = 0.2 * self.edgeWidth -- 2.30.2