diff --git a/documentation/fabmetheus_utilities.euclidean.html b/documentation/fabmetheus_utilities.euclidean.html
index 1924856..d9e5c0a 100644
--- a/documentation/fabmetheus_utilities.euclidean.html
+++ b/documentation/fabmetheus_utilities.euclidean.html
@@ -125,13 +125,13 @@
- __repr__(self)
- Get the string representation of this surrounding loop.
-- addPerimeterInner(self, extrusionHalfWidth, oldOrderedLocation, skein, threadSequence)
- Add to the perimeter and the inner island.
+- addPerimeterInner(self, extrusionSpacingHalfWidth, oldOrderedLocation, skein, threadSequence)
- Add to the perimeter and the inner island.
- addToBoundary(self, vector3)
- Add vector3 to boundary.
- addToLoop(self, vector3)
- Add vector3 to loop.
-- addToThreads(self, extrusionHalfWidth, oldOrderedLocation, skein, threadSequence)
- Add to paths from the last location. perimeter>inner >fill>paths or fill> perimeter>inner >paths
+- addToThreads(self, extrusionSpacingHalfWidth, oldOrderedLocation, skein, threadSequence)
- Add to paths from the last location. perimeter>inner >fill>paths or fill> perimeter>inner >paths
- getFillLoops(self, penultimateFillLoops)
- Get last fill loops from the outside loop and the loops inside the inside loops.
@@ -139,9 +139,9 @@
- getSurroundingBoundaries(self)
- Get the boundary of the surronding loop plus any boundaries of the innerNestedRings.
-- transferClosestFillLoops(self, extrusionHalfWidth, oldOrderedLocation, skein, threadSequence)
- Transfer closest fill loops.
+- transferClosestFillLoops(self, extrusionSpacingHalfWidth, oldOrderedLocation, skein, threadSequence)
- Transfer closest fill loops.
-- transferInfillPaths(self, extrusionHalfWidth, oldOrderedLocation, skein, threadSequence)
- Transfer the infill paths.
+- transferInfillPaths(self, extrusionSpacingHalfWidth, oldOrderedLocation, skein, threadSequence)
- Transfer the infill paths.
- transferPaths(self, paths)
- Transfer paths.
@@ -285,8 +285,8 @@
- addSegmentToPixelTable(beginComplex, endComplex, pixelDictionary, shortenDistanceBegin, shortenDistanceEnd, width)
- Add line segment to the pixel table.
- addSquareTwoToPixelDictionary(pixelDictionary, point, value, width)
- Add square with two pixels around the center to pixel dictionary.
- addSurroundingLoopBeginning(distanceFeedRate, loop, z)
- Add surrounding loop beginning to gcode output.
- - addToThreadsFromLoop(extrusionHalfWidth, gcodeType, loop, oldOrderedLocation, skein)
- Add to threads from the last location from loop.
- - addToThreadsRemove(extrusionHalfWidth, nestedRings, oldOrderedLocation, skein, threadSequence)
- Add to threads from the last location from surrounding loops.
+ - addToThreadsFromLoop(extrusionSpacingHalfWidth, gcodeType, loop, oldOrderedLocation, skein)
- Add to threads from the last location from loop.
+ - addToThreadsRemove(extrusionSpacingHalfWidth, nestedRings, oldOrderedLocation, skein, threadSequence)
- Add to threads from the last location from surrounding loops.
- addValueSegmentToPixelTable(beginComplex, endComplex, pixelDictionary, value, width)
- Add line segment to the pixel table.
- addValueToOutput(depth, keyInput, output, value)
- Add value to the output.
- addXIntersectionIndexesFromLoop(frontOverWidth, loop, solidIndex, xIntersectionIndexLists, width, yList)
- Add the x intersection indexes for a loop.
@@ -382,7 +382,7 @@
- getLoopConvexCentroid(polygonComplex)
- Get centroid of the convex hull of a complex polygon.
- getLoopInsideContainingLoop(containingLoop, loops)
- Get a loop that is inside the containing loop.
- getLoopLength(polygon)
- Get the length of a polygon perimeter.
- - getLoopStartingNearest(extrusionHalfWidth, location, loop)
- Add to threads from the last location from loop.
+ - getLoopStartingNearest(extrusionSpacingHalfWidth, location, loop)
- Add to threads from the last location from loop.
- getLoopWithoutCloseEnds(close, loop)
- Get loop without close ends.
- getLoopWithoutCloseSequentialPoints(close, loop)
- Get loop without close sequential points.
- getMaximum(firstComplex, secondComplex)
- Get a complex with each component the maximum of the respective components of a pair of complexes.
@@ -439,7 +439,7 @@
- getThreeSignificantFigures(number)
- Get number rounded to three significant figures as a string.
- getTopPath(path)
- Get the top of the path.
- getTopPaths(paths)
- Get the top of the paths.
- - getTransferClosestSurroundingLoop(extrusionHalfWidth, nestedRings, oldOrderedLocation, skein, threadSequence)
- Get and transfer the closest remaining surrounding loop.
+ - getTransferClosestSurroundingLoop(extrusionSpacingHalfWidth, nestedRings, oldOrderedLocation, skein, threadSequence)
- Get and transfer the closest remaining surrounding loop.
- getTransferredPaths(insides, loop)
- Get transferred paths from inside paths.
- getTransferredSurroundingLoops(insides, loop)
- Get transferred paths from inside surrounding loops.
- getTranslatedComplexPath(path, translateComplex)
- Get the translated complex path.
@@ -485,7 +485,7 @@
- subtractXIntersectionsTable(subtractFromTable, subtractTable)
- Subtract the subtractTable from the subtractFromTable.
- swapList(elements, indexBegin, indexEnd)
- Swap the list elements.
- toggleHashtable(hashtable, key, value)
- Toggle a hashtable between having and not having a key.
- - transferClosestFillLoop(extrusionHalfWidth, oldOrderedLocation, remainingFillLoops, skein)
- Transfer the closest remaining fill loop.
+ - transferClosestFillLoop(extrusionSpacingHalfWidth, oldOrderedLocation, remainingFillLoops, skein)
- Transfer the closest remaining fill loop.
- transferClosestPath(oldOrderedLocation, remainingPaths, skein)
- Transfer the closest remaining path.
- transferClosestPaths(oldOrderedLocation, remainingPaths, skein)
- Transfer the closest remaining paths.
- transferPathsToSurroundingLoops(nestedRings, paths)
- Transfer paths to surrounding loops.
diff --git a/documentation/skeinforge_application.skeinforge_plugins.craft_plugins.fill.html b/documentation/skeinforge_application.skeinforge_plugins.craft_plugins.fill.html
index ff56f7a..26e150b 100644
--- a/documentation/skeinforge_application.skeinforge_plugins.craft_plugins.fill.html
+++ b/documentation/skeinforge_application.skeinforge_plugins.craft_plugins.fill.html
@@ -406,8 +406,8 @@
- addPathIndexSecondSegment(gridPixel, pathIndexTable, pixelTable, segmentSecondPixel)
- Add the path index of the closest segment found toward the second segment.
- addPointOnPath(path, pathIndex, pixelTable, point, pointIndex, width)
- Add a point to a path and the pixel table.
- addPointOnPathIfFree(path, pathIndex, pixelTable, point, pointIndex, width)
- Add the closest point to a path, if the point added to a path is free.
- - addSparseEndpoints(doubleExtrusionWidth, endpoints, fillLine, horizontalSegmentLists, infillSolidity, removedEndpoints, solidSurfaceThickness, surroundingXIntersections)
- Add sparse endpoints.
- - addSparseEndpointsFromSegment(doubleExtrusionWidth, endpoints, fillLine, horizontalSegmentLists, infillSolidity, removedEndpoints, segment, solidSurfaceThickness, surroundingXIntersections)
- Add sparse endpoints from a segment.
+ - addSparseEndpoints(doubleExtrusionSpacing, endpoints, fillLine, horizontalSegmentLists, infillSolidity, removedEndpoints, solidSurfaceThickness, surroundingXIntersections)
- Add sparse endpoints.
+ - addSparseEndpointsFromSegment(doubleExtrusionSpacing, endpoints, fillLine, horizontalSegmentLists, infillSolidity, removedEndpoints, segment, solidSurfaceThickness, surroundingXIntersections)
- Add sparse endpoints from a segment.
- addYIntersectionPathToList(pathIndex, pointIndex, y, yIntersection, yIntersectionPaths)
- Add the y intersection path to the y intersection paths.
- compareDistanceFromCenter(self, other)
- Get comparison in order to sort y intersections in ascending order of distance from the center.
- comparePointIndexDescending(self, other)
- Get comparison in order to sort y intersections in descending order of point index.
@@ -431,14 +431,14 @@
- isAddedPointOnPathFree(path, pixelTable, point, pointIndex, width)
- Determine if the point added to a path is intersecting the pixel table or the path.
- isAddedPointOnPathIntersectingPath(begin, path, point, pointIndex)
- Determine if the point added to a path is intersecting the path by checking line intersection.
- isIntersectingLoopsPaths(loops, paths, pointBegin, pointEnd)
- Determine if the segment between the first and second point is intersecting the loop list.
- - isPointAddedAroundClosest(pixelTable, layerExtrusionWidth, paths, removedEndpointPoint, width)
- Add the closest removed endpoint to the path, with minimal twisting.
+ - isPointAddedAroundClosest(pixelTable, layerExtrusionSpacing, paths, removedEndpointPoint, width)
- Add the closest removed endpoint to the path, with minimal twisting.
- isSegmentAround(aroundSegments, segment)
- Determine if there is another segment around.
- isSegmentCompletelyInAnIntersection(segment, xIntersections)
- Add sparse endpoints from a segment.
- isSegmentInX(segment, xFirst, xSecond)
- Determine if the segment overlaps within x.
- isSharpCorner(beginComplex, centerComplex, endComplex)
- Determine if the three complex points form a sharp corner.
- - isSidePointAdded(pixelTable, closestPath, closestPathIndex, closestPointIndex, layerExtrusionWidth, removedEndpointPoint, width)
- Add side point along with the closest removed endpoint to the path, with minimal twisting.
+ - isSidePointAdded(pixelTable, closestPath, closestPathIndex, closestPointIndex, layerExtrusionSpacing, removedEndpointPoint, width)
- Add side point along with the closest removed endpoint to the path, with minimal twisting.
- main()
- Display the fill dialog.
- - removeEndpoints(pixelTable, layerExtrusionWidth, paths, removedEndpoints, aroundWidth)
- Remove endpoints which are added to the path.
+ - removeEndpoints(pixelTable, layerExtrusionSpacing, paths, removedEndpoints, aroundWidth)
- Remove endpoints which are added to the path.
- setIsOutside(yCloseToCenterPath, yIntersectionPaths)
- Determine if the yCloseToCenterPath is outside.
- writeOutput(fileName, shouldAnalyze=True)
- Fill an inset gcode file.
diff --git a/fabmetheus_utilities/euclidean.py b/fabmetheus_utilities/euclidean.py
index 1cbfefc..e571551 100644
--- a/fabmetheus_utilities/euclidean.py
+++ b/fabmetheus_utilities/euclidean.py
@@ -199,9 +199,9 @@ def addSurroundingLoopBeginning( distanceFeedRate, loop, z ):
pointVector3 = Vector3(point.real, point.imag, z)
distanceFeedRate.addLine( distanceFeedRate.getBoundaryLine( pointVector3 ) )
-def addToThreadsFromLoop(extrusionHalfWidth, gcodeType, loop, oldOrderedLocation, skein):
+def addToThreadsFromLoop(extrusionSpacingHalfWidth, gcodeType, loop, oldOrderedLocation, skein):
"""Add to threads from the last location from loop."""
- loop = getLoopStartingNearest(extrusionHalfWidth, oldOrderedLocation.dropAxis(), loop)
+ loop = getLoopStartingNearest(extrusionSpacingHalfWidth, oldOrderedLocation.dropAxis(), loop)
oldOrderedLocation.x = loop[0].real
oldOrderedLocation.y = loop[0].imag
gcodeTypeStart = gcodeType
@@ -212,10 +212,10 @@ def addToThreadsFromLoop(extrusionHalfWidth, gcodeType, loop, oldOrderedLocation
skein.addGcodeFromThreadZ(loop + [loop[0]], oldOrderedLocation.z)
skein.distanceFeedRate.addLine('(%s>)' % gcodeType)
-def addToThreadsRemove(extrusionHalfWidth, nestedRings, oldOrderedLocation, skein, threadSequence):
+def addToThreadsRemove(extrusionSpacingHalfWidth, nestedRings, oldOrderedLocation, skein, threadSequence):
"""Add to threads from the last location from surrounding loops."""
while len(nestedRings) > 0:
- getTransferClosestSurroundingLoop(extrusionHalfWidth, nestedRings, oldOrderedLocation, skein, threadSequence)
+ getTransferClosestSurroundingLoop(extrusionSpacingHalfWidth, nestedRings, oldOrderedLocation, skein, threadSequence)
def addValueSegmentToPixelTable( beginComplex, endComplex, pixelDictionary, value, width ):
"""Add line segment to the pixel table."""
@@ -1159,12 +1159,12 @@ def getLoopLength( polygon ):
polygonLength += abs( point - secondPoint )
return polygonLength
-def getLoopStartingNearest(extrusionHalfWidth, location, loop):
+def getLoopStartingNearest(extrusionSpacingHalfWidth, location, loop):
"""Add to threads from the last location from loop."""
nearestIndex = getNearestDistanceIndex(location, loop).index
loop = getAroundLoop(nearestIndex, nearestIndex, loop)
nearestPoint = getNearestPointOnSegment(loop[0], loop[1], location)
- if abs(nearestPoint - loop[0]) > extrusionHalfWidth and abs(nearestPoint - loop[1]) > extrusionHalfWidth:
+ if abs(nearestPoint - loop[0]) > extrusionSpacingHalfWidth and abs(nearestPoint - loop[1]) > extrusionSpacingHalfWidth:
loop = [nearestPoint] + loop[1 :] + [loop[0]]
elif abs(nearestPoint - loop[0]) > abs(nearestPoint - loop[1]):
loop = loop[1 :] + [loop[0]]
@@ -1658,7 +1658,7 @@ def getTopPaths(paths):
top = max(top, point.z)
return top
-def getTransferClosestSurroundingLoop(extrusionHalfWidth, nestedRings, oldOrderedLocation, skein, threadSequence):
+def getTransferClosestSurroundingLoop(extrusionSpacingHalfWidth, nestedRings, oldOrderedLocation, skein, threadSequence):
"""Get and transfer the closest remaining surrounding loop."""
if len(nestedRings) > 0:
oldOrderedLocation.z = nestedRings[0].z
@@ -1670,7 +1670,7 @@ def getTransferClosestSurroundingLoop(extrusionHalfWidth, nestedRings, oldOrdere
closestDistance = distance
closestSurroundingLoop = remainingSurroundingLoop
nestedRings.remove(closestSurroundingLoop)
- closestSurroundingLoop.addToThreads(extrusionHalfWidth, oldOrderedLocation, skein, threadSequence)
+ closestSurroundingLoop.addToThreads(extrusionSpacingHalfWidth, oldOrderedLocation, skein, threadSequence)
return closestSurroundingLoop
def getTransferredPaths( insides, loop ):
@@ -2047,7 +2047,7 @@ def toggleHashtable( hashtable, key, value ):
else:
hashtable[key] = value
-def transferClosestFillLoop(extrusionHalfWidth, oldOrderedLocation, remainingFillLoops, skein):
+def transferClosestFillLoop(extrusionSpacingHalfWidth, oldOrderedLocation, remainingFillLoops, skein):
"""Transfer the closest remaining fill loop."""
closestDistance = 987654321987654321.0
closestFillLoop = None
@@ -2061,7 +2061,7 @@ def transferClosestFillLoop(extrusionHalfWidth, oldOrderedLocation, remainingFil
closestFillLoop = newClosestFillLoop
newClosestFillLoop = getLoopInsideContainingLoop(closestFillLoop, remainingFillLoops)
remainingFillLoops.remove(closestFillLoop)
- addToThreadsFromLoop(extrusionHalfWidth, 'loop', closestFillLoop[:], oldOrderedLocation, skein)
+ addToThreadsFromLoop(extrusionSpacingHalfWidth, 'loop', closestFillLoop[:], oldOrderedLocation, skein)
def transferClosestPath( oldOrderedLocation, remainingPaths, skein ):
"""Transfer the closest remaining path."""
@@ -2302,24 +2302,24 @@ def addToLoop(self, vector3):
self.loop.append(vector3.dropAxis())
self.z = vector3.z
- def addPerimeterInner(self, extrusionHalfWidth, oldOrderedLocation, skein, threadSequence):
+ def addPerimeterInner(self, extrusionSpacingHalfWidth, oldOrderedLocation, skein, threadSequence):
"""Add to the perimeter and the inner island."""
if self.loop is None:
skein.distanceFeedRate.addLine('()')
transferClosestPaths(oldOrderedLocation, self.perimeterPaths[:], skein)
skein.distanceFeedRate.addLine('()')
else:
- addToThreadsFromLoop(extrusionHalfWidth, 'perimeter', self.loop[:], oldOrderedLocation, skein)
+ addToThreadsFromLoop(extrusionSpacingHalfWidth, 'perimeter', self.loop[:], oldOrderedLocation, skein)
skein.distanceFeedRate.addLine('()')
- addToThreadsRemove(extrusionHalfWidth, self.innerNestedRings[:], oldOrderedLocation, skein, threadSequence)
+ addToThreadsRemove(extrusionSpacingHalfWidth, self.innerNestedRings[:], oldOrderedLocation, skein, threadSequence)
- def addToThreads(self, extrusionHalfWidth, oldOrderedLocation, skein, threadSequence):
+ def addToThreads(self, extrusionSpacingHalfWidth, oldOrderedLocation, skein, threadSequence):
"""Add to paths from the last location. perimeter>inner >fill>paths or fill> perimeter>inner >paths"""
addSurroundingLoopBeginning(skein.distanceFeedRate, self.boundary, self.z)
threadFunctionDictionary = {
'infill' : self.transferInfillPaths, 'loops' : self.transferClosestFillLoops, 'perimeter' : self.addPerimeterInner}
for threadType in threadSequence:
- threadFunctionDictionary[threadType](extrusionHalfWidth, oldOrderedLocation, skein, threadSequence)
+ threadFunctionDictionary[threadType](extrusionSpacingHalfWidth, oldOrderedLocation, skein, threadSequence)
skein.distanceFeedRate.addLine('()')
def getFillLoops(self, penultimateFillLoops):
@@ -2359,15 +2359,15 @@ def getSurroundingBoundaries(self):
surroundingBoundaries.append(nestedRing.boundary)
return surroundingBoundaries
- def transferClosestFillLoops(self, extrusionHalfWidth, oldOrderedLocation, skein, threadSequence):
+ def transferClosestFillLoops(self, extrusionSpacingHalfWidth, oldOrderedLocation, skein, threadSequence):
"""Transfer closest fill loops."""
if len( self.extraLoops ) < 1:
return
remainingFillLoops = self.extraLoops[:]
while len( remainingFillLoops ) > 0:
- transferClosestFillLoop(extrusionHalfWidth, oldOrderedLocation, remainingFillLoops, skein)
+ transferClosestFillLoop(extrusionSpacingHalfWidth, oldOrderedLocation, remainingFillLoops, skein)
- def transferInfillPaths(self, extrusionHalfWidth, oldOrderedLocation, skein, threadSequence):
+ def transferInfillPaths(self, extrusionSpacingHalfWidth, oldOrderedLocation, skein, threadSequence):
"""Transfer the infill paths."""
transferClosestPaths(oldOrderedLocation, self.infillPaths[:], skein)
diff --git a/fabmetheus_utilities/gcodec.py b/fabmetheus_utilities/gcodec.py
index b3ab760..e0419e7 100644
--- a/fabmetheus_utilities/gcodec.py
+++ b/fabmetheus_utilities/gcodec.py
@@ -385,8 +385,8 @@ def getLineWithZ(self, line, splitLine, z):
return getLineWithValueString('Z', line, splitLine, self.getRounded(z))
def getLineWithE(self, line, splitLine, e):
- """Get the line with a z."""
- return getLineWithValueString('E', line, splitLine, self.getRounded(z))
+ """Get the line with a e."""
+ return getLineWithValueString('E', line, splitLine, self.getRounded(e))
def getRounded(self, number):
"""Get number rounded to the number of carried decimal places as a string."""
diff --git a/fabmetheus_utilities/version.txt b/fabmetheus_utilities/version.txt
index eb45151..691df99 100644
--- a/fabmetheus_utilities/version.txt
+++ b/fabmetheus_utilities/version.txt
@@ -1 +1 @@
-SFACT_V2.0 11.08.01 help at www.reprapfordummies.net
\ No newline at end of file
+SFACT_V3.0b 20.08.01 help at www.reprapfordummies.net
\ No newline at end of file
diff --git a/skeinforge_application/skeinforge_plugins/analyze_plugins/statistic.py b/skeinforge_application/skeinforge_plugins/analyze_plugins/statistic.py
index 8a9c479..d87a2f9 100644
--- a/skeinforge_application/skeinforge_plugins/analyze_plugins/statistic.py
+++ b/skeinforge_application/skeinforge_plugins/analyze_plugins/statistic.py
@@ -56,6 +56,7 @@
from fabmetheus_utilities import settings
from skeinforge_application.skeinforge_utilities import skeinforge_polyfile
from skeinforge_application.skeinforge_utilities import skeinforge_profile
+from skeinforge_application.skeinforge_plugins.craft_plugins import dimension
import cStringIO
import math
import sys
@@ -122,8 +123,9 @@ def __init__(self):
self.machineTime = settings.FloatSpin().getFromValue( 0.0, 'Machine Time ($/hour):', self, 5.0, 1.0 )
self.material = settings.FloatSpin().getFromValue( 0.0, 'Material ($/kg):', self, 40.0, 20.0 )
settings.LabelSeparator().getFromRepository(self)
- self.calculatedPrintTime = settings.FloatSpin().getFromValue( 0, 'Calculated Print Time (seconds):', self,10000, 1 )
- self.realPrintTime = settings.FloatSpin().getFromValue( 0, 'Real Print Time (seconds):', self,10000, 1 )
+ self.calculatedPrintTime = settings.FloatSpin().getFromValue( 0, 'Calculated Print Time (seconds):', self,100000, 1 )
+ self.realPrintTime = settings.FloatSpin().getFromValue( 0, 'Real Print Time (seconds):', self,100000, 1 )
+ self.totalCommandsEntered = settings.FloatSpin().getFromValue( 0, 'Total Command Count:', self,100000, 1 )
settings.LabelSeparator().getFromRepository(self)
self.density = settings.FloatSpin().getFromValue( 500.0, 'Density (kg/m3):', self, 2000.0, 1000.0 )
self.fileNameInput = settings.FileNameInput().getFromFileName( [ ('Gcode text files', '*.gcode') ], 'Open File to Generate Statistics for', self, '')
@@ -187,35 +189,31 @@ def getCraftedGcode(self, gcodeText, repository):
roundedLow = euclidean.getRoundedPoint( self.cornerMinimum )
roundedExtent = euclidean.getRoundedPoint( extent )
axisString = " axis extrusion starts at "
- FilamentRadius = self.repository.FilamentDiameter.value /2
+ FilamentRadius = repository.FilamentDiameter.value /2
filamentCrossSectionArea = (FilamentRadius * FilamentRadius)*math.pi
- extrusionXSection =(((self.extrusionHeight+self.extrusionWidth)/2/2)*((self.extrusionHeight+self.extrusionWidth)/2/2))*math.pi
- volumeExtruded = extrusionXSection * self.totalDistanceExtruded
- mass = (volumeExtruded /1000)* repository.density.value /1000
- self.delay = (repository.realPrintTime.value - repository.calculatedPrintTime.value) / self.totalCommandcount
+ extrusionXSection =(((self.extrusionHeight+self.extrusionWidth)/4)**2)*math.pi
+ volumeExtruded = extrusionXSection * self.totalDistanceExtruded / 1000
+ mass = (volumeExtruded /1000)* repository.density.value
+ self.delay = (repository.realPrintTime.value - repository.calculatedPrintTime.value ) / repository.totalCommandsEntered.value
self.estimatedBuildTime = self.delay * self.totalCommandcount + self.totalBuildTime
machineTimeCost = repository.machineTime.value * self.estimatedBuildTime / 3600.0
self.filamentInOutRatio = filamentCrossSectionArea / ((((self.extrusionHeight+self.extrusionWidth)/4)*((self.extrusionHeight+self.extrusionWidth)/4)*math.pi))
- self.totalDistanceFilament = self.totalDistanceExtruded / self.filamentInOutRatio
+ self.totalDistanceFilament = self.totalDistanceExtruded
averageFeedRate = self.totalDistanceTraveled / self.estimatedBuildTime
+ materialCost = repository.material.value * mass /1000
- materialCost = repository.material.value * mass
self.addLine(' ')
- self.addLine('Cost')
- self.addLine( "Machine time cost is %s$." % round( machineTimeCost, 2 ) )
- self.addLine( "Material cost is %s$." % round( materialCost, 2 ) )
- self.addLine( "Total cost is %s$." % round( machineTimeCost + materialCost, 2 ) )
+ self.addLine( "Procedures used (in sequence.." )
+ for procedure in self.procedures:
+ self.addLine(procedure)
self.addLine(' ')
- self.addLine('Extent')
+ self.addLine('Dimensions')
self.addLine( "X%s%s mm and ends at %s mm, for a width of %s mm." % ( axisString, int( roundedLow.x ), int( roundedHigh.x ), int( extent.x ) ) )
self.addLine( "Y%s%s mm and ends at %s mm, for a depth of %s mm." % ( axisString, int( roundedLow.y ), int( roundedHigh.y ), int( extent.y ) ) )
self.addLine( "Z%s%s mm and ends at %s mm, for a height of %s mm." % ( axisString, int( roundedLow.z ), int( roundedHigh.z ), int( extent.z ) ) )
self.addLine(' ')
- self.addLine('Extruder')
- self.addLine( "Calculated Build time is %s." % euclidean.getDurationString(self.totalBuildTime))
- self.addLine( "Estimated Build time is %s." % euclidean.getDurationString( self.estimatedBuildTime))
- self.addLine( "Delay is %s seconds per command ." % self.delay )
- self.addLine( "Filament used is %s cm." % euclidean.getThreeSignificantFigures( self.totalDistanceFilament /10 ))
+ self.addLine('Statistics')
+
self.addLine( "Distance traveled is %s m." % euclidean.getThreeSignificantFigures( self.totalDistanceTraveled/1000 ) )
self.addLine( "Distance extruded is %s m." % euclidean.getThreeSignificantFigures( self.totalDistanceExtruded/1000 ) )
if self.extruderSpeed is not None:
@@ -225,33 +223,46 @@ def getCraftedGcode(self, gcodeText, repository):
self.addLine( "Feed rate average is %s mm/s, (%s mm/min)." % ( euclidean.getThreeSignificantFigures( averageFeedRate ), euclidean.getThreeSignificantFigures( 60.0 * averageFeedRate ) ) )
self.addLine( "A Total of %s commands will be executed." % self.totalCommandcount)
self.addLine(' ')
- self.addLine('Filament')
- self.addLine( "Cross section area is %s mm2." % euclidean.getThreeSignificantFigures( filamentCrossSectionArea ) )
- self.addLine('Filament In / Out ratio is %s' % euclidean.getThreeSignificantFigures (self.filamentInOutRatio))
+
+
+ self.addLine('Time')
+ self.addLine( "Calculated Build time is %s." % euclidean.getDurationString(self.totalBuildTime))
+ self.addLine( "Corrected Build time is %s." % euclidean.getDurationString( self.estimatedBuildTime))
+ self.addLine( "Delay is %s seconds per command ." % self.delay )
+
self.addLine(' ')
- self.addLine('Material')
+ self.addLine('Consumption')
self.addLine( "Extrusion Cross section area is %s mm2." % euclidean.getThreeSignificantFigures( extrusionXSection))
self.addLine( "Mass extruded is %s grams." % euclidean.getThreeSignificantFigures( mass ) )
self.addLine( "Volume extruded is %s cc." % euclidean.getThreeSignificantFigures( volumeExtruded) )
+ self.addLine( "Filament used is %s m." % euclidean.getThreeSignificantFigures( self.totalDistanceFilament /10000 ))
+
self.addLine(' ')
- self.addLine('Meta')
- self.addLine( "Text has %s lines and a size of %s KB." % ( self.numberOfLines, kilobytes ) )
- if self.version is not None:
- self.addLine( "Version is " + self.version )
+ self.addLine('Cost')
+ self.addLine( "Machine time cost is %s$." % round( machineTimeCost, 2 ) )
+ self.addLine( "Material cost is %s$." % round( materialCost, 2 ) )
+ self.addLine( "Total cost is %s$." % round( machineTimeCost + materialCost, 2 ) )
self.addLine(' ')
- self.addLine( "Procedures" )
- for procedure in self.procedures:
- self.addLine(procedure)
+
if self.profileName is not None:
self.addLine(' ')
self.addLine( 'Profile' )
self.addLine(self.profileName)
self.addLine(' ')
- self.addLine('Slice')
+ self.addLine('Info')
self.addLine( "Layer thickness is %s mm." % euclidean.getThreeSignificantFigures( self.extrusionHeight ) )
self.addLine( "Perimeter width is %s mm." % euclidean.getThreeSignificantFigures( self.extrusionWidth ) )
-
-
+ self.addLine( "Filament Cross section area is %s mm2." % euclidean.getThreeSignificantFigures( filamentCrossSectionArea ) )
+ self.addLine('Filament In / Out ratio is %s' % euclidean.getThreeSignificantFigures (self.filamentInOutRatio))
+ self.addLine( "Text has %s lines and a size of %s KB." % ( self.numberOfLines, kilobytes ) )
+ self.addLine('')
+ if self.profileName is not None:
+ self.addLine(' ')
+ self.addLine( "Profile used to Skein: " )
+ self.addLine(self.profileName)
+ self.addLine( ' ' )
+ if self.version is not None:
+ self.addLine( "You are using SFACT Version " + self.version )
self.addLine(' ')
return self.output.getvalue()
diff --git a/skeinforge_application/skeinforge_plugins/craft_plugins/Obsolete/feed.py b/skeinforge_application/skeinforge_plugins/craft_plugins/Obsolete/feed.py
index e216ddd..65e9c8a 100644
--- a/skeinforge_application/skeinforge_plugins/craft_plugins/Obsolete/feed.py
+++ b/skeinforge_application/skeinforge_plugins/craft_plugins/Obsolete/feed.py
@@ -92,7 +92,7 @@ def __init__(self):
self.activateFeed = settings.BooleanSetting().getFromValue('Activate Feed:', self, True)
self.mainFeed = settings.FloatSpin().getFromValue(2.0, 'Feed Rate (mm/s):', self, 50.0, 16.0)
self.maximumZDrillFeedRatePerSecond = settings.FloatSpin().getFromValue(0.02, 'Maximum Z Drill Feed Rate (mm/s):', self, 0.5, 0.1)
- self.travelFeedRatePerSecond = settings.FloatSpin().getFromValue(2.0, 'Travel Feed Rate (mm/s):', self, 50.0, 16.0)
+ self.travelFeedRate = settings.FloatSpin().getFromValue(2.0, 'Travel Feed Rate (mm/s):', self, 50.0, 16.0)
self.executeTitle = 'Feed'
def execute(self):
@@ -117,7 +117,7 @@ def getCraftedGcode(self, gcodeText, repository):
"""Parse gcode text and store the feed gcode."""
self.repository = repository
self.mainFeed = repository.mainFeed.value
- self.travelFeedRateMinute = 60.0 * self.repository.travelFeedRatePerSecond.value
+ self.travelFeedRateMinute = 60.0 * self.repository.travelFeedRate.value
self.lines = archive.getTextLines(gcodeText)
self.parseInitialization()
for line in self.lines[self.lineIndex :]:
@@ -147,7 +147,7 @@ def parseInitialization(self):
self.absolutePerimeterWidth = abs(float(splitLine[1]))
self.distanceFeedRate.addTagBracketedLine('maximumZDrillFeedRatePerSecond', self.repository.maximumZDrillFeedRatePerSecond.value)
self.distanceFeedRate.addTagBracketedLine('operatingFeedRatePerSecond', self.mainFeed)
- self.distanceFeedRate.addTagBracketedLine('travelFeedRatePerSecond', self.repository.travelFeedRatePerSecond.value)
+ self.distanceFeedRate.addTagBracketedLine('travelFeedRate', self.repository.travelFeedRate.value)
self.distanceFeedRate.addLine(line)
def parseLine(self, line):
diff --git a/skeinforge_application/skeinforge_plugins/craft_plugins/Obsolete/tower.py b/skeinforge_application/skeinforge_plugins/craft_plugins/Obsolete/tower.py
index 91ebcf3..afbd4d6 100644
--- a/skeinforge_application/skeinforge_plugins/craft_plugins/Obsolete/tower.py
+++ b/skeinforge_application/skeinforge_plugins/craft_plugins/Obsolete/tower.py
@@ -318,7 +318,7 @@ def parseInitialization(self):
self.minimumBelow = 0.1 * float(splitLine[1])
elif firstWord == '(':
self.extrusionWidth = float(splitLine[1])
- elif firstWord == '(':
+ elif firstWord == '(':
self.travelFeedRateMinute = 60.0 * float(splitLine[1])
self.distanceFeedRate.addLine(line)
diff --git a/skeinforge_application/skeinforge_plugins/craft_plugins/carve.py b/skeinforge_application/skeinforge_plugins/craft_plugins/carve.py
index f13842a..2a3ba08 100644
--- a/skeinforge_application/skeinforge_plugins/craft_plugins/carve.py
+++ b/skeinforge_application/skeinforge_plugins/craft_plugins/carve.py
@@ -202,7 +202,6 @@ def getCarvedSVG(self, carving, fileName, repository):
return ''
extrusionHeight = carving.getCarveLayerThickness()
decimalPlacesCarried = euclidean.getDecimalPlacesCarried(repository.extraDecimalPlaces.value, extrusionHeight)
- extrusionWidth = repository.extrusionWidth.value
svgWriter = svg_writer.SVGWriter(
repository.addLayerTemplateToSVG.value,
carving.getCarveCornerMaximum(),
diff --git a/skeinforge_application/skeinforge_plugins/craft_plugins/clip.py b/skeinforge_application/skeinforge_plugins/craft_plugins/clip.py
index ead3488..71056a6 100644
--- a/skeinforge_application/skeinforge_plugins/craft_plugins/clip.py
+++ b/skeinforge_application/skeinforge_plugins/craft_plugins/clip.py
@@ -269,12 +269,11 @@ def parseInitialization( self, clipRepository ):
elif firstWord == '(':
self.extrusionWidth = float(splitLine[1])
absolutePerimeterWidth = abs( self.extrusionWidth )
- self.clipLength = (self.extrusionHeight - (clipRepository.clipOverPerimeterWidth.value * self.extrusionHeight * (math.pi/4)))*4
- #self.clipLength = (self.extrusionHeight - (clipRepository.clipOverPerimeterWidth.value * self.extrusionHeight * (math.pi/4)))*4
+ self.clipLength = (self.extrusionHeight - (self.extrusionHeight * (0.7853)))*2
self.connectingStepLength = 0.5 * absolutePerimeterWidth
self.layerPixelWidth = 0.1 * absolutePerimeterWidth
self.maximumConnectionDistance = clipRepository.maximumConnectionDistanceOverPerimeterWidth.value * absolutePerimeterWidth
- elif firstWord == '(':
+ elif firstWord == '(':
self.travelFeedRateMinute = 60.0 * float(splitLine[1])
self.distanceFeedRate.addLine(line)
diff --git a/skeinforge_application/skeinforge_plugins/craft_plugins/comb.py b/skeinforge_application/skeinforge_plugins/craft_plugins/comb.py
index e18c844..367715c 100644
--- a/skeinforge_application/skeinforge_plugins/craft_plugins/comb.py
+++ b/skeinforge_application/skeinforge_plugins/craft_plugins/comb.py
@@ -380,7 +380,7 @@ def parseInitialization( self, combRepository ):
self.combInset = 0.7 * extrusionWidth
self.betweenInset = 0.4 * extrusionWidth
self.uTurnWidth = 0.5 * self.betweenInset
- elif firstWord == '(':
+ elif firstWord == '(':
self.travelFeedRateMinute = 60.0 * float(splitLine[1])
self.distanceFeedRate.addLine(line)
diff --git a/skeinforge_application/skeinforge_plugins/craft_plugins/dimension.py b/skeinforge_application/skeinforge_plugins/craft_plugins/dimension.py
index 6c0918c..d8792c1 100644
--- a/skeinforge_application/skeinforge_plugins/craft_plugins/dimension.py
+++ b/skeinforge_application/skeinforge_plugins/craft_plugins/dimension.py
@@ -147,8 +147,8 @@ def __init__(self):
settings.LabelDisplay().getFromName('- Firmware Related Stuff -', self )
extrusionDistanceFormatLatentStringVar = settings.LatentStringVar()
self.extrusionDistanceFormatChoiceLabel = settings.LabelDisplay().getFromName('Extrusion Values should be: ', self )
- settings.Radio().getFromRadio( extrusionDistanceFormatLatentStringVar, 'in Absolute units (Sprinter, Marlin, SCFW, FiveD , a.o.)', self, True )
- self.relativeExtrusionDistance = settings.Radio().getFromRadio( extrusionDistanceFormatLatentStringVar, 'in Relative units (Teacup a.o.)', self, False )
+ settings.Radio().getFromRadio( extrusionDistanceFormatLatentStringVar, 'in Absolute units', self, True )
+ self.relativeExtrusionDistance = settings.Radio().getFromRadio( extrusionDistanceFormatLatentStringVar, 'in Relative units', self, False )
settings.LabelSeparator().getFromRepository(self)
self.executeTitle = 'Dimension'
@@ -170,12 +170,12 @@ def __init__(self):
self.isExtruderActive = False
self.layerIndex = -1
self.lineIndex = 0
- self.maximumZTravelFeedRatePerSecond = None
+ self.maximumZTravelFeedRate = None
self.oldLocation = None
self.operatingFlowRate = None
self.retractionRatio = 1.0
self.totalExtrusionDistance = 0.0
- self.travelFeedRatePerSecond = None
+ self.travelFeedRate = None
self.zDistanceRatio = 5.0
def addLinearMoveExtrusionDistanceLine( self, extrusionDistance ):
@@ -205,14 +205,16 @@ def getCraftedGcode(self, gcodeText, repository):
self.newfilamentPackingDensity = repository.filamentPackingDensity.value * self.calibrationFactor
print('****************Filament Packing Density (For Calibration)**********************:')
print( self.newfilamentPackingDensity )
- self.flowScaleSixty = 60.0 * ((((self.extrusionHeight+self.extrusionWidth)/4)*((self.extrusionHeight+self.extrusionWidth)/4)*math.pi)/filamentPackingArea) / self.calibrationFactor
+ self.flowScaleSixty = 60.0 * ((((self.extrusionHeight+self.extrusionWidth)/4) ** 2 * math.pi )/filamentPackingArea) / self.calibrationFactor
+ if self.calibrationFactor is None:
+ print('Mesaured extrusion width cant be 0, either un-check calibration or set mewsured width to what you have measured!')
if self.operatingFlowRate is None:
print('There is no operatingFlowRate so dimension will do nothing.')
return gcodeText
self.restartDistance = self.repository.retractionDistance.value + self.repository.restartExtraDistance.value
self.extruderRetractionSpeedMinuteString = self.distanceFeedRate.getRounded(60.0 * self.repository.extruderRetractionSpeed.value)
- if self.maximumZTravelFeedRatePerSecond is not None and self.travelFeedRatePerSecond is not None:
- self.zDistanceRatio = self.travelFeedRatePerSecond / self.maximumZTravelFeedRatePerSecond
+ if self.maximumZTravelFeedRate is not None and self.travelFeedRate is not None:
+ self.zDistanceRatio = self.travelFeedRate / self.maximumZTravelFeedRate
for lineIndex in xrange(self.lineIndex, len(self.lines)):
self.parseLine( lineIndex )
return self.distanceFeedRate.output.getvalue()
@@ -342,9 +344,9 @@ def parseInitialization(self):
elif firstWord == '(':
self.extrusionHeight = float(splitLine[1])
elif firstWord == '(':
- self.maximumZTravelFeedRatePerSecond = float(splitLine[1])
- elif firstWord == '(':
- self.maximumZTravelFeedRatePerSecond = float(splitLine[1])
+ self.maximumZTravelFeedRate = float(splitLine[1])
+ elif firstWord == '(':
+ self.maximumZTravelFeedRate = float(splitLine[1])
elif firstWord == '(':
self.feedRateMinute = 60.0 * float(splitLine[1])
elif firstWord == '(':
@@ -352,8 +354,8 @@ def parseInitialization(self):
self.flowRate = self.operatingFlowRate
elif firstWord == '(':
self.extrusionWidth = float(splitLine[1])
- elif firstWord == '(':
- self.travelFeedRatePerSecond = float(splitLine[1])
+ elif firstWord == '(':
+ self.travelFeedRate = float(splitLine[1])
self.distanceFeedRate.addLine(line)
def parseLine( self, lineIndex ):
diff --git a/skeinforge_application/skeinforge_plugins/craft_plugins/fill.py b/skeinforge_application/skeinforge_plugins/craft_plugins/fill.py
index f4f85a2..a4a91c2 100644
--- a/skeinforge_application/skeinforge_plugins/craft_plugins/fill.py
+++ b/skeinforge_application/skeinforge_plugins/craft_plugins/fill.py
@@ -10,15 +10,11 @@
http://blog.thingiverse.com/2009/07/21/mysteries-of-skeinforge-fill/
==Operation==
-The default 'Activate Fill' checkbox is off.
-When it is on, the functions described below will work, when it is off,
-the functions will not be called.
+The default 'Activate Fill' checkbox is off. When it is on, the functions described below will work, when it is off, the functions will not be called.
==Settings==
===Diaphragm===
-The diaphragm is a solid group of layers, at regular intervals.
-It can be used with a sparse infill to give the object watertight,
-horizontal compartments and/or a higher shear strength.
+The diaphragm is a solid group of layers, at regular intervals. It can be used with a sparse infill to give the object watertight, horizontal compartments and/or a higher shear strength.
====Diaphragm Period====
Default is one hundred.
@@ -31,8 +27,7 @@
Defines the number of layers the diaphram is composed of.
===Extra Shells===
-The shells interior perimeter loops. Adding extra shells makes the object stronger
-& heavier.
+The shells interior perimeter loops. Adding extra shells makes the object stronger & heavier.
====Extra Shells on Alternating Solid Layers====
Default is two.
@@ -234,16 +229,17 @@
import sys
-__author__ = 'Enrique Perez (perez_enrique@yahoo.com)'
+__author__ = 'Enrique Perez (perez_enrique@yahoo.com) modified by Action68 (ahmetcemturan@gmail.com) SFACT home at reprafordummies.net'
__date__ = '$Date: 2008/28/04 $'
__license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html'
-def addAroundGridPoint( arounds, gridPoint, gridPointInsetX, gridPointInsetY, gridPoints, gridRadius, isBothOrNone, isDoubleJunction, isJunctionWide, paths, pixelTable, width ):
+def addAroundGridPoint( arounds, gridPoint, gridPointInsetX, gridPointInsetY, gridPoints, gridSearchRadius, isBothOrNone, isDoubleJunction, isJunctionWide, paths, pixelTable, width ):
"""Add the path around the grid point."""
closestPathIndex = None
aroundIntersectionPaths = []
+ gridSearchRadius = self.infillSpacing / self.infillSolidity #todo ACT fix it is it gridRadius
for aroundIndex in xrange( len(arounds) ):
loop = arounds[ aroundIndex ]
for pointIndex in xrange(len(loop)):
@@ -258,10 +254,10 @@ def addAroundGridPoint( arounds, gridPoint, gridPointInsetX, gridPointInsetY, gr
return
yCloseToCenterArounds = getClosestOppositeIntersectionPaths( aroundIntersectionPaths )
if len( yCloseToCenterArounds ) < 2:
-# This used to be worth the warning below.
-# print('This should never happen, yCloseToCenterArounds is less than 2 in fill.')
-# print( gridPoint )
-# print( len( yCloseToCenterArounds ) )
+ # This used to be worth the warning below.
+ # print('This should never happen, yCloseToCenterArounds is less than 2 in fill.')
+ # print( gridPoint )
+ # print( len( yCloseToCenterArounds ) )
return
segmentFirstY = min( yCloseToCenterArounds[0].y, yCloseToCenterArounds[1].y )
segmentSecondY = max( yCloseToCenterArounds[0].y, yCloseToCenterArounds[1].y )
@@ -350,13 +346,13 @@ def addPointOnPathIfFree( path, pathIndex, pixelTable, point, pointIndex, width
if isAddedPointOnPathFree( path, pixelTable, point, pointIndex, width ):
addPointOnPath( path, pathIndex, pixelTable, point, pointIndex, width )
-def addSparseEndpoints( doubleExtrusionWidth, endpoints, fillLine, horizontalSegmentLists, infillSolidity, removedEndpoints, solidSurfaceThickness, surroundingXIntersections ):
+def addSparseEndpoints( doubleExtrusionSpacing, endpoints, fillLine, horizontalSegmentLists, infillSolidity, removedEndpoints, solidSurfaceThickness, surroundingXIntersections ):
"""Add sparse endpoints."""
horizontalEndpoints = horizontalSegmentLists[fillLine]
for segment in horizontalEndpoints:
- addSparseEndpointsFromSegment( doubleExtrusionWidth, endpoints, fillLine, horizontalSegmentLists, infillSolidity, removedEndpoints, segment, solidSurfaceThickness, surroundingXIntersections )
+ addSparseEndpointsFromSegment( doubleExtrusionSpacing, endpoints, fillLine, horizontalSegmentLists, infillSolidity, removedEndpoints, segment, solidSurfaceThickness, surroundingXIntersections )
-def addSparseEndpointsFromSegment( doubleExtrusionWidth, endpoints, fillLine, horizontalSegmentLists, infillSolidity, removedEndpoints, segment, solidSurfaceThickness, surroundingXIntersections ):
+def addSparseEndpointsFromSegment( doubleExtrusionSpacing, endpoints, fillLine, horizontalSegmentLists, infillSolidity, removedEndpoints, segment, solidSurfaceThickness, surroundingXIntersections ):
"""Add sparse endpoints from a segment."""
endpointFirstPoint = segment[0].point
endpointSecondPoint = segment[1].point
@@ -370,7 +366,7 @@ def addSparseEndpointsFromSegment( doubleExtrusionWidth, endpoints, fillLine, ho
if int( round( round( fillLine * infillSolidity ) / infillSolidity ) ) == fillLine:
endpoints += segment
return
- if abs( endpointFirstPoint - endpointSecondPoint ) < doubleExtrusionWidth:
+ if abs( endpointFirstPoint - endpointSecondPoint ) < doubleExtrusionSpacing:
endpoints += segment
return
if not isSegmentAround( horizontalSegmentLists[ fillLine - 1 ], segment ):
@@ -379,7 +375,7 @@ def addSparseEndpointsFromSegment( doubleExtrusionWidth, endpoints, fillLine, ho
if not isSegmentAround( horizontalSegmentLists[ fillLine + 1 ], segment ):
endpoints += segment
return
- if not solidSurfaceThickness:
+ if solidSurfaceThickness is 0:
removedEndpoints += segment
return
if isSegmentCompletelyInAnIntersection( segment, surroundingXIntersections ):
@@ -396,7 +392,8 @@ def addYIntersectionPathToList( pathIndex, pointIndex, y, yIntersection, yInters
yIntersectionPaths.append( yIntersectionPath )
def compareDistanceFromCenter(self, other):
- """Get comparison in order to sort y intersections in ascending order of distance from the center."""
+ """Get comparison in order to sort y intersections in ascending order of distance from the center. ACT"""
+
distanceFromCenter = abs( self.yMinusCenter )
distanceFromCenterOther = abs( other.yMinusCenter )
if distanceFromCenter > distanceFromCenterOther:
@@ -432,7 +429,7 @@ def createFillForSurroundings(nestedRings, radius, shouldExtraLoopsBeAdded):
def getAdditionalLength( path, point, pointIndex ):
"""Get the additional length added by inserting a point into a path."""
- if not pointIndex:
+ if pointIndex is 0:
return abs( point - path[0] )
if pointIndex == len(path):
return abs( point - path[-1] )
@@ -453,7 +450,7 @@ def getCraftedTextFromText(gcodeText, repository=None):
return FillSkein().getCraftedGcode( repository, gcodeText )
def getClosestOppositeIntersectionPaths( yIntersectionPaths ):
- """Get the close to center paths, starting with the first and an additional opposite if it exists."""
+ """Get the close to center paths, starting with the first and an additional opposite if it exists.""" #todo extra perimeters order
yIntersectionPaths.sort( compareDistanceFromCenter )
beforeFirst = yIntersectionPaths[0].yMinusCenter < 0.0
yCloseToCenterPaths = [ yIntersectionPaths[0] ]
@@ -465,8 +462,8 @@ def getClosestOppositeIntersectionPaths( yIntersectionPaths ):
return yCloseToCenterPaths
def getExtraFillLoops(loops, radius):
- """Get extra loops between inside and outside loops."""
- greaterThanRadius = 1.4 * radius
+ """Get extra loops between inside and outside loops. Extra perimeters"""
+ greaterThanRadius = radius / 0.7853 #todo was *1.4 ACT (radius /0.7853) how much the tight spots are covered by the extra loops
extraFillLoops = []
centers = intercircle.getCentersFromPoints(intercircle.getPointsFromLoops(loops, greaterThanRadius), greaterThanRadius)
for center in centers:
@@ -681,7 +678,7 @@ def isIntersectingLoopsPaths( loops, paths, pointBegin, pointEnd ):
# return True
# return False
-def isPointAddedAroundClosest( pixelTable, layerExtrusionWidth, paths, removedEndpointPoint, width ):
+def isPointAddedAroundClosest( pixelTable, layerExtrusionSpacing, paths, removedEndpointPoint, width ):
"""Add the closest removed endpoint to the path, with minimal twisting."""
closestDistanceSquared = 999999999987654321.0
closestPathIndex = None
@@ -695,14 +692,14 @@ def isPointAddedAroundClosest( pixelTable, layerExtrusionWidth, paths, removedEn
closestPathIndex = pathIndex
if closestPathIndex is None:
return
- if closestDistanceSquared < 0.8 * layerExtrusionWidth * layerExtrusionWidth:
+ if closestDistanceSquared < 0.88617 * layerExtrusionSpacing **2: #todo 0.8 idi maybe 0.88617
return
closestPath = paths[ closestPathIndex ]
closestPointIndex = getWithLeastLength( closestPath, removedEndpointPoint )
if isAddedPointOnPathFree( closestPath, pixelTable, removedEndpointPoint, closestPointIndex, width ):
addPointOnPath( closestPath, closestPathIndex, pixelTable, removedEndpointPoint, closestPointIndex, width )
return True
- return isSidePointAdded( pixelTable, closestPath, closestPathIndex, closestPointIndex, layerExtrusionWidth, removedEndpointPoint, width )
+ return isSidePointAdded( pixelTable, closestPath, closestPathIndex, closestPointIndex, layerExtrusionSpacing, removedEndpointPoint, width )
def isSegmentAround( aroundSegments, segment ):
"""Determine if there is another segment around."""
@@ -741,7 +738,7 @@ def isSharpCorner( beginComplex, centerComplex, endComplex ):
centerEndComplex /= centerEndLength
return euclidean.getDotProduct( centerBeginComplex, centerEndComplex ) > 0.9
-def isSidePointAdded( pixelTable, closestPath, closestPathIndex, closestPointIndex, layerExtrusionWidth, removedEndpointPoint, width ):
+def isSidePointAdded( pixelTable, closestPath, closestPathIndex, closestPointIndex, layerExtrusionSpacing, removedEndpointPoint, width ):
"""Add side point along with the closest removed endpoint to the path, with minimal twisting."""
if closestPointIndex <= 0 or closestPointIndex >= len( closestPath ):
return False
@@ -769,7 +766,7 @@ def isSidePointAdded( pixelTable, closestPath, closestPathIndex, closestPointInd
else:
insertPointAfter = removedEndpointPoint
removedMinusClosestNormalized = removedMinusClosest / removedMinusClosestLength
- perpendicular = removedMinusClosestNormalized * complex( 0.0, layerExtrusionWidth )
+ perpendicular = removedMinusClosestNormalized * complex( 0.0, layerExtrusionSpacing )
sidePoint = removedEndpointPoint + perpendicular
#extra check in case the line to the side point somehow slips by the line to the perpendicular
sidePointOther = removedEndpointPoint - perpendicular
@@ -795,12 +792,12 @@ def isSidePointAdded( pixelTable, closestPath, closestPathIndex, closestPointInd
addPointOnPathIfFree( closestPath, closestPathIndex, pixelTable, insertPointAfter, closestPointIndex, width )
return True
-def removeEndpoints( pixelTable, layerExtrusionWidth, paths, removedEndpoints, aroundWidth ):
+def removeEndpoints( pixelTable, layerExtrusionSpacing, paths, removedEndpoints, aroundWidth ):
"""Remove endpoints which are added to the path."""
for removedEndpointIndex in xrange( len(removedEndpoints) - 1, - 1, - 1 ):
removedEndpoint = removedEndpoints[ removedEndpointIndex ]
removedEndpointPoint = removedEndpoint.point
- if isPointAddedAroundClosest( pixelTable, layerExtrusionWidth, paths, removedEndpointPoint, aroundWidth ):
+ if isPointAddedAroundClosest( pixelTable, layerExtrusionSpacing, paths, removedEndpointPoint, aroundWidth ):
removedEndpoints.remove( removedEndpoint )
def setIsOutside( yCloseToCenterPath, yIntersectionPaths ):
@@ -823,15 +820,15 @@ class FillRepository:
"""A class to handle the fill settings."""
def __init__(self):
"""Set the default settings, execute title & settings fileName."""
+ print ("initialising fill")
skeinforge_profile.addListsToCraftTypeRepository('skeinforge_application.skeinforge_plugins.craft_plugins.fill.html', self )
self.fileNameInput = settings.FileNameInput().getFromFileName( fabmetheus_interpret.getGNUTranslatorGcodeFileTypeTuples(), 'Open File for Fill', self, '')
self.openWikiManualHelpPage = settings.HelpPage().getOpenFromAbsolute('http://fabmetheus.crsndoo.com/wiki/index.php/Skeinforge_Fill')
self.activateFill = settings.BooleanSetting().getFromValue('Activate Fill:', self, True )
-
settings.LabelSeparator().getFromRepository(self)
settings.LabelDisplay().getFromName('- Main Fill Settings -', self )
- self.infillSolidity = settings.FloatSpin().getFromValue( 0.05, 'Infill Solidity (ratio):', self, 1.00, 0.35 )
+ self.infillSolidity = settings.FloatSpin().getFromValue( 0.05, 'Infill Solidity (ratio):', self, 1.00, 0.35 )
self.infillSpacingScaler = settings.FloatSpin().getFromValue( 0.75, 'Extrusion Lines extra Spacing (Scaler):', self, 1.25, 1.0 )
self.infillPerimeterOverlap = settings.FloatSpin().getFromValue( 0.500, 'Infill Overlap over Perimeter (Scaler):', self, 1.500, 1.0 )
settings.LabelSeparator().getFromRepository(self)
@@ -841,12 +838,11 @@ def __init__(self):
self.extraShellsBase = settings.IntSpin().getFromValue( 0, 'Extra Shells on Base (layers):', self, 3, 1 )
self.extraShellsSparseLayer = settings.IntSpin().getFromValue( 0, 'Extra Shells on Sparse Layer (layers):', self, 3, 1 )
-
settings.LabelSeparator().getFromRepository(self)
- settings.LabelDisplay().getFromName('- Top and Bottom Layers -', self )
+ settings.LabelDisplay().getFromName('- Top and Bottom Layers -', self )
self.solidSurfaceThickness = settings.IntSpin().getFromValue( 0, 'Fully filled Layers (each top and bottom):', self, 5, 2 )
settings.LabelSeparator().getFromRepository(self)
- settings.LabelDisplay().getFromName('- Extrusion Sequence -', self )
+ settings.LabelDisplay().getFromName('- Extrusion Sequence -', self )
self.startFromChoice = settings.MenuButtonDisplay().getFromName('Start New Layer From :', self)
self.startFromLowerLeft = settings.MenuRadio().getFromMenuButtonDisplay(self.startFromChoice, 'Lower Left', self, True)
self.startFromNearest = settings.MenuRadio().getFromMenuButtonDisplay(self.startFromChoice, 'Nearest', self, False)
@@ -859,10 +855,10 @@ def __init__(self):
self.threadSequencePerimeterInfill = settings.MenuRadio().getFromMenuButtonDisplay(self.threadSequenceChoice, 'Perimeter > Infill > Loops', self, False)
self.threadSequencePerimeterLoops = settings.MenuRadio().getFromMenuButtonDisplay(self.threadSequenceChoice, 'Perimeter > Loops > Infill', self, True)
settings.LabelSeparator().getFromRepository(self)
- settings.LabelDisplay().getFromName('- How to make the infill -', self )
+ settings.LabelDisplay().getFromName('- How to make the infill -', self )
self.infillPatternLabel = settings.LabelDisplay().getFromName('Infill Pattern:', self )
infillLatentStringVar = settings.LatentStringVar()
- self.infillPatternLine = settings.Radio().getFromRadio( infillLatentStringVar, 'Line', self, True )
+ self.infillPatternLine = settings.Radio().getFromRadio( infillLatentStringVar, 'Line', self, True )
self.infillPatternGridCircular = settings.Radio().getFromRadio( infillLatentStringVar, 'Grid Circular', self, False )
self.infillPatternGridHexagonal = settings.Radio().getFromRadio( infillLatentStringVar, 'Grid Hexagonal', self, False )
self.infillPatternGridRectangular = settings.Radio().getFromRadio( infillLatentStringVar, 'Grid Rectangular', self, False )
@@ -896,7 +892,6 @@ class FillSkein:
def __init__(self):
self.bridgeWidthMultiplier = 1.0
self.distanceFeedRate = gcodec.DistanceFeedRate()
- self.infillSpacingScaler = 1
self.extruderActive = False
self.fillInset = 0.18
self.isPerimeter = False
@@ -912,17 +907,18 @@ def __init__(self):
self.thread = None
self.infillSpacing = None
+
def addFill(self, layerIndex):
"""Add fill to the carve layer."""
-# if layerIndex > 2:
-# return
+ # if layerIndex > 2:
+ # return
settings.printProgressByNumber(layerIndex, len(self.rotatedLayers), 'fill')
alreadyFilledArounds = []
pixelTable = {}
arounds = []
- infillSpacing = self.infillSpacing
- self.layerExtrusionWidth = self.infillSpacing
- layerFillInset = self.fillInset
+ betweenWidth = self.repository.infillSpacingScaler.value * self.extrusionWidth*0.5 *(0.7853)
+ self.layerExtrusionSpacing = self.infillSpacing # spacing between fill lines
+ layerFillInset = self.fillInset # the distance between perimeter incl loops and the fill pattern
rotatedLayer = self.rotatedLayers[layerIndex]
self.distanceFeedRate.addLine('( %s )' % rotatedLayer.z)
layerRotation = self.getLayerRotation(layerIndex)
@@ -940,15 +936,15 @@ def addFill(self, layerIndex):
extraShells = self.repository.extraShellsBase.value
if rotatedLayer.rotation is not None:
extraShells = 0
- infillSpacing *= self.bridgeWidthMultiplier
- self.layerExtrusionWidth *= self.bridgeWidthMultiplier
+ self.infillSpacing *= self.bridgeWidthMultiplier
+ self.layerExtrusionSpacing *= self.bridgeWidthMultiplier
layerFillInset *= self.bridgeWidthMultiplier
self.distanceFeedRate.addLine('( %s )' % rotatedLayer.rotation)
- aroundInset = 0.25 * self.layerExtrusionWidth
- aroundWidth = 0.25 * self.layerExtrusionWidth
+ aroundInset = 0.25 * self.layerExtrusionSpacing
+ aroundWidth = 0.25 * self.layerExtrusionSpacing
self.lastExtraShells = extraShells
gridPointInsetX = 0.5 * layerFillInset
- doubleExtrusionWidth = 2.0 * self.layerExtrusionWidth
+ doubleExtrusionSpacing = 2.0 * self.layerExtrusionSpacing
endpoints = []
infillPaths = []
layerInfillSolidity = self.infillSolidity
@@ -962,17 +958,17 @@ def addFill(self, layerIndex):
else:
self.isJunctionWide = False
rotatedLoops = []
-# for nestedRing in rotatedLayer.nestedRings:
-# nestedRing.fillBoundaries = intercircle.getInsetLoopsFromLoop( nestedRing.boundary, infillSpacing )
-# nestedRing.lastExistingFillLoops = nestedRing.fillBoundaries
+ # for nestedRing in rotatedLayer.nestedRings:
+ # nestedRing.fillBoundaries = intercircle.getInsetLoopsFromLoop( nestedRing.boundary, betweenWidth )
+ # nestedRing.lastExistingFillLoops = nestedRing.fillBoundaries
nestedRings = euclidean.getOrderedNestedRings(rotatedLayer.nestedRings)
-# if isPerimeterPathInSurroundLoops( nestedRings ):
-# extraShells = 0
- createFillForSurroundings(nestedRings, infillSpacing, False)
+ # if isPerimeterPathInSurroundLoops( nestedRings ):
+ # extraShells = 0
+ createFillForSurroundings(nestedRings, betweenWidth, False)
for extraShellIndex in xrange(extraShells):
- createFillForSurroundings(nestedRings, self.layerExtrusionWidth, True)
+ createFillForSurroundings(nestedRings, self.layerExtrusionSpacing, True)
fillLoops = euclidean.getFillOfSurroundings(nestedRings, None)
- slightlyGreaterThanFill = 1.01 * layerFillInset
+ slightlyGreaterThanFill = 0.95 * layerFillInset #todo was 1.01 ACT 0.95 How much the parallel fill is filled
for loop in fillLoops:
alreadyFilledLoop = []
alreadyFilledArounds.append(alreadyFilledLoop)
@@ -994,11 +990,11 @@ def addFill(self, layerIndex):
return
back = euclidean.getBackOfLoops(arounds)
front = euclidean.getFrontOfLoops(arounds)
- front = math.ceil(front / self.layerExtrusionWidth) * self.layerExtrusionWidth
+ front = math.ceil(front / self.layerExtrusionSpacing) * self.layerExtrusionSpacing
fillWidth = back - front
- numberOfLines = int(math.ceil(fillWidth / self.layerExtrusionWidth))
+ numberOfLines = int(math.ceil(fillWidth / self.layerExtrusionSpacing))
self.frontOverWidth = 0.0
- self.horizontalSegmentLists = euclidean.getHorizontalSegmentListsFromLoopLists(alreadyFilledArounds, front, numberOfLines, rotatedLoops, self.layerExtrusionWidth)
+ self.horizontalSegmentLists = euclidean.getHorizontalSegmentListsFromLoopLists(alreadyFilledArounds, front, numberOfLines, rotatedLoops, self.layerExtrusionSpacing)
self.surroundingXIntersectionLists = []
self.yList = []
gridCircular = False
@@ -1008,16 +1004,16 @@ def addFill(self, layerIndex):
gridCircular = True
layerInfillSolidity = 0.0
xIntersectionIndexLists = []
- self.frontOverWidth = euclidean.getFrontOverWidthAddXListYList(front, surroundingCarves, numberOfLines, xIntersectionIndexLists, self.layerExtrusionWidth, self.yList)
+ self.frontOverWidth = euclidean.getFrontOverWidthAddXListYList(front, surroundingCarves, numberOfLines, xIntersectionIndexLists, self.layerExtrusionSpacing, self.yList)
for fillLine in xrange(len(self.horizontalSegmentLists)):
xIntersectionIndexList = xIntersectionIndexLists[fillLine]
surroundingXIntersections = euclidean.getIntersectionOfXIntersectionIndexes(self.doubleSolidSurfaceThickness, xIntersectionIndexList)
self.surroundingXIntersectionLists.append(surroundingXIntersections)
- addSparseEndpoints(doubleExtrusionWidth, endpoints, fillLine, self.horizontalSegmentLists, layerInfillSolidity, removedEndpoints, self.solidSurfaceThickness, surroundingXIntersections)
+ addSparseEndpoints(doubleExtrusionSpacing, endpoints, fillLine, self.horizontalSegmentLists, layerInfillSolidity, removedEndpoints, self.solidSurfaceThickness, surroundingXIntersections)
else:
for fillLine in xrange(len(self.horizontalSegmentLists)):
- addSparseEndpoints(doubleExtrusionWidth, endpoints, fillLine, self.horizontalSegmentLists, layerInfillSolidity, removedEndpoints, self.solidSurfaceThickness, None)
- paths = euclidean.getPathsFromEndpoints(endpoints, 5.0 * self.layerExtrusionWidth, pixelTable, aroundWidth)
+ addSparseEndpoints(doubleExtrusionSpacing, endpoints, fillLine, self.horizontalSegmentLists, layerInfillSolidity, removedEndpoints, self.solidSurfaceThickness, None)
+ paths = euclidean.getPathsFromEndpoints(endpoints, 5.0 * self.layerExtrusionSpacing, pixelTable, aroundWidth)
if gridCircular:
startAngle = euclidean.globalGoldenAngle * float(layerIndex)
for gridPoint in self.getGridPoints(fillLoops, reverseRotation):
@@ -1029,10 +1025,10 @@ def addFill(self, layerIndex):
oldRemovedEndpointLength = len(removedEndpoints) + 1
while oldRemovedEndpointLength - len(removedEndpoints) > 0:
oldRemovedEndpointLength = len(removedEndpoints)
- removeEndpoints(pixelTable, self.layerExtrusionWidth, paths, removedEndpoints, aroundWidth)
+ removeEndpoints(pixelTable, self.layerExtrusionSpacing, paths, removedEndpoints, aroundWidth)
paths = euclidean.getConnectedPaths(paths, pixelTable, aroundWidth)
for path in paths:
- addPath(self.layerExtrusionWidth, infillPaths, path, layerRotation)
+ addPath(self.layerExtrusionSpacing, infillPaths, path, layerRotation)
euclidean.transferPathsToSurroundingLoops(nestedRings, infillPaths)
self.addThreadsBridgeLayer(layerIndex, nestedRings, rotatedLayer)
@@ -1094,7 +1090,7 @@ def addGridCircle(self, center, infillPaths, layerRotation, pixelTable, rotatedL
euclidean.addLoopToPixelTable(loop, loopPixelDictionary, width)
if not euclidean.isPixelTableIntersecting(pixelTable, loopPixelDictionary):
if euclidean.getIsInFilledRegion(rotatedLoops, euclidean.getLeftPoint(loop)):
- addLoop(self.layerExtrusionWidth, infillPaths, loop, layerRotation)
+ addLoop(self.layerExtrusionSpacing, infillPaths, loop, layerRotation)
return
insideIndexPaths = []
insideIndexPath = None
@@ -1127,7 +1123,7 @@ def addGridCircle(self, center, infillPaths, layerRotation, pixelTable, rotatedL
if not len(path):
path.append(loop[insideIndex])
path.append(loop[(insideIndex + 1) % len(loop)])
- addPath(self.layerExtrusionWidth, infillPaths, path, layerRotation)
+ addPath(self.layerExtrusionSpacing, infillPaths, path, layerRotation)
def addGridLinePoints( self, begin, end, gridPoints, gridRotationAngle, offset, y ):
"""Add the segments of one line of a grid to the infill."""
@@ -1148,7 +1144,7 @@ def addRemainingGridPoints(
"""Add the remaining grid points to the grid point list."""
for gridPointIndex in xrange( len( gridPoints ) - 1, - 1, - 1 ):
gridPoint = gridPoints[ gridPointIndex ]
- addAroundGridPoint( arounds, gridPoint, gridPointInsetX, gridPointInsetY, gridPoints, self.gridRadius, isBothOrNone, self.isDoubleJunction, self.isJunctionWide, paths, pixelTable, width )
+ addAroundGridPoint( arounds, gridPoint, gridPointInsetX, gridPointInsetY, gridPoints, self.gridSearchRadius, isBothOrNone, self.isDoubleJunction, self.isJunctionWide, paths, pixelTable, width )
def addRotatedCarve(self, currentLayer, layerDelta, reverseRotation, surroundingCarves):
"""Add a rotated carve to the surrounding carves."""
@@ -1160,7 +1156,7 @@ def addRotatedCarve(self, currentLayer, layerDelta, reverseRotation, surrounding
for nestedRing in nestedRings:
planeRotatedLoop = euclidean.getPointsRoundZAxis(reverseRotation, nestedRing.boundary)
rotatedCarve.append(planeRotatedLoop)
- outsetRadius = float(abs(layerDelta)) * self.extrusionHeight
+ outsetRadius = float(abs(layerDelta)) * self.extrusionHeight #todo investigate
rotatedCarve = intercircle.getInsetSeparateLoopsFromLoops(-outsetRadius, rotatedCarve)
surroundingCarves.append(rotatedCarve)
@@ -1168,11 +1164,11 @@ def addThreadsBridgeLayer(self, layerIndex, nestedRings, rotatedLayer):
"""Add the threads, add the bridge end & the layer end tag."""
if self.oldOrderedLocation is None or self.repository.startFromLowerLeft.value:
self.oldOrderedLocation = getLowerLeftCorner(nestedRings)
- extrusionHalfWidth = 0.5 * self.layerExtrusionWidth
+ extrusionSpacingHalfWidth = 0.5 * self.layerExtrusionSpacing
threadSequence = self.threadSequence
if layerIndex < 1:
threadSequence = ['perimeter', 'loops', 'infill']
- euclidean.addToThreadsRemove(extrusionHalfWidth, nestedRings, self.oldOrderedLocation, self, threadSequence)
+ euclidean.addToThreadsRemove(extrusionSpacingHalfWidth, nestedRings, self.oldOrderedLocation, self, threadSequence)
if rotatedLayer.rotation is not None:
self.distanceFeedRate.addLine('()')
self.distanceFeedRate.addLine('()')
@@ -1206,18 +1202,13 @@ def getCraftedGcode( self, repository, gcodeText ):
self.threadSequence = ['perimeter', 'infill', 'loops']
if repository.threadSequencePerimeterLoops.value:
self.threadSequence = ['perimeter', 'loops', 'infill']
- if self.repository.infillPerimeterOverlap.value > 0.45:
- print('Executing Fill procedure')
- print('Filling the inside of the Object(s)')
self.parseInitialization()
if self.extrusionWidth is None:
print('Warning, nothing will be done because self.extrusionWidth in getCraftedGcode in FillSkein was None.')
return ''
- #self.infillSpacing = ((self.extrusionHeight/2) * (((0.785))) *2)+(self.extrusionWidth - self.extrusionHeight)
- self.infillSpacing = (self.extrusionWidth * (((0.785))))
+ self.betweenWidth = self.extrusionWidth * self.repository.infillSpacingScaler.value *(0.7853)
print('Spacing between parallel lines in fill (mm):', (self.infillSpacing))
- #self.fillInset = self.extrusionHeight/2 *(((0.785)))*2+(self.extrusionWidth - self.extrusionHeight)/2
- self.fillInset = (self.extrusionWidth+self.extrusionHeight)/2*(((0.785)))
+ self.fillInset = self.infillSpacing / self.repository.infillPerimeterOverlap.value
print('Fill Overlap over Perimeter (mm):', self.fillInset)
self.infillSolidity = repository.infillSolidity.value
if self.isGridToBeExtruded():
@@ -1282,8 +1273,9 @@ def getLayerRotation(self, layerIndex):
def getNextGripXStep( self, gridXStep ):
"""Get the next grid x step, increment by an extra one every three if hexagonal grid is chosen."""
gridXStep += 1
- if self.repository.infillPatternGridHexagonal.value and not gridXStep % 3:
- gridXStep += 1
+ if self.repository.infillPatternGridHexagonal.value:
+ if gridXStep % 3 == 0:
+ gridXStep += 1
return gridXStep
def isGridToBeExtruded(self):
@@ -1296,7 +1288,7 @@ def isPointInsideLineSegments( self, gridPoint ):
"""Is the point inside the line segments of the loops."""
if self.solidSurfaceThickness <= 0:
return True
- fillLine = int( round( gridPoint.imag / self.layerExtrusionWidth - self.frontOverWidth ) )
+ fillLine = int( round( gridPoint.imag / self.layerExtrusionSpacing - self.frontOverWidth ) )
if fillLine >= len( self.horizontalSegmentLists ) or fillLine < 0:
return False
lineSegments = self.horizontalSegmentLists[fillLine]
@@ -1327,7 +1319,7 @@ def parseInitialization(self):
self.extrusionWidth = float(splitLine[1])
threadSequenceString = ' '.join( self.threadSequence )
self.distanceFeedRate.addTagBracketedLine('threadSequenceString', threadSequenceString )
- self.infillSpacing = self.extrusionWidth * (((0.785)))
+ self.infillSpacing = self.extrusionWidth * self.repository.infillSpacingScaler.value * (0.7853)
self.distanceFeedRate.addTagRoundedLine('infillSpacing', self.infillSpacing)
elif firstWord == '()':
self.distanceFeedRate.addLine('( fill )')
@@ -1338,7 +1330,6 @@ def parseInitialization(self):
self.bridgeWidthMultiplier = float(splitLine[1])
elif firstWord == '(':
self.extrusionHeight = float(splitLine[1])
-# self.distanceFeedRate.addTagRoundedLine('infillSpacing', self.infillSpacing)
self.distanceFeedRate.addLine(line)
def parseLine( self, lineIndex ):
diff --git a/skeinforge_application/skeinforge_plugins/craft_plugins/inset.py b/skeinforge_application/skeinforge_plugins/craft_plugins/inset.py
index f89a869..5448b11 100644
--- a/skeinforge_application/skeinforge_plugins/craft_plugins/inset.py
+++ b/skeinforge_application/skeinforge_plugins/craft_plugins/inset.py
@@ -372,8 +372,8 @@ def parseInitialization(self):
elif firstWord == '(':
self.extrusionWidth = float(splitLine[1])
self.halfExtrusionWidth = 0.5 * self.extrusionWidth
- self.overlapRemovalWidth = self.extrusionWidth * (((0.785)))* self.repository.overlapRemovalWidthScaler.value
- #self.overlapRemovalWidth = (self.extrusionHeight/2*(((0.785)))*2)+(self.extrusionWidth-self.extrusionHeight)
+ self.overlapRemovalWidth = self.extrusionWidth * (0.7853) * self.repository.overlapRemovalWidthScaler.value
+
self.distanceFeedRate.addLine(line)
def parseLine(self, line):
diff --git a/skeinforge_application/skeinforge_plugins/craft_plugins/jitter.py b/skeinforge_application/skeinforge_plugins/craft_plugins/jitter.py
index 1af2f1e..4d0b3c0 100644
--- a/skeinforge_application/skeinforge_plugins/craft_plugins/jitter.py
+++ b/skeinforge_application/skeinforge_plugins/craft_plugins/jitter.py
@@ -198,7 +198,7 @@ def parseInitialization( self, jitterRepository ):
elif firstWord == '(':
self.extrusionWidth = float(splitLine[1])
self.jitter = jitterRepository.jitterOverPerimeterWidth.value * self.extrusionWidth
- elif firstWord == '(':
+ elif firstWord == '(':
self.travelFeedRateMinute = 60.0 * float(splitLine[1])
self.distanceFeedRate.addLine(line)
@@ -222,7 +222,7 @@ def parseLine(self, line):
self.addTailoredLoopPath()
elif firstWord == '(':
self.layerCount.printProgressIncrement('jitter')
- self.layerGolden = math.fmod(self.layerGolden + 0.61803398874989479, 1.0)
+ self.layerGolden = math.fmod(self.layerGolden + 0.61803398874989479, 1.0) # x-n*y
self.layerJitter = self.jitter * self.layerGolden - 0.5
elif firstWord == '(' or firstWord == '(':
self.isLoopPerimeter = True
diff --git a/skeinforge_application/skeinforge_plugins/craft_plugins/lash.py b/skeinforge_application/skeinforge_plugins/craft_plugins/lash.py
index 2ea46c9..bc74973 100644
--- a/skeinforge_application/skeinforge_plugins/craft_plugins/lash.py
+++ b/skeinforge_application/skeinforge_plugins/craft_plugins/lash.py
@@ -88,7 +88,7 @@ def __init__(self):
skeinforge_profile.addListsToCraftTypeRepository('skeinforge_application.skeinforge_plugins.craft_plugins.lash.html', self)
self.fileNameInput = settings.FileNameInput().getFromFileName( fabmetheus_interpret.getGNUTranslatorGcodeFileTypeTuples(), 'Open File for Lash', self, '')
self.openWikiManualHelpPage = settings.HelpPage().getOpenFromAbsolute('http://fabmetheus.crsndoo.com/wiki/index.php/Skeinforge_Lash')
- self.activateLash = settings.BooleanSetting().getFromValue('Activate Lash if you have backlash in your axes. \nBut its better to fix the mechanical problem!', self, False )
+ self.activateLash = settings.BooleanSetting().getFromValue('Activate Lash if you have backlash in your axes', self, False )
self.xBacklash = settings.FloatSpin().getFromValue( 0.0, 'X Backlash (mm):', self, 0.5, 0.0 )
self.yBacklash = settings.FloatSpin().getFromValue( 0.0, 'Y Backlash (mm):', self, 0.5, 0.0 )
self.executeTitle = 'Lash'
diff --git a/skeinforge_application/skeinforge_plugins/craft_plugins/limit.py b/skeinforge_application/skeinforge_plugins/craft_plugins/limit.py
index b7b1285..b0ed721 100644
--- a/skeinforge_application/skeinforge_plugins/craft_plugins/limit.py
+++ b/skeinforge_application/skeinforge_plugins/craft_plugins/limit.py
@@ -105,8 +105,8 @@ def __init__(self):
def getCraftedGcode(self, gcodeText, repository):
"""Parse gcode text and store the limit gcode."""
self.maximumZDrillFeedRatePerSecond = repository.maximumZFeedRatePerSecond.value
- self.maximumZTravelFeedRatePerSecond = repository.maximumZFeedRatePerSecond.value
- self.maximumZFeedRatePerSecond = self.maximumZTravelFeedRatePerSecond
+ self.maximumZTravelFeedRate = repository.maximumZFeedRatePerSecond.value
+ self.maximumZFeedRatePerSecond = self.maximumZTravelFeedRate
self.repository = repository
self.lines = archive.getTextLines(gcodeText)
self.parseInitialization()
@@ -163,7 +163,7 @@ def parseInitialization(self):
elif firstWord == '(':
self.maximumZDrillFeedRatePerSecond = float(splitLine[1])
elif firstWord == '(':
- self.distanceFeedRate.addTagBracketedLine('maximumZTravelFeedRatePerSecond', self.maximumZTravelFeedRatePerSecond )
+ self.distanceFeedRate.addTagBracketedLine('maximumZTravelFeedRate', self.maximumZTravelFeedRate )
self.distanceFeedRate.addLine(line)
def parseLine( self, lineIndex ):
@@ -183,7 +183,7 @@ def parseLine( self, lineIndex ):
elif firstWord == 'M101':
self.maximumZFeedRatePerSecond = self.maximumZDrillFeedRatePerSecond
elif firstWord == 'M103':
- self.maximumZFeedRatePerSecond = self.maximumZTravelFeedRatePerSecond
+ self.maximumZFeedRatePerSecond = self.maximumZTravelFeedRate
self.distanceFeedRate.addLine(line)
diff --git a/skeinforge_application/skeinforge_plugins/craft_plugins/raft.py b/skeinforge_application/skeinforge_plugins/craft_plugins/raft.py
index 76c62a4..c5780b0 100644
--- a/skeinforge_application/skeinforge_plugins/craft_plugins/raft.py
+++ b/skeinforge_application/skeinforge_plugins/craft_plugins/raft.py
@@ -115,7 +115,7 @@
===Object First Layer Feed Rate Infill Multiplier===
Default is 0.4.
-Defines the object first layer infill feed rate multiplier. The greater the 'Object First Layer g Rate Infill Multiplier, the thinner the infill, the lower the 'Object First Layer Feed Rate Infill Multiplier', the thicker the infill.
+Defines the object first layer infill feed rate multiplier. The greater the 'Object First Layer Feed Rate Infill Multiplier, the thinner the infill, the lower the 'Object First Layer Feed Rate Infill Multiplier', the thicker the infill.
===Object First Layer Feed Rate Perimeter Multiplier===
Default is 0.4.
@@ -217,6 +217,7 @@
from skeinforge_application.skeinforge_utilities import skeinforge_polyfile
from skeinforge_application.skeinforge_utilities import skeinforge_profile
import math
+import os
import sys
@@ -229,10 +230,12 @@
#raft outline temperature http://hydraraptor.blogspot.com/2008/09/screw-top-pot.html
def getCraftedText( fileName, text='', repository=None):
"""Raft the file or text."""
+ print ('Calculating raft, base and supports')
return getCraftedTextFromText(archive.getTextIfEmpty(fileName, text), repository)
def getCraftedTextFromText(gcodeText, repository=None):
"""Raft a gcode linear move text."""
+ print ('parsing Gcode for raft - lines')
if gcodec.isProcedureDoneOrFileIsEmpty( gcodeText, 'raft'):
return gcodeText
if repository is None:
@@ -243,12 +246,14 @@ def getCraftedTextFromText(gcodeText, repository=None):
def getCrossHatchPointLine( crossHatchPointLineTable, y ):
"""Get the cross hatch point line."""
+ print ('Creating cross-hatch')
if not crossHatchPointLineTable.has_key(y):
crossHatchPointLineTable[ y ] = {}
return crossHatchPointLineTable[ y ]
def getEndpointsFromYIntersections( x, yIntersections ):
"""Get endpoints from the y intersections."""
+ print ('Getting Endpoints')
endpoints = []
for yIntersectionIndex in xrange( 0, len( yIntersections ), 2 ):
firstY = yIntersections[ yIntersectionIndex ]
@@ -283,8 +288,9 @@ def getExtendedLineSegment(extensionDistance, lineSegment, loopXIntersections):
def getLoopsBySegmentsDictionary(segmentsDictionary, width):
"""Get loops from a horizontal segments dictionary."""
+ print ('Getting loops')
points = []
- for endpoint in getVerticalEndpoints(segmentsDictionary, width, 0.1 * width, width):
+ for endpoint in getVerticalEndpoints(segmentsDictionary, width, 0.1*width, width): #todo 0.1 ??
points.append(endpoint.point)
for endpoint in euclidean.getEndpointsFromSegmentTable(segmentsDictionary):
points.append(endpoint.point)
@@ -296,6 +302,7 @@ def getNewRepository():
def getVerticalEndpoints(horizontalSegmentsTable, horizontalStep, verticalOverhang, verticalStep):
"""Get vertical endpoints."""
+ print ('Getting vertical Endpoints')
interfaceSegmentsTableKeys = horizontalSegmentsTable.keys()
interfaceSegmentsTableKeys.sort()
verticalTableTable = {}
@@ -342,6 +349,7 @@ class RaftRepository:
"""A class to handle the raft settings."""
def __init__(self):
"""Set the default settings, execute title & settings fileName."""
+ print ('Initalizing Raft repsitory')
skeinforge_profile.addListsToCraftTypeRepository('skeinforge_application.skeinforge_plugins.craft_plugins.raft.html', self)
self.fileNameInput = settings.FileNameInput().getFromFileName(
fabmetheus_interpret.getGNUTranslatorGcodeFileTypeTuples(), 'Open File for Raft', self, '')
@@ -349,41 +357,27 @@ def __init__(self):
'http://fabmetheus.crsndoo.com/wiki/index.php/Skeinforge_Raft')
self.activateRaft = settings.BooleanSetting().getFromValue('Activate Raft', self, True)
self.addRaftElevateNozzleOrbitSetAltitude = settings.BooleanSetting().getFromValue(
- 'Add Raft, Elevate Nozzle, Orbit:', self, True)
+ 'Add Raft Elevate Nozzle Orbit:', self, True)
settings.LabelSeparator().getFromRepository(self)
-
settings.LabelDisplay().getFromName('- Support -', self)
self.supportMaterialChoice = settings.MenuButtonDisplay().getFromName('Where to add support: ', self)
- self.supportChoiceNone = settings.MenuRadio().getFromMenuButtonDisplay(
- self.supportMaterialChoice, 'None', self, True)
- self.supportChoiceEmptyLayersOnly = settings.MenuRadio().getFromMenuButtonDisplay(
- self.supportMaterialChoice, 'Empty Layers Only', self, False)
- self.supportChoiceEverywhere = settings.MenuRadio().getFromMenuButtonDisplay(
- self.supportMaterialChoice, 'Everywhere', self, False)
- self.supportChoiceExteriorOnly = settings.MenuRadio().getFromMenuButtonDisplay(
- self.supportMaterialChoice, 'Exterior Only', self, False)
- self.supportMinimumAngle = settings.FloatSpin().getFromValue(
- 40, 'Add support if flatter than (degrees):', self, 80, 50)
+ self.supportChoiceNone = settings.MenuRadio().getFromMenuButtonDisplay( self.supportMaterialChoice, 'None', self, True)
+ self.supportChoiceEmptyLayersOnly = settings.MenuRadio().getFromMenuButtonDisplay(self.supportMaterialChoice, 'Empty Layers Only', self, False)
+ self.supportChoiceEverywhere = settings.MenuRadio().getFromMenuButtonDisplay(self.supportMaterialChoice, 'Everywhere', self, False)
+ self.supportChoiceExteriorOnly = settings.MenuRadio().getFromMenuButtonDisplay(self.supportMaterialChoice, 'Exterior Only', self, False)
+ self.supportMinimumAngle = settings.FloatSpin().getFromValue(40.0, 'Add support if flatter than (degrees):', self, 80.0, 50.0)
self.supportCrossHatch = settings.BooleanSetting().getFromValue('Cross Hatch instead of Lines', self, False)
- self.interfaceInfillDensity = settings.FloatSpin().getFromValue(
- 0.1, 'Interface/Support Lines Density (ratio):', self, 0.5, 0.25)
- self.interfaceLayerThicknessOverLayerThickness = settings.FloatSpin().getFromValue(
- 0.8, 'Interface/Support Layer Thickness over Layer Thickness:', self, 1.5, 1.0)
- self.supportFeedRate = settings.FloatSpin().getFromValue(
- 10.0, 'Support Feed Rate mm/sec:', self, 50.0,15.0)
- self.supportFlowRateOverOperatingFlowRate = settings.FloatSpin().getFromValue(
- 0.5, 'Support Flow Rate (scaler):', self, 2.0, 1.0)
- self.supportGapOverPerimeterExtrusionWidth = settings.FloatSpin().getFromValue(
- 0.5, 'Support Gap over Perimeter Extrusion Width (ratio):', self, 1.5, 1.0)
- self.raftAdditionalMarginOverLengthPercent = settings.FloatSpin().getFromValue(
- 0.0, 'Raft/Support extension in (%):', self, 10.0, 5.0)
- self.raftMargin = settings.FloatSpin().getFromValue(
- 0.0, 'Raft/Support extension in(mm):', self, 5.0, 2.0)
+ self.interfaceInfillDensity = settings.FloatSpin().getFromValue(0.1, 'Interface/Support Lines Density (ratio):', self, 0.5, 0.25)
+ self.interfaceLayerThicknessOverLayerThickness = settings.FloatSpin().getFromValue( 0.8, 'Interface/Support Layer Thickness over Layer Thickness:', self, 1.5, 1.0)
+ self.supportFeedRate = settings.FloatSpin().getFromValue(10.0, 'Support Feed Rate mm/sec:', self, 50.0,15.0)
+ self.supportFlowRateScaler = settings.FloatSpin().getFromValue( 0.5, 'Support Flow Rate (scaler):', self, 2.0, 1.0)
+ self.supportGapOverPerimeterExtrusionWidth = settings.FloatSpin().getFromValue( 0.5, 'Support Gap over Perimeter Extrusion Width (ratio):', self, 1.5, 1.0)
+ self.raftAdditionalMarginOverLengthPercent = settings.FloatSpin().getFromValue( 0.0, 'Raft/Support extension in (%):', self, 10.0, 0.0)
+ self.raftMargin = settings.FloatSpin().getFromValue(0.0, 'Raft/Support extension in(mm):', self, 5.0, 2.0)
settings.LabelSeparator().getFromRepository(self)
settings.LabelDisplay().getFromName('- Name of Support Macro files (gcode) -', self)
- self.nameOfSupportEndFile = settings.StringSetting().getFromValue('Name of Support End File:', self, 'support_end.gcode')
- self.nameOfSupportStartFile = settings.StringSetting().getFromValue(
- 'Name of Support Start File:', self, 'support_start.gcode')
+ self.nameOfSupportEndFile = settings.StringSetting().getFromValue('Name of Support End File:', self, 'support_end.gmc')
+ self.nameOfSupportStartFile = settings.StringSetting().getFromValue('Name of Support Start File:', self, 'support_start.gmc')
settings.LabelSeparator().getFromRepository(self)
settings.LabelDisplay().getFromName('- Print Adhesion to Printbed Objects first layer -', self)
self.operatingNozzleLiftOverLayerThickness = settings.FloatSpin().getFromValue( -0.1, 'Extra Nozzle clearance over Object(ratio):', self, 0.3, 0.0)
@@ -412,11 +406,7 @@ def __init__(self):
self.initialCircling = settings.BooleanSetting().getFromValue('Initial Circling:', self, False)
self.infillOverhangOverExtrusionWidth = settings.FloatSpin().getFromValue(
0.0, 'Infill Overhang over Extrusion Width (ratio):', self, 5.0, 3.00)
-
settings.LabelSeparator().getFromRepository(self)
-
-
-
self.executeTitle = 'Raft'
def execute(self):
@@ -425,10 +415,10 @@ def execute(self):
for fileName in fileNames:
writeOutput(fileName)
-
-class RaftSkein:
+class RaftSkein :
"""A class to raft a skein of extrusions."""
def __init__(self):
+ print ('Skeining the Raft')
self.addLineLayerStart = True
self.baseTemperature = None
self.beginLoop = None
@@ -449,6 +439,7 @@ def __init__(self):
self.extrusionHeight = 0.4
self.lineIndex = 0
self.lines = None
+ self.isExtruderActive = False
self.objectFirstLayerInfillTemperature = None
self.objectFirstLayerPerimeterTemperature = None
self.objectNextLayersTemperature = None
@@ -461,17 +452,17 @@ def __init__(self):
self.operatingJump = None
self.orbitalFeedRatePerSecond = 2.01
self.extrusionWidth = 0.6
- self.supportFeedRate = 20
+ self.supportFeedRate = 33
self.supportFlowRate = None
self.supportLayers = []
self.supportLayersTemperature = None
self.supportedLayersTemperature = None
- self.travelFeedRateMinute = None
- self.isExtruderActive = False
- self.objectFirstLayerTravelSpeed = 20
+ self.travelFeedRateMinute = 55
+
def addBaseLayer(self):
"""Add a base layer."""
+ print ('adding Base Layer')
baseLayerThickness = self.extrusionHeight * self.baseLayerThicknessOverLayerThickness
zCenter = self.extrusionTop + 0.5 * baseLayerThickness
z = zCenter + baseLayerThickness * self.repository.baseNozzleLiftOverBaseLayerThickness.value
@@ -495,6 +486,7 @@ def addBaseSegments(self, baseExtrusionWidth):
def addEmptyLayerSupport( self, boundaryLayerIndex ):
"""Add support material to a layer if it is empty."""
+ print ('Adding Support to empty layers')
supportLayer = SupportLayer([])
self.supportLayers.append(supportLayer)
if len( self.boundaryLayers[ boundaryLayerIndex ].loops ) > 0:
@@ -522,6 +514,7 @@ def addFlowRateValueIfDifferent( self, flowRate ):
def addInterfaceLayer(self):
"""Add an interface layer."""
+ print ('Adding Interface layers')
interfaceLayerThickness = self.extrusionHeight * self.interfaceLayerThicknessOverLayerThickness
zCenter = self.extrusionTop + 0.5 * interfaceLayerThickness
z = zCenter + interfaceLayerThickness * self.repository.interfaceNozzleLiftOverInterfaceLayerThickness.value
@@ -576,7 +569,7 @@ def addLayerFromEndpoints(
step,
z):
"""Add a layer from endpoints and raise the extrusion top."""
- extrusionHeightRatioSquared = extrusionHeightRatio * extrusionHeightRatio
+ extrusionHeightRatioSquared = extrusionHeightRatio ** 2
feedRateMinute = self.feedRateMinute * feedRateMultiplier / extrusionHeightRatioSquared
if len(endpoints) < 1:
return
@@ -604,6 +597,7 @@ def addLayerLine(self, z):
def addOperatingOrbits(self, boundaryLoops, pointComplex, temperatureChangeTime, z):
"""Add the orbits before the operating layers."""
+ print ('Adding Orbit lines')
if len(boundaryLoops) < 1:
return
insetBoundaryLoops = intercircle.getInsetLoopsFromLoops(self.extrusionWidth, boundaryLoops)
@@ -616,6 +610,7 @@ def addOperatingOrbits(self, boundaryLoops, pointComplex, temperatureChangeTime,
def addRaft(self):
"""Add the raft."""
+ print ('Adding the Raft')
if len(self.boundaryLayers) < 0:
print('this should never happen, there are no boundary layers in addRaft')
return
@@ -628,7 +623,7 @@ def addRaft(self):
self.setCornersZ()
self.cornerMinimumComplex = self.cornerMinimum.dropAxis()
originalExtent = self.cornerMaximumComplex - self.cornerMinimumComplex
- self.raftOutsetRadius = self.repository.raftMargin.value + (max(originalExtent.real, originalExtent.imag) * self.repository.raftAdditionalMarginOverLengthPercent.value / 100) + 0.001
+ self.raftOutsetRadius = self.repository.raftMargin.value + ((self.repository.raftAdditionalMarginOverLengthPercent.value * 0.01) * max(originalExtent.real, originalExtent.imag))+0.1
self.setBoundaryLayers()
outsetSeparateLoops = intercircle.getInsetSeparateLoopsFromLoops(-self.raftOutsetRadius, self.boundaryLayers[0].loops, 0.8)
self.interfaceIntersectionsTable = {}
@@ -674,6 +669,7 @@ def addRaft(self):
def addRaftPerimeters(self):
"""Add raft perimeters if there is a raft."""
+ print ('Add perimeters to raft')
for supportLayer in self.supportLayers:
supportSegmentTable = supportLayer.supportSegmentTable
if len(supportSegmentTable) > 0:
@@ -686,6 +682,7 @@ def addRaftPerimeters(self):
def addRaftPerimetersByLoops(self, loops, outset):
"""Add raft perimeters to the gcode for loops."""
+ print ('Add loops to raft')
loops = intercircle.getInsetSeparateLoopsFromLoops(-outset, loops)
for loop in loops:
self.distanceFeedRate.addLine('()')
@@ -742,17 +739,12 @@ def addSupportLayerTemperature(self, endpoints, z):
for aroundBoundaryLoop in aroundBoundaryLoops:
euclidean.addLoopToPixelTable(aroundBoundaryLoop, aroundPixelTable, aroundWidth)
paths = euclidean.getPathsFromEndpoints(endpoints, 1.5 * self.interfaceStep, aroundPixelTable, aroundWidth)
- feedRateMinuteMultiplied = (self.supportFeedRate *60)
+ feedRateMinuteMultiplied = self.supportFeedRate *60
supportFlowRateMultiplied = self.supportFlowRate
- travelFeedRateMultiplied = self.repository.objectFirstLayerTravelSpeed.value * 60
if not self.layerIndex:
+ feedRateMinuteMultiplied = self.repository.objectFirstLayerFeedRateInfillMultiplier.value * 60
supportFlowRateMultiplied = self.repository.objectFirstLayerFlowRateInfillMultiplier.value * self.repository.objectFirstLayerFeedRateInfillMultiplier.value
- self.addFlowRateValueIfDifferent(supportFlowRateMultiplied)
- if self.isExtruderActive:
- feedRateMinuteMultiplied = self.repository.objectFirstLayerFeedRateInfillMultiplier.value * 60
- if not self.isExtruderActive:
- feedRateMinuteMultiplied = self.repository.objectFirstLayerTravelSpeed.value * 60
- return
+ self.addFlowRateValueIfDifferent(supportFlowRateMultiplied)
for path in paths:
self.distanceFeedRate.addGcodeFromFeedRateThreadZ(feedRateMinuteMultiplied, path, self.travelFeedRateMinute, z)
self.addFlowRateLineIfDifferent(str(self.oldFlowRateInput))
@@ -795,7 +787,6 @@ def addTemperatureOrbits( self, endpoints, temperature, z ):
intercircle.addOrbitsIfLarge( self.distanceFeedRate, largestLoop, self.orbitalFeedRatePerSecond, temperatureTimeChange, z )
def addToFillXIntersectionIndexTables( self, supportLayer ):
- """Add fill segments from the boundary layers."""
supportLoops = supportLayer.supportLoops
supportLayer.fillXIntersectionsTable = {}
if len(supportLoops) < 1:
@@ -828,6 +819,7 @@ def getCraftedGcode(self, gcodeText, repository):
self.supportEndLines = settings.getLinesInAlterationsOrGivenDirectory(repository.nameOfSupportEndFile.value)
self.supportStartLines = settings.getLinesInAlterationsOrGivenDirectory(repository.nameOfSupportStartFile.value)
self.lines = archive.getTextLines(gcodeText)
+ self.objectFirstLayerTravelSpeed = self.repository.objectFirstLayerTravelSpeed.value
self.parseInitialization()
self.temperatureChangeTimeBeforeRaft = 0.0
if self.repository.initialCircling.value:
@@ -879,20 +871,17 @@ def getRaftedLine( self, splitLine ):
z += self.operatingJump
flowRate = self.oldFlowRateInput
temperature = self.objectNextLayersTemperature
-# travelFeedRateMultiplied = self.repository.objectFirstLayerTravelSpeed * 60
if not self.layerIndex:
if self.isPerimeterPath:
feedRateMinuteMultiplied = self.repository.objectFirstLayerFeedRatePerimeterMultiplier.value * 60
flowRate = self.repository.objectFirstLayerFlowRatePerimeterMultiplier.value * self.repository.objectFirstLayerFeedRatePerimeterMultiplier.value
temperature = self.objectFirstLayerPerimeterTemperature
- if not self.isExtruderActive:
- feedRateMinuteMultiplied = self.repository.objectFirstLayerTravelSpeed.value *60
else:
feedRateMinuteMultiplied = self.repository.objectFirstLayerFeedRateInfillMultiplier.value * 60
flowRate = self.repository.objectFirstLayerFlowRateInfillMultiplier.value * self.repository.objectFirstLayerFeedRateInfillMultiplier.value
temperature = self.objectFirstLayerInfillTemperature
- if not self.isExtruderActive:
- feedRateMinuteMultiplied = self.repository.objectFirstLayerTravelSpeed.value *60
+ if not self.isExtruderActive:
+ feedRateMinuteMultiplied = self.objectFirstLayerTravelSpeed * 60
self.addFlowRateValueIfDifferent(flowRate)
self.addTemperatureLineIfDifferent(temperature)
return self.distanceFeedRate.getLinearGcodeMovementWithFeedRate(feedRateMinuteMultiplied, location.dropAxis(), z)
@@ -962,16 +951,16 @@ def parseInitialization(self):
elif firstWord == '(':
self.oldFlowRateInput = float(splitLine[1])
self.operatingFlowRate = self.oldFlowRateInput
- self.supportFlowRate = self.supportFeedRate * self.repository.supportFlowRateOverOperatingFlowRate.value
+ self.supportFlowRate = self.supportFeedRate * self.repository.supportFlowRateScaler.value
elif firstWord == '(':
self.extrusionWidth = float(splitLine[1])
self.quarterPerimeterWidth = 0.25 * self.extrusionWidth
- self.supportOutset = self.extrusionWidth + self.extrusionWidth * self.repository.supportGapOverPerimeterExtrusionWidth.value
+ self.supportOutset = self.extrusionWidth * self.repository.supportGapOverPerimeterExtrusionWidth.value #todo check ACT
elif firstWord == '(':
self.supportLayersTemperature = float(splitLine[1])
elif firstWord == '(':
self.supportedLayersTemperature = float(splitLine[1])
- elif firstWord == '(':
+ elif firstWord == '(':
self.travelFeedRateMinute = 60.0 * float(splitLine[1])
self.distanceFeedRate.addLine(line)
@@ -1037,11 +1026,12 @@ def parseLine(self, line):
def setBoundaryLayers(self):
"""Set the boundary layers."""
- if self.repository.supportChoiceNone.value:
+ print ('Setting the boundary layers.')
+ if self.repository.supportChoiceNone.value : #**************************
return
- if len(self.boundaryLayers) < 2:
+ elif len(self.boundaryLayers) < 2:
return
- if self.repository.supportChoiceEmptyLayersOnly.value:
+ elif self.repository.supportChoiceEmptyLayersOnly.value:#**************************
supportLayer = SupportLayer([])
self.supportLayers.append(supportLayer)
for boundaryLayerIndex in xrange(1, len(self.boundaryLayers) -1):
@@ -1062,7 +1052,7 @@ def setBoundaryLayers(self):
self.extendXIntersections( boundaryLoops, self.supportOutset, self.supportLayers[supportLayerIndex].xIntersectionsTable)
for supportLayer in self.supportLayers:
self.addToFillXIntersectionIndexTables(supportLayer)
- if self.repository.supportChoiceExteriorOnly.value:
+ if self.repository.supportChoiceExteriorOnly.value:#**************************
for supportLayerIndex in xrange(1, len(self.supportLayers)):
self.subtractJoinedFill(supportLayerIndex)
for supportLayer in self.supportLayers:
@@ -1080,6 +1070,7 @@ def setBoundaryLayers(self):
def setCornersZ(self):
"""Set maximum and minimum corners and z."""
+ print ('Set maximum and minimum corners and z.')
boundaryLoop = None
boundaryLayer = None
layerIndex = - 1
@@ -1111,6 +1102,7 @@ def setCornersZ(self):
def subtractJoinedFill( self, supportLayerIndex ):
"""Join the fill then subtract it from the support layer table."""
+ print ('Join the fill then subtract it from the support layer table')
supportLayer = self.supportLayers[supportLayerIndex]
fillXIntersectionsTable = supportLayer.fillXIntersectionsTable
belowFillXIntersectionsTable = self.supportLayers[ supportLayerIndex - 1 ].fillXIntersectionsTable
@@ -1132,7 +1124,7 @@ def __init__( self, supportLoops ):
self.supportLoops = supportLoops
self.supportSegmentTable = {}
self.xIntersectionsTable = {}
- self.isExtruderActive = False
+# self.isExtruderActive = False
def __repr__(self):
"""Get the string representation of this loop layer."""
diff --git a/skeinforge_application/skeinforge_plugins/craft_plugins/skin.py b/skeinforge_application/skeinforge_plugins/craft_plugins/skin.py
index 36262a7..357c71e 100644
--- a/skeinforge_application/skeinforge_plugins/craft_plugins/skin.py
+++ b/skeinforge_application/skeinforge_plugins/craft_plugins/skin.py
@@ -79,7 +79,7 @@ def __init__(self):
skeinforge_profile.addListsToCraftTypeRepository('skeinforge_application.skeinforge_plugins.craft_plugins.skin.html', self )
self.fileNameInput = settings.FileNameInput().getFromFileName( fabmetheus_interpret.getGNUTranslatorGcodeFileTypeTuples(), 'Open File for Skin', self, '')
self.openWikiManualHelpPage = settings.HelpPage().getOpenFromAbsolute('http://fabmetheus.crsndoo.com/wiki/index.php/Skeinforge_Skin')
- self.activateSkin = settings.BooleanSetting().getFromValue('Activate Skin: this is experimental. \nIt prints the perimeters and loops only at half the layer height that is specified under carve.', self, False )
+ self.activateSkin = settings.BooleanSetting().getFromValue('Activate Skin: this is experimental', self, False )
self.clipOverPerimeterWidth = settings.FloatSpin().getFromValue(0.50, 'Clip Over Perimeter Width (scaler):', self, 1.50, 1.00)
self.layersFrom = settings.IntSpin().getSingleIncrementFromValue(0, 'Do Not Skin the first ... Layers:', self, 912345678, 3)
self.executeTitle = 'Skin'
@@ -159,14 +159,14 @@ def parseInitialization(self):
elif firstWord == '(':
self.quarterLayerThickness = 0.25 * float(splitLine[1])
+ self.halfLayerThickness = 0.5 * float(splitLine[1])
elif firstWord == '(':
self.oldFlowRate = float(splitLine[1])
elif firstWord == '(':
extrusionWidth = float(splitLine[1])
- self.halfPerimeterWidth = 0.5 * extrusionWidth
self.quarterPerimeterWidth = 0.25 * extrusionWidth
- #self.clipLength = (self.quarterLayerThickness - (self.repository.clipOverPerimeterWidth.value * self.quarterLayerThickness * (((0.785)))))*4
- self.clipLength = (self.quarterLayerThickness - (clipRepository.clipOverPerimeterWidth.value * self.quarterLayerThickness * (((0.785)))))*4
+ self.halfPerimeterWidth = 0.5 * extrusionWidth
+ self.clipLength = (self.halfLayerThickness - (self.repository.clipOverPerimeterWidth.value * self.quarterLayerThickness * ((0.7853))))*4
elif firstWord == '(':
self.travelFeedRateMinute = 60.0 * float(splitLine[1])
self.distanceFeedRate.addLine(line)
diff --git a/skeinforge_application/skeinforge_plugins/craft_plugins/skirt.py b/skeinforge_application/skeinforge_plugins/craft_plugins/skirt.py
index f2ba57c..14eed15 100644
--- a/skeinforge_application/skeinforge_plugins/craft_plugins/skirt.py
+++ b/skeinforge_application/skeinforge_plugins/craft_plugins/skirt.py
@@ -265,7 +265,7 @@ def parseInitialization(self):
self.extrusionWidth = float(splitLine[1])
self.skirtOutset = (self.repository.gapOverPerimeterWidth.value + 0.5) * self.extrusionWidth
self.distanceFeedRate.addTagRoundedLine('skirtOutset', self.skirtOutset)
- elif firstWord == '(':
+ elif firstWord == '(':
self.travelFeedRateMinute = 60.0 * float(splitLine[1])
self.distanceFeedRate.addLine(line)
diff --git a/skeinforge_application/skeinforge_plugins/craft_plugins/speed.py b/skeinforge_application/skeinforge_plugins/craft_plugins/speed.py
index 027f364..d1f4d52 100644
--- a/skeinforge_application/skeinforge_plugins/craft_plugins/speed.py
+++ b/skeinforge_application/skeinforge_plugins/craft_plugins/speed.py
@@ -152,7 +152,7 @@ def __init__(self):
self.bridgeFlowRateScaler = settings.FloatSpin().getFromValue( 0.5, 'Bridge Flow Rate (scaler):', self, 1.3, 1.0 )
settings.LabelSeparator().getFromRepository(self)
settings.LabelSeparator().getFromRepository(self)
- self.travelFeedRatePerSecond = settings.FloatSpin().getFromValue( 40.0, 'Travel Feed Rate (mm/s):', self, 200.0, 130.0 )
+ self.travelFeedRate = settings.FloatSpin().getFromValue( 40.0, 'Travel Feed Rate (mm/s):', self, 200.0, 130.0 )
self.executeTitle = 'Speed'
def execute(self):
@@ -193,7 +193,7 @@ def getCraftedGcode(self, gcodeText, repository):
self.repository = repository
self.mainFeed = repository.mainFeed.value
self.perimeterFeed = repository.perimeterFeed.value
- self.travelFeedRateMinute = 60.0 * self.repository.travelFeedRatePerSecond.value
+ self.travelFeedRate = self.repository.travelFeedRate.value
self.lines = archive.getTextLines(gcodeText)
self.parseInitialization()
for line in self.lines[self.lineIndex :]:
@@ -215,14 +215,14 @@ def getSpeededLine(self, line, splitLine):
"""Get gcode line with feed rate."""
if gcodec.getIndexOfStartingWithSecond('F', splitLine) > 0:
return line
- feedRateMinute = 60.0 * self.mainFeed
+ feedRateMinute = self.mainFeed * 60
if self.isBridgeLayer:
feedRateMinute *= self.repository.bridgeFeedRateMultiplier.value
if self.isPerimeterPath:
feedRateMinute = self.repository.perimeterFeed.value * 60
- self.addFlowRateLineIfNecessary()
if not self.isExtruderActive:
- feedRateMinute = self.travelFeedRateMinute
+ feedRateMinute = self.travelFeedRate * 60
+ self.addFlowRateLineIfNecessary()
return self.distanceFeedRate.getLineWithFeedRate(feedRateMinute, line, splitLine)
def parseInitialization(self):
@@ -246,7 +246,7 @@ def parseInitialization(self):
self.distanceFeedRate.addTagBracketedLine('PerimeterFlowRate', self.repository.perimeterFlowRateScaler.value * self.repository.perimeterFeed.value )
orbitalFeedRatePerSecond = self.mainFeed * self.repository.orbitalFeedRateOverOperatingFeedRate.value
self.distanceFeedRate.addTagBracketedLine('orbitalFeedRatePerSecond', orbitalFeedRatePerSecond )
- self.distanceFeedRate.addTagBracketedLine('travelFeedRatePerSecond', self.repository.travelFeedRatePerSecond.value )
+ self.distanceFeedRate.addTagBracketedLine('travelFeedRate', self.repository.travelFeedRate.value )
self.distanceFeedRate.addLine(line)
def parseLine(self, line):
"""Parse a gcode line and add it to the speed skein."""
@@ -274,7 +274,6 @@ def parseLine(self, line):
self.isPerimeterPath = False
self.distanceFeedRate.addLine(line)
-
def main():
"""Display the speed dialog."""
if len(sys.argv) > 1:
diff --git a/skeinforge_application/skeinforge_plugins/craft_plugins/wipe.py b/skeinforge_application/skeinforge_plugins/craft_plugins/wipe.py
index b280090..48b6729 100644
--- a/skeinforge_application/skeinforge_plugins/craft_plugins/wipe.py
+++ b/skeinforge_application/skeinforge_plugins/craft_plugins/wipe.py
@@ -230,7 +230,7 @@ def parseInitialization( self, wipeRepository ):
return
elif firstWord == '(':
self.absolutePerimeterWidth = abs(float(splitLine[1]))
- elif firstWord == '(':
+ elif firstWord == '(':
self.travelFeedRateMinute = 60.0 * float(splitLine[1])
self.distanceFeedRate.addLine(line)
diff --git a/skeinforge_application/skeinforge_plugins/profile_plugins/extrusion.py b/skeinforge_application/skeinforge_plugins/profile_plugins/extrusion.py
index e3678f1..bc83b3d 100644
--- a/skeinforge_application/skeinforge_plugins/profile_plugins/extrusion.py
+++ b/skeinforge_application/skeinforge_plugins/profile_plugins/extrusion.py
@@ -39,7 +39,7 @@ class ExtrusionRepository:
"""A class to handle the export settings."""
def __init__(self):
"""Set the default settings, execute title & settings fileName."""
- skeinforge_profile.addListsSetCraftProfile( getCraftSequence(), 'PLA', self, 'skeinforge_plugins.profile_plugins.extrusion.html')
+ skeinforge_profile.addListsSetCraftProfile( getCraftSequence(), 'Default', self, 'skeinforge_plugins.profile_plugins.extrusion.html')
def main():