Mostrando entradas con la etiqueta Script. Mostrar todas las entradas
Mostrando entradas con la etiqueta Script. Mostrar todas las entradas

trabajando en el Node_2

Estos son los primeros resultados del script que contruye el node_2, es algo complejo
calcular planos perpendiculares a diferentes lineas que luego se intersecten entre si, para formar un poliedro.

these are the scripts' firsts results that build the node_2, it's too complex to calculate perpendicular planes to differents lines... we're exploring in it!!!...




300 iteraciones / iterations (30 minutes running)



detalles / details

Prototipo Nodo (resolviendo el Nodo)

El primer intento de resolver el nodo fue haciendo la substraccion de cada una de las intersecciones que tuviesen los tubos. Luego desplegamos los moldes e imprimimos las matrices que nos servirian de guia para realizar los cortes sobre los tubos simulando una maquina de c.n.c. Una vez hecho los cortes realizamos el montaje.
Intento 1:
Intento 2:Tabla de comparaciones entre ambos nodos.

Superficies Topograficas

El script construye superficies que se asemejan (si se hace el esfuerzo) a la topografia de la tierra, o al pliegue de las sabanas.
Fue desarrollado para el poster del II Workshop Internacional de Oporto en la Esap, pero me aconsejaron de no hacer algo tan aleatorio.

Optimización de Material Reciclado

Es comun usar la programacion como un "medio" para generar formas, analizar superficices complejas, etc. Este experimento (trabajo en progreso) comienza con el reciclaje de los tubos de carton de grandes impresoras (ploter). Estos tubos tienen ciertas propiedades geometricas que han sido consideradas para su reutilización, su longitud es de 914mm. y su diametro es de 54mm. Estas condicionantes son utilizadas en un script para construir estructuras complejas dentro de un cubo imaginario de X,Y,Z dimensiones.

El script genera puntos aleatorios dentro de un cubo virtual, luego mide la distancia entre cada uno de los puntos entre si, y si la distancia es menor o igual a la longitud del tubo reciclado contruye un tubo de las dimensiones especificadas anteriormente.

El material en este caso es un condicionante y el script es utilizado para optimizar el material reciclado.

La generación de datos en 3D es altamente precisa, esto permite extraer datos del diseño, para la producción, por ejemplo asistida por computador. Una multiplicidad de información puede ser extraída, ejes de los tubos (para un analisis estructural por ejemplo), cantidad de material utilizado y despreciado, areas, volumen de envolvente, longitudes de corte, información de los puntos de encuentro que pueden ser exportados a plantillas excel, etc.

Dentro de los resultados del script además se incluye, posición de los puntos en cordenadas cartesianas y las longitudes de los tubos a utilizar.

El trabajo que queda por resolver: controlar los puntos, -seria genial- poder orientarlos para definir un tipo de envolvente, por ejemplo.

faltan los encuentros entre los tubos.

II INTERNATIONAL WORKSHOP

Digital Design Processes
Processos digitais de projecto
Escola Superior Artística do Porto, Portugal
24 Setembro a 5 Outubro, 2007

Este es el Tercer Workshop en el cual participo y el segundo Internacional, junto al arquitecto Gonçalo Castro Henriques de Portugal.

Este año el trabajo estará dividido en dos fases: la primera dedicada a la fabricación por tecnología CAD / CAM a cargo de Marta Malé-Alemany y José Pedro Sousa del grupo ReD y nosotros que exploraremos la programación por medio de RVB. Carlos de la Barrera y Gonçalo Castro Henriques del grupo X-Ref.






Para el Workshop Hemos preparado un breve tutorial, con simples ejercicios para poder practicar y entender el lenguaje RhinoScript.

Estos son los ejercicios del Tutorial


Option Explicit
'ejercicio 1, declaracion de variables

Call main()
Sub main()

Dim mensaje

mensaje = "Hello World(s)"

Rhino.messageBox mensaje

End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''

Option Explicit
'ejercicio 2, condicionales

Call condicional()
Sub condicional()

Dim var1, var2, Result
Dim numberX

numberX = 6
var1 = 9
var2 = 3

Result = (var1+var2)/2

If result = numberX Then

