Skip to content

Instantly share code, notes, and snippets.

@hmasato
Last active December 16, 2015 18:39
Show Gist options
  • Save hmasato/5479444 to your computer and use it in GitHub Desktop.
Save hmasato/5479444 to your computer and use it in GitHub Desktop.
[houdini] _getNURBSInfo_min.py
import hou
def _e(expr): return(hou.hscriptExpression(expr))
nodes = hou.selectedNodes()
for n in nodes:
g = n.geometry()
if g is None: continue
pi = 0
for f in g.prims():
if f.type().name() != "NURBSSurface":
continue
nu = f.numCols()
nv = f.numRows()
cu = f.isClosedInU()
cv = f.isClosedInV()
degU = _e('degree("%s", %d, D_U)' % (n.path(), pi))
degV = _e('degree("%s", %d, D_V)' % (n.path(), pi))
ordU = degU + 1
ordV = degV + 1
print "char *srfName = \"%s\";" % n
print "int numU = %d;" % nu
print "int numV = %d;" % nv
print "int ordU = %d;" % ordU
print "int ordV = %d;" % ordV
print "int degU = %d;" % degU
print "int degV = %d;" % degV
print "int closedU = %d;" % cu
print "int closedV = %d;" % cv
nku = nu + ordU + cu * degU
print "float knotU[%d] = {" % (nku)
for ki in range(int(nku)):
if ki > 0: print ",",
knotU = _e('spknot("%s", %d, %d, D_U)' % (n.path(), pi, ki))
print "%f" % knotU,
print "};"
nkv = nv + ordV + cv * degV
print "float knotV[%d] = {" % (nkv)
for ki in range(int(nkv)):
if ki > 0: print ",",
knotV = _e('spknot("%s", %d, %d, D_V)' % (n.path(), pi, ki))
print "%f" % knotV,
print "};"
print "vec3 CVs[%d] = {" % (len(f.vertices()));
for ui in range(nu):
for vi in range(nv):
print "\t",
if ui > 0 or vi > 0: print ",",
cv = f.vertex(ui, vi)
po = cv.point()
p = po.position()
print "vec3(%f, %f, %f)" % (p[0], p[1], p[2])
print "};";
pi += 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment