Aprendiendo C# y Revit API (II)

Advertencia

Esto no es un curso de programación, ni pretende serlo, simplemente son comentarios e ideas de un aspirante a conocer C# y la API de Revit; si detectas algún error puedes contactar conmigo o dejar un comentario en esta entrada.

Lenguajes de programación

La creación de un programa informático guarda algunas similitudes con la construcción de un edificio: se trata de generar un proyecto (conjunto de instrucciones) que el proyectista (desarrollador) entrega a la empresa constructora (ordenador) para que ejecuten una determinada construcción (programa).

Por tanto, para que la información fluya de forma correcta y todos entiendan el trabajo que deben realizar, el envío de instrucciones entre el proyectista (desarrollador) y la empresa constructora (ordenador) debe realizarse en un idioma estandarizado y codificado.

En el caso concreto de la programación, debemos de tener presente que nuestro el ordenador es una máquina "tonta" que únicamente entiende dos estados (dos niveles de voltaje) en sus componentes internos: 0 y 1; es lo que conocemos como "lenguaje máquina".

Este lenguaje máquina es específico de cada procesador (modelo de ordenador), además de complejo de leer y entender por humanos, por lo que los programadores han ideado otros "lenguajes de alto nivel", que se aproximan más a la sintaxis habitual del lenguaje humano, que nos ayudan a escribir programas de forma más sencilla y no nos exigen conocer al detalle la estructura interna de cada procesador. Paralelamente, se han desarrollado traductores entre lenguajes de alto nivel y lenguajes máquina, conocidos como "compiladores", que se encargan de convertir las instrucciones escritas por los programadores en instrucciones entendibles por los procesadores de los equipos.

El lenguaje C# y .NET Framework

Centrándonos en el lenguaje C#, que se utiliza principalmente para trabajar con la API de Revit, debemos saber que se trata de uno de los lenguajes de programación de alto nivel soportados por .NET Framework, el conjunto de herramientas/soluciones desarrollado por Microsoft para facilitar a la creación de aplicaciones.

.NET Framework se encarga de convertir nuestro programa escrito en C# (o en cualquier otro lenguaje soportado por la plataforma .NET) a un lenguaje intermedio, denominado Common Intermediate Language (CIL), que luego es ejecutado en cada ordenador gracias al uso de una máquina virtual denominada Common Language Runtime (CLR).

Es decir, nuestro programa no se compila expresamente para una máquina/arquitectura concreta, sino que es traducido a un lenguaje intermedio que es interpretado por un compilador Just-In-Time que traduce en tiempo real nuestro código al lenguaje máquina soportado por el procesador en el que corre nuestro programa.

Por todo esto, utilizar un lenguaje como C# bajo .NET Framework nos ofrece la ventaja de desarrollar nuestro programa sin preocuparnos por el equipo/plataforma que lo ejecutará después: sólo necesitaremos que exista la máquina virtual .NET en la plataforma en la que correremos nuestro programa.

Tipo de lenguaje y POO

Si nos centramos en las características propias del lenguaje C# podemos decir que se trata de un lenguaje de programación orientado a objetos, un paradigma de programación que se basa en organizar los programas como conjuntos de objetos que poseen determinados atributos y funcionalidades.

Un ejemplo sencillo: si estuviésemos trabajando en un programa de modelado BIM, podríamos diseñar un objeto "muro" que tuviese una serie de atributos (altura, longitud, espesor, material, etc.) y que tendría funcionalidades asociadas como "Vincula tu altura a un nivel" o "Cambia tu directriz".

En resumen, un programa diseñado bajo el paradigma de la Programación Orientada a Objetos (POO) se basará en la definición de objetos, con sus atributos y funcionalidades diferentes, que se irán relacionando entre sí mediante de mensajes.

Clases

Por tanto, el trabajo del desarrollador de software será abstraer la estructura básica de esos objetos (caracterísitcas y acciones) que compondrán nuestro programa, y crear una serie de plantillas genéricas, denominadas "clases", que permitan al programa construir posteriormente objetos específicos.

Es decir, nuestro trabajo será definir la clase "Muro", que poseerá una serie de atributos (características) y métodos (acciones que pueden realizar), y durante la ejecución del programa iremos creando "objetos" que serán "instancias o ejemplares" (concreciones en definitiva) de esa clase "Muro".

Estructura de un programa en C

Según indica la Guía oficial de C# escrita por Microsoft, un programa escrito en C# tendrá la siguiente estructura básica:

Los principales conceptos organizativos en C# son programas, espacios de nombres, tipos, miembros y ensamblados. Los programas de C# constan de uno o más archivos de origen. Los programas declaran tipos, que contienen miembros y pueden organizarse en espacios de nombres. Las clases e interfaces son ejemplos de tipos. Los campos, los métodos, las propiedades y los eventos son ejemplos de miembros. Cuando se compilan programas de C#, se empaquetan físicamente en ensamblados. Normalmente, los ensamblados tienen la extensión de archivo .exe o .dll, dependiendo de si implementan aplicaciones o bibliotecas, respectivamente.

Para ampliar información

Os dejo algunos enlaces interesantes que desarrollan las ideas principales de esta entrada del diario:

→ Escala Humana en RTVE

RTVE emite una nueva serie documental sobre arquitectura:

Un programa que centra su mirada en los aspectos humanos inherentes a la arquitectura, el urbanismo y el diseño. Todos ellos forman parte de nuestra vida cotidiana y generan historias que merece la pena ser contadas.

En 'Escala humana' mostraremos lo que se esconde detrás de las fachadas, de los paisajes, de los edificios, de los objetos. Explicaremos cómo piensan, a veces cómo sueñan, tanto los creadores de grandes estructuras arquitectónicas y urbanísticas de nuestro país como los profesionales que realizan pequeños proyectos con el objetivo de hacer un mundo mejor. Reflexionaremos, en definitiva, sobre nuestra relación con el entorno natural y social.

El programa estará presentado por Núria Moliner, arquitecta, compositora y cantante del grupo musical Intana, que nos aportará sus conocimientos sobre arquitectura desde una sensibilidad especial hacia los aspectos humanos que hacen que la técnica cobre sentido.

En trece capítulos de media hora, 'Escala humana' descubrirá muchas maneras de entender la vida a partir de historias particulares tan diversas como la de una vivienda enterrada cuyas ventanas miran al cielo, edificios que son verdaderos pulmones de la ciudad, ecosistemas que se desarrollan en las paredes o materiales para el diseño que se auto-generan de forma natural.

Todos los miércoles a las 21:00 en La 2.

→ Curso 'Fundamentos de BIM' organizado por el CACOA

El Consejo Andaluz de Colegios Oficiales de Arquitectos publica el curso gratuito 'Fundamentos de BIM':

Como respuesta a la convocatoria de proyecto de formación, y al amparo del convenio suscrito por el CSCAE y el Ministerio de Fomento, el Grupo de Trabajo BIM del CACOA presentó una propuesta formativa consistente en la celebración de una jornada, celebrada el pasado jueves 20 de diciembre de 2018, en la que se ofrecería a todos los arquitectos colegiados andaluces una serie de ponencias con el objetivo de adquirir una perspectiva general del contexto actual de la metodología BIM y los retos que plantea esta nueva forma de trabajo.

La jornada, que contó con ponentes de contrastada experiencia, se desarrolló en modalidad presencial en el Colegio Oficial de Arquitectos de Málaga durante todo el día y, simultáneamente, se retransmitió a través de Internet, permitiendo a todos los colegiados andaluces participar en la misma.

El programa de la jornada consistió en la retransmisión de las ponencias, presentadas en formato vídeo grabado previamente por los ponentes, a las que el anfitrión dio dando paso y, en su caso, abriendo diferentes turnos de preguntas que él mismo se encargó de resolver.

A continuación, se ofrecen los contenidos íntegros de las ponencias, además del material complementario, para que cualquier arquitecto pueda visualizarlas tantas veces como necesite.

Un trabajo coordinado por los Colegios de Arquitectos andaluces, en el que tuve la suerte de poder participar, y que se ofrece en abierto y de forma gratuita para cualquier profesional interesado en conocer los principios fundamentales de la metodología BIM.

Un material elaborado por expertos que seguro os será de utilidad para vuestro trabajo como profesionales de la arquitectura y la construcción.

Aprendiendo C# y Revit API (I)

El comienzo de un nuevo año suele ser una fecha adecuada para plantearse nuevos objetivos y retos en nuestra faceta personal y profesional.

En mi caso particular, y llevando esta lista de propósitos al plano profesional, 2019 se presenta como un año de nuevos proyectos (en un futuro espero poder escribir sobre ellos) para los que siempre es necesario mantenerse actualizado e ir adquiriendo nuevos conocimientos y habilidades.

Concretamente, en lo que respecta al uso de herramientas BIM, me he propuesto dar un salto de calidad en mis conocimientos sobre programación: ir más allá de las posibilidades que Dynamo ofrece en el campo de la automatización de tareas (que no son pocas) y abrazar las bondades de la API de Revit.

¿Qué es una API y para qué sirve?

En pocas palabras, podríamos definir una API (Application Program Interface) como un conjunto de herramientas que un determinado software (Revit en este caso) ofrece a los desarrolladores para facilitarles la creación de pequeños, o grandes, programas/utilidades/rutinas que hagan uso de las capacidades principales del programa y, eventualmente, las mejoren y amplíen.

The following are general areas where the API is suitable:

- Creating add-ins and macros to automate repetitive tasks in the Autodesk Revit user interface

- Enforcing project design standards by checking for errors automatically

- Extracting project data for analysis and to generate reports

- Importing external data to create new elements or parameter values

- Integrating other applications, including analysis applications, into Autodesk Revit products

- Creating Autodesk Revit project documentation automatically

Online Autodesk Revit Help

¿Qué necesito para trabajar con la API de Revit?

La propia Autodesk recomienda 4 puntos fundamentales para comenzar a trabajar con la API de Revit:

1. A working understanding of Autodesk Revit.

2. An installation of an Autodesk Revit-based product, including the Software Development Kit.

3. MS Visual Studio 2015 Express Edition (C# or VB.NET). Microsoft Visual Studio 2015 Professional is recommended, though, as Express editions do not support DLL debugging. Alternatively, you can use the built-in SharpDevelop development environment in Revit.

4. Some experience in a .NET based development language. (Autodesk Revit API examples are provided in C# and Visual Basic.NET.)

Los tres primeros requisitos resultan bastante evidentes y accesibles para alguien con experiencia trabajando en Revit: debes conocer el funcionamiento del propio Revit, disponer de una instalación del mismo y utilizar un IDE (Entorno de Desarrollo Integrado) que permita desarrollar utilizando el framework .NET.

Sin embargo, el cuarto requisito es sin duda el mayor handicap a la hora de enfrentarse al desarrollo con la API de Revit: conocer algún lenguaje de programación compatible con el framework .NET; concretamente, Autodesk recomienda trabajar con el lenguaje C# (pronunciado ‘Si Sharp’).

¿Cómo aprendo a programar con C#?

La programación es una disciplina que requiere de ciertas habilidades y estructuras mentales muy concretas (abstracción, análisis, creatividad…) pero, sobre todo, es necesario querer aprender y dedicar tiempo.

En la red existen millones de recursos para comenzar a programar en C#:

En mi caso particular, he optado por adquirir una copia digital en Amazon del libro “Microsoft C#. Curso de Programación. 2ª edición” escrito por Francisco Javier Ceballos Sierra: me gusta la idea de comenzar por un manual estructurado, que me permita adquirir los conocimientos básicos del lenguaje y, a partir de ahí, lanzarme a buscar otras fuentes y referencias para profundizar en los temas que vaya necesitando para mis pequeños proyectos de desarrollo.

Diario

Para forzarme a mantener un ritmo constante de dedicación y aprendizaje, me he auto-impuesto la obligación de escribir un diario de aprendizaje, del que estás leyendo la primera entrada, en el que ir plasmando mis avances y experiencias (se dice que para aprender algo es recomendable escribir sobre ello…).

Además, tengo la intención de publicar mis pequeños proyectos de prueba, para lo cual me he creado una cuenta en GitHub (que tengo que aprender a usar e integrar con Visual Studio).

class AprendiendoCSharpYRevitAPI
{
    static void Main(string[] args)
    {
        System.Console.WriteLine("¡Arrancamos!");
    }
}

→ An International Classification for the Built Environment

Stephen Hamil se pregunta en Construction Code:

Is a universal classification system possible for the built environment?

Y yo respondo: ¡es posible y necesario!