#! /usr/bin/python
import sys
filename_out = None
try:
filename = sys.argv[1]
except:
print 'run as: "python %s FILENAME_IN [FILENAME_OUT] [dx] [nouniform]"' % sys.argv[0]
print 'if the last argument is nouniform, CTNG will not force a unique diameter at each point'
sys.exit(-1)
lastarg = sys.argv[-1]
if lastarg == 'nouniform':
nouniform = True
dx_loc = -2
else:
nouniform = False
dx_loc = -1
try:
dx = float(sys.argv[dx_loc])
has_dx = True
except:
# default discretization
dx = 0.25
has_dx = False
if len(sys.argv) > 3 or (not has_dx and len(sys.argv) == 3):
filename_out = sys.argv[2]
from neuron import h
from mayavi import mlab
import geometry3d
import time
h.load_file('stdlib.hoc')
h.load_file('import3d.hoc')
if filename.lower()[-4:] == '.swc':
cell = h.Import3d_SWC_read()
else:
cell = h.Import3d_Neurolucida3()
cell.input(filename)
start = time.time()
tri_mesh = geometry3d.surface(cell, dx, n_soma_step=100, nouniform=nouniform)
mlab.triangular_mesh(tri_mesh.x, tri_mesh.y, tri_mesh.z, tri_mesh.faces, color=(1, 0, 0))
print 'time to construct mesh:', time.time() - start
start = time.time()
area = tri_mesh.area
print 'area: ', area
print 'time to compute area:', time.time() - start
start = time.time()
vol = tri_mesh.enclosed_volume
print 'volume: ', vol
print 'time to compute volume:', time.time() - start
if filename_out:
triangles = tri_mesh.data
with open(filename_out, 'w') as output:
output.write('%d, %g\n' % (len(triangles), area))
for i in xrange(len(triangles) / 9):
output.write('%g, %g, %g, %g, %g, %g, %g, %g, %g\n' % tuple(triangles[i : i + 9]))
mlab.show()