chiark / gitweb /
Added minimal feedrate setting to cool settings (enhancing skeinforge!)
authordaid <daid303@gmail.com>
Mon, 19 Mar 2012 17:15:44 +0000 (18:15 +0100)
committerdaid <daid303@gmail.com>
Mon, 19 Mar 2012 17:15:44 +0000 (18:15 +0100)
SkeinPyPy/fabmetheus_utilities/settings.py
SkeinPyPy/newui/advancedConfig.py
SkeinPyPy/skeinforge_application/skeinforge_plugins/craft_plugins/cool.py

index 72b542327c495838b4ecad3c0ac211281b2134de..783dde0cfc7db133b6c8bd1ed452986aab919f87 100644 (file)
@@ -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,
index bb2beac72842314a453199b630d3b0512a281ca7..e9ccbcabe78c43d0d5b45d6e4a4652ac3ef272ef 100644 (file)
@@ -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()
 
index d8572d363f20cfab84c7572737a028d6804b28fe..419eab9f8576c52986b8025874f5f76e53885d5f 100644 (file)
@@ -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