Package plugins :: Module export
[hide private]
[frames] | no frames]

Source Code for Module plugins.export

  1  """ 
  2  Exports the slicedModel to a file. 
  3   
  4  Credits: 
  5          Original Author: Enrique Perez (http://skeinforge.com) 
  6          Contributors: Please see the documentation in Skeinforge  
  7          Modifed as SFACT: Ahmet Cem Turan (github.com/ahmetcemturan/SFACT)       
  8   
  9  License:  
 10          GNU Affero General Public License http://www.gnu.org/licenses/agpl.html 
 11  """ 
 12   
 13  from config import config 
 14  from datetime import timedelta 
 15  from fabmetheus_utilities import archive, euclidean 
 16  from utilities import memory_tracker 
 17  from gcode_writer import GcodeWriter 
 18  from StringIO import StringIO 
 19  import datetime 
 20  import logging 
 21  import os 
 22  import string 
 23  import time 
 24  try: 
 25     import cPickle as pickle 
 26  except: 
 27     import pickle 
 28      
 29  logger = logging.getLogger('export') 
 30  name = 'export' 
 31   
32 -def performAction(slicedModel):
33 'Export a slicedModel linear move text.' 34 e = ExportSkein(slicedModel) 35 if slicedModel.runtimeParameters.profileMemory: 36 memory_tracker.track_object(e) 37 e.export() 38 if slicedModel.runtimeParameters.profileMemory: 39 memory_tracker.create_snapshot("After export")
40
41 -class ExportSkein:
42 'A class to export a skein of extrusions.'
43 - def __init__(self, slicedModel):
44 self.slicedModel = slicedModel 45 self.deleteComments = config.getboolean(name, 'delete.comments') 46 self.fileExtension = config.get(name, 'file.extension') 47 self.nameOfReplaceFile = config.get(name, 'replace.filename') 48 self.exportSlicedModel = config.getboolean(name, 'export.slicedmodel') 49 self.exportSlicedModelExtension = config.get(name, 'export.slicedmodel.extension') 50 self.addProfileExtension = config.getboolean(name, 'file.extension.profile') 51 self.exportPickledSlicedModel = config.getboolean(name, 'export.pickled.slicedmodel') 52 self.exportPickledSlicedModelExtension = config.get(name, 'export.pickled.slicedmodel.extension') 53 self.overwritePickledSlicedModel = config.getboolean(name, 'overwrite.pickled.slicedmodel')
54
55 - def getReplaceableExportGcode(self, nameOfReplaceFile, replaceableExportGcode):
56 'Get text with strings replaced according to replace.csv file.' 57 58 fullReplaceFilePath = os.path.join('alterations', nameOfReplaceFile) 59 60 if self.nameOfReplaceFile == '' or not os.path.exists(fullReplaceFilePath): 61 return replaceableExportGcode 62 63 fullReplaceText = archive.getFileText(fullReplaceFilePath) 64 replaceLines = archive.getTextLines(fullReplaceText) 65 if len(replaceLines) < 1: 66 return replaceableExportGcode 67 for replaceLine in replaceLines: 68 splitLine = replaceLine.replace('\\n', '\t').split('\t') 69 if len(splitLine) > 0: 70 replaceableExportGcode = replaceableExportGcode.replace(splitLine[0], '\n'.join(splitLine[1 :])) 71 output = StringIO() 72 73 for line in archive.getTextLines(replaceableExportGcode): 74 if line != '': 75 output.write(line + '\n') 76 77 return output.getvalue()
78
79 - def export(self):
80 'Perform final modifications to slicedModel and performs export.' 81 82 filename = self.slicedModel.runtimeParameters.inputFilename 83 filenamePrefix = os.path.splitext(filename)[0] 84 85 if self.slicedModel.runtimeParameters.outputFilename != None: 86 exportFileName = self.slicedModel.runtimeParameters.outputFilename 87 else : 88 exportFileName = filenamePrefix 89 profileName = self.slicedModel.runtimeParameters.profileName 90 91 if self.addProfileExtension and profileName: 92 exportFileName += '.' + string.replace(profileName, ' ', '_') 93 exportFileName += '.' + self.fileExtension 94 self.slicedModel.runtimeParameters.outputFilename = exportFileName 95 96 replaceableExportGcode = self.getReplaceableExportGcode(self.nameOfReplaceFile, GcodeWriter(self.slicedModel).getSlicedModelAsGcode()) 97 archive.writeFileText(exportFileName, replaceableExportGcode) 98 99 if self.exportSlicedModel: 100 fileNamePenultimate = filenamePrefix + '.' + self.exportSlicedModelExtension 101 archive.writeFileText(fileNamePenultimate, str(self.slicedModel)) 102 logger.info('Sliced Model slicedModel exported to: %s', fileNamePenultimate) 103 104 if self.exportPickledSlicedModel: 105 fileNamePickled = filenamePrefix + '.' + self.exportPickledSlicedModelExtension 106 if os.path.exists(fileNamePickled) and not self.overwritePickledSlicedModel: 107 backupFilename = '%s.%s.bak' % (fileNamePickled, datetime.datetime.now().strftime('%Y%m%d_%H%M%S_%f')) 108 os.rename(fileNamePickled, backupFilename) 109 logger.info('Existing slicedmodel file backed up to: %s', backupFilename) 110 logger.info('Pickled slicedmodel exported to: %s', fileNamePickled) 111 archive.writeFileText(fileNamePickled, pickle.dumps(self.slicedModel)) 112 113 logger.info('Gcode exported to: %s', os.path.basename(exportFileName))
114