# polyhc2w3d.py # # CREATED 2018.02.02 ABS copied from pdb2w3d.py # MODIFIED 2018.02.28 ABS added args # MODIFIED 2018.03.01 ABS added sphere flag, facet coord handling # MODIFIED 2018.03.02 ABS added facet handling (incomplete) # MODIFIED 2018.03.03 ABS added --DEBUG flag, debugWrite() # MODIFIED 2018.03.05 ABS worked on facet handling # MODIFIED 2018.03.08 ABS worked on facet handling # MODIFIED 2018.03.28 ABS got facets working # MODIFIED 2018.03.31 ABS worked on print() # MODIFIED 2018.05.08 ABS added translate params # # to do: # # [X] header # [X] add args # [X] add sphere output # [X] figure out facets in w3d # [X] add debugWrite() # [X] add DEBUG flag # [X] add facet handling # [_] add vertex colors # [_] add smoothing # [_] add multiple file processing # [X] add translate on params # [/] fix print >> to do newlines correctly # from __future__ import print_function import sys import argparse def debugWrite(flag, message, var): if (flag): print('DEBUG:', message, var, file=sys.stderr) # START:readPolyhc def readPolyhc(inputName, verts_params, facets_params): # typical polyhc file: # # facet # 4 # 0.000000 1.000000 0.000000 1.0 1.0 1.0 # 0.894427 0.447214 0.000000 1.0 1.0 1.0 # 0.276393 0.447214 0.850651 1.0 1.0 1.0 # -0.723607 0.447214 0.525731 1.0 1.0 1.0 # 3 # 1 3 2 # 3 # 1 4 3 actual_verts=0 facet_lines=0 # verts_params = [] # facets_params = [] first_line = True second_line = False input = open(inputName, 'r') for line in input: if first_line: first_line = False second_line = True shading = line else: if second_line: second_line = False num_verts = int(line) debugWrite(args.debugFlag, "num_verts =", num_verts) else: if (actual_verts < num_verts): # reading vertices line2 = line.rstrip('\n') fields = line2.split(" ") vert = fields[0:6] verts_params.append(vert) actual_verts = actual_verts+1 else: # reading facets facet_lines = facet_lines + 1 if (facet_lines%2==1): num_sides=int(line) else: # reading facets line2 = line.rstrip('\n') fields = line2.split(" ") facet = fields[0:num_sides] # facets_params.append(num_sides) facets_params.append(facet) input.close() debugWrite(args.debugFlag, "verts_params =", verts_params) debugWrite(args.debugFlag, "facets_params =", facets_params) # END:readPolyhc def translateName(inputName): return inputName[:-7] + '.w3d' def truncateName(inputName): inputName = inputName.capitalize() return inputName[:-7] def writeSphereHtml(outputName, verts): output = open('model_name.sed', 'w') print("s/__model_name__/{}/".format(modelName),file=output) output.close() output = open(outputName, 'w') for (X, Y, Z, red, grn, blu) in verts: print(" ",file=output) print(" ",file=output) print(" ",file=output) print(" ",file=output) print(" ",file=output) print(" ",file=output) print(" ",file=output) print(" ",file=output) output.close() def writeModelName(): output = open('model_name.sed', 'w') print("s/__model_name__/{}/".format(modelName),file=output) output.close() def writePolyhcHtml(outputName, verts, facets): output = open(outputName, 'w') # # # # # # # # # # # # # # red = 1; grn = 1; blu = 1 print(" ",file=output) print(" ",file=output) print(" ",file=output) print(" ",file=output) print(" ",file=output) print(" ",file=output) print("",file=output) print(" ",file=output) print(" ",file=output) print(" ",file=output) output.close() # start running # parser = argparse.ArgumentParser(description='Convert AVS polyhc to Web3D HTML.') parser.add_argument('-D', '--DEBUG', dest='debugFlag', action='store_true', help='debug write') parser.add_argument('-i', '--infile', dest='infile', default='foo.polyhc', action='store', help='input file name') parser.add_argument('-r', '--radius', dest='radius', default=1.0, action='store', help='radius of spheres') parser.add_argument('-S', '--scale', dest='scale', default=1.0, action='store', help='scale of vertices') parser.add_argument('-s', '--sphere', dest='sphereFlag', action='store_true', help='output spheres flag') parser.add_argument('-x', '--xcoord', dest='xcoord', default=0, action='store', help='x coordinate') parser.add_argument('-y', '--ycoord', dest='ycoord', default=0, action='store', help='y coordinate') parser.add_argument('-z', '--zcoord', dest='zcoord', default=0, action='store', help='z coordinate') args = parser.parse_args() debugWrite(args.debugFlag, "infile =", args.infile) debugWrite(args.debugFlag, "radius =", args.radius) debugWrite(args.debugFlag, "sphereFlag =", args.sphereFlag) inputName = args.infile verts_list = [] facets_list = [] readPolyhc(inputName, verts_list, facets_list) debugWrite(args.debugFlag, "outside func; verts_list =", verts_list) debugWrite(args.debugFlag, "outside func; facets_list =", facets_list) outputName = translateName(inputName) modelName = truncateName(inputName) writeModelName() if (args.sphereFlag): writeSphereHtml(outputName, verts_list) else: writePolyhcHtml(outputName, verts_list, facets_list)