""" This page is in the table of contents. The slc.py script is an import translator plugin to get a carving from an slc file. An import plugin is a script in the import_plugins folder which has the function getCarving. It is meant to be run from the interpret tool. To ensure that the plugin works on platforms which do not handle file capitalization properly, give the plugin a lower case name. The getCarving function takes the file name of an slc file and returns the carving. This example gets a triangle mesh for the slc file rotor.slc. This example is run in a terminal in the folder which contains rotor.slc and slc.py. > python Python 2.5.1 (r251:54863, Sep 22 2007, 01:43:31) [GCC 4.2.1 (SUSE Linux)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import slc >>> slc.getCarving() 0.20000000298, 999999999.0, -999999999.0, [8.72782748851e-17, None .. many more lines of the carving .. An explanation of the SLC format can be found at: http://rapid.lpt.fi/archives/rp-ml-1999/0713.html """ from __future__ import absolute_import #Init has to be imported first because it has code to workaround the python bug where relative imports don't work if the module is imported as a main module. import __init__ from skeinforge_tools.skeinforge_utilities.vector3 import Vector3 from skeinforge_tools.skeinforge_utilities import euclidean from skeinforge_tools.skeinforge_utilities import gcodec from struct import unpack import sys __author__ = "Enrique Perez (perez_enrique@yahoo.com)" __credits__ = 'Nophead \nArt of Illusion ' __date__ = "$Date: 2008/21/04 $" __license__ = "GPL 3.0" def getCarving( fileName = '' ): "Get the triangle mesh for the slc file." if fileName == '': unmodified = gcodec.getFilesWithFileTypeWithoutWords( 'slc' ) if len( unmodified ) == 0: print( "There is no slc file in this folder." ) return None fileName = unmodified[ 0 ] carving = SLCCarving() carving.readFile( fileName ) return carving def getLittleEndianFloatGivenFile( file ): "Get little endian float given a file." return unpack( ' 2: rotatedBoundaryLayer.loops.append( getPointsFromFile( numPoints, file ) ) def readFile( self, fileName ): "Read SLC and store the layers." pslcfile = open( fileName, 'rb' ) readHeader( pslcfile ) pslcfile.read( 256 ) #Go past the 256 byte 3D Reserved Section. self.readTableEntry( pslcfile ) self.processContourLayers( pslcfile ) pslcfile.close() def readTableEntry( self, file ): "Read in the sampling table section. It contains a table length (byte) and the table entries." tableEntrySize = ord( file.read( 1 ) ) if tableEntrySize == 0: print( "Sampling table size is zero!" ) exit() for index in xrange( tableEntrySize ): sampleTableEntry = SampleTableEntry( file ) self.layerThickness = sampleTableEntry.layer_thickness def setCarveBridgeLayerThickness( self, bridgeLayerThickness ): "Set the bridge layer thickness. If the infill is not in the direction of the bridge, the bridge layer thickness should be given as None or not set at all." pass def setCarveLayerThickness( self, layerThickness ): "Set the layer thickness." pass def setCarveImportRadius( self, importRadius ): "Set the import radius." pass def setCarveIsCorrectMesh( self, isCorrectMesh ): "Set the is correct mesh flag." pass def main(): "Display the inset dialog." if len( sys.argv ) > 1: getCarving( ' '.join( sys.argv[ 1 : ] ) ) if __name__ == "__main__": main()