Rutinas de Dynamo hacia un Add-Ins desarrollados en C#: Automatizando procesos en Revit API

En las publicaciones anteriores: (1) y (2) desarrollamos varios grupos de Scripts o rutinas de Dynamo para automatizar la detección y corrección de interferencias. Algunas de las rutinas fueron:

Dynamo nos permite detectar qué Elementos se encuentran colisionando entre si para después separarlos en Vistas 3D independientes y crear tablas con la información relevante a cada colisión.

Todo esto se hace sencillo con Dynamo pero al igual que antes poder compartir estas rutinas con otros usuarios se complica si la otra persona tiene conocimientos nulos de Dynamo o de programación.

Entonces la siguiente solución es desarrollar un Add-In desarrollado en C# que haga exactamente lo mismo. (Convierte tus rutinas de Dynamo en Add-Ins)

Solución: Add-In desarrollado en C#

La interfaz que desarrollamos cuenta con 6 botones dentro la barra superior de Revit.

En esta ocasión vamos a revisar como funciona el botón o comando: Quick Clash

                   void BUTTON_4_QuickClash()

Este botón es la suma de varios métodos ejecutados todos en el orden que se observa arriba.

Si nos adentramos en el código del método SetNoValueClashParameter() tenemos:

                DYNO_SetNoValueClashParameter()

Primero encontramos todos los elementos en el documento activo y los clasificamos en las siguientes listas: ducts, pipes, conduits, cabletrays, flexducts, flexpipes.

              Ilist<Element> ducts = ..
Ilist<Element> pipes = ..
Ilist<Element> conduits = ..
Ilist<Element> cabletrays = ..
Ilist<Element> flexducts = ..
IList<Element> flexpipes = ..

Estas 6 categorias de Elementos las analizamos por separado ya que representan familias de Revit que no se clasifican como Familias de Instacia. Son creadas directamente dentro del documento.

Después tenemos que filtrar los Elementos que tienen el parametro “CLASH” igual a “YES”. Para cada lista aplicamos el filtro:

if ( elem.LookupParameter("Clash").AsString() == "YES" )
{
// Agregar "elem" a la lista de CLASH


}
else
{
// Agregar "elem" a la lista de NO CLASH


}

donde elem representa cada Elemento de las listas.

Luego que hemos separado a todos los Elements con CLASH y los que NO tienen CLASH pasamos a modificar los parámetros: “Clash”, “Clash Grid Location” y “Clash Category”.

Para esto tenemos que abrir una transacción:

using ( Transaction t = new Transaction(doc, "Set No Value ... ")) 
{
t.Start();

// Aquí se agrega la acción a realizar



t.Commit();
}

Ahora hacemos el mismo proceso anterior pero esta vez para los Elementos que son Familias de Instancia (Family Instance) y son creados con ayuda de archivos externos (Familias).

El siguiente método que se ejecuta es:

       DYNO_IntersectMultipleElementsToMultipleCategory()

este comando realiza la colisión de todos los elementos de las categorias: ducts, pipes, conduits, cabletrays, flexducts, flexpipes contra ellos mismas.

seguimos con,

     DYNO_IntersectMultipleElementsToMultipleFamilyInstance()

este comando realiza la colisión de todos los elementos de las categorias: ducts, pipes, conduits, cabletrays, flexducts, flexpipes contra todos los elementos que son Familias de instancia,

DYNO_IntersectMultipleFamilyInstanceToMultipleFamilyInstance_BBox()

este comando realiza la colisión de todos los elementos Familias de instancia contra ellos mismos,

                   DYNO_SetClashGridLocation()

este comando encuentra entre qué Ejes se encuentra cada Elemento. Ejemplo: Eje A/13,

                  DYNO_SetIDValue_ActiveView()

este comando coloca el valor del ID de cada Elemento en el parámetro “ID Element” creado por nosotros. Esto para facilitar la futura manipulación de los Elementos,

             DYNO_GetAllNOClashElements_OnlyActiveView()

este comando encuentra todos los Elementos de la Vista Activa que tienen el parámetro CLASH vacío, y por último

                      DYNO_CheckClashSolved()

este comando verifica qué Elementos fueron revisados previamente y le coloca valor al parámetro “Clash Solved”.

El siguiente video muestra la demostración del funcionamiento del botón de “QuickClash”

Si quieres ver el código completo y revisarlo paso a paso encuéntralo aquí.

Para ver la explicación del siguiente botón “SectionBox” aquí.

Gracias!

Consulting: www.dynoscript.xyz

Si quieres ver el código completo revísalo desde aquí.

--

--

Engineer. Addicted to technology, soccer and travel. I love automating things.

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store