Entries categorized as ‘Adolfo Nadal’
Strategy of dispersion: density-porosity
October 28, 2008 · Leave a Comment
Categories: Adolfo Nadal
Tracing trajectories (trajectory update)
October 28, 2008 · Leave a Comment
Categories: Adolfo Nadal
Trajectories
October 23, 2008 · Leave a Comment
It seems that y clay machine requires certain boundary conditions in order to operate properly. Therefore I have briefly continued my exploration of how to design those, by setting up a system in which only 3 factors are implied: machine, clay sources (desirable spaces) and urban sprawls (non-desirable spaces). Here the first results.
Categories: Adolfo Nadal
Diggin’ on hell’s door
October 8, 2008 · Leave a Comment
Option Explicit
‘Script written by Ado
Call Main()
Sub Main()
Dim inLayer
inLayer = Rhino.GetString(“Introduce new Layers?”,”yes”,array(“yes”,”no”))
If inLayer = “yes” Then
Call AddLayers
End If
Dim arrPtSeed : arrPtSeed = Rhino.GetObject(“Base Point”,1)
arrPtSeed = Rhino.PointCoordinates(arrPtSeed)
Dim n : n = Rhino.GetInteger(“nr of points”, 10)
” SPEED:
’Dim bbox : bbox = Rhino.BoundingBox(strSrf)
Dim min : min = -500 ‘Rhino.Distance(bbox(0),bbox(6))/8
Dim max : max = 200 ‘Rhino.Distance(bbox(0),bbox(6))/4
Dim Density : Density = 2
Dim i, j, k : k = 1 : i = 0
Dim arrPt, arrLines()
Dim arrPtsCollect()
ReDim Preserve arrPtsCollect(0)
arrPtsCollect(0) = arrPtSeed
Do Until k = n+1
arrPt = array(arrPtSeed(0)+arbitraryValue(min, max),arrPtSeed(1) + arbitraryValue(min, max),arrPtSeed(2)- abs(1/2*arbitraryValue(min, max)))
Dim arrPtNeighBor : arrPtneighbor = shortestPt(arrPtsCollect, arrPt)
If arrPtneighbor(2) < min/2 Then
arrPtneighbor(2)=0
End If
ReDim Preserve arrLines(k-1)
arrLines(k-1) = Rhino.AddLine(arrPt, arrPtNeighBor)
ReDim Preserve arrPtsCollect(k)
arrPtsCollect(k) = arrPt
k = k + 1
Loop
Dim arrPoly : arrPoly = Rhino.JoinCurves(arrLines,True)
Rhino.Print “From ” & Ubound(arrLines)+1 & ” segments ” & Ubound(arrPoly)+1 & ” polylines were extracted. Segments erased”
For j=0 To Ubound(arrPoly)-1
Dim StrtPt, EndPt
StrtPt = Rhino.CurveStartPoint(arrPoly(j))
EndPt = Rhino.CurveEndPoint(arrPoly(j))
Dim strtvl, endvl, endvllength
’sometimes complains it does not find a string!!!
If StrtPt(2)<>0 Then
strtvl = Rhino.AddLine (StrtPt,array(StrtPt(0),StrtPt(1),0))
End If
If EndPt(2)<>0 Then
endvl = Rhino.AddLine (EndPt, array(EndPt(0),EndPt(1),0))
endvllength= Rhino.CurveLength(endvl)
Rhino.Print endvl
End If
If Not IsNull(strtvl) Then
ReDim arrPolyfinal(j)
’—————————————————————
’arrPolyfinal is a temp array to store the result, since the method joinCurves returns an array… this way we can avoid having nested arrays.
arrPolyfinal(j) = Rhino.JoinCurves(array(arrPoly(j),strtvl),True)
arrPoly(j) = arrPolyfinal(j)(0)
Rhino.Print “so far, index j is ” & j
If endvllength > Rhino.UnitRelativeTolerance Then
If Not IsNull(endvl) And IsCurve(arrPoly(j)) Or IsPolyCurve(arrPoly(j)) Or IsPolyline(arrPoly(j)) Then
ReDim arrPolyfinal(j)
arrPolyfinal(j) = Rhino.JoinCurves(array(arrPoly(j),endvl) ,True)
arrPoly(j) = arrPolyfinal(j)(0)
End If
End If
Else
If Not IsNull(endvl) Then
arrPolyfinal(j) = Rhino.JoinCurves(array(arrPoly(j),endvl) ,True)
arrPoly(j) = arrPolyfinal(j)(0)
End If
End If
Dim Length
Length = Rhino.CurveLength(arrPoly(j))
If Length < max/density Then
Rhino.DeleteObject(arrPoly(j))
j=j-1
End If
Dim hl
’Add a (horizontal) line between end and start points
StrtPt = Rhino.CurveStartPoint(arrPoly(j))
EndPt = Rhino.CurveEndPoint(arrPoly(j))
hl = Rhino.AddInterpCurve (array(StrtPt,EndPt))
’Add annotation text
Dim txt1: txt1 = Rhino.AddText (“Curve: ” & j & “, (StrtPoint).” & vbCrLf & “Length: ” & Length,StrtPt,CInt(Length/75),”Verdana”)
Dim txt2: txt2 = Rhino.AddText (“Curve: ” & j & “, (StrtPoint).” & vbCrLf & “Length: ” & Length,EndPt,CInt(Length/75),”Verdana”)
’Change layers
Rhino.ObjectLayer hl,”annotations”
Next
Rhino.ObjectLayer arrPoly,”Polylines”
End Sub
Function shortestPt(arrPtsCollection, arrPtTest)
Dim i
Dim dblDistMin : dblDistMin = 100000000
For i = 0 To UBound(arrPtsCollection)
Dim dblDist : dblDist = rhino.Distance(arrPtTest, arrPtsCollection(i))
If dbldist <> 0 Then
If dblDist < dblDistMin Then
dblDistMin = dblDist
shortestPt = arrPtsCollection(i)
End If
End If
Next
End Function
Function arbitraryValue(min, max)
Randomize
arbitraryValue = Int((max – min + 1) * Rnd + min)
End Function
Function AddLayers
If Not IsLayer(“Script”) Then
Rhino.AddLayer “Script”,RGB(0, 0, 0),True,False
End If
If Not IsLayer(“Polylines”) Then
Rhino.AddLayer “Polylines”,RGB(128, 0, 128),True,False,”Script”
Rhino.LayerLinetype “Polylines”, “Continuous”
End If
If Not IsLayer(“Points”) Then
Rhino.AddLayer “Points”,RGB(0, 0, 0),True,False,”Script”
Rhino.LayerLinetype “Polylines”, “Continuous”
End If
If Not IsLayer(“Annotations”) Then
Rhino.AddLayer “Annotations”,RGB(128, 128, 128),True,False,”Script”
Rhino.LayerLinetype “Polylines”, “Dots”
End If
If Not IsLayer(“Helix”) Then
Rhino.AddLayer “Helix”,RGB(128, 128, 128),True,False,”Script”
Rhino.LayerLinetype “Polylines”, “Dashed”
End If
End Function
<br>
<hr>
Categories: Adolfo Nadal
Diggin’ on hell’s door
October 8, 2008 · Leave a Comment
Option Explicit
‘Script written by Ado
Call Main()
Sub Main()
‘Dim strSrf : strSrf = Rhino.GetObject(“closed surface”,16)
Dim arrPtSeed : arrPtSeed = Rhino.GetObject(“Base Point”,1)
arrPtSeed = Rhino.PointCoordinates(arrPtSeed)
Dim n : n = 1000 ‘Rhino.GetInteger(“nr of points”, 10)
” SPEED:
‘Dim bbox : bbox = Rhino.BoundingBox(strSrf)
Dim min : min = -500 ‘Rhino.Distance(bbox(0),bbox(6))/8
Dim max : max = 500′ Rhino.Distance(bbox(0),bbox(6))/4
Dim i, k : k = 1 : i = 0
Dim arrPt
Dim arrPtsCollect()
ReDim Preserve arrPtsCollect(0)
arrPtsCollect(0) = arrPtSeed
Do Until k = n+1
arrPt = array(arrPtSeed(0)+arbitraryValue(min, max),_
arrPtSeed(1) + arbitraryValue(min, max),_
arrPtSeed(2)- abs(arbitraryValue(min, max)))
Dim arrPtNeighBor : arrPtneighbor = shortestPt(arrPtsCollect, arrPt)
Call rhino.AddLine(arrPt, arrPtNeighBor)
ReDim Preserve arrPtsCollect(k)
arrPtsCollect(k) = arrPt
k = k + 1
Loop
Dim strCrv : strCrv = rhino.AddInterpCurve(arrPtsCollect)
Call rhino.ObjectColor(strcrv, vbred)
End Sub
Function shortestPt(arrPtsCollection, arrPtTest)
Dim i
Dim dblDistMin : dblDistMin = 100000000
For i = 0 To UBound(arrPtsCollection)
Dim dblDist : dblDist = rhino.Distance(arrPtTest, arrPtsCollection(i))
If dbldist 0 Then
If dblDist < dblDistMin Then
dblDistMin = dblDist
shortestPt = arrPtsCollection(i)
End If
End If
Next
End Function
One more of the series… this one is almost working… i guess what i wanted is to have different possibilities to explore boundary populations, starting from surfaces to go to closed lines and finally redefine those conditions in the polysurfaces.
Categories: Adolfo Nadal
Bound to the ground (2)
October 8, 2008 · Leave a Comment
Option Explicit
‘Script written by
‘Script copyrighted by
‘Script version domingo, 05 de octubre de 2008 20:28:50
Call Main()
Sub Main()
Dim strCrv, bbox, strBBCrv
strCrv = Rhino.GetObject(“Curve”, 4)
If isNull (strCrv) Then Exit Sub
bbox = Rhino.BoundingBox(strCrv)
strBBCrv = Rhino.AddPolyline (array(bbox(0),bbox(1),bbox(2),bbox(3),bbox(0)))
Dim radius, centBBPt, centPtCrv
centBBPt = Rhino.CurveAreaCentroid(strBBCrv)(0)
centPtCrv = Rhino.CurveAreaCentroid(strCrv)(0)
radius = Rhino.Distance(centBBPt,bbox(0))
Rhino.Print “radius” & radius
Dim arrItems, arrBoolean, blnVal
arrItems = array(“Stepmode”,”Steps”,”Width”)
arrBoolean = Rhino.GetBoolean(“Select mode of population”,arrItems,array(True))
Dim steps, width, n
For Each blnVal In arrBoolean
If blnVal = True Then
steps = Rhino.GetInteger(“Number of steps for machine”,10)
n = steps
Else
width = Rhino.GetReal(“Width of the machine”)
n = CInt(radius/width)
End If
Rhino.Print n
Next
Dim Rad, crvDomain, t, m, i, p, crvCurvature
Dim crvPt()
‘Rhino.AddLine centBBPt,array((bbox(0)(0)+bbox(1)(0))/2,(bbox(0)(1)+bbox(1)(1))/2 ,(bbox(0)(2)+bbox(1)(2))/2 )
Rad = Rhino.AddLine(centBBPt,bbox(0))
Dim arrPlane, circ(), arrPts(),arrPtsCoord(), arrPtsCrv(), a, arrCCX()
arrPlane = Rhino.PlaneFromFrame(centBBPt,array(1,0,0),array(0,1,0))
m=-1
crvDomain = Rhino.CurveDomain(Rad)
For t = crvDomain(0) To crvDomain(1)+1e-9 Step (crvDomain(1)-crvDomain(0))/n
m=m+1
crvCurvature = Rhino.CurveCurvature(Rad, t)
If isNull (crvCurvature) Then
ReDim Preserve crvPt(m)
crvPt(m) = Rhino.EvaluateCurve (Rad,t)
‘——————————————————————
‘IS THERE ANY WAY OF NOT REPEATING ALL THESE???
radius = CDbl(Rhino.Distance(centBBPt,crvPt(m)))
If radius < 1 Then
radius = 1
End If
Rhino.Print “radius :” & radius
p = -1
For a=0 To 2*PI +1e-9 Step PI/8
p = p+1
ReDim Preserve arrPts(p)
arrPts(p) = Rhino.AddPoint(array(radius*sin(a)+centPtCrv(0),radius*cos(a)+centPtCrv(1),centPtCrv(2)))
ReDim Preserve arrPtsCoord(p)
arrPtsCoord(p) = Rhino.PointCoordinates(arrPts(p))
Next
Rhino.DeleteObjects arrPts
Rhino.AddPoint crvPt(m)
ReDim Preserve arrPtsCrv(m)
arrPtsCrv(m) = arrPtsCoord
ReDim Preserve circ(m)
circ(m) = Rhino.AddInterpCurve (arrPtsCrv(m))
Rhino.ObjectColor circ(m),ParamColor(t)
ReDim Preserve arrCCX(m)
arrCCX(m) = Rhino.CurveCurveIntersection(circ(m),strCrv)
If isArray(arrCCX(m)) Then
Call Rhino.Print (“curves intersect”)
For i = 0 To UBound(arrCCX(m))
Dim strText
If arrCCX(m)(i,0) = 1 Then
Call Rhino.AddPoint (arrCCX(m)(i,1))
strtext = Rhino.AddText (“Point: ” & m+i & “Crv: ” & m & ” Intr: ” & i, arrCCX(m)(i,1),.5)
Rhino.ObjectColor strtext,ParamColor(t)
Else
Call Rhino.Print (“no intersections”)
End If
Next
End If
‘——————————————————————
Else
ReDim Preserve crvPt(m)
crvPt(m) = crvCurvature(0)
‘——————————————————————
‘IS THERE ANY WAY OF NOT REPEATING ALL THESE???
ReDim Preserve circ(m)
circ(m) = Rhino.AddCircle(arrPlane,Rhino.Distance(centBBPt,crvPt(m)))
Rhino.AddPoint crvPt(m)
ReDim Preserve arrCCX(m)
arrCCX (m) = Rhino.CurveCurveIntersection(circ(m),strCrv)
If isArray(arrCSX(m)) Then
Call Rhino.Print (“curves intersect: ” & “Circle: ” & m)
For i = 0 To UBound(arrCSX(m))
If arrCSX(i,0)(m) = 1 Then
Call Rhino.AddPoint (arrCSX(i,1)(m))
Else
Call Rhino.Print (“no intersections”)
End If
Next
End If
‘——————————————————————
End If
Next
End Sub
Function ParamColor(t)
Dim RedComponent : RedComponent = 255 * Abs(t)
If RedComponent <0 Then RedComponent=0
If RedComponent <255 Then RedComponent=255
ParamColor = RedComponent + 0*256 + (255-RedComponent)*65536
Rhino.Print ParamColor
End Function
Function ObtenerRGB(ByVal Color,ByVal Rojo,ByVal Verde,ByVal Azul)
Azul = (Color And 16711680) / 65536
Verde = (Color And 65280) / 256
Rojo = Color And 255
End Function
Categories: Adolfo Nadal
Curve_growth (not working! -yet)
October 8, 2008 · Leave a Comment
Option Explicit
‘Script written by Ado
‘Script copyrighted by archi.o.logies
‘Script version Monday, September 29, 2008 2:37:08 PM
‘WHAT THE HELL IS GOING ON WITH THIS VARIABLE DECLARATION?
‘Dim arrPtPoly()
Call Main()
Sub Main()
Dim inPt,inPtCoord, newPt
Dim arrPt()
Dim boud, boudbox, speed, radius
Dim n, j
Dim arrPtCoord()
Dim arrLines()
Dim arrPtPoly()
inPt = Rhino.GetObject(“Please pick initial point”,1,True)
If IsNull (inPt) Then Exit Sub
inPtCoord = Rhino.PointCoordinates(inPt)
n = Rhino.GetInteger(“Nr of iterations”,5,5)
boud = Rhino.GetObject(“please select boundary object”)
boudbox = Rhino.BoundingBox(boud)
speed = Rhino.GetInteger(“Speed”,5,5,10)
radius = Rhino.Distance(boudbox(0),boudbox(6))/speed
For j = 0 To n-1
Call RndPt (inPt, radius,j, n, boud, arrPtPoly)
Next
Rhino.Print(“i am so far2″)
‘——————————————————
‘QUESTION FOR MARK: HOW NOT TO HAVE AN ERROR HERE?????????
Rhino.AddPolyline(arrPtPoly)
‘——————————————————
End Sub
Function RndPt (inPt,radius,i,n, boud, arrPtPoly)
Dim inPtCoord, k
Dim alpha0, alpha1, alpha2, min
Dim Line
Dim intobjectType, strLayername
min = -radius
inPtCoord = Rhino.PointCoordinates(inPt)
alpha0 = arbitraryValue(min, radius)
alpha1 = arbitraryValue(min, radius)
alpha2 = arbitraryValue(min, radius)
‘Rhino.AddPoint array(0,0,inPtCoord(0))
ReDim Preserve arrPt(i)
arrPt(i) = Rhino.AddPoint (array(inPtCoord(0)+alpha0,inPtCoord(1)+alpha1,inPtCoord(2)))
ReDim Preserve arrPtPoly(i)
arrPtPoly(i) = Rhino.PointCoordinates(arrPt(i))
Rhino.Print Pt2Str(arrPtPoly(i))
If i>0 Then
k=i-1
‘——————————————————
‘MARK: HERE IT DOES NOT MAKE LINE BETWEEN 1ST AND 2ND POINTS
ReDim Preserve arrLines(k)
arrLines(k) = Rhino.AddLine (arrPtPoly(i), arrPtPoly(i-1))
‘——————————————————
‘USE CASES to call funtions according to objecttype(boud)
intObjectType = Rhino.ObjectType(boud)
Select Case intobjectType
Case 1, 2
strLayername = “Points”
inPt = arrPt(i)
Case 4
strLayername = “Curves”
inPt = arrPt(i)
Case 8
strLayername = “Surfaces”
inPt = arrPt(i)
Case 16
Call CSX (arrLines(k),boud, i, inPt, arrPt(i))
’strLayername = “PolySurfaces”
Case 32
strLayername = “Meshes”
inPt = arrPt(i)
Case Else
strLayername = “Not suported object type, please enter (poly)surface/s”
End Select
If i = (n-1) Then
Rhino.Print(“i am so far 1…”)
Rhino.Print(“n is: ” & n & ” ||| i is :” & i)
‘Poly = Rhino.AddInterpCurve (arrPt)
End If
End If
‘inPt = arrPt(i)
End Function
Function arbitraryValue(min, max)
Randomize
arbitraryValue = Int((max – min + 1) * Rnd + min)
End Function
Function CSX (arrLines,boud,i,inPt, Pt)
Dim arrSrf
Dim arrCSX()
Dim l, m
Dim newPt
arrSrf = Rhino.ExplodePolysurfaces(boud,True)
If IsArray (arrSrf) Then
‘——————————————————
‘MARK: WHY DOES IT ONLY DO IT WITH THE FIRST SURFACE…????
For l=0 To Ubound(arrSrf)
ReDim Preserve arrCSX(l)
arrCSX(l) = Rhino.CurveSurfaceIntersection(arrLines, arrSrf(l))
If Not IsArray(arrCSX(l)) Then
Rhino.Print “Curve and surface ” & l & ” do not intersect.”
boud = Rhino.JoinSurfaces(arrSrf)
Rhino.DeleteObjects(arrsrf)
inPt = Pt
Rhino.AddText “Point number ” & i & “.” & vbCrLf & “ID: ” & inPt & “.” & vbCrLf & “Coordinates: ” & Pt2Str(Rhino.PointCoordinates(Pt)),Rhino.PointCoordinates(Pt),0.5,”arial”
Exit Function
Else
‘if the object intersects with the surface, then tell and do new point on surface instead of the calculated one
For m = 0 To UBound(arrCSX(l))
If arrCSX(l)(m,0) = 1 Then
Rhino.Print “Point”
Rhino.Print “Intersection point on curve: ” & Rhino.Pt2Str(arrCSX(l)(m,1))
Rhino.Print “Intersection point on surface: ” & Rhino.Pt2Str(arrCSX(l)(m,3))
Rhino.Print “Curve parameter: ” & CStr(arrCSX(l)(m,5))
Rhino.Print “Surface parameter: ” & CStr(arrCSX(l)(m,7)) & “,” & CStr(arrCSX(l)(m,8))
‘here we assign the new point to the variable for the line to be further made
newPt = Rhino.AddPoint (arrCSX(l)(m,1))
Else
Rhino.Print “Overlap”
Rhino.Print “Intersection start point on curve: ” & Rhino.Pt2Str(arrCSX(l)(m,1))
Rhino.Print “Intersection end point on curve: ” & Rhino.Pt2Str(arrCSX(l)(m,2))
Rhino.Print “Intersection start point on surface: ” & Rhino.Pt2Str(arrCSX(l)(m,3))
Rhino.Print “Intersection end point on surface: ” & Rhino.Pt2Str(arrCSX(l)(m,4))
Rhino.Print “Curve parameter range: ” & CStr(arrCSX(l)(i,5)) & ” to ” & CStr(arrCSX(l)(m,6))
Rhino.Print “Surface parameter range: ” & CStr(arrCSX(l)(i,7)) & “,” & CStr(arrCSX(l)(m,8)) & ” to ” & CStr(arrCSX(l)(m,9)) & “,” & CStr(arrCSX(l)(m,10))
End If
Pt = newPt
Next
End If
Next
End If
boud = Rhino.JoinSurfaces(arrSrf,True)
Rhino.DeleteObjects(arrsrf)
End Function
Categories: Adolfo Nadal
Stay in the box (in process)
October 8, 2008 · Leave a Comment
Call Main()
Sub Main()
Dim strSrf : strSrf = Rhino.GetObject(“closed surface”,16)
Dim arrPtSeed : arrPtSeed = Rhino.GetObject(“Base Point”,1)
arrPtSeed = Rhino.PointCoordinates(arrPtSeed)
Dim n : n = 200 ‘Rhino.GetInteger(“nr of points”, 10)
” SPEED:
Dim bbox : bbox = Rhino.BoundingBox(strSrf)
Dim min : min = -50 ‘Rhino.Distance(bbox(0),bbox(6))/8
Dim max : max = 50′ Rhino.Distance(bbox(0),bbox(6))/4
Dim i, k : k = 1 : i = 0
Dim arrPt
Dim arrPtsCollect()
ReDim Preserve arrPtsCollect(0)
arrPtsCollect(0) = arrPtSeed
‘For i=0 To n-1
Do Until k = n+1
arrPt = array(arrPtSeed(0)+arbitraryValue(min, max),_
arrPtSeed(1) + arbitraryValue(min, max),_
arrPtSeed(2)+ arbitraryValue(min, max))
If Rhino.IsPointInSurface (strSrf, arrPt) then
ReDim Preserve arrPtsCollect(k)
arrPtsCollect(k) = arrPt
Call rhino.AddLine(arrPtsCollect(k-1), arrPtsCollect(k))
k = k + 1
i = 0
Else
i = i + 1
End If
If i = 100 Then Exit Sub
Loop
‘Next
Call rhino.AddPolyline(arrPtsCollect)
End Sub
Function arbitraryValue(min, max)
Randomize
arbitraryValue = Int((max – min + 1) * Rnd + min)
End Function
Categories: Adolfo Nadal
Bound to the ground
October 8, 2008 · Leave a Comment
This is the original v.0.1 script. It will eventually crash if the original curve is very intricate (the curves created by the script will become shorter than the tolerance returning a “string required” error…
Anyway, here is the code:
Option Explicit
‘Script written by Ado
Call Main()
Sub Main()
Dim arrStartPt()
ReDim Preserve arrStartPt(0)
arrStartPt(0) = Rhino.GetPoint (“select start point”)
Dim strCrv : strCrv = Rhino.GetObject (“select boundary curve”, 4)
Dim i, j, l, arrNewPt, strTempLn, arrCCX, arrNewTempPt, strNewLine, dblCrvLength
Dim dblAngle : dblAngle = 10
Dim k : k = 10
For j = 1 To 100
ReDim Preserve arrStartPt(j)
arrNewPt = Rhino.Polar (arrStartPt(j-1), k, 10000)
strTempLn = Rhino.addLine (arrStartPt(j-1),arrNewPt)
arrCCX = Rhino.CurveCurveIntersection (strTempLn, strCrv)
If arrCCX(i,0) = 1 Then
arrNewTempPt = arrCCX(0,1)
End If
Call Rhino.DeleteObject (strTempLn)
strNewLine = Rhino.AddLine (arrStartPt(j-1),arrNewTempPt)
dblCrvLength = Rhino.CurveLength (strNewLine)
k = k + (134 – dblCrvLength)
strNewLine = Rhino.ScaleObject (strNewLine,arrStartPt(j-1),array(0.9,0.9,0.9))
arrStartPt(j) = rhino.CurveEndPoint (strNewLine)
Next
Dim arrNewStartPt()
For l = 0 To UBound(arrStartPt)
ReDim Preserve arrNewStartPt(l)
arrNewStartPt(l) = array(arrStartPt(l)(0),arrStartPt(l)(1),arrStartPt(l)(2)+(l*10))
Next
Call Rhino.AddCurve (arrNewStartPt)
End Sub
Categories: Adolfo Nadal