rafarq

[Arquitectura && vida && código]

Categoría: diseño paramétrico

[GC] Seleccionar todos los elementos que dependen de un nodo

Esta semana me he encontrado con un problema común que voy a simplificar para explicarlo aquí de manera más sencilla. Suponemos que tenemos una línea sobre la que queremos poner puntos, esos puntos serán el centro de una serie de círculos. Algo así:

circ1

Este es el código correspondiente para generar el círculo:

node User.Objects.circle01 Bentley.GC.Features.Circle
{
    Technique                 = 'ByCenterRadius';
    CenterPoint               = {point02, point03, point04, point05};
    Radius                    = 3;
    Support                   = baseCS.XYPlane;
    GraphLocation             = <auto> {1080.0, 40.0};
}

El problema es que si los puntos los dibujamos manualmente luego debemos seleccionarlos uno a uno para hacer los círculos de manera replicable. Esto esta bien cuando hay pocos puntos, o cuando se saben cuantos se van a hacer desde el principio.

Si quiero añadir más puntos ahora debería añadirlos manualmente, y luego editar la lista anterior para que el nodo círculo lo tenga en cuenta. De nuevo, esto está bien si tengo que agregar pocos puntos.

Hay otra manera más “inteligente” y rápida de hacerlo: Seleccionar los puntos cuya dependencia cuelga de la línea o lo que es lo mismo seleccionar los sucesores de la recta.

Seleccionar los sucesores de una recta

Esto se hace accediendo a la propiedad ‘GetSuccessors’ que tienen todos los nodos de la siguiente manera:

line01.GetSuccessors(false)

El resultado será este:

{circle01, point05, point04, point03, point02}

El problema es que el círculo que estamos creando es también un sucesor de nuestra línea, por lo que debemos deshacernos de el y sacarlo de la lista para que el nodo círculo pueda funcionar, ya que busca puntos sobre los que hacer las circunferencias. La funcion ‘RemoveAt’ que es la que usaremos para borrar el elemento de la lista necesita saber el índice del elemento que queremos quitar, por tanto usaremos la funcion ‘IndexOf’.

Por pasos, con la funcion ‘indexOf’ obtenemos el índice del círculo en la lista:

IndexOf(lista, elemento)
IndexOf(line01.GetSuccessors(false),circle01)

En este caso el índice que arroja es ‘0’.

Ahora usamos la funcion ‘RemoveAt’ para eliminar el elemento de la lista, para que sea dinámico, en lugar de usar el 0, se usará la funcion ‘IndexOf’ completa:

RemoveAt(lista, índice)
RemoveAt(line01.GetSuccessors(false),IndexOf(line01.GetSuccessors(false),circle01))

El resultado es, por tanto:

{point05, point04, point03, point02}

El nodo quedará definido por:

node User.Objects.circle01 Bentley.GC.Features.Circle
{
    Technique                 = 'ByCenterRadius';
    CenterPoint               = RemoveAt(line01.GetSuccessors(false),IndexOf(line01.GetSuccessors(false),circle01));
    Radius                    = 3;
    Support                   = baseCS.XYPlane;
    GraphLocation             = <auto> {1080.0, 40.0};
}

Descargar el ejemplo en GCT

Proyecto fin de grado. Introducción.

Model

Esta semana he defendido, por fin, mi proyecto fin de grado de Ingeniería de edificación en la ETSIE de Granada. El título del proyecto es: El diseño paramétrico aplicado a las soluciones y detalles constructivos.

Los que me conocéis podéis imaginaros lo que he disfrutado con este proyecto.

En estos momentos las herramientas mas importantes del mercado son las siguientes:

  • Bentley Systems Incorporated:
    • Plataforma: Microstation
    • Programa: GenerativeComponentsTM
    • Scripting: C#
  • Robert McNeel and Associates:
    • Plataforma: Rhinoceros 3D
    • Programa: GrassHopper
    • Scripting: RhinoScript, Python
  • Autodesk:
    • Plataforma: Revit, Vasari
    • Programa: Dynamo
    • Scripting: Python
  • Gehry Technologies:
    • Plataforma: Digital Project (CATIA)
    • Programa: Digital Project
    • Scripting: Visual Basic for Applications (VBA)

Mi trayectoria profesional me ha llevado a conocer profundamente el manejo de GC (GenerativeComponents™), y aunque últimamente me atrae mucho Dynamo, para este trabajo me decidí a usar GC por su potencia y versatilidad.

El objetivo de mi proyecto ha sido demostrar que el diseño paramétrico puede usarse para desarrollar detalles constructivos que sean fácilmente adaptables y que lleven programada la normativa que le es de aplicación para que todas las soluciones sean válidas.

En este caso, mi tutor, el prof. Ildefonso Naverrete y yo, decidimos que el detalle más significativo era el encuentro de un forjado, viga y pilar.

Pilar_forjado2014925-terminado reducido

 

Para abordar este detalle se dividió en componentes para ir reutilizando el código y optimizar el tiempo usado para el desarrollo del modelo.

Presentacion PFG.010

El componente mínimo del dibujo es la barra corrugada que se usó para crear los componentes de la viga/zuncho, el mallazo y la vigueta. Estos cuatro componentes junto con la bovedilla se unieron para formar el detalle constructivo final.

Las variables que se dejaron abiertas en el detalle para que fuera sencillo adaptarlo a las situaciones concretas de cada proyecto son las siguientes:

Presentacion PFG.008En futuras entradas os explicaré desde cómo hice la portada usando GC, pasando por los componentes y el detalle final parándome a explicar los retos más importantes que hubo que superar para llegar al modelo final.

© 2017 rafarq

Tema por Anders NorenArriba ↑