Rhino.print "yes igual"
Else

Rhino.print "no igual"
End If

Rhino.messagebox "siempre sucede"

End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''

Option Explicit
'ejercicio 3, looping

Call looping()
Sub looping()

Dim i

For i = 0 To 1000

Rhino.Print "number count= " & i
Next

End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''

Option Explicit
'ejercicio 4, ejemplo de arrays

Call arrthings()
Sub arrthings()

Dim example(9), i

example(0) = 22
example(1) = 31
example(2) = 43
example(3) = 36
example(4) = 76
example(5) = 32
example(6) = 12
example(7) = 43
example(8) = 66

For i = 0 To 8

Rhino.print example(i)
Next

Rhino.messagebox _
"la posición 4 en la matriz example es " & example(4)

End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''

Option Explicit
'ejercicio 5, ejemplo de funcion

Call subfunciones()
Sub subafunciones()

ReDim point(2), point2(2)

point(0) = 0
point(1) = 0
point(2) = 0

point2(0) = 5
point2(1) = 5
point2(2) = 0

Rhino.AddPoints Array(point,point2)

Dim linea: linea = mifuncionLinea(point,point2)

End Sub

Function mifuncionLinea(point,point2)
Rhino.Addline point, point2

End Function

Superficie Reactiva 2




Este script identifica una superfice cualquiera,donde imprime sobre ella una matriz de puntos con los que construye por cada 4 puntos una segunda superfice, una curva cerrada y una polilinea.

Desde el centro de la segunda Superfice se calcula una normal, que será el camino por el cual la curva cerrada sera copiada.

Luego de que la Curva se encuentre en el extremo de la "Normal" está es escalada por un factor y a continuación se realiza una superficie de transición entre la curva cerrada escalada y la polilinea.

Script:


Option Explicit
'carlos de la b. diciembre2006

Call FaceteadoSuperficie()
Sub FaceteadoSuperficie()

'declaracion de variables
Dim strSurface
Dim arrDomainU, arrDomainV
Dim arrParamU, arrParamV, arrPoint
Dim i, j
Dim secu, secv

'divisiones de superficie
secu = 16 'numero de columnas
secv = 16 'numero de puntos por columna

'declaracion de matrices
ReDim colec2d(secu,secv)

'input
strSurface = Rhino.GetObject("Seleccione superficie")
If IsNull(strSurface) Then Exit Sub

arrDomainU = Rhino.SurfaceDomain(strSurface, 0)
arrDomainV = Rhino.SurfaceDomain(strSurface, 1)

'loop
For i = 0 To secu
For j = 0 To secv

'divisiones
arrParamU = arrDomainU(0) + i * (arrDomainU(1) - arrDomainU(0)) / secu
arrParamV = arrDomainV(0) + j * (arrDomainV(1) - arrDomainV(0)) / secv

arrPoint = Rhino.EvaluateSurface(strSurface, Array(arrParamU, arrParamV))
Rhino.AddPoint arrPoint

colec2d(i,j) = arrPoint

Next
Next

'matrix
Dim esquina1
Dim esquina2
Dim esquina3
Dim esquina4
Dim Curva, QuadSurface, Edge
Dim newarrPoint, Normal, LineNormal, path

'valores de la coleccion
esquina1 = colec2d(1,1)
esquina2 = colec2d(1,2)
esquina3 = colec2d(2,2)
esquina4 = colec2d(2,1)

'loop matrix
For i = 0 To (secu - 1)
For j = 0 To (secv - 1)

esquina1 = colec2d(i,j)
esquina2 = colec2d(i + 1,j)
esquina3 = colec2d(i + 1,j + 1)
esquina4 = colec2d(i,j + 1)

'llamada de funciones
Dim quad: quad = mifuncionplacas(esquina1,esquina2,esquina3,esquina4, Curva, QuadSurface, Edge)
Dim GetNormal: GetNormal = mifuncionNormal(newarrPoint, Normal, LineNormal, path, QuadSurface)
Dim Chupon: Chupon = mifuncionVentosa(Curva, newarrPoint, path, Edge)
Dim Escondida: Escondida = mifuncionHide(strSurface, QuadSurface)

Next
Next
End Sub

