Advertisement
mrhumbility

Find Neighbor points and dissolve edges

Nov 2nd, 2017
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.12 KB | None | 0 0
  1. # this goes on a python sop. You need to create an intList attribute called neighbor_points before
  2.  
  3. node = hou.pwd()
  4. geo = node.geometry()
  5. prim = geo.prims()
  6. points = geo.points()
  7.  
  8.  
  9.  
  10. for each in prim:
  11.     vert = each.vertices()
  12.     num_vert = each.numVertices()
  13.     max_vi = max(range(num_vert))
  14.  
  15.     for vi in range(num_vert):
  16.         current_vert = vert[vi]
  17.  
  18.         if (vi+1) <= max_vi: # check existence of next vertex
  19.             next_vert = vert[(vi+1)]
  20.         else:
  21.             next_vert = vert[0]
  22.  
  23.         if (vi-1) > 0: #check existence of previous vertex
  24.             prev_vert = vert[(vi-1)]
  25.         else:
  26.             prev_vert = vert[(max_vi)]
  27.  
  28.         current_point = current_vert.point().number()
  29.         next_point = next_vert.point().number()
  30.         prev_point = prev_vert.point().number()
  31.         val = [x for x in current_vert.point().intListAttribValue('neighbor_points')]
  32.         val.append(next_point)
  33.         #val.append(prev_point)
  34.         current_vert.point().setAttribValue('neighbor_points', list(set(val)))
  35.  
  36.  
  37.  
  38. # put this on a dissolve node
  39. # add two attribs, a toggle called tallow_islands and a float 0 - 1 call blst_threshold
  40. import random
  41. node = hou.pwd()
  42. tallow_islands = node.parm('tallow_islands').eval()
  43. parent = node.inputs()[0]
  44. geo = parent.geometry()
  45. pnts = geo.points()
  46. grp = geo.findPointGroup('unshared_edges')
  47. threshold = hou.pwd().parm('blst_threshold').eval()
  48. selected = []
  49. for p in pnts:
  50.     if not grp.contains(p):
  51.         random.seed(p.number())
  52.         if random.random() > threshold:
  53.             n1 = str(p.number())
  54.             i = random.randint(0, len(p.intListAttribValue('neighbor_points'))-1)
  55.             n2 = str(p.intListAttribValue('neighbor_points')[i])
  56.             if tallow_islands == 0:
  57.                 if not any(n1 in s for s in selected) and not any(n2 in s for s in selected):
  58.                     selected.append('p{0}-{1}'.format(n1, n2))
  59.             else:
  60.                 edge = 'p{0}-{1}'.format(n1, n2)
  61.                 if edge not in selected:
  62.                     selected.append(edge)
  63. selected = " ".join(selected)
  64. return selected
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement