chiark / gitweb /
Fixed island retraction. Feature was already found in skeinforge, but bugged (as...
authorDaid <daid303@gmail.com>
Thu, 21 Jun 2012 16:44:30 +0000 (18:44 +0200)
committerDaid <daid303@gmail.com>
Thu, 21 Jun 2012 16:44:30 +0000 (18:44 +0200)
Cura/cura_sf/fabmetheus_utilities/settings.py
Cura/cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/dimension.py

index 92d32622f3f6ddc037cc9358ad19a98161dce29b..811aaeabcde15d9f90578adc6a520a1b7325c571 100644 (file)
@@ -25,6 +25,8 @@ def storedSettingInt(name):
        return lambda setting: int(profile.getProfileSettingFloat(name))
 def storedPreference(name):
        return lambda setting: profile.getPreference(name)
+def storedSettingInvertBoolean(name):
+       return lambda setting: profile.getProfileSetting(name) == "False"
 
 def ifSettingAboveZero(name):
        return lambda setting: profile.getProfileSettingFloat(name) > 0
@@ -376,10 +378,9 @@ def getProfileInformation():
                        'Filament_Packing_Density_ratio': storedSettingFloat("filament_density"),
                        'Maximum_E_Value_before_Reset_float': DEFSET,
                        'Minimum_Travel_for_Retraction_millimeters': storedSettingFloat("retraction_min_travel"),
-                       'Retract_Within_Island': DEFSET,
+                       'Retract_Within_Island': storedSettingInvertBoolean("retract_on_jumps_only"),
                        'Retraction_Distance_millimeters': storedSettingFloat('retraction_amount'),
                        'Restart_Extra_Distance_millimeters': storedSettingFloat('retraction_extra'),
-                       'Only_Retract_On_Jumps': storedSetting("retract_on_jumps_only"),
                },'alteration': {
                        'Activate_Alteration': storedSetting('add_start_end_gcode'),
                        'Name_of_End_File': "end.gcode",
index 59b9cffcdf807704a2f2211b218e690c3d10e17e..4080fc9af71362fed2f7c696e77b6ae430dfb239 100644 (file)
@@ -165,7 +165,6 @@ class DimensionRepository:
                self.retractionDistance = settings.FloatSpin().getFromValue( 0.0, 'Retraction Distance (millimeters):', self, 100.0, 0.0 )
                self.restartExtraDistance = settings.FloatSpin().getFromValue( 0.0, 'Restart Extra Distance (millimeters):', self, 100.0, 0.0 )
                self.executeTitle = 'Dimension'
-               self.onlyRetractOnJumps = settings.BooleanSetting().getFromValue('Only Retract On Jumps', self, True )
 
        def execute(self):
                'Dimension button has been clicked.'
@@ -194,7 +193,6 @@ class DimensionSkein:
                self.zDistanceRatio = 5.0
                self.addRetraction = True
                self.reverseRetraction = False
-               self.onlyRetractOnJumps = True
 
        def addLinearMoveExtrusionDistanceLine(self, extrusionDistance):
                'Get the extrusion distance string from the extrusion distance.'
@@ -206,7 +204,6 @@ class DimensionSkein:
        def getCraftedGcode(self, gcodeText, repository):
                'Parse gcode text and store the dimension gcode.'
                self.repository = repository
-               self.onlyRetractOnJumps = repository.onlyRetractOnJumps.value
                filamentRadius = 0.5 * repository.filamentDiameter.value
                filamentPackingArea = math.pi * filamentRadius * filamentRadius * repository.filamentPackingDensity.value
                self.minimumTravelForRetraction = self.repository.minimumTravelForRetraction.value
@@ -264,7 +261,7 @@ class DimensionSkein:
                                if isActive:
                                        if not self.repository.retractWithinIsland.value:
                                                locationEnclosureIndex = self.getSmallestEnclosureIndex(location.dropAxis())
-                                               if locationEnclosureIndex != self.getSmallestEnclosureIndex(self.oldLocation.dropAxis()):
+                                               if locationEnclosureIndex == self.getSmallestEnclosureIndex(self.oldLocation.dropAxis()):
                                                        return None
                                        locationMinusOld = location - self.oldLocation
                                        xyTravel = abs(locationMinusOld.dropAxis())
@@ -306,7 +303,7 @@ class DimensionSkein:
                'Get the retraction ratio.'
                distanceToNextThread = self.getDistanceToNextThread(lineIndex)
                if distanceToNextThread == None:
-                       return 1.0
+                       return 0.0
                if distanceToNextThread >= self.doubleMinimumTravelForRetraction:
                        return 1.0
                if distanceToNextThread <= self.minimumTravelForRetraction:
@@ -384,27 +381,17 @@ class DimensionSkein:
                        self.absoluteDistanceMode = True
                elif firstWord == 'G91':
                        self.absoluteDistanceMode = False
-               elif firstWord == '(<nestedRing>)':
-                       if self.onlyRetractOnJumps:
-                               self.addRetraction = False
-               elif firstWord == '(</nestedRing>)':
-                       if self.onlyRetractOnJumps:
-                               self.addRetraction = True
-                               if not self.reverseRetraction:
-                                       self.retractionRatio = self.getRetractionRatio(lineIndex)
-                                       self.addLinearMoveExtrusionDistanceLine(-self.repository.retractionDistance.value * self.retractionRatio)
-                                       self.reverseRetraction = True
                elif firstWord == '(<layer>':
                        self.layerIndex += 1
+                       print '=layer='
                        settings.printProgress(self.layerIndex, 'dimension')
                elif firstWord == '(</layer>)':
                        if self.totalExtrusionDistance > 0.0 and not self.repository.relativeExtrusionDistance.value:
                                self.distanceFeedRate.addLine('G92 E0')
                                self.totalExtrusionDistance = 0.0
                elif firstWord == 'M101':
-                       if self.reverseRetraction:
+                       if self.retractionRatio > 0.0:
                                self.addLinearMoveExtrusionDistanceLine(self.restartDistance * self.retractionRatio)
-                               self.reverseRetraction = False
                        if self.totalExtrusionDistance > self.repository.maximumEValueBeforeReset.value: 
                                if not self.repository.relativeExtrusionDistance.value:
                                        self.distanceFeedRate.addLine('G92 E0')
@@ -412,9 +399,8 @@ class DimensionSkein:
                        self.isExtruderActive = True
                elif firstWord == 'M103':
                        self.retractionRatio = self.getRetractionRatio(lineIndex)
-                       if self.addRetraction and not self.reverseRetraction:
+                       if self.retractionRatio > 0.0:
                                self.addLinearMoveExtrusionDistanceLine(-self.repository.retractionDistance.value * self.retractionRatio)
-                               self.reverseRetraction = True
                        self.isExtruderActive = False
                elif firstWord == 'M108':
                        self.flowRate = float( splitLine[1][1 :] )