Option Explicit Dim i, j, k Dim p1, p2, p3, p4, p5, p6, p7, p8 Dim xsize,ysize,zsize Dim srf1, srf2, srf3, srf4, srf5, srf6, srf7, srf8, srf9, srf10 Dim pvc, pvc2 Dim T1,T2 Dim sphere, sphere2 Dim dist Dim ic, jc, kc Dim avg Dim rad xsize = 15 ysize = 15 zsize = 22 ReDim points (xsize,ysize,zsize) Call Rhino.enableRedraw(False) 'create for loop 'loop through a cube For i = 0 To xsize For j = 0 To ysize For k = 0 To zsize 'store i, j, k 'Call.Rhino.addPoint (Array (i, j, k)) points(i,j,k) = Array(i ,j+k/3,k) Next Next Next 'take 3 points at a time to create a triangular surface '4 sets of 3 points create a pyramid For i = 0 To xsize-3 For j = 0 To ysize-3 For k = 0 To zsize-3 ' Draw a box 'Get each of the point p1 = points(i,j,k) p2 = points(i+2, j, k) p3 = points(i+2,j+2,k) p4 = points(i,j+2, k) p5 = points(i+1,j+1,k+2) 'Get point for the inverse pyramid p6 = points(i+3,j+1,k+2) p7 = points(i+3,j+3,k+2) p8 = points(i+1,j+3,k+2) 'create surface to form pyramid If ((k Mod 2)=0)And ((i Mod 2)=0)And ((j Mod 2)=0) Then srf1 = Rhino.AddSrfPt(Array(p1,p2,p5)) srf2 = Rhino.AddSrfPt(Array(p2,p3,p5)) srf3 = Rhino.AddSrfPt(Array(p3,p4,p5)) srf4 = Rhino.AddSrfPt(Array(p1,p4,p5)) srf5 = Rhino.AddSrfPt(Array(p1,p2,p3,p4)) srf6 = Rhino.AddSrfPt(Array(p5,p6,p3)) srf7 = Rhino.AddSrfPt(Array(p6,p7,p3)) srf8 = Rhino.AddSrfPt(Array(p7,p8,p3)) srf9 = Rhino.AddSrfPt(Array(p8,p5,p3)) srf10 = Rhino.AddSrfPt(Array(p5,p6,p7,p8)) T1 = Rhino.JoinSurfaces (Array(srf1, srf2, srf3, srf4, srf5), True) T2 = Rhino.JoinSurfaces (Array(srf6, srf7, srf8, srf9, srf10), True) 'Get the range of % from i,j,k (0) to Max ic = 1-Abs((xsize/2)-i)/(xsize/2) jc = 1-Abs((ysize/2)-j)/(ysize/2) kc = 1-Abs((zsize/2)-k)/(zsize/2) 'Rhino.print(ic) 'Rhino.print(jc) 'Rhino.print(kc) avg = (ic + jc + kc)/3 'Rhino.print(ic) 'Get radius with min radius = .25 and max radius = 1.25 rad = .25 + (avg*.7) 'Get the volume Centroid pvc = Rhino.SurfaceVolumeCentroid(T1) pvc2 = Rhino.SurfaceVolumeCentroid(T2) If i = 0 Or j = 0 Or k = 0 Or i > (xsize-5) Or j > (ysize-5) Or k > (zsize-5) Then 'do nothing Else sphere = Rhino.AddSphere (pvc(0),rad) sphere2 = Rhino.AddSphere (pvc2(0),rad) Call Rhino.BooleanDifference (Array(T1),Array(sphere)) Call Rhino.BooleanDifference (Array(T2),Array(sphere2)) End If Else 'do nothing End If Next Next Next Call Rhino.enableRedraw(True)