Gallery details
Generates a series of self organized curves which are being pulled to geometry w. an Inverse Kinematic Skeleton – Python + Maya Research V.1 [29.June.2011] – via Python + Rhinoscript
— Thresholds for self organizing mutate per frame. Extremely Important to make sure the entire procedure is done through the code since any changes in curve order or curve build or mesh build will cause the blendshape to fail–
. As Close to a Protocol I think
. Freeze Frame [maya]
. Export Pipe Geometry [will be very deformed and nasty]
. In Rhino. Explode, Ungroup
. Run PipeRebuilder_MultiErrorTrap Script
. Bundle It
. Rebuild Curves By Layer Selection
. Pull It To Offset Mesh
. Pipe it [one mesh of x number of pipes]
. Export to Maya
. Prep Blend Shape Action
. KeyFrame It + Dominate it
RHINOSCRIPT CODE
Option Explicit
'Script written by Luis Quinones
'www.luisquinonesdesign.com
'www.computationalmatter.com
'Script version Monday, 06 May 2011 17:35:58
Call Main()
Sub Main()
'Dim arrObj : arrObj = Rhino.GetObjects("MESHES",32)
Dim i
For i = 0 To 20
Call Rhino.LayerVisible("M" & i,True)
If i > 0 Then
Call Rhino.LayerVisible("M" & i-1,False)
End If
Next
Call Rhino.LayerVisible("M20",False)
For i = 0 To 20
Dim arrObj : arrObj = Rhino.ObjectsByLayer("M" & i,True)
Call Rhino.LayerVisible("M" & i, True)
'Dim strLayer : strLayer = Rhino.AddLayer("A"& i & "_BaseMeshes")
Dim strLayer2 : strLayer2 = Rhino.AddLayer("M"& i & "_OffSetMesh")
'Call Rhino.ObjectLayer(arrObj,strLayer)
Dim dblOff : dblOff = Rhino.MeshOffset(arrObj(0),0.3)
Rhino.UnselectAllObjects
Rhino.SelectObject(arrObj(0))
Rhino.Command "Ungroup"
Rhino.UnselectAllObjects
Call Rhino.ObjectLayer(dblOff,strLayer2)
Call Rhino.LayerVisible("M" & i,False)
Call Rhino.LayerVisible(strLayer2,False)
Next
Dim last : last = 20
For i = 0 To 20
Call Rhino.LayerVisible("M" & last-i,False)
Next
End Sub
Update
RHINOSCRIPT CODE
Option Explicit
'Script written by Luis Quinones
'www.luisquinonesdesign.com
'www.computationalmatter.com
'Script version Wednesday, May 18, 2011 12:51:12 PM
Call Main()
Sub Main()
Dim strLayer : strLayer = Rhino.AddLayer("Frame",RGB(255,255,255))
Dim strMesh : strMesh = Rhino.GetObject("MESH",32)
Dim i
Dim arrFaces : arrFaces = Rhino.MeshFaces(strMesh)
Dim arrFace(3)
Rhino.EnableRedraw False
Do While i < Ubound(arrFaces)
arrFace(0) = arrFaces(i)
arrFace(1) = arrFaces(i+1)
arrFace(2) = arrFaces(i+2)
arrFace(3) = arrFaces(i+3)
Dim newLine : newLine = Rhino.AddLine(arrFace(0),arrFace(1))
Call Rhino.ObjectLayer(newLine,strLayer)
i = i + 4
Loop
Dim crvs : crvs = Rhino.ObjectsByLayer("Frame",True)
Rhino.Command "Join"
Rhino.UnselectAllObjects
Dim crv
Dim count
count = 0
Dim arrCrvstest : arrCrvstest = Rhino.ObjectsByLayer("Frame")
Dim y
Dim testCrv
Dim count2
count2 = 0
For Each testCrv In arrCrvstest
Dim meshtest : meshtest = Rhino.MeshPolyline(arrCrvstest(count2))
Dim areatest : areatest = Rhino.MeshArea(meshtest)
If areatest(1) = 0 Then
Call Rhino.Print("ONE FAILED")
Call Rhino.DeleteObject(arrCrvstest(count2))
End If
count2 = count2 + 1
Next
Rhino.UnselectAllObjects
Dim arrCrvs : arrCrvs = Rhino.ObjectsByLayer("Frame")
Dim newPts()
For Each crv In arrCrvs
Dim mesh : mesh = Rhino.MeshPolyline(arrCrvs(count))
ReDim Preserve newPts(count)
Dim centroid : centroid = Rhino.MeshAreaCentroid(mesh)
newPts(count) = Rhino.AddPoint(centroid)
count = count + 1
Next
Dim k
Dim ptloc
ptloc = newPts
For k = 0 To Ubound(newPts)
ptloc(k) = Rhino.PointCoordinates(newPts(k))
Next
Call Rhino.AddPolyline(ptloc)
Rhino.EnableRedraw True
End Sub
Update
RHINOSCRIPT CODE
Option Explicit
'Script written by Luis Quinones
'www.luisquinonesdesign.com
'Script version Wednesday, June 08, 2011 6:18:01 PM
Call Main()
Sub Main()
Dim i
For i = 0 To 360
If i = 20 Then
Dim m
For m = 0 To 19
Call Rhino.LayerVisible("Plines"& m,True)
Next
End If
If i = 290 Then
Dim x
Dim count
count = 20
For x = 0 To 19
Call Rhino.LayerVisible("Plines"& count,False)
count = count - 1
Next
End If
Call Rhino.RotateView("g",0,1)
Next
End Sub
Pipe Rebuilder_MultiErrorTrap + Pull to Mesh + CamAnim
RHINOSCRIPT CODE
Option Explicit
'Script written by Luis Quinones
'www.luisquinonesdesign.com
'www.computationalmatter.com
'Small part of code uses Roland Snooks edit grip pts.rs code.
'Script version Wednesday, May 18, 2011 12:51:12 PM
Call Main()
Sub Main()
'Dim LayerChoose : LayerChoose = Rhino.GetLayer
Dim strMesh
Dim AttThresh : AttThresh = Rhino.GetReal("Pull_attraction threshold", 60)
Dim Snap : Snap = Rhino.GetReal("Pull_attraction threshold to directly snap to surface", 25)
Dim VecRatio : VecRatio = Rhino.GetReal("ratio of distance to move", 0.5)
'Call Rhino.Print(Ubound(strMesh))
'Dim strMesh : strMesh = Rhino.GetObjects("MESHES",32)
Dim z
Dim i
Dim color
Dim newPts()
Dim newPts2()
'Rhino.EnableRedraw False
Dim q
For q = 0 To 20
Dim gens : gens = 1
Dim attraction
If q = 0 Then
attraction = 0
color = RGB(255,0,0)
End If
If q = 1 Then
attraction = 1
color = RGB(255,83,83)
End If
If q = 2 Then
attraction = 1
color = RGB(205,208,208)
End If
If q = 3 Then
attraction = 1
color = RGB(180,180,180)
End If
If q = 4 Then
attraction = 2
color = RGB(17,128,196)
End If
If q = 5 Then
attraction = 2
color = RGB(255,178,0)
End If
If q = 6 Then
attraction = 4
color = RGB(0,255,18)
End If
If q = 7 Then
attraction = 4
color = RGB(0,255,209)
End If
If q = 8 Then
attraction = 6
color = RGB(0,146,255)
End If
If q = 9 Then
attraction = 7
color = RGB(233,0,255)
End If
If q = 10 Then
attraction = 7
color = RGB(242,105,255)
End If
If q = 11 Then
attraction = 8
color = RGB(188,105,255)
End If
If q = 12 Then
attraction = 8
color = RGB(120,105,255)
End If
If q = 13 Then
attraction = 10
color = RGB(0,255,255)
End If
If q = 14 Then
attraction = 8
color = RGB(72,239,45)
End If
If q = 15 Then
attraction = 8
color = RGB(200,239,45)
End If
If q = 16 Then
attraction = 6
color = RGB(239,192,45)
End If
If q = 17 Then
attraction = 6
color = RGB(239,90,45)
End If
If q = 18 Then
attraction = 4
color = RGB(239,45,63)
End If
If q = 19 Then
attraction = 2
color = RGB(223,42,255)
End If
If q = 20 Then
attraction = 0
color = RGB(114,42,255)
End If
Dim strNewLayer : strNewLayer = Rhino.AddLayer("Plines" & q,color)
If q > 0 Then
Call Rhino.LayerColor("Plines"& q-1,RGB(83,83,83))
End If
strMesh = Rhino.ObjectsByLayer("A" & q)
For z = 0 To Ubound(strMesh)
Rhino.EnableRedraw False
'Call Rhino.Print ("ON_Mesh_" & z)
Dim strLayer : strLayer = Rhino.AddLayer("Frame" & z,RGB(255,255,255))
Dim arrFaces : arrFaces = Rhino.MeshFaces(strMesh(z))
'Call Rhino.Print("Mesh_" & z & "_" & Ubound(arrFaces))
ReDim arrFace(3)
Do While i < Ubound(arrFaces)
arrFace(0) = arrFaces(i)
arrFace(1) = arrFaces(i+1)
arrFace(2) = arrFaces(i+2)
arrFace(3) = arrFaces(i+3)
Dim newLine : newLine = Rhino.AddLine(arrFace(0),arrFace(1))
Call Rhino.ObjectLayer(newLine,strLayer)
i = i + 4
Loop
i = 0
Dim crvs : crvs = Rhino.ObjectsByLayer("Frame" & z,True)
If isNull (crvs) Then
Rhino.Print "Opps"
End If
'Rhino.Command "SelOpenCrv"
Rhino.Command "Join"
Rhino.UnselectAllObjects
Dim crv
Dim count
count = 0
Dim arrCrvstest : arrCrvstest = Rhino.ObjectsByLayer("Frame" & z)
Dim y
Dim testCrv
Dim count2
count2 = 0
For Each testCrv In arrCrvstest
Dim meshtest : meshtest = Rhino.MeshPolyline(arrCrvstest(count2))
Dim areatest : areatest = Rhino.MeshArea(meshtest)
If areatest(1) = 0 Then
Call Rhino.Print("ONE FAILED")
Call Rhino.DeleteObject(arrCrvstest(count2))
End If
Call Rhino.DeleteObject(meshtest)
count2 = count2 + 1
Next
Rhino.UnselectAllObjects
Dim arrCrvs : arrCrvs = Rhino.ObjectsByLayer("Frame" & z)
For Each crv In arrCrvs
Dim mesh : mesh = Rhino.MeshPolyline(arrCrvs(count))
ReDim Preserve newPts(count)
ReDim Preserve newPts2(count)
Dim centroid : centroid = Rhino.MeshAreaCentroid(mesh)
Call Rhino.LayerVisible("Frame" & z,False)
Rhino.EnableRedraw True
'If q = 0 And z < 2 Then
' Call Rhino.RotateView("d",0,0.1)
'End If
newPts(count) = Rhino.AddPoint(centroid)
newPts2(count) = Rhino.AddPoint(array(centroid(0)*-1,centroid(1),centroid(2)))
count = count + 1
Rhino.DeleteObject(mesh)
Next
Dim k
Dim ptloc
Dim ptloc2
ptloc = newPts
ptloc2 = newPts2
For k = 0 To Ubound(newPts)
ptloc(k) = Rhino.PointCoordinates(newPts(k))
ptloc2(k) = Rhino.PointCoordinates(newPts2(k))
Next
Dim checker
checker = Ubound(strMesh)
Rhino.Print checker
If q = 1 And z = checker - 2 Then
Dim f
For f = 0 To 600
Call Rhino.RotateView("e",0,.5)
Next
End If
If q = 4 And z = checker - 3 Then
For f = 0 To 120
Call Rhino.RotateView("e",0,.5)
Next
End If
If q = 10 And z = checker - 1 Then
Dim reduce
Dim x
reduce = q
For x = 0 To reduce
If x >= 1 Then
Call Rhino.LayerVisible("Plines"& x-1,False)
End If
Next
For f = 0 To 900
Call Rhino.RotateView("e",0,.5)
Next
End If
If q = 14 And z = checker - 3 Then
Dim reduce2
reduce2 = q
For x = 0 To reduce2
If x >= 1 Then
Call Rhino.LayerVisible("Plines"& x-1,True)
End If
Next
For f = 0 To 540
Call Rhino.RotateView("e",0,.5)
Next
End If
Call Rhino.DeleteObjects(newPts)
Call Rhino.DeleteObjects(newPts2)
Dim pLines : pLines = Rhino.AddPolyline(ptloc)
Dim pLines2 : pLines2 = Rhino.AddPolyline(ptloc2)
If Not IsNull(pLines) Then
Rhino.RebuildCurve pLines, 2, 40
Rhino.RebuildCurve pLines2, 2, 40
End If
Call Rhino.ObjectLayer(pLines,strNewLayer)
Call Rhino.ObjectLayer(pLines2,strNewLayer)
Erase newPts
Erase ptloc
Erase newPts2
Erase ptloc2
Rhino.LayerVisible strLayer,False
Rhino.PurgeLayer strLayer
Next
Dim meshPull : meshPull = Rhino.ObjectsByLayer("M"& q & "_OffSetMesh")
Rhino.Print "AttractionThreshold" & " =" & attraction
Call Bundle (strNewLayer,gens,attraction,meshPull,AttThresh,Snap,VecRatio)
Next
Dim h
Dim testcount : testcount = 12
For h = 0 To 20
If h = 0 Then
Call Rhino.LayerColor("Plines" & "20", RGB(255,0,0))
End If
If h = 1 Then
Call Rhino.LayerColor("Plines" & "19", RGB(255,83,83))
End If
If h = 2 Then
Call Rhino.LayerColor("Plines" & "18", RGB(205,208,208))
End If
If h = 3 Then
Call Rhino.LayerColor("Plines" & "17", RGB(180,180,180))
End If
If h = 4 Then
Call Rhino.LayerColor("Plines" & "16", RGB(17,128,196))
End If
If h = 5 Then
Call Rhino.LayerColor("Plines" & "15", RGB(255,178,0))
End If
If h = 6 Then
Call Rhino.LayerColor("Plines" & "14", RGB(0,255,18))
End If
If h = 7 Then
Call Rhino.LayerColor("Plines" & "13", RGB(0,255,209))
End If
If h = 8 Then
Call Rhino.LayerColor("Plines" & "12", RGB(0,146,255))
End If
If h = 9 Then
Call Rhino.LayerColor("Plines" & "11", RGB(233,0,255))
End If
If h = 10 Then
Call Rhino.LayerColor("Plines" & "10", RGB(242,105,255))
End If
If h = 11 Then
Call Rhino.LayerColor("Plines" & "9", RGB(188,105,255))
End If
If h = 12 Then
Call Rhino.LayerColor("Plines" & "8", RGB(120,105,255))
End If
If h = 13 Then
Call Rhino.LayerColor("Plines" & "7", RGB(0,255,255))
End If
If h = 14 Then
Call Rhino.LayerColor("Plines" & "6", RGB(72,239,45))
End If
If h = 15 Then
Call Rhino.LayerColor("Plines" & "5", RGB(200,239,45))
End If
If h = 16 Then
Call Rhino.LayerColor("Plines" & "4", RGB(239,192,45))
End If
If h = 17 Then
Call Rhino.LayerColor("Plines" & "3", RGB(239,90,45))
End If
If h = 18 Then
Call Rhino.LayerColor("Plines" & "2", RGB(239,45,63))
End If
If h = 19 Then
Call Rhino.LayerColor("Plines" & "1", RGB(223,42,255))
End If
If h = 20 Then
Call Rhino.LayerColor("Plines" & "0", RGB(114,42,255))
End If
testcount = testcount - 1
Next
'Rhino.EnableRedraw True
'Rhino.LayerVisible LayerChoose,False
'Rhino.LayerVisible "Meshes",False
End Sub
Function Bundle(layer,gens,attraction,mesh,AttThresh,Snap,VecRatio)
Dim crvArr, steps, threshold, i, j, k, gripCount, dist, closestDist, closestVector, ratio
Dim crvPt, h, newPos, gripPos, count, crvParam
' input
crvArr = rhino.ObjectsByLayer(layer)
steps = gens
threshold = attraction
'ratio = rhino.GetReal("move ration", 0.5)
'Rhino.EnableRedraw False
' loop through steps
For h = 0 To steps
' loop through all the crvs
For i = 0 To UBound(crvArr)
' how many control points on the crv
Rhino.EnableObjectGrips crvArr(i), True
gripCount = Rhino.ObjectGripCount(crvArr(i))
' loop through each of the points on the crv
For j = 0 To gripCount-1
' get location of the grip
gripPos = Rhino.ObjectGripLocation(crvArr(i), j)
count = 0
' loop through all the curves to find the closest one
For k = 0 To UBound(crvArr)
' get the position of the points
crvParam = Rhino.CurveClosestPoint(crvArr(k), gripPos)
crvPt = Rhino.EvaluateCurve(crvArr(k), crvParam)
dist = Rhino.Distance(crvPt, gripPos)
If dist < threshold And Not i=k Then
If count = 0 Then
closestDist = dist
closestVector = Rhino.VectorCreate(crvPt, gripPos)
count = count + 1
Else
If dist < closestDist Then
closestDist = dist
closestVector = Rhino.VectorCreate(crvPt, gripPos)
count = count + 1
End If
End If
End If
Next 'k
If count = 0 Then
closestVector = Array(0,0,0)
End If
newPos = Rhino.VectorAdd(gripPos, closestVector)
Rhino.ObjectGripLocation crvArr(i), j, newPos
Next' j
Rhino.EnableObjectGrips crvArr(i), False
If Not IsNull(crvArr(i)) Then
Dim reb : reb = Rhino.RebuildCurve(crvArr(i), 2, 40)
If reb = True Then
Rhino.Print "Curve" & i & ".Has.Been.Rebuilt.@.2,40"
Else
Rhino.Print "DidntRebuiltIt"
End If
End If
Next ' i
Next ' h
'Rhino.EnableRedraw True
Call PullIt(crvArr,mesh,AttThresh,Snap,VecRatio)
End Function
Function PullIt(crvArr2,srfArr2,threshold2,snapThreshold2,ratio2)
Dim srfArr, crvArr, threshold, ratio, i, j, k, gripCount, gripPos, count, srfParam, srfPt, arrSrfPts()
Dim closeSrfInd, dist, vec, newPos, snapThreshold, meshPt
' input
srfArr = srfArr2
crvArr = crvArr2
threshold = threshold2
snapThreshold = snapThreshold2
ratio = ratio2
' loop through all crvs
For i = 0 To UBound(crvArr)
Rhino.EnableRedraw False
Rhino.EnableObjectGrips crvArr(i), True
' get grip count
gripCount = Rhino.ObjectGripCount(crvArr(i))
' loop through all pts
For j = 0 To gripCount-1
' get the location of the current grip
gripPos = Rhino.ObjectGripLocation(crvArr(i), j)
' k loop - crvs
count = 0
For k = 0 To UBound(srfArr)
' get the closest point on a srf
If IsMesh(srfArr(k))Then
meshPt = Rhino.MeshClosestPoint(srfArr(k), gripPos)
srfPt = meshPt(0)
Else
srfUV = Rhino.SurfaceClosestPoint(srfArr(k), gripPos)
srfPt = Rhino.EvaluateSurface(asrfArr(k), srfUV)
End If
ReDim Preserve arrSrfPts(count)
arrSrfPts(count) = srfPt
count = count + 1
Next ' k
' find the closest point
closeSrfInd = Rhino.PointArrayClosestPoint(arrSrfPts, gripPos)
srfPt = arrSrfPts(closeSrfInd)
' distance between point on curve and grip
dist = Rhino.Distance(gripPos, srfPt)
' check to see if in threshold
If dist < threshold Then
' move grip based on vector
vec = Rhino.VectorCreate(srfPt, gripPos)
If dist > snapThreshold Then
vec = Rhino.VectorScale(vec, ratio)
End If
newPos = Rhino.VectorAdd(vec, gripPos)
Rhino.ObjectGripLocation crvArr(i), j, newPos
End If
Next
Rhino.EnableRedraw True
Rhino.Print "ItsBeenPulled"
Rhino.EnableObjectGrips crvArr(i), False
Next
End Function
Recently in Portfolio
- [K]ernels

