Added build scripts and initial patch for SF41

master
daid 2011-12-13 15:45:38 +01:00
parent b6652dd9f7
commit 3263858b97
4 changed files with 236 additions and 0 deletions

1
README
View File

@ -14,3 +14,4 @@ The graphical analize plugins don't work (Skeinlayer and Skeiniso)
====How does it work===
The user interface still runs in normal python (as PyPy with TK is a bit hard to build, especially for windows), and when you slice it will run command line PyPy to slice the model.

42
build.sh Executable file
View File

@ -0,0 +1,42 @@
#!/bin/sh
#Get portable python and extract it.
if [ ! -f "PortablePython_2.7.2.1.exe" ]; then
wget http://ftp.nluug.nl/languages/python/portablepython/v2.7/PortablePython_2.7.2.1.exe
fi
if [ ! -d target/python ]; then
7z x PortablePython_2.7.2.1.exe \$_OUTDIR/App
mkdir -p target/python
mv \$_OUTDIR/App/* target/python
rm -rf \$_OUTDIR
fi
#Get pypy and extract it
if [ ! -f "pypy-1.7-win32.zip" ]; then
wget https://bitbucket.org/pypy/pypy/downloads/pypy-1.7-win32.zip
fi
if [ ! -d target/pypy-1.7 ]; then
mkdir -p target/pypy-1.7
cd target
7z x ../pypy-1.7-win32.zip
cd ..
fi
for NR in `ls patches`; do
if [ ! -f "${NR}_reprap_python_beanshell.zip" ]; then
wget http://fabmetheus.crsndoo.com/files/${NR}_reprap_python_beanshell.zip
fi
if [ ! -d "ori/${NR}" ]; then
mkdir -p ori/${NR}
cd ori/${NR}
7z x ../../${NR}_reprap_python_beanshell.zip
cd ../..
fi
rm -rf target/SF${NR}
cp -a ori/${NR} target/SF${NR}
cd target/SF${NR}
patch -p 2 < ../../patches/${NR}
cd ../..
echo $NR
done

8
build_patches.sh Executable file
View File

@ -0,0 +1,8 @@
#!/bin/sh
for NR in `ls patches`; do
if [ -d target/SF${NR} ]; then
diff -r -x*.pyc -u ori/${NR}/ target/SF${NR} > patches/${NR}
fi
done

185
patches/41 Normal file
View File

@ -0,0 +1,185 @@
diff -r -x'*.pyc' -u ori/41/fabmetheus_utilities/euclidean.py target/SF41/fabmetheus_utilities/euclidean.py
--- ori/41/fabmetheus_utilities/euclidean.py 2011-04-15 02:32:27.000000000 +0200
+++ target/SF41/fabmetheus_utilities/euclidean.py 2011-12-13 15:35:53.000000000 +0100
@@ -64,7 +64,7 @@
def addElementToPixelList( element, pixelDictionary, x, y ):
'Add an element to the pixel list.'
- stepKey = getStepKey(x, y)
+ stepKey = (x, y)
addElementToListDictionary( element, stepKey, pixelDictionary )
def addElementToPixelListFromPoint( element, pixelDictionary, point ):
@@ -116,7 +116,7 @@
def addPixelToPixelTable( pixelDictionary, value, x, y ):
'Add pixel to the pixel table.'
- pixelDictionary[getStepKey(x, y)] = value
+ pixelDictionary[(x, y)] = value
def addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, value, x, y ):
'Add pixels to the pixel table with steepness.'
@@ -174,12 +174,20 @@
xBegin = int(round(beginComplex.real))
xEnd = int(round(endComplex.real))
yIntersection = beginComplex.imag - beginComplex.real * gradient
- addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, None, xBegin, int( round( beginComplex.imag ) ) )
- addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, None, xEnd, int( round( endComplex.imag ) ) )
- for x in xrange( xBegin + 1, xEnd ):
- y = int( math.floor( yIntersection + x * gradient ) )
- addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, None, x, y )
- addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, None, x, y + 1 )
+ if isSteep:
+ pixelDictionary[( int( round( beginComplex.imag ) ), xBegin)] = None
+ pixelDictionary[( int( round( endComplex.imag ) ), xEnd )] = None
+ for x in xrange( xBegin + 1, xEnd ):
+ y = int( math.floor( yIntersection + x * gradient ) )
+ pixelDictionary[(y, x)] = None
+ pixelDictionary[(y + 1, x)] = None
+ else:
+ pixelDictionary[(xBegin, int( round( beginComplex.imag ) ) )] = None
+ pixelDictionary[(xEnd, int( round( endComplex.imag ) ) )] = None
+ for x in xrange( xBegin + 1, xEnd ):
+ y = int( math.floor( yIntersection + x * gradient ) )
+ pixelDictionary[(x, y)] = None
+ pixelDictionary[(x, y + 1)] = None
def addSquareTwoToPixelDictionary(pixelDictionary, point, value, width):
'Add square with two pixels around the center to pixel dictionary.'
@@ -188,7 +196,7 @@
y = int(round(point.imag))
for xStep in xrange(x - 2, x + 3):
for yStep in xrange(y - 2, y + 3):
- pixelDictionary[getStepKey(xStep, yStep)] = value
+ pixelDictionary[(xStep, yStep)] = value
def addSurroundingLoopBeginning( distanceFeedRate, loop, z ):
'Add surrounding loop beginning to gcode output.'
@@ -244,12 +252,20 @@
xBegin = int(round(beginComplex.real))
xEnd = int(round(endComplex.real))
yIntersection = beginComplex.imag - beginComplex.real * gradient
- addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, value, xBegin, int( round( beginComplex.imag ) ) )
- addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, value, xEnd, int( round( endComplex.imag ) ) )
- for x in xrange( xBegin + 1, xEnd ):
- y = int( math.floor( yIntersection + x * gradient ) )
- addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, value, x, y )
- addPixelToPixelTableWithSteepness( isSteep, pixelDictionary, value, x, y + 1 )
+ if isSteep:
+ pixelDictionary[(int( round( beginComplex.imag ) ), xBegin)] = value
+ pixelDictionary[(int( round( endComplex.imag ) ), xEnd)] = value
+ for x in xrange( xBegin + 1, xEnd ):
+ y = int( math.floor( yIntersection + x * gradient ) )
+ pixelDictionary[(y, x)] = value
+ pixelDictionary[(y + 1, x)] = value
+ else:
+ pixelDictionary[(xBegin, int( round( beginComplex.imag ) ))] = value
+ pixelDictionary[(xEnd, int( round( endComplex.imag ) ))] = value
+ for x in xrange( xBegin + 1, xEnd ):
+ y = int( math.floor( yIntersection + x * gradient ) )
+ pixelDictionary[(x, y)] = value
+ pixelDictionary[(x, y + 1)] = value
def addValueToOutput(depth, keyInput, output, value):
'Add value to the output.'
@@ -468,8 +484,7 @@
y = int(point.imag * oneOverOverlapDistance)
if not getSquareIsOccupied(pixelDictionary, x, y):
away.append(point)
- stepKey = getStepKey(x, y)
- pixelDictionary[stepKey] = None
+ pixelDictionary[(x, y)] = None
return away
def getBackOfLoops(loops):
@@ -1592,7 +1607,7 @@
squareValues = []
for xStep in xrange(x - 1, x + 2):
for yStep in xrange(y - 1, y + 2):
- stepKey = getStepKey(xStep, yStep)
+ stepKey = (xStep, yStep)
if stepKey in pixelDictionary:
return True
return False
@@ -1608,7 +1623,7 @@
squareValues = []
for xStep in xrange(x - 1, x + 2):
for yStep in xrange(y - 1, y + 2):
- stepKey = getStepKey(xStep, yStep)
+ stepKey = (xStep, yStep)
if stepKey in pixelDictionary:
squareValues += pixelDictionary[ stepKey ]
return squareValues
diff -r -x'*.pyc' -u ori/41/skeinforge_application/skeinforge_plugins/craft_plugins/dimension.py target/SF41/skeinforge_application/skeinforge_plugins/craft_plugins/dimension.py
--- ori/41/skeinforge_application/skeinforge_plugins/craft_plugins/dimension.py 2011-03-22 21:08:23.000000000 +0100
+++ target/SF41/skeinforge_application/skeinforge_plugins/craft_plugins/dimension.py 2011-12-13 15:18:15.000000000 +0100
@@ -160,9 +160,11 @@
def addLinearMoveExtrusionDistanceLine( self, extrusionDistance ):
"Get the extrusion distance string from the extrusion distance."
- self.distanceFeedRate.output.write('G1 F%s\n' % self.extruderRetractionSpeedMinuteString )
- self.distanceFeedRate.output.write('G1%s\n' % self.getExtrusionDistanceStringFromExtrusionDistance( extrusionDistance ) )
- self.distanceFeedRate.output.write('G1 F%s\n' % self.distanceFeedRate.getRounded( self.feedRateMinute ) )
+
+ if self.repository.retractionDistance.value != 0.0:
+ self.distanceFeedRate.output.write('G1 F%s\n' % self.extruderRetractionSpeedMinuteString )
+ self.distanceFeedRate.output.write('G1%s\n' % self.getExtrusionDistanceStringFromExtrusionDistance( extrusionDistance ) )
+ self.distanceFeedRate.output.write('G1 F%s\n' % self.distanceFeedRate.getRounded( self.feedRateMinute ) )
def getCraftedGcode(self, gcodeText, repository):
"Parse gcode text and store the dimension gcode."
@@ -262,9 +264,12 @@
self.absoluteDistanceMode = False
elif firstWord == 'M101':
self.addLinearMoveExtrusionDistanceLine( self.restartDistance )
- if not self.repository.relativeExtrusionDistance.value:
- self.distanceFeedRate.addLine('G92 E0')
- self.totalExtrusionDistance = 0.0
+
+ if self.totalExtrusionDistance > 999999.0:
+ if not self.repository.relativeExtrusionDistance.value:
+ self.distanceFeedRate.addLine('G92 E0')
+ self.totalExtrusionDistance = 0.0
+
self.isExtruderActive = True
elif firstWord == 'M103':
self.addLinearMoveExtrusionDistanceLine( - self.repository.retractionDistance.value )
diff -r -x'*.pyc' -u ori/41/skeinforge_application/skeinforge.py target/SF41/skeinforge_application/skeinforge.py
--- ori/41/skeinforge_application/skeinforge.py 2011-04-27 02:14:25.000000000 +0200
+++ target/SF41/skeinforge_application/skeinforge.py 2011-12-13 15:18:15.000000000 +0100
@@ -228,6 +228,7 @@
from skeinforge_application.skeinforge_utilities import skeinforge_profile
import os
import sys
+import platform
# infill or inset bug
@@ -545,7 +546,6 @@
repository = getNewRepository()
repository.fileNameInput.value = fileName
repository.execute()
- settings.startMainLoopFromConstructor(repository)
class SkeinforgeRepository:
@@ -568,13 +568,17 @@
settings.LabelDisplay().getFromName('', self)
importantFileNames = ['craft', 'profile']
getRadioPluginsAddPluginGroupFrame(archive.getSkeinforgePluginsPath(), importantFileNames, getPluginFileNames(), self)
- self.executeTitle = 'Skeinforge'
+ self.executeTitle = 'Skeinforge a file...'
def execute(self):
'Skeinforge button has been clicked.'
fileNames = skeinforge_polyfile.getFileOrDirectoryTypesUnmodifiedGcode(self.fileNameInput.value, fabmetheus_interpret.getImportPluginFileNames(), self.fileNameInput.wasCancelled)
for fileName in fileNames:
- skeinforge_craft.writeOutput(fileName)
+ if platform.python_implementation() == "PyPy":
+ skeinforge_craft.writeOutput(fileName)
+ else:
+ pypyExe = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../pypy-1.7/pypy"));
+ os.system(pypyExe + " '" + fileName + "'");
def save(self):
'Profile has been saved and profile menu should be updated.'