Option Explicit Call Rhino.enableredraw(False) 'declare variables Dim i,j,k Dim sizeI,sizeJ,sizeK sizeI = 1 sizeJ = 4 sizeK = 10 ReDim points(sizeI,sizeJ,sizeK) Dim p1,p2,p3,p4,p5,p6,p7,p8 'create for loop 'loop through a cube For i = 0 To sizeI For j = sizeJ To 0 Step-1 For k = 0 To sizeK 'store i, j, k 'Rhino.addPoint(Array(i,j,k)) points(i,j,k) = Array(5*i*(j+.5)/(j+3),20*(j/(j+3)),k*k/5) Next Next Next 'take 8 points at a time For i = 0 To sizeI-1 For j = 0 To sizeJ-1 For k = 0 To sizeK-1 'get each of the points 'counter clockwise bottom square p1 = points(i,j,k) p2 = points(i+1,j,k) p3 = points(i+1,j+1,k) p4 = points(i,j+1,k) 'counter clockwise top square p5 = points(i,j,k+1) p6 = points(i+1,j,k+1) p7 = points(i+1,j+1,k+1) p8 = points(i,j+1,k+1) 'create new variable for reversing vary Dim ii,jj,kk ii = sizeI - i jj = sizeJ - j kk = sizeJ - k 'kk = sizeK - k'Call Rhino.addBox(Array(p1,p2,p3,p4,p5,p6,p7,p8)) 'make the edge piece solid Dim variation If j = sizeJ-1 Then variation = 0 Else variation = k/(j+8) End If Call cuboid(p1,p2,p3,p4,p5,p6,p7,p8,variation) Next Next Next 'create function for truchet tiles Function cuboid(p1,p2,p3,p4,p5,p6,p7,p8,vary) 'cut cube edges into segments Dim line12,line23,line34,line41,line56,line67,line78,line85,line15,line26,line37,line48 'create lines for each edge of the cube line12 = Rhino.AddLine(p1,p2) line23 = Rhino.AddLine(p2,p3) line34 = Rhino.AddLine(p3,p4) line41 = Rhino.AddLine(p4,p1) line56 = Rhino.AddLine(p5,p6) line67 = Rhino.AddLine(p6,p7) line78 = Rhino.AddLine(p7,p8) line85 = Rhino.AddLine(p8,p5) line15 = Rhino.AddLine(p1,p5) line26 = Rhino.AddLine(p2,p6) line37 = Rhino.AddLine(p3,p7) line48 = Rhino.AddLine(p4,p8) 'divide edges into segments Dim div div = 6 Dim seg12,seg23,seg34,seg41,seg56,seg67,seg78,seg85,seg15,seg26,seg37,seg48 seg12 = Rhino.DivideCurve(line12,div) seg23 = Rhino.DivideCurve(line23,div) seg34 = Rhino.DivideCurve(line34,div) seg41 = Rhino.DivideCurve(line41,div) seg56 = Rhino.DivideCurve(line56,div) seg67 = Rhino.DivideCurve(line67,div) seg78 = Rhino.DivideCurve(line78,div) seg85 = Rhino.DivideCurve(line85,div) seg15 = Rhino.DivideCurve(line15,div) seg26 = Rhino.DivideCurve(line26,div) seg37 = Rhino.DivideCurve(line37,div) seg48 = Rhino.DivideCurve(line48,div) 'test 'Call Rhino.AddPointcloud(seg12) 'Call rhino.addpoint(seg12(div/2)) 'Call rhino.AddPoint(seg12(1)) 'Call rhino.addpoint(seg12(div/2)) 'Call rhino.addpoint(seg12(div-1)) 'declare midpt variables reDim midpt12(2) redim midpt23(2) redim midpt34(2) ReDim midpt41(2) redim midpt56(2) redim midpt67(2) redim midpt78(2) ReDim midpt85(2) ReDim midpt15(2) redim midpt26(2) redim midpt37(2) ReDim midpt48(2) 'move midpoint towards middle of cube Dim a For a = 0 To 2 'changes in the yz direction for midpoints If a = 0 Then 'vary x coordinate 'we take the 0 place within each midpoint, which is the div/2 place within 'the segment array. midpt23(a) = seg23(div/2)(a) - vary midpt41(a) = seg41(div/2)(a) + vary midpt67(a) = seg67(div/2)(a) - vary midpt85(a) = seg85(div/2)(a) + vary 'vary x coordinate midpt15(a) = seg15(div/2)(a) + vary midpt26(a) = seg26(div/2)(a) - vary midpt37(a) = seg37(div/2)(a) - vary midpt48(a) = seg48(div/2)(a) + vary 'keep x coordinate midpt12(a) = seg12(div/2)(a) '+ vary midpt34(a) = seg34(div/2)(a) '- vary midpt56(a) = seg56(div/2)(a) '+ vary midpt78(a) = seg78(div/2)(a) '- vary ElseIf a = 1 Then 'vary y coordinate midpt12(a) = seg12(div/2)(a) + vary midpt34(a) = seg34(div/2)(a) - vary midpt56(a) = seg56(div/2)(a) + vary midpt78(a) = seg78(div/2)(a) - vary 'vary y coordinate midpt15(a) = seg15(div/2)(a) + vary midpt26(a) = seg26(div/2)(a) + vary midpt37(a) = seg37(div/2)(a) - vary midpt48(a) = seg48(div/2)(a) - vary 'keep y coordinate midpt23(a) = seg23(div/2)(a) '- vary midpt41(a) = seg41(div/2)(a) '+ vary midpt67(a) = seg67(div/2)(a) '- vary midpt85(a) = seg85(div/2)(a) '+ vary ElseIf a = 2 Then 'vary z coordinate midpt12(a) = seg12(div/2)(a) + vary midpt34(a) = seg34(div/2)(a) + vary midpt56(a) = seg56(div/2)(a) - vary midpt78(a) = seg78(div/2)(a) - vary 'vary z coordinates midpt23(a) = seg23(div/2)(a) + vary midpt41(a) = seg41(div/2)(a) + vary midpt67(a) = seg67(div/2)(a) - vary midpt85(a) = seg85(div/2)(a) - vary 'keep z coordinate midpt15(a) = seg15(div/2)(a) '+ vary midpt26(a) = seg26(div/2)(a) '+ vary midpt37(a) = seg37(div/2)(a) '- vary midpt48(a) = seg48(div/2)(a) '- vary End If Next 'get point-offsets 'draw curve from point-offset to midpoint to point-offset 'draw curve at each edge 'declare curve variables Dim cv12,cv23,cv34,cv41,cv56,cv67,cv78,cv85,cv15,cv26,cv37,cv48 Dim pll_12,pll_23,pll_34,pll_41,pll_56,pll_67,pll_78,pll_85 Dim pll_15,pll_26,pll_37,pll_48,plr_12,plr_23,plr_34,plr_41 Dim plr_56,plr_67,plr_78,plr_85,plr_15,plr_26,plr_37,plr_48 cv12 = Rhino.addCurve(array(seg12(1),midpt12,seg12(div-1))) cv23 = rhino.addCurve(array(seg23(1),midpt23,seg23(div-1))) cv34 = Rhino.addCurve(array(seg34(1),midpt34,seg34(div-1))) cv41 = Rhino.addCurve(array(seg41(1),midpt41,seg41(div-1))) cv56 = Rhino.addCurve(array(seg56(1),midpt56,seg56(div-1))) cv67 = Rhino.addCurve(array(seg67(1),midpt67,seg67(div-1))) cv78 = Rhino.addCurve(array(seg78(1),midpt78,seg78(div-1))) cv85 = Rhino.addCurve(array(seg85(1),midpt85,seg85(div-1))) cv15 = Rhino.addCurve(array(seg15(1),midpt15,seg15(div-1))) cv26 = Rhino.addCurve(array(seg26(1),midpt26,seg26(div-1))) cv37 = Rhino.addCurve(array(seg37(1),midpt37,seg37(div-1))) cv48 = Rhino.addCurve(array(seg48(1),midpt48,seg48(div-1))) pll_12 = Rhino.addLine(seg12(0),seg12(1)) pll_23 = rhino.addLine(seg23(0),seg23(1)) pll_34 = Rhino.addLine(seg34(0),seg34(1)) pll_41 = Rhino.addLine(seg41(0),seg41(1)) pll_56 = Rhino.addLine(seg56(0),seg56(1)) pll_67 = Rhino.addLine(seg67(0),seg67(1)) pll_78 = Rhino.addLine(seg78(0),seg78(1)) pll_85 = Rhino.addLine(seg85(0),seg85(1)) pll_15 = Rhino.addLine(seg15(0),seg15(1)) pll_26 = Rhino.addLine(seg26(0),seg26(1)) pll_37 = Rhino.addLine(seg37(0),seg37(1)) pll_48 = Rhino.addLine(seg48(0),seg48(1)) plr_12 = Rhino.addLine(seg12(div-1),seg12(div)) plr_23 = rhino.addLine(seg23(div-1),seg23(div)) plr_34 = Rhino.addLine(seg34(div-1),seg34(div)) plr_41 = Rhino.addLine(seg41(div-1),seg41(div)) plr_56 = Rhino.addLine(seg56(div-1),seg56(div)) plr_67 = Rhino.addLine(seg67(div-1),seg67(div)) plr_78 = Rhino.addLine(seg78(div-1),seg78(div)) plr_85 = Rhino.addLine(seg85(div-1),seg85(div)) plr_15 = Rhino.addLine(seg15(div-1),seg15(div)) plr_26 = Rhino.addLine(seg26(div-1),seg26(div)) plr_37 = Rhino.addLine(seg37(div-1),seg37(div)) plr_48 = Rhino.addLine(seg48(div-1),seg48(div)) 'join cv to pll to cv to plr Dim final12,final23,final34,final41,final56,final67 Dim final78,final85,final15,final26,final37,final48 final12 = Rhino.joinCurves(array(pll_12,cv12,plr_12)) final23 = rhino.joinCurves(array(pll_23,cv23,plr_23)) final34 = Rhino.joinCurves(array(pll_34,cv34,plr_34)) final41 = Rhino.joinCurves(array(pll_41,cv41,plr_41)) final56 = Rhino.joinCurves(array(pll_56,cv56,plr_56)) final67 = Rhino.joinCurves(array(pll_67,cv67,plr_67)) final78 = Rhino.joinCurves(array(pll_78,cv78,plr_78)) final85 = Rhino.joinCurves(array(pll_85,cv85,plr_85)) final15 = Rhino.joinCurves(array(pll_15,cv15,plr_15)) final26 = Rhino.joinCurves(array(pll_26,cv26,plr_26)) final37 = Rhino.joinCurves(array(pll_37,cv37,plr_37)) final48 = Rhino.joinCurves(array(pll_48,cv48,plr_48)) 'loft between curves Call Rhino.AddEdgeSrf(array(final12(0),final23(0),final34(0),final41(0))) Call Rhino.AddEdgeSrf(array(final12(0),final26(0),final56(0),final15(0))) Call Rhino.AddEdgeSrf(array(final26(0),final67(0),final37(0),final23(0))) Call Rhino.AddEdgeSrf(array(final37(0),final78(0),final48(0),final34(0))) Call Rhino.AddEdgeSrf(array(final48(0),final41(0),final15(0),final85(0))) Call Rhino.AddEdgeSrf(array(final56(0),final67(0),final78(0),final85(0))) End Function Call Rhino.enableredraw(True)