- Nike A.I.R Prototypes

- [A]nisochromatic Meshing

- Nike After Dark Tour

- PARAPRAXIS

- [001.HRR] CONCEPT BIKE

- 2040:LUNAR.OUTPOST[a]

- HE.6 2020 Prototype

- CULEBRA.NET

- PYTORCH-CLASSIFIER

- Nike Zoom Superfly Elite

- BENGBU CITY OPERA

- Nike Footscape Flyknit DM

- Jordan Hyperdunk React

- KA-HELMET

- [C]ucarachas

- [S]eeker

- [O]h Baby

- [E]l Papa

- [S]hatter.Brain

- [S]tigmergy

- [F]orces

- CULEBRA.JAVA

- [C]ulebra.MultiBehaviors

- [S]ticky Stuff

- [S]entinels

- [G]allopingTopiary

- RELUXOED

- [SRC] . Semi Rigid Car

- [P]erlin

- [E]ternal Wanderers

- [W]heelie

- [S]labacube

- [M]esh Crawlers

- [L]a Silla

- [3]D BabyMaking Trackstars

- [3]D Trackers

- [2]D BabyMaking Trackers

- [T]rackers

- CULEBRA GRASSHOPPER

- culebra.[M]eshCrawlers.3D

- culebra.[H]ybrid.3D

