List Navigation:

Hello all, I just wrote a script, but I am having trouble organizing my verticessrf to mesh.gh (3.1 KB) points for an appropriate match (squares of triangles), it works with inputs 4/4 only. Any ideas, also, in general how is this usually done?

Thanks

Alex

If you are using Rhino 6, you could try a slightly different approach. Instead of manually creating data paths, you can use the built-in treehelpers. That way, you can structure your data in nested lists and let the tree helpers handle the data tree/path stuff. You could also store the points in a dictionary, with the point being the value, and the u and v, (or i and j) being the keys.

As far as how this is “usually” done…I can suggest one approach that I use, (but that is not to say that this is the ONLY/USUAL way to do this…)

1 - reparameterizing the surface into a domain that matches your U and V input,

2 - Create a grid of surface points

3 - walk through the grid and make some mesh faces

This is the major part of the code described above. (NOTE: This is taken from some other code I wrote for “stripping” things. Not guaranteed to work on every conceivable surface, but this is pretty reliable).

```
"""Mesh Surface UV - Create Mesh from Surface and UV input.
Inputs:
srf: input surface
U: U Division
V: V Division
FaceType: 0 = Quad, 1 = Tri
Output:
grid: grid of points
M: resulting UV Mesh"""
__author__ = "chanley"
__version__ = "2019.02.04"
import Rhino
import ghpythonlib.treehelpers as th
pts = {} # create dictionary to hold keys (i, j) and values (points)
grid = [] # list to recieve points, will be used for nested list->data tree
# set domain of surface to match U and V
def setDomain():
UDomain = Rhino.Geometry.Interval(0,U)
VDomain = Rhino.Geometry.Interval(0,V)
srf.SetDomain(0, UDomain)
srf.SetDomain(1, VDomain)
# nested loop to create structured grid of points
# (i,j) as keys, points as values in dict.
def makeUVGrid():
for i in range(0,U+1):
gcolumn = []
for j in range(0,V+1):
pts[(i,j)] = Rhino.Geometry.Surface.PointAt(srf,i,j)
gcolumn.append(pts[(i,j)])
grid.append(gcolumn)
def makeMesh():
MeshFaces = [] #list of meshes, one mesh for each face
# Walk through grid of points and make mesh quads/tri
for i in range(0, U):
for j in range(0, V):
NewMeshFace = Rhino.Geometry.Mesh()
NewMeshFace.Vertices.Add(pts[i,j])
NewMeshFace.Vertices.Add(pts[i+1,j])
NewMeshFace.Vertices.Add(pts[i+1,j+1])
NewMeshFace.Vertices.Add(pts[i,j+1])
if FaceType != 1:
NewMeshFace.Faces.AddFace(0, 1, 2, 3)
MeshFaces.append(NewMeshFace)
else:
NewMeshFace.Faces.AddFace(0, 1, 2)
NewMeshFace.Faces.AddFace(0, 2, 3)
MeshFaces.append(NewMeshFace)
JoinedMesh = Rhino.Geometry.Mesh()
JoinedMesh.Append(MeshFaces)
return JoinedMesh
setDomain()
makeUVGrid()
M = makeMesh()
grid = th.list_to_tree(grid)
```