"Hey Nice Tube"
Generates a series of bioReactor distribution tubes based on an input curve - Emergent Semi Rigid Car Python Research V.1 [29.June.2011] - via Python + Rhinoscript
""" The input is a base curve, density and number of layers can be controlled in the code."""
click images for full resolution

Python Version
{image 3}
Rhinoscript Version
""" The input is a base curve, density and number of layers can be controlled in the code."""
click images for full resolution

Python Version
import rhinoscriptsyntax as rs
from System.Drawing import Color
"""Script Written By Luis Quinones
Script Copywritten by [n]igma + studioBoom + computationalMatter
www.luisquinonesdesign.com
www.computationalmatter.com
www.cargocollective.com/studioboom
Script Version Wednesday, June 29, 2011"""
def Pipes(crv,dblRad,k):
rs.SelectObject(crv)
rs.Command("Pipe " +str(dblRad)+" "+str(dblRad)+ " enter")
rs.Command("Selnone")
def Main():
strCrv = rs.GetObject("CRV",rs.filter.curve)
strLayer = rs.AddLayer("CONSTRUCTION")
strLayer2 = rs.AddLayer("Plines", Color.White)
strLayer3 = rs.AddLayer("Pipes", Color.White)
div = rs.DivideCurve(strCrv,30,True)
#ptTrans = []
rs.EnableRedraw(False)
for y in range(5):
print y
for z in range(36):
ptTrans = []
for i in range(len(div)):
if div:
param = rs.CurveClosestPoint(strCrv,div[i])
arrData = rs.CurveCurvature(strCrv,param)
if arrData:
tangent = arrData[1]
arrEnd = [div[i][0] + tangent[0],div[i][1] + tangent[1],div[i][2] + tangent[2]]
curvature = arrData[4]
#if curvature[0] > 0:
#curvature[0] = curvature[0] * -1
#curvature[1] = curvature[1] * -1
#curvature[2] = curvature[2] * -1
arrEnd2 = [div[i][0] + curvature[0],div[i][1] + curvature[1],div[i][2] + curvature[2]]
rs.AddPoint(arrEnd2)
vec = rs.VectorCreate(arrEnd,div[i])
vec2 = rs.VectorCreate(arrEnd2,div[i])
scaledVec = rs.VectorUnitize(vec2)
scale = 0.5
if y > 0 and y < 2:
scale = (0.5/y)*0.75
if y >= 2:
scale = (0.5/y)*1.25
vec2A = rs.VectorScale(scaledVec,scale)
vec22 = rs.VectorAdd(vec2A,div[i])
check = rs.IsVectorPerpendicularTo(vec,vec2A)
vec3 = rs.VectorCrossProduct(vec,vec2A)
newVec = rs.PointAdd(div[i],vec3)
rs.AddPoint(newVec)
rotVec = rs.VectorCreate(div[i],newVec)
newLine2 = rs.AddLine(vec22,div[i])
rs.ObjectLayer(newLine2,strLayer)
newLine = rs.RotateObject(newLine2,div[i],10*z,vec,True)
rs.ObjectLayer(newLine,strLayer)
ptTrans.append(rs.CurveStartPoint(newLine))
pline = rs.AddPolyline(ptTrans)
rs.RebuildCurve(pline,3,50)
rs.ObjectLayer(pline,strLayer2)
rs.LayerVisible(strLayer,False)
crvTest = rs.ObjectsByLayer("Plines")
print len(crvTest)
arrStart = rs.CurveStartPoint(crvTest[0])
arrStart2 = rs.CurveStartPoint(crvTest[1])
newDist = rs.Distance(arrStart,arrStart2)
dblRad = newDist * 0.5
"""
for k in range(len(crvTest)):
Pipes(crvTest[k],dblRad,k)
delete = rs.ObjectsByLayer("Plines",True)
rs.DeleteObjects(delete)"""
rs.EnableRedraw(True)
Main()
{image 3}
Rhinoscript Version
Option Explicit
'Script written by Luis Quinones
'Script copyrighted by [n]igma + studioBoom + computationalMatter
'www.luisquinonesdesign.com
'www.computationalmatter.com
'www.cargocollective.com/studioboom
'Script version Friday, June 10, 2011 6:07:17 PM
Call Main()
Sub Main()
Dim strCrv : strCrv = Rhino.GetObject("CRV",4)
Dim strLayer : strLayer = Rhino.AddLayer("Construction")
Dim strLayer2 : strLayer2 = Rhino.AddLayer("Plines",RGB(255,255,255))
Dim strLayer3 : strLayer3 = Rhino.AddLayer("Pipes",RGB(255,255,255))
Dim div : div = Rhino.DivideCurve(strCrv,30,True)
Dim i
Dim ptTrans()
Dim z
Rhino.EnableRedraw False
For z = 0 To 36
For i = 0 To Ubound(div)
If IsArray(div) Then
Dim param : param = Rhino.CurveClosestPoint(strCrv,div(i))
If IsNumeric(param) Then
Dim arrData : arrData = Rhino.CurveCurvature(strCrv,param)
If IsArray(arrData) Then
Dim tangent : tangent = arrData(1)
Dim arrEnd : arrEnd = array((div(i)(0)+tangent(0)),(div(i)(1)+tangent(1)),(div(i)(2)+tangent(2)))
'Call Rhino.AddPoint(arrEnd)
Dim curvature : curvature = arrData(4)
'Rhino.Print(curvature(0))
If curvature(0) > 0 Then
curvature(0) = curvature(0) * -1
curvature(1) = curvature(1) * -1
curvature(2) = curvature(2) * -1
End If
Dim arrEnd2 : arrEnd2 = array((div(i)(0)+curvature(0)),(div(i)(1)+curvature(1)),(div(i)(2)+curvature(2)))
'Call Rhino.AddPoint(arrEnd2)
Dim vec : vec = Rhino.VectorCreate(arrEnd,div(i))
Dim vec2 : vec2 = Rhino.VectorCreate(arrEnd2,div(i))
Dim scaledVec : scaledVec = Rhino.VectorUnitize(vec2)
Dim vec2A : vec2A = Rhino.VectorScale(scaledVec,2)
Dim vec22 : vec22 = Rhino.VectorAdd(vec2A,div(i))
Rhino.AddPoint vec22
Dim check : check = Rhino.IsVectorPerpendicularTo(vec,vec2A)
'Rhino.Print check
Dim vec3 : vec3 = Rhino.VectorCrossProduct(vec,vec2A)
Dim newvec : newvec = Rhino.PointAdd(div(i),vec3)
'Call Rhino.VectorScale(newvec,3)
Rhino.AddPoint(newvec)
'Call Rhino.AddPoint(vec3)
'Rhino.VectorRotate(vec2)
Dim rotVec : rotVec = Rhino.VectorCreate(div(i),newvec)
Dim newLine2 : newLine2 = Rhino.AddLine(vec22,div(i))
Rhino.objectLayer newLine2,strLayer
Dim newLine : newLine = Rhino.RotateObject(newLine2,div(i),10*z,vec,True)
Rhino.objectLayer newLine,strLayer
'Dim scaled : scaled = Rhino.ScaleObjects(newLine2,div(i),array(0.75,0.75,0.75),True)
ReDim Preserve ptTrans(i)
ptTrans(i) = Rhino.CurveStartPoint(newLine)
End If
End If
End If
Next
Dim pline : pline = Rhino.AddPolyline(ptTrans)
Call Rhino.ObjectLayer(pline,strLayer2)
Erase ptTrans
Next
'Dim pline : pline = Rhino.AddPolyline(ptTrans)
'Call Rhino.LayerVisible(strLayer,False)
Dim crvTest : crvTest = Rhino.ObjectsByLayer("Plines")
Dim arrStart : arrStart = Rhino.CurveStartPoint(crvTest(0))
Dim arrStart2 : arrStart2 = Rhino.CurveStartPoint(crvTest(1))
Dim newDist : newDist = Rhino.Distance(arrStart,arrStart2)
Dim dblRad : dblRad = newDist *.4
Dim k
For k = 0 To Ubound(crvTest)
Call AddPipe(crvTest(k),dblRad,k)
Next
Rhino.EnableRedraw True
End Sub
Function AddPipe(crv,dblRad,k)
Dim strPipe
Call Rhino.SelectObject (crv)
Call Rhino.Command ("Pipe "&dblRad&" "&dblRad&" enter")
strPipe = Rhino.LastObject
Call Rhino.ObjectColor (strPipe, rgb(0,k,0))
Call Rhino.Command ("Selnone ")
End Function
