Parte 3, ¿parte 3? Sí, porque ya hemos escrito dos artículos de nodos esenciales de Dynamo antes de este que os recomiendo que leáis porque hará que entendáis éste con mayor facilidad. Éstos son:
-
Nodos esenciales de Dynamo. Parte 1.
-
Nodos esenciales de Dynamo. Parte 2. Nodos de operaciones con Listas
BTW. No voy a explicar en qué consiste Dynamo porque para eso ya tenéis la guía de “Fundamentos de Dynamo de Especialista3D”. Si aún no la has leído esta información te sonará a chino.
Es solo para suscriptores, puedes conseguirla aquí mismo.
Una vez leída la guía y los dos artículos anteriores entenderás mucho mejor el artículo de hoy, que trata de nodos de Dynamo relacionados con geometría. Luego no digas que no te he avisado si decides no leer los artículos previos y la guía y no entiendes nada y «hodor, hodor» , ¿eh?
Ok, pues vamos con los nodos de geometría. Éstos son esenciales para poder realizar operaciones con los objetos tridimensionales del modelo. Hay muchísimos nodos que tienen que ver con la geometría de los objetos pero aquí explico los que más utilizo en el día a día.
Element.Geometry
Este nodo es el primero en el que debemos pensar a efectos de geometría. Es el que permite «leer» la geometría de cualquier elemento de Revit en términos de Dynamo. Me explico, cuando seleccionamos un elemento desde Dynamo estamos cogiendo todo el elemento como algo global (su geometría, sus parámetros asociados, su id…) entonces no vemos inmediatamente el elemento ni su geometría. Usar este nodo nos permite tomar toda la geometría de cualquier elemento y previsualizarla.
Geometry.Explode
La geometría de un elemento suele venir en conceptos muy simples como, por ejemplo, en el ejemplo de abajo vemos que al obtener la geometría de un elemento tenemos la descripción «Solid», es decir, un volumen geométrico compacto. Es posible que queramos obtener subgeometrías dentro de estos sólidos, tal y como las superficies que componen el volumen. Para ello utilizamos «Geometry.Explode». En el ejemplo de abajo se puede ver cómo de un volumen se obtienen 8 superficies que lo componen. De esta forma podremos operar individualmente con cada una de las superficies.
Geometry.DoesIntersect
Utilizamos este nodo para saber si dos geometrías distintas intersecan o no. Y, ojo, estoy diciendo geometrías y no objetos por algo: antes de llevar los objetos a este nodo para saber si intersecan o no debemos usar Element.GetGeometry para obtener su geometría.
Mucho cuidado porque el resultado de este nodo no es la intersección sino una simple respuesta de «Sí o no» a la pregunta «¿Intersecan estos dos objetos?». Se puede ver un ejemplo abajo en el que el resultado de este nodo es «True», es decir, que sí intersecan entre sí.
Geometry.Intersect
Mientras que en el anterior nodo solo obteníamos una respuesta a la pregunta de si intersecaban o no los obtetos, «Geometry.Intersect» nos permite obtener el resultado de la unión entre la geometría de dos objetos. Por ejemplo, en la imagen de abajo podemos ver como el resultado de la intersección de las geometrías de los dos muros son los arcos y dos líneas.
BoundingBox.ByGeometry
A veces las geometrías de objetos complejos pueden resultar demasiado pesadas de cargar para la memoria de procesado de los ordenadores. En este caso podemos querer evitar trabajar operando directamente con las geometrías. ¿Cómo debemos operar entonces? Una solución que suele utilizarse es la de envolver las geometrías en los cubos que las contienen. Estos cubos simples que contienen geometrías se llaman «Bounding Box», es decir, «Caja Delimitadora». Éstas bounding boxes son especialmente útiles a la hora de trabajar con geometrías semejantes a rectángulos como suele ser, en la mayoría de los proyectos, las formas de las habitaciones.
Estos son los nodos que más se utilizan a la hora de trabajar con geometrías que vienen de los modelos directamente. Ahora bien, en ocasiones podemos querer manipular estas geometrías para poder operar con ellas de manera más cómoda. A continuación os dejo los nodos esenciales para conseguirlo:
Curve.Extrude
Este nodo y todas sus variables se utiliza para extruir las curvas, convirtiéndolas en superficies. Este nodo es especialmente útil a la hora de trabajar para calcular intersecciones entre geometrías. Podemos extruir las curvas y calcular, por ejemplo, su intersección con un plano de cubierta y generar las vigas a partir de esta intersección.
Curve.Extend (End o start)
Por el mismo motivo que se utiliza mucho Curve.Extrude se utiliza también muchísimo este nodo que sirve para alargar las curvas. Podemos extender el principio o el final de una curva, con Curve.ExtendStart o Curve.ExtendEnd respectivamente. ¿De qué depende que cojamos el principio o el final?, ¿Cómo sé yo en una curva cuál es su principio y cuál su final? Básicamente depende de cómo se modelara en su día el objeto de Revit. El programa entiende que el inicio de cualquier objeto basado en una curva, por ejemplo un muro, tiene su inicio en el primer click que hacemos para colocarlo y su final en el último, así de sencillo o complicado. Yes, life is a bitch. Es precisamente por este motivo por lo que algunas empresas que trabajan en Revit dan criterios a sus operadores del tipo «gererar siempre los muros en el sentido de las agujas del reloj». Estos consejos, que en un principio podrían parecer absurdos ya que a nivel de modelo el resultado será el mismo, tienen todo el sentido del mundo si pretendemos usar las geometrías de los elementos para programar. Just saying.
La verdad es que hay como 18.950 operaciones con nodos de Dynamo que tienen que ver con geometría, aquí he resumido sólo los que más utilizo, sin repetirme con lo que ya os he contado en la guía de fundamentos de Dynamo y los artículos anteriores ¿Debería hacer una segunda parte de nodos de geometría? Si veo que os gusta este post tal vez lo escriba.
¡Un saludo, especialistas!
Nodos de Dynamo de geometría por Especialista3D está licenciado bajo una Licencia Creative Commons Atribución-NoComercial 4.0 Internacional.