BIM System Blog en Español

Revit: Ubicar Elementos en Coordenadas con Dynamo

Has­ta donde yo sé, por el momen­to no hay ningún modo de colo­car ele­men­tos en Revit en unas coor­de­nadas deter­mi­nadas, y hay que recur­rir a Auto­CAD como inter­me­di­ario. Sin embar­go, con la ayu­da de Dynamo se puede autom­a­ti­zar la ubi­cación de obje­tos en coor­de­nadas precisas.

El ejem­p­lo más habit­u­al de uso es para intro­ducir los pun­tos de coor­de­nadas de una parcela a par­tir de una tabla sum­in­istra­da por el provee­dor del ser­vi­cio de topografía. Usual­mente se hace entre­ga tam­bién de planos CAD geor­ref­er­en­ci­a­dos, sin embar­go, hemos encon­tra­do en muchas oca­siones errores de pre­cisión al posi­cionar las coor­de­nadas sobre un CAD vin­cu­la­do en Revit. Es por ello que surgió la necesi­dad de intro­ducir los pun­tos des­de la tabla de coor­de­nadas alma­ce­na­da en un archi­vo Excel.

De modo gen­er­al, la defini­ción de Dynamo sigue este sen­cil­lo proceso:

  1. Lee los datos del archi­vo .xlsx
  2. Posi­ciona ejem­plares de una famil­ia (de colum­na estruc­tur­al 2D en este ejem­p­lo) en cada uno de los pun­tos de coordenadas.
  3. Dibu­ja con líneas de mod­e­lo los límites de la propiedad.
  4. Opcional­mente, eti­que­ta los pun­tos de coordenadas.
  5. Se rel­lena una tabla de coor­de­nadas pre­vi­a­mente configurada.

Lo primero será preparar la tabla de coor­de­nadas en Excel. El orden de las colum­nas deter­mi­nará el orden que demos después a la lec­tura de datos en Dynamo. Los datos están en mm en este ejemplo.

Tabla de coor­de­nadas en Excel

Si esta­mos tra­ba­jan­do con val­ores de coor­de­nadas muy altos, más allá de los límites del espa­cio de tra­ba­jo pre­ciso en Revit, es alta­mente recomend­able primero especi­ficar los val­ores del Sur­vey Point a un pun­to cer­cano a los que vamos a intro­ducir, y preferi­ble­mente uno de los pun­tos de la parcela. He elegi­do P1 para este caso.

Especi­ficar Coor­de­nadas del Pun­to de Reconocimien­to en Revit

Antes de entrar en detalles, veamos ráp­i­da­mente cómo fun­ciona al eje­cu­tar­lo des­de Dynamo Play­er. Siem­pre es recomend­able acced­er a la edi­ción de entra­da de datos antes de eje­cu­tar la her­ramien­ta. Se podrán alter­ar algunos val­ores de cam­pos, si es necesario.

Vista de la entra­da de datos en Dynamo Player 

En todo caso, una vez eje­cu­ta­do, gra­cias al for­mu­la­rio de entra­da de datos de data|shapes, ten­dremos una nue­va opor­tu­nidad de con­fir­mar o mod­i­ficar la infor­ma­ción de entra­da. Como puede verse, todas las opciones son intu­iti­vas y sus val­ores por defec­to se cor­re­spon­den con los más habituales.

For­mu­la­rio de entra­da de datos una vez eje­cu­ta­da la herramienta

Una vez pul­sa­do OK, se obtiene ráp­i­da­mente un cuadro de diál­o­go final con los resultados.

Últi­mo cuadro de diál­o­go mostran­do los resultados

Com­pro­bamos en Revit si el traza­do y los pun­tos están donde esperábamos, así como el con­tenido de la tabla. Vemos tam­bién que están eti­que­ta­dos, y en una vista frontal en 3D se nos pre­sen­ta la ele­vación de cada pun­to dan­do pen­di­ente a las líneas de límite de propiedad.

Como ven, es real­mente sen­cil­lo de uti­lizar, y sin la necesi­dad de un gran tra­ba­jo pre­vio de preparación.

Vista en plan­ta en Revit
Vista frontal en 3D en Revit
Tabla de coor­de­nadas en Revit

Vamos aho­ra a detal­lar por pasos la con­struc­ción del script en Dynamo.

En primer lugar, vemos un grupo de nodos con los que se está hacien­do una selec­ción por defec­to de la ruta en la que debe estar el archi­vo de Excel, sigu­ien­do el están­dar de la com­pañía. No voy a pro­fun­dizar en ello, porque obvi­a­mente está muy per­son­al­iza­do, pero sí quisiera men­cionar que es de una gran ayu­da para evi­tar clicks extras bus­can­do el archi­vo en una red cor­po­ra­ti­va con muchos direc­to­rios ganan­do mucho tiem­po al eje­cu­tar la defini­ción. Cumplir el están­dar tiene pre­mio. Este grupo de nodos ali­men­ta al val­or por defec­to de la ruta del archi­vo del sigu­iente grupo que ver­e­mos a continuación.

Grupo para definir la ruta por defec­to del archi­vo Excel

