chiark / gitweb /
Allow for odd shaped platforms and generalize the UM2 clip code into no-go zones.
[cura.git] / Cura / cura.py
index 4de0ed12122e285797165b350acd414aedade29a..701b93e64a07834705a376e8064308475f21e3fd 100644 (file)
@@ -3,55 +3,70 @@
 This page is in the table of contents.
 ==Overview==
 ===Introduction===
-Cura is a GPL tool chain to forge a gcode skein for a model. Based on Skeinforge.
-
-The slicing code is the same as Skeinforge. But the UI has been revamped to be... sane.
-
+Cura is a AGPL tool chain to generate a GCode path for 3D printing. Older versions of Cura where based on Skeinforge.
+Versions up from 13.05 are based on a C++ engine called CuraEngine.
 """
-
 from __future__ import absolute_import
-import __init__
+__copyright__ = "Copyright (C) 2013 David Braam - Released under terms of the AGPLv3 License"
 
-import sys
-import platform
 from optparse import OptionParser
 
-from util import sliceRun
-
-__author__ = 'Daid'
-__credits__ = """
-Enrique Perez (perez_enrique@yahoo.com)
-Adrian Bowyer <http://forums.reprap.org/profile.php?12,13>
-Brendan Erwin <http://forums.reprap.org/profile.php?12,217>
-Greenarrow <http://forums.reprap.org/profile.php?12,81>
-Ian England <http://forums.reprap.org/profile.php?12,192>
-John Gilmore <http://forums.reprap.org/profile.php?12,364>
-Jonwise <http://forums.reprap.org/profile.php?12,716>
-Kyle Corbitt <http://forums.reprap.org/profile.php?12,90>
-Michael Duffin <http://forums.reprap.org/profile.php?12,930>
-Marius Kintel <http://reprap.soup.io/>
-Nophead <http://www.blogger.com/profile/12801535866788103677>
-PJR <http://forums.reprap.org/profile.php?12,757>
-Reece.Arnott <http://forums.reprap.org/profile.php?12,152>
-Wade <http://forums.reprap.org/profile.php?12,489>
-Xsainnz <http://forums.reprap.org/profile.php?12,563>
-Zach Hoeken <http://blog.zachhoeken.com/>
-
-Organizations:
-Art of Illusion <http://www.artofillusion.org/>"""
-
-__license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html'
+from Cura.util import profile
 
 def main():
-       parser = OptionParser()
+       parser = OptionParser(usage="usage: %prog [options] <filename>.stl")
+       parser.add_option("-i", "--ini", action="store", type="string", dest="profileini",
+               help="Load settings from a profile ini file")
+       parser.add_option("-r", "--print", action="store", type="string", dest="printfile",
+               help="Open the printing interface, instead of the normal cura interface.")
+       parser.add_option("-p", "--profile", action="store", type="string", dest="profile",
+               help="Internal option, do not use!")
+       parser.add_option("-s", "--slice", action="store_true", dest="slice",
+               help="Slice the given files instead of opening them in Cura")
+       parser.add_option("-o", "--output", action="store", type="string", dest="output",
+               help="path to write sliced file to")
+
        (options, args) = parser.parse_args()
-       sys.argv = [sys.argv[0]] + args
-       if len( args ) > 0:
-               sliceRun.runSlice(args)
+
+       profile.loadPreferences(profile.getPreferencePath())
+       if options.profile is not None:
+               profile.setProfileFromString(options.profile)
+       elif options.profileini is not None:
+               profile.loadProfile(options.profileini)
        else:
-               from gui import mainWindow
-               mainWindow.main()
+               profile.loadProfile(profile.getDefaultProfilePath())
+
+       if options.printfile is not None:
+               from Cura.gui import printWindow
+               printWindow.startPrintInterface(options.printfile)
+       elif options.slice is not None:
+               from Cura.util import sliceEngine
+               from Cura.util import objectScene
+               from Cura.util import meshLoader
+               import shutil
+
+               def commandlineProgessCallback(progress, ready):
+                       if progress >= 0 and not ready:
+                               print 'Preparing: %d%%' % (progress * 100)
+               scene = objectScene.Scene()
+               slicer = sliceEngine.Slicer(commandlineProgessCallback)
+               for m in meshLoader.loadMeshes(args[0]):
+                       scene.add(m)
+               slicer.runSlicer(scene)
+               slicer.wait()
+               profile.replaceGCodeTagsFromSlicer(slicer.getGCodeFilename(), slicer)
+
+               if options.output:
+                       shutil.copyfile(slicer.getGCodeFilename(), options.output)
+                       print 'GCode file saved : %s' % options.output
+               else:
+                       shutil.copyfile(slicer.getGCodeFilename(), args[0] + '.gcode')
+                       print 'GCode file saved as: %s' % (args[0] + '.gcode')
+
+               slicer.cleanup()
+       else:
+               from Cura.gui import app
+               app.CuraApp(args).MainLoop()
 
 if __name__ == '__main__':
        main()
-