'funciones
Function mifuncionplacas(esquina1, esquina2, esquina3, esquina4, Curva, QuadSurface, Edge)
QuadSurface = Rhino.AddSrfPt(Array(esquina1, esquina2, esquina3, esquina4))
Curva = Rhino.AddCurve(Array(esquina1, esquina2, esquina3, esquina4, esquina1))
Edge = Rhino.addPolyline(Array(esquina1, esquina2, esquina3, esquina4, esquina1))
End Function


Function mifuncionNormal(newarrPoint, Normal, LineNormal, path, QuadSurface)
Dim newDomainU, newDomainV
Dim newarrParameterU, newarrParameterV

newDomainU = Rhino.SurfaceDomain(QuadSurface,0)
newDomainV = Rhino.SurfaceDomain(QuadSurface,1)

newarrParameterU = (newDomainU(1) - newDomainU(0))/2
newarrParameterV = (newDomainV(1) - newDomainV(0))/2

newarrPoint = Rhino.EvaluateSurface(QuadSurface, Array(newarrParameterU, newarrParameterV))
Rhino.AddPoint newarrPoint

Normal = Rhino.SurfaceNormal(QuadSurface, Array(newarrParameterU, newarrParameterV))
LineNormal = Rhino.addLine (newarrPoint, Rhino.VectorAdd(newarrPoint, Normal))
path = Rhino.ExtendCurveLength (LineNormal, 0, 1, 18)
End Function


Function mifuncionVentosa(Curva, newarrPoint, path, Edge)
Dim arrEnd
Dim pathDomain, pathParameter

pathDomain = Rhino.CurveDomain(path)
pathParameter = pathDomain(1)
arrEnd = Rhino.EvaluateCurve(path, pathParameter)
Rhino.AddPoint arrEnd

Rhino.MoveObject Curva, newarrPoint, arrEnd
Rhino.ScaleObject Curva, arrEnd, Array(.8, .8, .8)
Rhino.AddLoftSrf Array(Curva, Edge),,,3
End Function


Function mifuncionHide(strSurface, QuadSurface)
Rhino.HideObject (strSurface)
Rhino.HideObjects Array(QuadSurface)
End Function




Superficie Reactiva


Este script reconoce la orientacion de un recorrido dado, como podria ser el recorrido del sol:
puntoCardinal1 = Rhino.GetPoint("selecciona el primer punto cardinal")
If IsNull (puntoCardinal1) Then Exit Sub
PuntoCardinal2 = Rhino.GetPoint("selecciona el segundo punto cardinal")
If IsNull (puntoCardinal2) Then Exit Sub

luego selecciona una superfice dada y la subdivide en N*N regiones.
strSurface = Rhino.GetObject("Seleccione superficie")
If IsNull (strSurface) Then Exit Sub
arrParamU = arrDomainU(0) + i * (arrDomainU(1) - arrDomainU(0)) / secu
arrParamV = arrDomainV(0) + j * (arrDomainV(1) - arrDomainV(0)) / secv

Luego calcula el punto medio de cada region y a partir de ese punto genera la "normal" para esa region en particular.
CenterPoint = Rhino.EvaluateSurface(placa, Array(uparamplaca,vparamplaca))
Rhino.AddPoint CenterPoint
Normal = Rhino.SurfaceNormal(placa, Array(uparamplaca, vparamplaca))
LineNormal = Rhino.AddLine(CenterPoint, Rhino.VectorAdd(CenterPoint, Normal))

Cada normal es comparada con la orientacion original y devuelve un angulo.
arrAngle = Rhino.Angle2(arrLine1, arrLine2)

si el angulo de incidencia es perpendicular al plano de la region el resultado es color rojo.
If arrAngle(0) >= 90 Then
Rhino.ObjectColor placa, RGB(250,0,0)

si el angulo de incidencia esta entre los 45 y 90 grads. el color es magenta.
ElseIf arrAngle(0) > 45 And arrAngle(0) <= 89 Then
Rhino.ObjectColor placa, RGB(250,0,255)

y si el angulo está por debajo de los 45 grados, siendo la zona obscura o con sombra de la superficie el color el azul.

