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
+__copyright__ = "Copyright (C) 2013 David Braam - Released under terms of the AGPLv3 License"
-import sys
-import warnings
from optparse import OptionParser
-import wx._core
-
-from util import profile
-
-__author__ = 'Daid'
-__credits__ = """
-David Braam (daid303@gmail.com)
-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/>
-Ilya Kulakov (kulakov.ilya@gmail.com)
-
-Organizations:
-Ultimaker <http://www.ultimaker.com>
-Art of Illusion <http://www.artofillusion.org/>"""
-
-__license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html'
-
-
-class CuraApp(wx.App):
- def MacOpenFile(self, path):
- try:
- pass
- except Exception as e:
- warnings.warn("File at {p} cannot be read: {e}".format(p=path, e=str(e)))
+from Cura.util import profile
def main():
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("-P", "--project", action="store_true", dest="openprojectplanner",
- help="Open the project planner")
- parser.add_option("-F", "--flat", action="store_true", dest="openflatslicer",
- help="Open the 2D SVG slicer (unfinished)")
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()
+ profile.loadPreferences(profile.getPreferencePath())
if options.profile is not None:
- profile.loadGlobalProfileFromString(options.profile)
- if options.profileini is not None:
- profile.loadGlobalProfile(options.profileini)
+ profile.setProfileFromString(options.profile)
+ elif options.profileini is not None:
+ profile.loadProfile(options.profileini)
+ else:
+ profile.loadProfile(profile.getDefaultProfilePath())
- if options.openprojectplanner is not None:
- from gui import projectPlanner
- projectPlanner.main()
- elif options.openflatslicer is not None:
- from gui import flatSlicerWindow
- flatSlicerWindow.main()
- elif options.printfile is not None:
- from gui import printWindow
+ if options.printfile is not None:
+ from Cura.gui import printWindow
printWindow.startPrintInterface(options.printfile)
elif options.slice is not None:
- from util import sliceRun
- sliceRun.runSlice(args)
- else:
- if len(args) > 0:
- profile.putPreference('lastFile', ';'.join(args))
-
- from gui import splashScreen
-
- def mainWindowRunCallback(splash):
- from gui import mainWindow
- if splash is not None:
- splash.Show(False)
- mainWindow.main()
-
- app = CuraApp(False)
- # Apple discurage usage of splash screens on a mac.
- if sys.platform.startswith('darwin'):
- mainWindowRunCallback(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()
+
+ if options.output:
+ shutil.copyfile(slicer.getGCodeFilename(), options.output)
+ print 'GCode file saved : %s' % options.output
else:
- splashScreen.splashScreen(mainWindowRunCallback)
- app.MainLoop()
+ 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()