Fixed island retraction. Feature was already found in skeinforge, but bugged (as usual)
This commit is contained in:
parent
0a151cefcf
commit
906d0f9718
2 changed files with 8 additions and 21 deletions
|
@ -25,6 +25,8 @@ def storedSettingInt(name):
|
||||||
return lambda setting: int(profile.getProfileSettingFloat(name))
|
return lambda setting: int(profile.getProfileSettingFloat(name))
|
||||||
def storedPreference(name):
|
def storedPreference(name):
|
||||||
return lambda setting: profile.getPreference(name)
|
return lambda setting: profile.getPreference(name)
|
||||||
|
def storedSettingInvertBoolean(name):
|
||||||
|
return lambda setting: profile.getProfileSetting(name) == "False"
|
||||||
|
|
||||||
def ifSettingAboveZero(name):
|
def ifSettingAboveZero(name):
|
||||||
return lambda setting: profile.getProfileSettingFloat(name) > 0
|
return lambda setting: profile.getProfileSettingFloat(name) > 0
|
||||||
|
@ -376,10 +378,9 @@ def getProfileInformation():
|
||||||
'Filament_Packing_Density_ratio': storedSettingFloat("filament_density"),
|
'Filament_Packing_Density_ratio': storedSettingFloat("filament_density"),
|
||||||
'Maximum_E_Value_before_Reset_float': DEFSET,
|
'Maximum_E_Value_before_Reset_float': DEFSET,
|
||||||
'Minimum_Travel_for_Retraction_millimeters': storedSettingFloat("retraction_min_travel"),
|
'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'),
|
'Retraction_Distance_millimeters': storedSettingFloat('retraction_amount'),
|
||||||
'Restart_Extra_Distance_millimeters': storedSettingFloat('retraction_extra'),
|
'Restart_Extra_Distance_millimeters': storedSettingFloat('retraction_extra'),
|
||||||
'Only_Retract_On_Jumps': storedSetting("retract_on_jumps_only"),
|
|
||||||
},'alteration': {
|
},'alteration': {
|
||||||
'Activate_Alteration': storedSetting('add_start_end_gcode'),
|
'Activate_Alteration': storedSetting('add_start_end_gcode'),
|
||||||
'Name_of_End_File': "end.gcode",
|
'Name_of_End_File': "end.gcode",
|
||||||
|
|
|
@ -165,7 +165,6 @@ class DimensionRepository:
|
||||||
self.retractionDistance = settings.FloatSpin().getFromValue( 0.0, 'Retraction Distance (millimeters):', self, 100.0, 0.0 )
|
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.restartExtraDistance = settings.FloatSpin().getFromValue( 0.0, 'Restart Extra Distance (millimeters):', self, 100.0, 0.0 )
|
||||||
self.executeTitle = 'Dimension'
|
self.executeTitle = 'Dimension'
|
||||||
self.onlyRetractOnJumps = settings.BooleanSetting().getFromValue('Only Retract On Jumps', self, True )
|
|
||||||
|
|
||||||
def execute(self):
|
def execute(self):
|
||||||
'Dimension button has been clicked.'
|
'Dimension button has been clicked.'
|
||||||
|
@ -194,7 +193,6 @@ class DimensionSkein:
|
||||||
self.zDistanceRatio = 5.0
|
self.zDistanceRatio = 5.0
|
||||||
self.addRetraction = True
|
self.addRetraction = True
|
||||||
self.reverseRetraction = False
|
self.reverseRetraction = False
|
||||||
self.onlyRetractOnJumps = True
|
|
||||||
|
|
||||||
def addLinearMoveExtrusionDistanceLine(self, extrusionDistance):
|
def addLinearMoveExtrusionDistanceLine(self, extrusionDistance):
|
||||||
'Get the extrusion distance string from the extrusion distance.'
|
'Get the extrusion distance string from the extrusion distance.'
|
||||||
|
@ -206,7 +204,6 @@ class DimensionSkein:
|
||||||
def getCraftedGcode(self, gcodeText, repository):
|
def getCraftedGcode(self, gcodeText, repository):
|
||||||
'Parse gcode text and store the dimension gcode.'
|
'Parse gcode text and store the dimension gcode.'
|
||||||
self.repository = repository
|
self.repository = repository
|
||||||
self.onlyRetractOnJumps = repository.onlyRetractOnJumps.value
|
|
||||||
filamentRadius = 0.5 * repository.filamentDiameter.value
|
filamentRadius = 0.5 * repository.filamentDiameter.value
|
||||||
filamentPackingArea = math.pi * filamentRadius * filamentRadius * repository.filamentPackingDensity.value
|
filamentPackingArea = math.pi * filamentRadius * filamentRadius * repository.filamentPackingDensity.value
|
||||||
self.minimumTravelForRetraction = self.repository.minimumTravelForRetraction.value
|
self.minimumTravelForRetraction = self.repository.minimumTravelForRetraction.value
|
||||||
|
@ -264,7 +261,7 @@ class DimensionSkein:
|
||||||
if isActive:
|
if isActive:
|
||||||
if not self.repository.retractWithinIsland.value:
|
if not self.repository.retractWithinIsland.value:
|
||||||
locationEnclosureIndex = self.getSmallestEnclosureIndex(location.dropAxis())
|
locationEnclosureIndex = self.getSmallestEnclosureIndex(location.dropAxis())
|
||||||
if locationEnclosureIndex != self.getSmallestEnclosureIndex(self.oldLocation.dropAxis()):
|
if locationEnclosureIndex == self.getSmallestEnclosureIndex(self.oldLocation.dropAxis()):
|
||||||
return None
|
return None
|
||||||
locationMinusOld = location - self.oldLocation
|
locationMinusOld = location - self.oldLocation
|
||||||
xyTravel = abs(locationMinusOld.dropAxis())
|
xyTravel = abs(locationMinusOld.dropAxis())
|
||||||
|
@ -306,7 +303,7 @@ class DimensionSkein:
|
||||||
'Get the retraction ratio.'
|
'Get the retraction ratio.'
|
||||||
distanceToNextThread = self.getDistanceToNextThread(lineIndex)
|
distanceToNextThread = self.getDistanceToNextThread(lineIndex)
|
||||||
if distanceToNextThread == None:
|
if distanceToNextThread == None:
|
||||||
return 1.0
|
return 0.0
|
||||||
if distanceToNextThread >= self.doubleMinimumTravelForRetraction:
|
if distanceToNextThread >= self.doubleMinimumTravelForRetraction:
|
||||||
return 1.0
|
return 1.0
|
||||||
if distanceToNextThread <= self.minimumTravelForRetraction:
|
if distanceToNextThread <= self.minimumTravelForRetraction:
|
||||||
|
@ -384,27 +381,17 @@ class DimensionSkein:
|
||||||
self.absoluteDistanceMode = True
|
self.absoluteDistanceMode = True
|
||||||
elif firstWord == 'G91':
|
elif firstWord == 'G91':
|
||||||
self.absoluteDistanceMode = False
|
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>':
|
elif firstWord == '(<layer>':
|
||||||
self.layerIndex += 1
|
self.layerIndex += 1
|
||||||
|
print '=layer='
|
||||||
settings.printProgress(self.layerIndex, 'dimension')
|
settings.printProgress(self.layerIndex, 'dimension')
|
||||||
elif firstWord == '(</layer>)':
|
elif firstWord == '(</layer>)':
|
||||||
if self.totalExtrusionDistance > 0.0 and not self.repository.relativeExtrusionDistance.value:
|
if self.totalExtrusionDistance > 0.0 and not self.repository.relativeExtrusionDistance.value:
|
||||||
self.distanceFeedRate.addLine('G92 E0')
|
self.distanceFeedRate.addLine('G92 E0')
|
||||||
self.totalExtrusionDistance = 0.0
|
self.totalExtrusionDistance = 0.0
|
||||||
elif firstWord == 'M101':
|
elif firstWord == 'M101':
|
||||||
if self.reverseRetraction:
|
if self.retractionRatio > 0.0:
|
||||||
self.addLinearMoveExtrusionDistanceLine(self.restartDistance * self.retractionRatio)
|
self.addLinearMoveExtrusionDistanceLine(self.restartDistance * self.retractionRatio)
|
||||||
self.reverseRetraction = False
|
|
||||||
if self.totalExtrusionDistance > self.repository.maximumEValueBeforeReset.value:
|
if self.totalExtrusionDistance > self.repository.maximumEValueBeforeReset.value:
|
||||||
if not self.repository.relativeExtrusionDistance.value:
|
if not self.repository.relativeExtrusionDistance.value:
|
||||||
self.distanceFeedRate.addLine('G92 E0')
|
self.distanceFeedRate.addLine('G92 E0')
|
||||||
|
@ -412,9 +399,8 @@ class DimensionSkein:
|
||||||
self.isExtruderActive = True
|
self.isExtruderActive = True
|
||||||
elif firstWord == 'M103':
|
elif firstWord == 'M103':
|
||||||
self.retractionRatio = self.getRetractionRatio(lineIndex)
|
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.addLinearMoveExtrusionDistanceLine(-self.repository.retractionDistance.value * self.retractionRatio)
|
||||||
self.reverseRetraction = True
|
|
||||||
self.isExtruderActive = False
|
self.isExtruderActive = False
|
||||||
elif firstWord == 'M108':
|
elif firstWord == 'M108':
|
||||||
self.flowRate = float( splitLine[1][1 :] )
|
self.flowRate = float( splitLine[1][1 :] )
|
||||||
|
|
Loading…
Reference in a new issue