# Pixar's rib exporter has a bug that mistakenly inserts,
# ##rifcontrol insert begin -rif abind -rifend
# and,
# Transform [....]
# when it should use,
# ConcatTransform [....]
# This converter script corrects these mistakes.
# Example of use from a terminal:
# python ./cleanup_archive.py cube.rib
#
# Malcolm Kesson
# March 5 2019
# Edits: Sept 18 2019
# Removing the following attributes because they cannot be used by Procedurals.
# Attribute "grouping" "string membership" ["World"]
# Attribute "lightfilter" "string subset" [""]
# Attribute "lighting" "int mute" [0] "string excludesubset" [""]
# Edits: April 17 2020
# Removing: "int indirect" [1] and "int transmission" [1]"
import sys
import os
def do_strip(ribpath):
if os.path.exists(ribpath) == False:
print('Error: Cannot find the archive "%s"' % ribpath)
return
if os.path.isfile(ribpath) == False:
print('Error: "%s" is not a regular text file' % ribpath)
return
#print('Converting archive rib file\n\t"%s"\n' % ribpath)
archive_name = os.path.basename(ribpath)[:-4]
temp_name = archive_name + '_temp.rib'
base = os.path.dirname(ribpath)
temp_path = os.path.join(base, temp_name)
in_rib = open(ribpath,'r')
line = in_rib.readline()
if line:
temp_rib = open(temp_path, 'w')
else:
in_rib.close()
print('Error: "%s" is an empty file!' % ribpath)
return
write_line = True
while line:
line = line.strip() + '\n'
if '"int indirect" [1]' in line:
line = line.replace('"int indirect" [1]', '')
if '"int transmission" [1]' in line:
line = line.replace('"int transmission" [1]', '')
if line.startswith('##rifcontrol insert begin -rif abind -rifend'):
write_line = False
elif line.startswith('Attribute "grouping"'): # "string membership" ["World"]'):
write_line = False
elif line.startswith('Attribute "lightfilter" "string subset" [""]'):
write_line = False
elif line.startswith('Attribute "lighting" "int mute" [0] "string excludesubset"'):
write_line = False
# Convert Transform to ConcatTransform
elif line.startswith('Transform '):
line = 'Concat' + line
if write_line:
temp_rib.write(line)
line = in_rib.readline()
write_line = True
in_rib.close()
temp_rib.close()
os.remove(ribpath)
os.rename(temp_path, ribpath)
print('\nThe archive rib file "%s" has been successfully processed.' % ribpath)
if __name__ == '__main__':
if len(sys.argv) < 2:
print 'Error. Script must be called with the path to a rib archive.'
print 'For example:'
print 'python strip_archive.py FULLPATH_TO_ARCHIVE.rib'
else:
do_strip(sys.argv[1])