def getCraftedGcode( self, gcodeText, repository ): "Parse gcode text and store the statistics." self.absolutePerimeterWidth = 0.4 self.characters = 0 self.cornerHigh = Vector3( - 999999999.0, - 999999999.0, - 999999999.0 ) self.cornerLow = Vector3( 999999999.0, 999999999.0, 999999999.0 ) self.extruderActive = False self.extruderSpeed = 0.0 self.extruderToggled = 0 self.feedRateMinute = 600.0 self.layerThickness = 0.4 self.numberOfLines = 0 self.procedures = [] self.repository = repository self.totalBuildTime = 0.0 self.totalDistanceExtruded = 0.0 self.totalDistanceTraveled = 0.0 lines = gcodec.getTextLines( gcodeText ) for line in lines: self.parseLine( line ) averageFeedRate = self.totalDistanceTraveled / self.totalBuildTime self.characters += self.numberOfLines kilobytes = round( self.characters / 1024.0 ) halfPerimeterWidth = 0.5 * self.absolutePerimeterWidth halfExtrusionCorner = Vector3( halfPerimeterWidth, halfPerimeterWidth, halfPerimeterWidth ) self.cornerHigh += halfExtrusionCorner self.cornerLow -= halfExtrusionCorner extent = self.cornerHigh - self.cornerLow roundedHigh = euclidean.getRoundedPoint( self.cornerHigh ) roundedLow = euclidean.getRoundedPoint( self.cornerLow ) roundedExtent = euclidean.getRoundedPoint( extent ) axisString = " axis, the extrusion starts at " crossSectionArea = 0.9 * self.absolutePerimeterWidth * self.layerThickness # 0.9 if from the typical fill density if self.extrusionDiameter != None: crossSectionArea = math.pi / 4.0 * self.extrusionDiameter * self.extrusionDiameter volumeExtruded = 0.001 * crossSectionArea * self.totalDistanceExtruded self.addLine( "On the 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( "On the 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( "On the 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( "The average feedRate is %s mm/s, (%s mm/min)." % ( euclidean.getThreeSignificantFigures( averageFeedRate ), euclidean.getThreeSignificantFigures( 60.0 * averageFeedRate ) ) ) self.addLine( "The cross section area is %s mm2." % euclidean.getThreeSignificantFigures( crossSectionArea ) ) if self.extrusionDiameter != None: self.addLine( "The extrusion diameter is %s mm." % euclidean.getThreeSignificantFigures( self.extrusionDiameter ) ) self.addLine( 'The extrusion fill density ratio is %s' % euclidean.getThreeSignificantFigures( crossSectionArea / self.absolutePerimeterWidth / self.layerThickness ) ) # self.addLine( 'The perimeter extrusion fill density ratio is %s' % euclidean.getThreeSignificantFigures( crossSectionArea / self.absolutePerimeterWidth / self.layerThickness ) ) self.addLine( "The extruder speed is %s" % euclidean.getThreeSignificantFigures( self.extruderSpeed ) ) self.addLine( "The extruder was extruding %s percent of the time." % euclidean.getThreeSignificantFigures( 100.0 * self.totalDistanceExtruded / self.totalDistanceTraveled ) ) self.addLine( "The extruder was toggled %s times." % self.extruderToggled ) self.addLine( "The layer thickness is %s mm." % euclidean.getThreeSignificantFigures( self.layerThickness ) ) if self.operatingFeedRatePerSecond != None: flowRate = crossSectionArea * self.operatingFeedRatePerSecond self.addLine( "The operating flow rate is %s mm3/s." % euclidean.getThreeSignificantFigures( flowRate ) ) self.addLine( "The perimeter width is %s mm." % euclidean.getThreeSignificantFigures( self.absolutePerimeterWidth ) ) self.addLine( " " ) self.addLine( "The following procedures have been performed on the skein:" ) for procedure in self.procedures: self.addLine( procedure ) self.addLine( " " ) self.addLine( "The text has %s lines and a size of %s KB." % ( self.numberOfLines, kilobytes ) ) self.addLine( "The total build time is %s s." % int( round( self.totalBuildTime ) ) ) Filehandle = open ('report.txt', 'a') Filehandle.write ("The total build time is %s s." % int( round( self.totalBuildTime ) )+'\n') self.addLine( "The total distance extruded is %s mm." % euclidean.getThreeSignificantFigures( self.totalDistanceExtruded ) ) self.addLine( "The total distance traveled is %s mm." % euclidean.getThreeSignificantFigures( self.totalDistanceTraveled ) ) if self.version != None: self.addLine( "The version is " + self.version ) self.addLine( "The volume extruded is %s cc." % euclidean.getThreeSignificantFigures( volumeExtruded ) ) Filehandle.write ("The volume extruded is %s cc." % euclidean.getThreeSignificantFigures( volumeExtruded )+'\n') Filehandle.close () return self.output.getvalue()
def getCraftedGcode(self, gcodeText, repository): """Parse gcode text and store the statistics.""" self.absolutePerimeterWidth = 0.4 self.characters = 0 self.cornerMaximum = Vector3(-987654321.0, -987654321.0, -987654321.0) self.cornerMinimum = Vector3(987654321.0, 987654321.0, 987654321.0) self.extruderActive = False self.extruderSpeed = None self.extruderToggled = 0 self.feedRateMinute = 600.0 self.extrusionHeight = 0.4 self.numberOfLines = 0 self.procedures = [] self.repository = repository self.totalBuildTime = 0.0 self.totalDistanceExtruded = 0.0 self.totalDistanceTraveled = 0.0 lines = archive.getTextLines(gcodeText) for line in lines: self.parseLine(line) averageFeedRate = self.totalDistanceTraveled / self.totalBuildTime self.characters += self.numberOfLines kilobytes = round( self.characters / 1024.0 ) halfPerimeterWidth = 0.5 * self.absolutePerimeterWidth halfExtrusionCorner = Vector3( halfPerimeterWidth, halfPerimeterWidth, halfPerimeterWidth ) self.cornerMaximum += halfExtrusionCorner self.cornerMinimum -= halfExtrusionCorner extent = self.cornerMaximum - self.cornerMinimum roundedHigh = euclidean.getRoundedPoint( self.cornerMaximum ) roundedLow = euclidean.getRoundedPoint( self.cornerMinimum ) roundedExtent = euclidean.getRoundedPoint( extent ) axisString = " axis extrusion starts at " crossSectionArea = 0.9 * self.absolutePerimeterWidth * self.extrusionHeight # 0.9 if from the typical fill density if self.extrusionDiameter is not None: crossSectionArea = math.pi / 4.0 * self.extrusionDiameter * self.extrusionDiameter volumeExtruded = 0.001 * crossSectionArea * self.totalDistanceExtruded mass = volumeExtruded / repository.density.value machineTimeCost = repository.machineTime.value * self.totalBuildTime / 3600.0 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(' ') self.addLine('Extent') 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( "Build time is %s." % euclidean.getDurationString( self.totalBuildTime ) ) self.addLine( "Distance extruded is %s mm." % euclidean.getThreeSignificantFigures( self.totalDistanceExtruded ) ) self.addLine( "Distance traveled is %s mm." % euclidean.getThreeSignificantFigures( self.totalDistanceTraveled ) ) if self.extruderSpeed is not None: self.addLine( "Extruder speed is %s" % euclidean.getThreeSignificantFigures( self.extruderSpeed ) ) self.addLine( "Extruder was extruding %s percent of the time." % euclidean.getThreeSignificantFigures( 100.0 * self.totalDistanceExtruded / self.totalDistanceTraveled ) ) self.addLine( "Extruder was toggled %s times." % self.extruderToggled ) if self.operatingFeedRatePerSecond is not None: flowRate = crossSectionArea * self.operatingFeedRatePerSecond self.addLine( "Operating flow rate is %s mm3/s." % euclidean.getThreeSignificantFigures( flowRate ) ) self.addLine( "Feed rate average is %s mm/s, (%s mm/min)." % ( euclidean.getThreeSignificantFigures( averageFeedRate ), euclidean.getThreeSignificantFigures( 60.0 * averageFeedRate ) ) ) self.addLine(' ') self.addLine('Filament') self.addLine( "Cross section area is %s mm2." % euclidean.getThreeSignificantFigures( crossSectionArea ) ) if self.extrusionDiameter is not None: self.addLine( "Extrusion diameter is %s mm." % euclidean.getThreeSignificantFigures( self.extrusionDiameter ) ) self.addLine('Extrusion fill density ratio is %s' % euclidean.getThreeSignificantFigures( crossSectionArea / self.absolutePerimeterWidth / self.extrusionHeight ) ) self.addLine(' ') self.addLine('Material') self.addLine( "Mass extruded is %s grams." % euclidean.getThreeSignificantFigures( 1000.0 * mass ) ) self.addLine( "Volume extruded is %s cc." % euclidean.getThreeSignificantFigures( volumeExtruded ) ) 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(' ') 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( "Layer thickness is %s mm." % euclidean.getThreeSignificantFigures( self.extrusionHeight ) ) self.addLine( "Perimeter width is %s mm." % euclidean.getThreeSignificantFigures( self.absolutePerimeterWidth ) ) self.addLine(' ') return self.output.getvalue()
def getCraftedGcode(self, gcodeText, repository): "Parse gcode text and store the statistics." self.absolutePerimeterWidth = 0.4 self.characters = 0 self.cornerMaximum = Vector3(-987654321.0, -987654321.0, -987654321.0) self.cornerMinimum = Vector3(987654321.0, 987654321.0, 987654321.0) self.extruderActive = False self.extruderSpeed = None self.extruderToggled = 0 self.feedRateMinute = 600.0 self.layerThickness = 0.4 self.numberOfLines = 0 self.procedures = [] self.repository = repository self.totalBuildTime = 0.0 self.totalDistanceExtruded = 0.0 self.totalDistanceTraveled = 0.0 self.numberOfLines = 1 lines = archive.getTextLines(gcodeText) for line in lines: self.parseLine(line) averageFeedRate = self.totalDistanceTraveled / self.totalBuildTime self.characters += self.numberOfLines kilobytes = round(self.characters / 1024.0) halfPerimeterWidth = 0.5 * self.absolutePerimeterWidth halfExtrusionCorner = Vector3(halfPerimeterWidth, halfPerimeterWidth, halfPerimeterWidth) self.cornerMaximum += halfExtrusionCorner self.cornerMinimum -= halfExtrusionCorner extent = self.cornerMaximum - self.cornerMinimum roundedHigh = euclidean.getRoundedPoint(self.cornerMaximum) roundedLow = euclidean.getRoundedPoint(self.cornerMinimum) roundedExtent = euclidean.getRoundedPoint(extent) axisString = " axis extrusion starts at " crossSectionArea = 0.9 * self.absolutePerimeterWidth * self.layerThickness # 0.9 if from the typical fill density FilamentRadius = repository.FilamentDiameter.value / 2 filamentCrossSectionArea = (FilamentRadius * FilamentRadius) * math.pi extrusionXSection = (( (self.layerThickness + self.perimeterWidth) / 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 buildQuadraticVolume = int(extent.x) * int(extent.y) * int(extent.z) self.estimatedBuildTime = ( self.totalDistanceTraveled / self.totalCommandcount / averageFeedRate + ((averageFeedRate * 0.75 / repository.accelerationRate.value) / 2) ) * self.totalCommandcount / 60 # self.delay * self.totalCommandcount + self.totalBuildTime machineTimeCost = repository.machineTime.value * self.estimatedBuildTime / 3600.0 self.filamentInOutRatio = filamentCrossSectionArea / ( (((self.layerThickness + self.perimeterWidth) / 4) * ((self.layerThickness + self.perimeterWidth) / 4) * math.pi)) self.totalDistanceFilament = self.totalDistanceExtruded averageFeedRate = self.totalDistanceTraveled / self.totalBuildTime averageFeedRateEst = self.totalDistanceTraveled / self.estimatedBuildTime materialCost = repository.material.value * mass / 1000 self.addLine(' ') self.addLine("Procedures used (in sequence..") for procedure in self.procedures: self.addLine(procedure) self.addLine(' ') self.addLine('Extent') 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('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 != None: self.addLine( "Extruder speed is %s" % euclidean.getThreeSignificantFigures(self.extruderSpeed)) self.addLine("Extruder was extruding %s percent of the time." % euclidean.getThreeSignificantFigures( 100.0 * self.totalDistanceExtruded / self.totalDistanceTraveled)) self.addLine("Extruder was toggled %s times." % self.extruderToggled) self.addLine( "Feed rate average is %s mm/s, (%s mm/min)." % (euclidean.getThreeSignificantFigures(averageFeedRateEst), euclidean.getThreeSignificantFigures(60.0 * averageFeedRateEst))) self.addLine("A Total of %s commands will be executed." % self.totalCommandcount) self.addLine(' ') 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('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 / 100000)) 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(' ') if self.profileName != None: self.addLine(' ') self.addLine('Profile') self.addLine(self.profileName) self.addLine(' ') self.addLine('Info') self.addLine("Layer thickness is %s mm." % euclidean.getThreeSignificantFigures(self.layerThickness)) self.addLine( "Perimeter width is %s mm." % euclidean.getThreeSignificantFigures(self.absolutePerimeterWidth)) 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()
def getCraftedGcode(self, gcodeText, repository): "Parse gcode text and store the statistics." self.absoluteEdgeWidth = 0.4 self.characters = 0 self.cornerMaximum = Vector3(-987654321.0, -987654321.0, -987654321.0) self.cornerMinimum = Vector3(987654321.0, 987654321.0, 987654321.0) self.extruderActive = False self.extruderSpeed = None self.extruderToggled = 0 self.feedRateMinute = 600.0 self.layerHeight = 0.4 self.numberOfLines = 0 self.procedures = [] self.repository = repository self.totalBuildTime = 0.0 self.totalDistanceExtruded = 0.0 self.totalDistanceTraveled = 0.0 lines = archive.getTextLines(gcodeText) for line in lines: self.parseLine(line) averageFeedRate = self.totalDistanceTraveled / self.totalBuildTime self.characters += self.numberOfLines kilobytes = round(self.characters / 1024.0) halfEdgeWidth = 0.5 * self.absoluteEdgeWidth halfExtrusionCorner = Vector3(halfEdgeWidth, halfEdgeWidth, halfEdgeWidth) self.cornerMaximum += halfExtrusionCorner self.cornerMinimum -= halfExtrusionCorner extent = self.cornerMaximum - self.cornerMinimum roundedHigh = euclidean.getRoundedPoint(self.cornerMaximum) roundedLow = euclidean.getRoundedPoint(self.cornerMinimum) roundedExtent = euclidean.getRoundedPoint(extent) axisString = " axis extrusion starts at " crossSectionArea = self.absoluteEdgeWidth * self.layerHeight if self.volumeFraction != None: crossSectionArea *= self.volumeFraction self.extrusionDiameter = math.sqrt(4.0 * crossSectionArea / math.pi) volumeExtruded = 0.001 * crossSectionArea * self.totalDistanceExtruded mass = volumeExtruded / repository.density.value machineTimeCost = repository.machineTime.value * self.totalBuildTime / 3600.0 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(' ') self.addLine('Extent') 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("Build time is %s." % euclidean.getDurationString(self.totalBuildTime)) self.addLine( "Distance extruded is %s mm." % euclidean.getThreeSignificantFigures(self.totalDistanceExtruded)) self.addLine( "Distance traveled is %s mm." % euclidean.getThreeSignificantFigures(self.totalDistanceTraveled)) if self.extruderSpeed != None: self.addLine( "Extruder speed is %s" % euclidean.getThreeSignificantFigures(self.extruderSpeed)) self.addLine("Extruder was extruding %s percent of the time." % euclidean.getThreeSignificantFigures( 100.0 * self.totalDistanceExtruded / self.totalDistanceTraveled)) self.addLine("Extruder was toggled %s times." % self.extruderToggled) if self.operatingFeedRatePerSecond != None: flowRate = crossSectionArea * self.operatingFeedRatePerSecond self.addLine("Operating flow rate is %s mm3/s." % euclidean.getThreeSignificantFigures(flowRate)) self.addLine( "Feed rate average is %s mm/s, (%s mm/min)." % (euclidean.getThreeSignificantFigures(averageFeedRate), euclidean.getThreeSignificantFigures(60.0 * averageFeedRate))) self.addLine(' ') self.addLine('Filament') self.addLine("Cross section area is %s mm2." % euclidean.getThreeSignificantFigures(crossSectionArea)) self.addLine( 'Extrusion diameter is %s mm.' % euclidean.getThreeSignificantFigures(self.extrusionDiameter)) if self.volumeFraction != None: self.addLine( 'Volume fraction is %s.' % euclidean.getThreeSignificantFigures(self.volumeFraction)) self.addLine(' ') self.addLine('Material') self.addLine("Mass extruded is %s grams." % euclidean.getThreeSignificantFigures(1000.0 * mass)) self.addLine("Volume extruded is %s cc." % euclidean.getThreeSignificantFigures(volumeExtruded)) self.addLine(' ') self.addLine('Meta') self.addLine("Text has %s lines and a size of %s KB." % (self.numberOfLines, kilobytes)) if self.version != None: self.addLine("Version is " + self.version) self.addLine(' ') self.addLine("Procedures") for procedure in self.procedures: self.addLine(procedure) if self.profileName != None: self.addLine(' ') self.addLine('Profile') self.addLine(self.profileName) self.addLine(' ') self.addLine('Slice') self.addLine( "Edge width is %s mm." % euclidean.getThreeSignificantFigures(self.absoluteEdgeWidth)) self.addLine("Layer height is %s mm." % euclidean.getThreeSignificantFigures(self.layerHeight)) self.addLine(' ') return self.output.getvalue()
def getCraftedGcode(self, gcodeText, repository): "Parse gcode text and store the statistics." self.absolutePerimeterWidth = 0.4 self.characters = 0 self.cornerMaximum = Vector3(-987654321.0, -987654321.0, -987654321.0) self.cornerMinimum = Vector3(987654321.0, 987654321.0, 987654321.0) self.extruderActive = False self.extruderSpeed = None self.extruderToggled = 0 self.feedRateMinute = 600.0 self.layerThickness = 0.4 self.numberOfLines = 0 self.procedures = [] self.repository = repository self.totalBuildTime = 0.0 self.totalDistanceExtruded = 0.0 self.totalDistanceTraveled = 0.0 self.numberOfLines = 1 lines = archive.getTextLines(gcodeText) for line in lines: self.parseLine(line) averageFeedRate = self.totalDistanceTraveled / self.totalBuildTime self.characters += self.numberOfLines kilobytes = round( self.characters / 1024.0 ) halfPerimeterWidth = 0.5 * self.absolutePerimeterWidth halfExtrusionCorner = Vector3( halfPerimeterWidth, halfPerimeterWidth, halfPerimeterWidth ) self.cornerMaximum += halfExtrusionCorner self.cornerMinimum -= halfExtrusionCorner extent = self.cornerMaximum - self.cornerMinimum roundedHigh = euclidean.getRoundedPoint( self.cornerMaximum ) roundedLow = euclidean.getRoundedPoint( self.cornerMinimum ) roundedExtent = euclidean.getRoundedPoint( extent ) axisString = " axis extrusion starts at " crossSectionArea = 0.9 * self.absolutePerimeterWidth * self.layerThickness # 0.9 if from the typical fill density FilamentRadius = repository.FilamentDiameter.value /2 filamentCrossSectionArea = (FilamentRadius * FilamentRadius)*math.pi extrusionXSection =(((self.layerThickness+self.perimeterWidth)/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 buildQuadraticVolume = int( extent.x )*int( extent.y )*int( extent.z ) self.estimatedBuildTime = (self.totalDistanceTraveled / self.totalCommandcount / averageFeedRate +((averageFeedRate*0.75/ repository.accelerationRate.value) /2))*self.totalCommandcount/60 # self.delay * self.totalCommandcount + self.totalBuildTime machineTimeCost = repository.machineTime.value * self.estimatedBuildTime / 3600.0 self.filamentInOutRatio = filamentCrossSectionArea / ((((self.layerThickness+self.perimeterWidth)/4)*((self.layerThickness+self.perimeterWidth)/4)*math.pi)) self.totalDistanceFilament = self.totalDistanceExtruded averageFeedRate = self.totalDistanceTraveled / self.totalBuildTime averageFeedRateEst = self.totalDistanceTraveled / self.estimatedBuildTime materialCost = repository.material.value * mass /1000 self.addLine(' ') self.addLine( "Procedures used (in sequence.." ) for procedure in self.procedures: self.addLine(procedure) self.addLine(' ') self.addLine('Extent') 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('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 != None: self.addLine( "Extruder speed is %s" % euclidean.getThreeSignificantFigures( self.extruderSpeed ) ) self.addLine( "Extruder was extruding %s percent of the time." % euclidean.getThreeSignificantFigures( 100.0 * self.totalDistanceExtruded / self.totalDistanceTraveled ) ) self.addLine( "Extruder was toggled %s times." % self.extruderToggled ) self.addLine( "Feed rate average is %s mm/s, (%s mm/min)." % ( euclidean.getThreeSignificantFigures(averageFeedRateEst ), euclidean.getThreeSignificantFigures( 60.0 * averageFeedRateEst ) ) ) self.addLine( "A Total of %s commands will be executed." % self.totalCommandcount) self.addLine(' ') 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('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 /100000 )) 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(' ') if self.profileName != None: self.addLine(' ') self.addLine( 'Profile' ) self.addLine(self.profileName) self.addLine(' ') self.addLine('Info') self.addLine( "Layer thickness is %s mm." % euclidean.getThreeSignificantFigures( self.layerThickness ) ) self.addLine( "Perimeter width is %s mm." % euclidean.getThreeSignificantFigures( self.absolutePerimeterWidth ) ) 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()