Else
Rhino.ObjectColor placa, RGB(0,0,255)
End If
End Function

Funcion "N"



Este es un simple Script (rhino script) que identifica dos circulos y los divide en x puntos, donde cada punto sale una curva que intersecta un tercer punto llamado "N" ficticio en el espacio. Luego el script identifica cada curva y la transforma en una tuberia.

El punto "N" en el primer ejercicio es "N = Array((Sin(i*10)),(Cos(i*10)),(i*10))" en coordenadas x,y,Z la funcion N en este sentido es muy parecida a la ecuacion de una helice " x = cos@, y = sin@, z = tan@ ".

EN el segundo ejercicio " N = Array((Sin(i*(10*Rnd))),(Cos(i*(10*Rnd))),(i*10)) " Rnd es una funcion aleatoria.


Geometria Compleja Basada en Programacion (¡Random Power!)

Este experimento esta basado en la definicion de 4 matrices equidistantes -cada matriz esta configurada por 16 puntos- compuestas cada una por nueve modulos
y esta a su vez por 4 puntos.

Dentro de cada modulo se define una curva cerrada inscrita.
Cada curva es conectada de manera aleatoria con otra curva, que se ubica inmeditamente sobre la matriz de origen. Formando superficies de transicion entre cada uno de los modulos, produciendo un total de 9 transiciones.

Cada punto de estas superficies tiene la caracteristica de ser parametrico, permitiendo asi su manipulacion en cada coordenada desde el script.

Luego de varias Iteraciones se obtuvieron estos resultados.
Diferentes resultados con el mismo script, con la funcion RND activada.

vista en planta.



vista frontal.



Todas las imagenes Ruther Paullo
Texto Carlos de la Barrera - Ruther Paullo
Script Carlos de la Barrera - Ruther Paullo

Comportamiento Emergente



Experimento basado en la deformación y agrupación de material desechable. Realizado por Carlos de la Barrera y Ruther Paullo. Barcelona, Enero 2007


Un sistema es un conjunto de procesos o elementos que se interrelacionan con un medio común para formar un total que responda de manera más efectiva a un requerimiento exigido, de como lo haría alguna unidad que compone el Sistema.
La organización interna del sistema es un proceso que aumenta de complejidad sin ser guiado por ningún agente externo, si no que por las propias reglas que caracterizan el sistema, Está auto-organización arroja un resultado de propiedad Emergente.

En el caso de la maqueta física (pase de diapositivas), al tubo original se le han aplicado dos deformaciones en cada uno de sus extremos, así como también dos cortes para poder ensamblarlo con otras unidades iguales. La manipulación del tubo ha configurado una regla de organización para agrupar las distintas unidades, permitiendo distintas configuraciones, todas emergiendo bajo las reglas establecidas por el propio sistema.

En el caso de la Programación (R. V. B.) (Ver imágenes fijas), ocurre de manera similar, en este caso el elemento “creado” es una serie de procesos que organizados bajo ciertas reglas, (declaración de variables, loops, arrays, sintaxis del lenguaje, etc.) se organizan de manera que cada proceso se interrelacione, así como lo hacen los tubos, y formen un total mucho mayor que la suma de sus partes.
El caso digital es más complejo que el análogo (tubos), ya que su concepción ha requerido la definición de una mayor cantidad de variables.

Por ejemplo en el caso análogo las variables son dos (cada corte en los extremos del tubo) que determinan ciertas condiciones de agrupación y resultado, haciendo un sistema no tan flexible con un limite de configuraciones totales.
En el caso digital, sólo para definir el tamaño de abertura de las ventanas se han declarado más de veinte variables, haciendo el sistema tan flexible como se pueda imaginar, otra característica es que la manipulación del código es capaz de volver a replantear todo el sistema de nuevo, ya que al haber definido tantas variables su magnitud pueden ser cambiada generando otras nuevas configuraciones.
Es claro que el Sistema Digital es más complejo que el análogo en todos sus aspectos (desarrollo, planteamiento, fabricación!) Sin embargo ambos procesos se basan en una misma filosofía.

las superficies que aparecen han sido programadas en rvb. por carlos de la barrera p.
fotos maquetas ruther paullo, carlos de la barrera