Revit API. Introducción IV
Asignar una URL a una columna. Transacciones
Tras la publicación de la última entrada relacionada con la API de Revit, Williams Espinosa Opazo planteó la siguiente cuestión:
“He estado trantando de asignarle una URL a cada columna pero en mi proyecto son demasiadas columnas y queria crear un codigo que pudiera automatizar esto“.
Posteriormente me escribió para detallar el proceso a realizar: se trata de “rellenar” un parámetro llamado “URL” con URLs que tuvieran la estructura: www.columnas.cl/IDcolumna1, www.columnas.cl/IDcolumna2, etc.
He tenido este asunto parado por la avalancha de trabajo que estamos teniendo en Modelical, pero hoy me he decidido a dar respuesta a la consulta (pese a que el ritmo de trabajo no haya disminuído 😐 ). Pues Bien, empecemos!
Emplearé como base el código desarrollado en el post anterior. Para llevar a cabo el proceso comentado, es necesario realizar cambios en el modelo, es decir, tenemos que “escribir” alguna información en el modelo, por lo que será necesario crear transacciones. Las transacciones son, por así decirlo, el espacio en el que deben desarrollarse los cambios que hagamos sobre el modelo cuando trabajamos desde la API. Como vamos a ver, esto tiene algunas implicaciones. En primer lugar debemos cambiar el modo de transacción a manual, para indicar cuándo ha de producirse una transacción. Además, deberemos crear una transacción que contendrá la asignación de URL a las columnas y cuyo nombre ha de ser corto y suficientemente explicativo, ya que ese nombre es el que veremos al desplegar el botón “deshacer” en Revit. Posteriormente deberemos iniciar la transacción, realizar las acciones que modifican el modelo y después cerrar la transacción.
Para asignar la URL necesitamos, en primer lugar, almacenar la ID de cada columna como cadena de texto. Para ello, creamos un parámetro llamado “columnIDAsString” y extraemos la id con “el.Id.ToString();”. Posteriormente añadimos la ID al texto fijo, en este caso “www.columnas.cl/”, en el parámetro “url”. Ya sólo queda asignar el valor de “url” al parámetro “URL” de la columna. Este parámetro “URL”, lo he creado directamente en la interface de Revit, antes de ejecutar el Addin, aunque se podría haber hecho desde la API.
Por último, se muestra un cuadro de diálogo en el que se informa de la acción realizada.
using System;
using System.Collections.Generic;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
namespace URLColumnas
{
//En este caso necesitamos cambiar el modo de transacción a manual
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
public class URLCol:IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
Document documentoAbierto = commandData.Application.ActiveUIDocument.Document;
View vistaActiva = documentoAbierto.ActiveView;
//Filtro de selección y almacenamiento de todas las columnas
IList columnasEnVista = new FilteredElementCollector(documentoAbierto, vistaActiva.Id).OfCategory(BuiltInCategory.OST_StructuralColumns).ToElements();
string urlStart = "www.columnas.cl/";
//Creamos la transacción necesaria para realizar cambios en el modelo
Transaction transAsigURL = new Transaction(documentoAbierto, "Asignación de URL");
//Iniciamos la transacción
transAsigURL.Start();
//Asignamos al parámetro "URL" la URL deseada
foreach (Element el in columnasEnVista)
{
//Leemos la ID de la columna como cadena de texto
string columnIDAsString = el.Id.ToString();
//Combinamos la ID de la columna con el resto de la URL
string url = urlStart + columnIDAsString;
//Asignamos al parámetro "URL" el valor de url
el.get_Parameter("URL").Set(url);
}
//Finalizamos la transaccion;
transAsigURL.Commit();
//Información de la asignación realizada
TaskDialog.Show("Modelical Blog", columnasEnVista.Count.ToString()+" URLs han sido asignadas");
return Result.Succeeded;
}
}
}
En las siguientes capturas de pantalla, se observa como funciona el Addin en un proyecto de ejemplo.
</p
Si estás interesado en el tema o tienes alguna consulta concreta, no dudes en escribirme: juanma@modelical.com.


