'///////////////////////////////////////////////////////////////////////////////////////////// '// Soluciones de Diseño Computacional :: Lima :: Peru :: Enero 2008 04.02.2008 '// Rhinoscripting Workshop. http://www.espaciosdigitales.org/lima/1/ '// Script developed by Martín Ramirez '// Instructores: Kenfield Griffith, Daniel Cardoso, Pablo C. Herrera '// Coordinacion General: Pablo C. Herrera pablo@espaciosdigitales.org '///////////////////////////////////////////////////////////////////////////////////////////// Call Main Sub Main() Dim modX, modY, modZ Dim matrixX, matrixY, matrixZ modX = Rhino.GetInteger("Ingrese el tamano del modulo en X") modY = Rhino.GetInteger("Ingrese el tamano del modulo en y") modZ = Rhino.GetInteger("Ingrese el tamano del modulo en z") matrixX = Rhino.GetInteger("Numero de elementos en X: ") matrixY = Rhino.GetInteger("Numero de elementos en Y: ") matrixZ = Rhino.GetInteger("Numero de elementos en Z: ") Call GenerarMatriz(modX,modY,modZ,matrixX,matrixY,matrixZ) End Sub '==================================================================== Function GenerarMatriz(moduloX, moduloY, moduloZ, NoModulosX, NoModulosY, NoModulosZ) Dim i, j, k Dim counter ReDim cajas(NoModulosX,NoModulosY,NoModulosZ) counter = 0 For i = 0 To NoModulosX Rhino.Print "X: " & i For j = 0 To NoModulosY Rhino.Print "Y: " & j For k = 0 To NoModulosZ Rhino.Print "Z: " & k Rhino.Print "------------" ReDim arrCorners(7) arrCorners(0) = Array(i*moduloX, j*moduloY, k*moduloZ) arrCorners(1) = Array((i*moduloX)+moduloX, j*moduloY, k*moduloZ) arrCorners(2) = Array((i*moduloX)+moduloX, (j*moduloY)+moduloY, k*moduloZ) arrCorners(3) = Array(i*moduloX, (j*moduloY)+moduloY, k*moduloZ) arrCorners(4) = Array(i*moduloX, j*moduloY, k*moduloZ+moduloZ) arrCorners(5) = Array((i*moduloX)+moduloX, j*moduloY, k*moduloZ+moduloZ) arrCorners(6) = Array((i*moduloX)+moduloX, (j*moduloY)+moduloY, k*moduloZ+moduloZ) arrCorners(7) = Array(i*moduloX, (j*moduloY)+moduloY, k*moduloZ+moduloZ) counter = counter+1 cajas(i,j,k) = Rhino.AddBox (arrCorners) 'Rhino.Print "Creando Caja: " & counter Next Next Next Call ErosionarMatriz(cajas, noModulosX, noModulosY, noModulosZ) Call transformarMatriz(cajas, noModulosX, noModulosY, noModulosZ) Call generarPlacas(noModulosX, noModulosY, noModulosZ, moduloX, moduloY, moduloZ ) End Function Function generarPlacas(noModulosX, noModulosY, noModulosZ, moduloX, moduloY, moduloZ ) Dim anchoDePlaca Dim largoDePlaca Dim altoDePlaca Dim superficie ReDim pt1(2) ReDim pt2(2) ReDim pt3(2) ReDim pt4(2) anchoDePlaca = noModulosX * moduloX largoDePlaca = noModulosY * moduloY altoDePlaca = 0.1 For i = 0 To noModulosZ + 1 pt1(0) = 0 pt1(1) = 0 pt1(2) = moduloZ * i pt2(0) = (moduloX * noModulosX) + moduloX pt2(1) = 0 pt2(2) = moduloZ * i pt3(0) = (moduloX * noModulosX) + moduloX pt3(1) = (moduloY * noModulosY) + moduloY pt3(2) = moduloZ * i pt4(0) = 0 pt4(1) = (moduloY * noModulosY) + moduloY pt4(2) = moduloZ * i Rhino.AddSrfPt(Array(pt1,pt2,pt3,pt4)) Next End Function Function transformarMatriz(cajas, noModulosX, noModulosY, noModulosZ) Dim randomType Dim flag For i =0 To NoModulosX For j = 0 To NoModulosY For k = 0 To NoModulosZ flag = Int(Rnd()*10) If flag > 5 Then randomType = Int(Rnd()*3) If randomType = 0 Then 'Modulo1 Call Modulo1(cajas(i,j,k)) End If If randomType = 1 Then 'Modulo2 Call Modulo2(cajas(i,j,k)) End If If randomType = 2 Then 'Modulo3 Call Modulo3(cajas(i,j,k)) End If If randomType = 3 Then 'Modulo4 Call Modulo4(cajas(i,j,k)) End If Else Rhino.hideObject(cajas(i,j,k)) End If Next Next Next End Function 'Esta funcion sustrae elementos de la matriz Function ErosionarMatriz(matriz, noModulosX, noModulosY, noModulosZ) Dim flag For i = 0 To noModulosX For j = 0 To noModulosY For k = 0 To noModulosZ flag = Int(Rnd()*10) Rhino.Print Flag If flag > 5 Then Rhino.hideObject(matriz(i,j,k)) End If Next Next Next End Function Function Modulo1(objeto) 'modulo tenso 'Dim objeto Dim boundingBoxPts Dim superficie boundingBoxPts = Rhino.BoundingBox(objeto) ReDim lineas(3) lineas(0)=Rhino.AddLine (boundingBoxPts(0),boundingBoxPts(5)) lineas(1)=Rhino.AddLine (boundingBoxPts(5),boundingBoxPts(2)) lineas(2)=Rhino.AddLine (boundingBoxPts(2),boundingBoxPts(7)) lineas(3)=Rhino.AddLine (boundingBoxPts(7),boundingBoxPts(0)) Rhino.HideObject objeto superficie = Rhino.AddEdgeSrf(lineas) Modulo1 = superficie End Function '==================================================================== Function Modulo2(objeto) 'modulo tenso 'Dim objeto Dim boundingBoxPts Dim superficie boundingBoxPts = Rhino.BoundingBox(objeto) ReDim lineas(3) lineas(0)=Rhino.AddLine (boundingBoxPts(1),boundingBoxPts(6)) lineas(1)=Rhino.AddLine (boundingBoxPts(6),boundingBoxPts(4)) lineas(2)=Rhino.AddLine (boundingBoxPts(4),boundingBoxPts(3)) lineas(3)=Rhino.AddLine (boundingBoxPts(3),boundingBoxPts(1)) Rhino.HideObject objeto Rhino.AddEdgeSrf lineas superficie = Rhino.AddEdgeSrf(lineas) Modulo2 = superficie End Function '==================================================================== Function Modulo3(objeto) 'modulo tenso 'Dim objeto Dim boundingBoxPts Dim superficie boundingBoxPts = Rhino.BoundingBox(objeto) ReDim lineas(3) lineas(0)=Rhino.AddLine (boundingBoxPts(1),boundingBoxPts(6)) lineas(1)=Rhino.AddLine (boundingBoxPts(6),boundingBoxPts(7)) lineas(2)=Rhino.AddLine (boundingBoxPts(7),boundingBoxPts(4)) lineas(3)=Rhino.AddLine (boundingBoxPts(4),boundingBoxPts(1)) Rhino.HideObject objeto Rhino.AddEdgeSrf lineas superficie = Rhino.AddEdgeSrf(lineas) Modulo3 = superficie End Function '==================================================================== Function Modulo4(objeto) 'modulo tenso 'Dim objeto Dim boundingBoxPts Dim superficie boundingBoxPts = Rhino.BoundingBox(objeto) ReDim lineas(3) lineas(0)=Rhino.AddLine (boundingBoxPts(1),boundingBoxPts(6)) lineas(1)=Rhino.AddLine (boundingBoxPts(6),boundingBoxPts(3)) lineas(2)=Rhino.AddLine (boundingBoxPts(3),boundingBoxPts(4)) lineas(3)=Rhino.AddLine (boundingBoxPts(4),boundingBoxPts(1)) Rhino.HideObject objeto Rhino.AddEdgeSrf lineas superficie = Rhino.AddEdgeSrf(lineas) Modulo4 = superficie End Function '====================================================================