mirror of
https://github.com/Doodle3D/Doodle3D-Slicer.git
synced 2024-11-23 14:07:57 +01:00
114 lines
2.5 KiB
Python
114 lines
2.5 KiB
Python
|
"""Join multiple binary files into single file and generate JSON snippet with offsets
|
||
|
|
||
|
-------------------------------------
|
||
|
How to use
|
||
|
-------------------------------------
|
||
|
|
||
|
python join_ctm.py -i "part_*.ctm" -o joined.ctm [-j offsets.js]
|
||
|
|
||
|
Will read multiple files following wildcard pattern (ordered lexicographically):
|
||
|
|
||
|
part_000.ctm
|
||
|
part_001.ctm
|
||
|
part_002.ctm
|
||
|
|
||
|
...
|
||
|
|
||
|
part_XXX.ctm
|
||
|
|
||
|
And generate single concatenated files:
|
||
|
|
||
|
joined.ctm
|
||
|
offsets.js (optional, offsets are also dumped to standard output)
|
||
|
|
||
|
"""
|
||
|
|
||
|
import getopt
|
||
|
import glob
|
||
|
import sys
|
||
|
import os
|
||
|
|
||
|
# #####################################################
|
||
|
# Templates
|
||
|
# #####################################################
|
||
|
TEMPLATE_JSON = u"""\
|
||
|
"offsets": [ %(offsets)s ],
|
||
|
"""
|
||
|
|
||
|
# #############################################################################
|
||
|
# Helpers
|
||
|
# #############################################################################
|
||
|
def usage():
|
||
|
print 'Usage: %s -i "filename_*.ctm" -o filename.ctm [-j offsets.js]' % os.path.basename(sys.argv[0])
|
||
|
|
||
|
# #####################################################
|
||
|
# Main
|
||
|
# #####################################################
|
||
|
if __name__ == "__main__":
|
||
|
|
||
|
# get parameters from the command line
|
||
|
|
||
|
try:
|
||
|
opts, args = getopt.getopt(sys.argv[1:], "hi:o:j:", ["help", "input=", "output=", "json="])
|
||
|
|
||
|
except getopt.GetoptError:
|
||
|
usage()
|
||
|
sys.exit(2)
|
||
|
|
||
|
|
||
|
inpattern = ""
|
||
|
outname = ""
|
||
|
jsonname = ""
|
||
|
|
||
|
for o, a in opts:
|
||
|
if o in ("-h", "--help"):
|
||
|
usage()
|
||
|
sys.exit()
|
||
|
|
||
|
elif o in ("-i", "--input"):
|
||
|
inpattern = a
|
||
|
|
||
|
elif o in ("-o", "--output"):
|
||
|
outname = a
|
||
|
|
||
|
elif o in ("-j", "--json"):
|
||
|
jsonname = a
|
||
|
|
||
|
# quit if required parameters are missing
|
||
|
|
||
|
if inpattern == "" or outname == "":
|
||
|
usage()
|
||
|
sys.exit(2)
|
||
|
|
||
|
outfile = open(outname, "wb")
|
||
|
|
||
|
matches = glob.glob(inpattern)
|
||
|
matches.sort()
|
||
|
|
||
|
total = 0
|
||
|
offsets = []
|
||
|
|
||
|
for filename in matches:
|
||
|
filesize = os.path.getsize(filename)
|
||
|
offsets.append(total)
|
||
|
total += filesize
|
||
|
|
||
|
print filename, filesize
|
||
|
|
||
|
infile = open(filename, "rb")
|
||
|
buffer = infile.read()
|
||
|
outfile.write(buffer)
|
||
|
infile.close()
|
||
|
|
||
|
outfile.close()
|
||
|
|
||
|
json_str = TEMPLATE_JSON % {
|
||
|
"offsets" : ", ".join(["%d" % o for o in offsets])
|
||
|
}
|
||
|
|
||
|
print json_str
|
||
|
|
||
|
if jsonname:
|
||
|
jsonfile = open(jsonname, "w")
|
||
|
jsonfile.write(json_str)
|
||
|
jsonfile.close()
|