# 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)