Documente Academic
Documente Profesional
Documente Cultură
Pgina l 1
______________________________________________________________________________________________
S, tal y como dijo Pink Floyd en una conocida cancin, esto es otra brecha en el muro. Dos semanas
despus vuelvo con un tutorial sobre Dynamo, esta vez ms centrado en una tarea real. El objetivo de
este tutorial es crear algo til para los ingenieros estructurales, ingenieros MEP, arquitectos y por
supuesto, ingenieros de la construccin.
Dibujos SEM
Como empresa de la construccin en nuestros mbitos de trabajo existen dibujos que muestran todas las
aperturas en todos los suelos y paredes disponibles para labores de mantenimiento. Estos dibujos son
realmente difciles de entender, sobre todo si no existe espacio suficiente para todas las revisiones o si es
necesario realizar oberturas adicionales. Estas decisiones impactarn, no solo en los contratistas MEP sino
tambin los equipos de arquitectos y estructuras.
La idea bsica es pues o tener un modelo arquitectnico o estructural enlazado con todos los sistemas o
un enlace con todos los modelos, incluido el estructural, dentro de un modelo ms centralizado (Modelo
de servicios combinado).
En este artculo intentaremos explicar la manera de hacerlo aunque, claro est, existen formas ms
eficaces y rpidas de hacerlo. Vamos all.
Familias de aperturas
No voy a centrarme mucho en la creacin de familias de aperturas (puedes utilizar fcilmente las mas en
vuestros proyectos). La idea central es crear dos geometras diferentes: rectangular y redonda.
Es la plantilla ms simple y el punto de inicio ms comn para las familias, en cualquier momento es
posible cambiar la categora de las familias para encontrar el correcto.
Ahora vamos con algunos parmetros compartidos de dimensiones, numeracin y elevacin. Por qu
parmetros compartidos? Porque as podemos utilizarlos en el programa.
Ahora podemos empezar con el procedimiento habitual para el modelado de las familias. A ttulo personal
siempre sigo las mismas reglas.
De esta manera siempre ests seguro de que las geometras siguen los planos segn los parmetros.
Bajo esta premisa podemos crear una simple protuberancia enlazada con los planos de referencia y
gestionados bajo tres parmetros diferentes: W, L, H. Estos parmetros sern importantes para adaptar
la dimensin de apertura a la dimensin del sistema que est siendo insertado en el muro o la geometra
del suelo. El parmetro de elevacin es muy til para poder leer la elevacin de la apertura dentro de un
programa. No s muy bien por qu pero en Revit no podemos ver la compensacin en una programacin,
as que copiaremos (en Dynamo, por supuesto) el valor de la compensacin directamente en el parmetro
de elevacin.
En la vista frontal la familia es creada con una distancia idntica desde el nivel de referencia porque con
Dynamo calcularemos el punto exacto de la interseccin. Pero nos encantan los detalles y en la seccin o
la vista de elevacin nos gustara ver los de apertura en 2D. Cmo lo hacemos? Muy fcil! Podemos
crear fcilmente un detalle anidado dentro de una familia con el mismo parmetro que el elemento 3D,
ubicarlo en la vista frontal y tambin en la vista de plano tambin en caso de que fuera necesario.
El primer paso est prcticamente acabado y con el mismo procedimiento tambin podemos crear una
redonda de apertura, esta vez en vez de en tres dimensiones ahora slo disponemos del dimetro, como
dimensin principal y el W para la profundidad.
Modelo principal
Lo que necesitamos saber es que es el modelo federado contiene todas las disciplinas enlazadas. En este
ejemplo en particular he preparado un modelo simple con muros en dos niveles diferentes para poder
comprobar si el flujo de trabajo funciona cuando un sistema va de un nivel a otro, cruzndose con dos o
ms muros diferentes.
Todos los sistemas estn en diferentes modelos enlazados y, como se puede comprobar en la imagen,
este sistema no funcionar nunca.
Para este proyecto vamos a utilizar Revit 2016, Dynamo 1.0.0 y el pack Dynamo4MEP. Este tutorial no
est pensado para principiantes ya que voy a centrarme en ndulos muy simples para poder explicar
mejor el flujo de trabajo y la llamada estrategia Phyton.
Despus de ubicar los nodos siempre intento renombrar el nodo con un nombre ms familiar
especialmente para los de entrada. A partir de aqu utilizo un cdigo de colores para agrupar los nodos
segn el estadio en el que se encuentra el flujo de trabajo:
- Gris entrada
- Verde principales operaciones del flujo de trabajo
Cesare Caoduro Email: cesare.caoduro@gmail.com
BIM Manager Mobile: +974 33183825
Pgina l 8
______________________________________________________________________________________________
Tambin es importante escribir una pequea descripcin en el ttulo del grupo para explicar las
operaciones realizadas en su interior. Me hago mayor y despus de varios das me olvido de las cosas as
que, es mejor escribirlo todo Verba volant, scripta manent.
Ahora podemos recoger todos los muros del proyecto y extraer geometras slidas y el nivel de limitacin
de la base (esto ser til para enlazar cada apertura a un nivel en particular y obtener la elevacin como
una compensacin relativa).
- Categoras + todos los elementos de las categoras para recoger todos los muros en el modelo.
- Elemento. La geometra extrae todo los slidos relacionado con elementos 3D y alisados para
borrar la sub-lista y crear una nica lista de elementos simples.
- Elemento. GetPatameterValueByName no necesita ninguna explicacin simplemente tenemos
que darle un nombre al parmetros que queremos extraer y la lista de elementos.
Si no puedes ver los elementos del fondo intenta hacer zoom en la vista de fondo. Primero haz clic en el
botn en la parte superior derecha para cambiar de la vista previa del fondo y entonces haz clic derecho
y Zoom to fit.
Ahora podemos seleccionar todos los nodos juntos y agruparlos, no te olvides de escribir algn
comentario en el ttulo de cada grupo.
Ahora llegamos al primer punto importante del flujo de trabajo, estamos listos para usar el primer nodo
personalizado del pack de Dynamo4MEP, este nodo es Linked File(s) Collector. El nombre est claro, la
salida del nodo es la lista de todos los modelos enlazados disponibles en este proyecto.
Vamos a echarle un breve vistazo al cdigo del nodo, clic derecho en el nodo y Edit Custom Node
Finalmente es posible acceder al cdigo interno del nodo que realiza la accin
- En la primera parte tenemos todas las descripciones y los resmenes importados, la mayora de
los cuales son comunes para todos los scripts Python (tengo un punto de partida comn parecido
a una plantilla en dnde escribir los ndulos).
- En el segundo bloque encontramos todas las entradas matriz, dependiendo del nmero de
entradas que cites la matriz IN ser ms o menos larga.
- El tercer bloque es el ncleo del nodo en donde ests realizando las acciones. En este nodo en
particular utilizo la variable Boole (la nica entrada del nodo) para empezar o parar las acciones
de dicho nodo. A partir de aqu, una API recoge todos los elementos de un cierto tipo (este nodo
est recopilando todos los elementos del tipo enlace) y con un circuito cerrado, creo una matriz
con el puntero del documento, el nombre y la ID del link.
- La variable OUT es un sistema variable que define la salida del nodo.
Cierra la ventana python para volver a la definicin del nodo editado y la ltima operacin en el nodo es
definir la salida disponible para el cliente. Es fcil de escribir un nombre personalizado pero comprueba
que puedes extraer de manera correcta el cdigo de salida del cdigo como lista de la matriz. El bloque
del cdigo es la mejor manera de realizar la operacin tal y como se muestra en la imagen.
Explorar y estudiar los nodos creados por otros es la mejor manera de aprender programacin, intenta
abrir un nodo, haz alguna pequea modificacin y experimenta.
Vale, no nos emocionemos todava hay mucho que hacer, como por ejemplo conectar el colector de nodos
al nodo run
Mi sugerencia es trabajar en el modo manual para evitar colisiones imprevistas (actualmente no hay
mucho de lo que preocuparse). Ahora intenta mover el nodo run a la true y activa la definicin.
S, los tres links estn disponibles ahora y listos para ser explorados por el prximo nodo personalizado
Element Collector from Linked File(s). Este nodo necesita dos entradas: la lista de los enlaces y la
categora que quieres recoger.
En este caso todos los conductos estn en los mismos modelos pero a veces pueden existir diferentes
enlaces procedentes de consultores diferentes, o simplemente divididos en diferentes modelos debido a
la dimensin y complejidad del proyecto.
Parece extrao pero me refiero tambin a nodos individuales, nunca sabes quin utilizar tus definiciones
y compartir es la leccin ms importante que aprenders de Dynamo.
Qu? Ah s, quieres echarle un ojo al elemento de recopilacin del nodo? Pero ya sabes cmo hacerlo!
A qu ests esperando?
Es muy parecido a las anteriores con una ligera diferencia en el uso de la funcin UnwrapElement para
las entradas. Consulta Dynamo Primer (http://dynamoprimer.com/) antes de iniciar tu viaje,
especialmente el captulo: http://dynamoprimer.com/09_Custom-Nodes/9_Custom-Nodes.html.
En el ltimo paso de esta parte utilizaremos un nodo liso para remover una sub-lista y otro nodo
personalizado del pack Element Curve, con el que extraemos la lnea central del canal y que ser til ms
adelante.
Por mucho que la nitidez se est complicando podemos ocultar algunos de los elementos de la vista
previa, simplemente clicando con el botn derecho del ratn y quitando la bandera. A veces es necesario
hacerlo de varios nodos, como en este caso en dnde tenemos que quitarlas tanto del Element.Geometry
como del Flatten.
Este grupo va a ser la base tambin para otras categoras como por ejemplo tubos y bandejas de cables.
El procedimiento es exactamente el mismo, puedes escoger entre disponer varios archivos Dynamo
separados para cada tipo de categora o, como por ejemplo en mi caso, tener un solo archivo Dynamo
comn para todas las categoras al mismo tiempo.
Ahora ya tenemos los muros, tenemos que chequear las intersecciones entre los canales pero cmo?
Por supuesto, con un nodo personalizado Por qu lo necesitamos? Muy sencillo, porque necesitamos
realizar una repeticin para cada muro y canal del proyecto y comprobar si hay interferencias.
He escogido crear dos tipos diferentes de nodos para esta operacin: uno recoge las interferencias y el
nivel al mismo tiempo, el segundo solo la interseccin. A veces, no necesitas el nivel de informacin solo
la interseccin. Nosotros utilizaremos ambos.
Uno de los aspectos ms crticos de este tipo de procedimiento es el entender la direccin de la apertura.
No es tan sencillo entender el vector normal o la direccin del canal y para ello utilizaremos un truco.
Utilizaremos la lnea central del canal (extrada anteriormente) antes de cruzarla con la interseccin slida
de la parte previa, el resultado de la cual ser una pequea lnea en el mismo punto que la direccin de
la apertura acabamos de crear. Al mismo tiempo, podemos extraer de manera sencilla el centro de esta
pequea lnea que ser el punto de interseccin de nuestra familia de aperturas.
Ahora podemos utilizar el otro tipo de interseccin geomtrica ya que no necesitamos el nivel de
informacin: la geometra base de la interseccin slida y la interseccin geomtrica de la curva extrada
del canal.
Es necesario esconder un poco los elementos para poder ver la pequea lnea.
Todo marcha a la perfeccin y ya estamos listos para el paso siguiente. Ahora viene la peor parte: calcular
la dimensin de la apertura y, lo ms difcil, calcular la direccin usando la lnea que acabamos de extraer.
Existen varias opciones para calcular las dimensiones de las aperturas: extraer los bordes del slido y
calcular la longitud en cada direccin, extraer el vrtice y encontrar la diferencia entre estos y los que
usaremos en el mtodo de la bounding box.
Con la bounding box se pueden alcanzar mejores resultados de una manera ms inteligente. Cuando
nos encontramos un muro con un sistema de pendiente la mejor manera de crear una modificacin es
crear una apertura en forma de cubo que cubra todo el volumen de la interseccin en vez de crear una
en pendiente Intenta pedirle al equipo que corte una apertura en diagonal en una parte en concreto del
muro! Diferente sucede con la tubera, por ejemplo, que se inserta directamente en el hormign. En este
caso no sera necesario realizar una modificacin.
As pues la idea bsica es la de calcular las dimensiones basndonos en el mximo y el mnimo punto de
la bounding box y el cdigo del bloque. S, adoro el cdigo de bloque porque puedes realizar varias
operaciones a la vez en vez de utilizar diferentes nodos.
Math.Round(p2.X-p1.X) + OusideClearance;
Math.Round(p2.Y-p1.Y) + OusideClearance;
Math.Round(p2.Z-p1.Z) + OusideClearance;
Ahora tenemos las dimensiones de las aperturas segn la interseccin de la bounding box. Utilizaremos
estas dimensiones ms tarde cuando tengamos que personalizar la familia.
El siguiente paso es el de encontrar un punto de interseccin para las aperturas, pero esto es muy sencillo.
Tenemos la lnea de interseccin entre el eje central de la ruta y la interseccin geomtrica. Necesitamos
pues calcular el punto central de la lnea y el gran punto.
Antes de ubicar las aperturas en el proyecto me gustara concentrarme en cmo calcular la correcta
rotacin de la apertura para que sea perpendicular a la superficie paralela a la hoja de ruta.
De nuevo la curva ser til para este objetivo ya que se encuentra en paralelo a la hoja de ruta. Tenemos
que calcular el ngulo entre esta lnea y el eje de Y y despus aplicar esta rotacin a la familia. Utilizar el
vector alineado a la curva para poder ser capaz de calcular el ngulo entre los dos vectores. Esta parte no
es esencial para visualizar la curva que estoy proyectando en el plano XY.
Para simplificar la validacin del ngulo podemos redondear el resultado con el nodo Math.Round. La
ltima comprobacin se encuentra entre los ngulos 0 y 180. Si el valor de los ngulos es igual a estos
valores lo tenemos que rotar la familia 90 grados, en caso contrario tendremos que sacar el valor del
nodo.
Ok, ha llegado el momento de crear la apertura, colocarla y proveer las dimensiones correctas.
Toda la apertura est colocada en la misma posicin pero todava no ha sido rotada. Ahora podemos
aplicar la rotacin correcta usando el nodo FamilyInstance.SetRotation. La rotacin proviene del anterior
bloque.
Pon en marcha el script y si, todas las conexiones son correctas, podrs ver la orientacin correcta y la
dimensin para cada apertura.
Solo un par de parmetros ms requeridos para cada elemento: antes de nada, el valor de la
compensacin. Esto procede de la diferencia entre el valor Z del punto de interseccin y el nivel de
elevacin. Es una compensacin no una elevacin absoluta as que tenemos que remover el nivel de
elevacin. El mismo valor estar ubicado en otro parmetro para ser usado en una planificacin (como ya
sabrs no podemos usar el valor de la compensacin en la planificacin).
Este nodo permite a ejemplos de familias poder repetir en cada uno de ellos as como utilizar un prefijo
como cadena.
Hemos terminado.
Despus de usar estos nodos para ejecutar definitivamente todas las operaciones, siempre utilizo el nodo
Transaction.End
Ehm algo que no recuerdo, tendra que existir otra operacin que realizar pero realmente ah, s, ahora
tenemos que cortar la apertura en el muro.
Puedes utilizar mi nodo Element Cut with Void. En la primera entrada los elementos provienen de las
listas de los muros, en el segundo son las instancias de las familias vacas y el tercero es la entrada Boole
que procede de la entrada del grupo.
Control de calidad
Para verificar la calidad de la secuencia voy a resetear tanto el Run y el Cut y ejecutar una comprobacin
de interferencias.
Las interferencias son todava visibles pero al menos ahora tenemos peticiones de aperturas.
El siguiente paso ser el de crear el mismo procedimiento para el cable de las bandejas y las tuberas. Lo
puedes utilizar por tu cuenta o utilizar el link de abajo para completar la secuencia. En el archivo
encontrars tambin familias que he utilizado.
[Download]