- culebra.[F]lorgy

- culebra.[F]ockers.3D

- culebra.[F]ockers.2D

- culebra.[N]oisey.3D

- [E]l Nino

- culebra.[S]elfOrg

- [D]rippin

- culebra.[N]oisey.2D

- [C]reepyCrawlers

- [J]eepresesCreepers

- [T]2000

- PUFFER PLEATNESS

- EMERGEN[CY]

- [L]iquified

- [S]uckedComp

- [X]plosion

- MR. EW

- [H]airGoo

- [B]alled

- [n]injaStars

- [b]loomer

- [t]rip city

- TAPE GUNNED

- [B]oom

- [M]iller Time

- [D]elamjam

- [B]rain Zapper

- [B]ig Bird

- [E]gg Tube Pavillion

- [A]llice’s Easter Tree

- [S]weet Honey

- [U]M.Urgent

- [t]oo.urgent

- [B]onnie..+..Clyde

- [B]io Mess

- [EL]Mojado.Virus

- [W]HAT the …!

- [H]ot Lava

- [P]leat Diddy

- [t]erminator easter egg

- Mr. BB

- [B]less You

- [F]antastic + Interactive

- [S]oo_Minimally_Pathed

- [P]uffer Fish.Fab

- [M]an Eater

- [AHH] Alien House Hunters

- [W]eave Machine

- Sportbike Racing

- Grappling

- Kart Racing


Leave a reply