# polyh_to_vect.py # # CREATED 2021.02.18 ABS copied from polyhc2w3d.py # MODIFIED 2021.02.__ ABS # # to do: # # [_] eat extra white space in input file # 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_list, rgb_list, facets_list): # typical polyh file: # # facet # 4 # 0.000000 1.000000 0.000000 # 0.894427 0.447214 0.000000 # 0.276393 0.447214 0.850651 # -0.723607 0.447214 0.525731 # 3 # 1 3 2 # 3 # 1 4 3 # # 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 # # a vert has 3 numbers, a vect has 6 # num_vects = 0 num_verts = 0 first_line = True second_line = False input = open(inputName, 'r') for line in input: l0 = " ".join(line.split()) debugWrite(args.debugFlag, "line =", line) debugWrite(args.debugFlag, "l0 =", l0) if first_line: first_line = False second_line = True l1 = l0.rstrip('\n') shading = l1.rstrip('\r') debugWrite(args.debugFlag, "shading =", shading) else: if second_line: second_line = False num_verts = int(l0) debugWrite(args.debugFlag, "num_verts =", num_verts) j = 0 k = 0 for j in range(0, num_verts): for k in range(0, num_verts): verts_table[j][k] = 0 debugWrite(args.debugFlag, "verts_table =", verts_table) else: if (actual_verts < num_verts): # reading vertices line2 = l0.rstrip('\n') fields = line2.split(" ") vert = fields[0:3] verts_list.append(vert) if (args.colorsFlag == True): rgb = fields[3:6] rgb_list.append(rgb) actual_verts = actual_verts + 1 else: # reading facets facet_lines = facet_lines + 1 if (facet_lines%2==1): num_sides=int(l0) else: # reading facets line2 = l0.rstrip('\n') fields = line2.split(" ") facet = fields[0:num_sides] # facets_list.append(num_sides) if (num_sides == 3): # this only works for triangles a = int(fields[0]) - 1 b = int(fields[1]) - 1 c = int(fields[2]) - 1 verts_table[a][b] = 1 verts_table[b][a] = 1 verts_table[b][c] = 1 verts_table[c][b] = 1 verts_table[c][a] = 1 verts_table[a][c] = 1 if (num_sides == 4): # this only works for quads a = int(fields[0]) - 1 b = int(fields[1]) - 1 c = int(fields[2]) - 1 d = int(fields[3]) - 1 verts_table[a][b] = 1 verts_table[b][a] = 1 verts_table[b][c] = 1 verts_table[c][b] = 1 verts_table[c][d] = 1 verts_table[d][c] = 1 verts_table[d][a] = 1 verts_table[a][d] = 1 if (num_sides == 5): # this only works for pentas a = int(fields[0]) - 1 b = int(fields[1]) - 1 c = int(fields[2]) - 1 d = int(fields[3]) - 1 e = int(fields[4]) - 1 verts_table[a][b] = 1 verts_table[b][a] = 1 verts_table[b][c] = 1 verts_table[c][b] = 1 verts_table[c][d] = 1 verts_table[d][c] = 1 verts_table[d][e] = 1 verts_table[e][d] = 1 verts_table[e][a] = 1 verts_table[a][e] = 1 if (num_sides == 6): # this only works for hexes a = int(fields[0]) - 1 b = int(fields[1]) - 1 c = int(fields[2]) - 1 d = int(fields[3]) - 1 e = int(fields[4]) - 1 f = int(fields[5]) - 1 verts_table[a][b] = 1 verts_table[b][a] = 1 verts_table[b][c] = 1 verts_table[c][b] = 1 verts_table[c][d] = 1 verts_table[d][c] = 1 verts_table[d][e] = 1 verts_table[e][d] = 1 verts_table[e][f] = 1 verts_table[f][e] = 1 verts_table[f][a] = 1 verts_table[a][f] = 1 # debugWrite(args.debugFlag, "a =", a) # debugWrite(args.debugFlag, "b =", b) # debugWrite(args.debugFlag, "c =", c) num_vects = num_vects + 1 input.close() debugWrite(args.debugFlag, "verts_list =", verts_list) debugWrite(args.debugFlag, "rgb_list =", rgb_list) debugWrite(args.debugFlag, "verts_table =", verts_table) return num_verts # END:readPolyhc def writeVects(num_verts, verts_list, verts_table): num_vects = 0 debugWrite(args.debugFlag, "num_verts =", num_verts) for j in range(0, num_verts): for k in range(0, num_verts): if ((k > j) and (verts_table[j][k] == 1)): num_vects = num_vects + 1 debugWrite(args.debugFlag, "num_vects =", num_vects) print(num_vects) for j in range(0, num_verts): for k in range(0, num_verts): debugWrite(args.debugFlag, "k =", k) debugWrite(args.debugFlag, "j =", j) debugWrite(args.debugFlag, "verts_list[k][0] =", verts_list[k][0]) debugWrite(args.debugFlag, "verts_list[k][1] =", verts_list[k][1]) debugWrite(args.debugFlag, "verts_list[k][2] =", verts_list[k][2]) debugWrite(args.debugFlag, "verts_list[j][0] =", verts_list[j][0]) debugWrite(args.debugFlag, "verts_list[j][1] =", verts_list[j][1]) debugWrite(args.debugFlag, "verts_list[j][2] =", verts_list[j][2]) if ((k > j) and (verts_table[j][k] == 1)): print(float(verts_list[k][0]), float(verts_list[k][1]), float(verts_list[k][2]), float(verts_list[j][0]), float(verts_list[j][1]), float(verts_list[j][2]), sep=" ") # 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('-c', '--colors', dest='colorsFlag', action='store_true', help='input colors flag') args = parser.parse_args() debugWrite(args.debugFlag, "infile =", args.infile) inputName = args.infile verts_list = [] rgb_list = [] facets_list = [] verts_table = [[0 for x in range(2700)] for y in range(2700)] # KLUDGE num_verts = readPolyhc(inputName, verts_list, rgb_list, facets_list) writeVects(num_verts, verts_list, verts_table)