Antes de la incor­po­ración en Dynamo Play­er de la opción de intro­ducir datos de entra­da, no había otra for­ma de con­tro­lar por el usuario difer­entes opciones. Con los nodos de data|shapes (Mostafa el Ayoubi) era posi­ble dar esa inter­ac­tuación a los usuar­ios con difer­entes cuadros de diál­o­go y tipos de entra­da de datos. Una vez que esto ya fue posi­ble con Dynamo Play­er, he man­tenido las fun­cional­i­dades de data|shapes en mis defini­ciones, porque pien­so que siguen sien­do más flex­i­bles y ami­ga­bles, y per­miten pasos inter­me­dios con actuación del usuario. Además, estas entradas de datos están forzadas, mien­tras que en Dynamo Play­er que­da escon­di­da y es común olvi­darse de ello. Nor­mal­mente, los val­ores por defec­to serán los desea­d­os y bas­tará con con­fir­mar con OK para con­tin­uar con la ejecución.

Grupo para la entra­da de datos

En el sigu­iente grupo de nodos se hace lec­tura del archi­vo de Excel y se sep­a­ran los datos de cada colum­na, excluyen­do los encabezados.

Lec­tura de datos de Excel

Aho­ra lleg­amos a una operación de trasla­do y rotación de los pun­tos respec­to del pun­to de ori­gen inter­no de Revit. Esto es nece­sario para garan­ti­zar que en cualquier cir­cun­stan­cia ten­dremos los pun­tos ubi­ca­dos cor­rec­ta­mente. Es decir, en los casos en los que por algu­na razón el Sur­vey Point se haya desplaza­do respec­to del ori­gen inter­no y/o se haya real­iza­do ya una rotación del ángu­lo del proyec­to. Si no se ha hecho nada de esto no hay prob­le­ma, porque los val­ores con los que se opera son 0 y no se altera el resultado.

La oper­a­ti­va prin­ci­pal está escon­di­da den­tro del nodo Point.Translate, que se mues­tra en la sigu­iente imagen.

El grupo sigu­iente se encar­ga de ubicar la famil­ia elegi­da en los pun­tos ya traslada­dos a la ref­er­en­cia del ori­gen, y ase­gurán­dose que lo hacen en el niv­el de la vista des­ig­na­da en los pasos previos.

El nodo View.GetLevel está abier­to en la ima­gen siguiente.

Gru­pos de trasla­do y rotación, y de ubi­cación de famil­ias de coordenadas
Nodo per­son­al­iza­do Point.Translate
Nodo per­son­al­iza­do View.GetLevel

Seguimos con la copia de los val­ores de coor­de­nadas a parámet­ros per­son­al­iza­dos de las famil­ias que hayamos elegi­do para rep­re­sen­tar los pun­tos de coor­de­nadas.

Copia de las coor­de­nadas y nom­bre de pun­tos a parámet­ros personalizados

A con­tin­uación, se dibu­jan las líneas de propiedad trazan­do un polí­gono entre los pun­tos y se eti­que­tan estos, si lo hemos deci­di­do así anteriormente. 

Dibu­jo de parcela y eti­que­ta­do de puntos
Nodo per­son­al­iza­do Polygon.ByPoints
Nodo per­son­al­iza­do Tag.ByElementLocationAndType

Y para finalizar, volve­mos a usar data|shapes para mostrar un últi­mo cuadro de diál­o­go de con­fir­ma­ción del resul­ta­do. En mi opinión, es extremada­mente útil hac­er esto con todas las defini­ciones para que el usuario ten­ga una idea más pre­cisa de lo que ha suce­di­do y si todo ha ido bien antes de revis­ar­lo en Revit.

Grupo para gener­ar el men­saje final de resultados

Con­fío en que la expli­cación haya sido sufi­cien­te­mente clara, aunque sin entrar en muchos detalles para que tam­poco resulte demasi­a­do pesa­da. Les ani­mo a dejar comen­tar­ios para resolver dudas, e inclu­so apor­tar mejoras. 

Defini­ción com­ple­ta de PropertyPlotCoordinates

Notas y reconocimientos:

· El pre­sente tuto­r­i­al de Dynamo tiene por obje­ti­vo ayu­dar mod­esta­mente al desar­rol­lo de la autom­a­ti­zación en los pro­ce­sos de tra­ba­jo del mun­do AEC.

· Por motivos de con­fi­den­cial­i­dad y debido a su alta per­son­al­ización, ninguno de los scripts pre­sen­ta­dos pueden ser compartidos.

· Gra­cias a todos los desar­rol­ladores de paque­tes para Dynamo, sin cuyo esfuer­zo, con­se­jos y gen­erosi­dad no sería posi­ble ampli­ar el poder de per­son­al­ización de Revit, lo que aumen­ta con­sid­er­able­mente su efi­ca­cia y efi­cien­cia. Me gus­taría destacar espe­cial­mente el tra­ba­jo de:

· Mostafa El Ayoubi (data | shapes)

· Andreas Dieck­mann (Clock­work)

· Kon­rad K Sobon (archi­lab & BumbleBee)

· Nate Miller (Lunch­Box & Rhynamo)

· Dim­i­tar Venkov (SpringN­odes)

· John Pier­son (Rhythm & Bang)

· Julian Benoit (SteamNodes)

· Thomas Mahon (Bimorph)

· Luke John­son (Bak­ery)

· Johnes Hou (Hot Gear)

· Col­in McCrone (Amper­sand)

· Dieter Ver­meulen (BIM4Struc.Rebar)

· Lau­renk Schmidt (Land­form)

· Tomasz Fudala (Struc­tur­al Design)

· Mod­el­i­cal

· Marc Tav­ernier

· Por mi parte, he desar­rol­la­do nodos per­son­al­iza­dos para sim­pli­ficar defini­ciones y reuti­lizar­los en otros. Cuan­do es nece­sario para com­pren­der los tuto­ri­ales, mue­stro la ima­gen del nodo per­son­al­iza­do para que pue­da recrearse.