Propongo título del nuevo hilo: "BIM, C++, VB, VBA, Phyton, Java, LISP... para automatizar el cálculo de estructuras"
Me parece una idea excelente. Esto de los spin-off es un rollo.
Centrándose en el BIM, la idea básica es que toda la información que se añada al proyecto federado debe estar definida en un formato que, si no es estándar, al menos debe ser abierto y documentado. Además, toda pieza de información que se añada debe estar asociada a uno o varios ID, que deben ser únicos y deben mantenerse a lo largo del tiempo.
Por supuesto, el proyecto evoluciona y tiene cambios a lo largo del tiempo. Cuando digo que un ID debe ser único, es que si en CYPE 3D se introduce una barra, a esa barra se le tiene que asignar un ID que no puede coincidir con un ID que haya sido utilizado anteriormente. Si esa barra se copia, la nueva barra no puede tener el mismo ID, sino que se debe generar un nuevo ID para ella, y si queremos que dos barras sean iguales, no pueden tener el mismo ID, sino que debemos tener el concepto de "grupo de barras iguales", el grupo de barras que queremos que sean iguales debe tener un ID único, y al exportar debe exportarse ese ID junto con los ID de las barras que forman parte del grupo.
Concretando al ejemplo que pusimos antes de CYPE 3D y Excel, se podría hacer que de un modo interactivo se indicara un nudo y te abriera una Excel con la información necesaria para dimensionar ese nudo, pero eso no es BIM, aunque pueda ser útil en un momento determinado. Lo que es realmente BIM es que las piezas que concurren al nudo tengan un ID que se mantiene en el tiempo, y que el programa que dimensiona una unión o un nudo seleccione las barras que intervienen en esa unión o en ese nudo y guarde sus ID junto con sus datos propios. De ese modo, es posible mantener la coherencia de la información, tanto entre programas como a lo largo del tiempo. Si el resultado de ese programa que calcula la unión es que la pieza real debe acabar en la cara de otra pieza y que hay que disponer una placa de testa de unas determinadas dimensiones en ese extremo, esa información debe estar grabada en un formato deseablemente estándar (para este caso podría ser IFC o CIS/2) o, si no existe un formato estándar que se adapte a la necesidad concreta, debería estar grabada en un formato documentado por el autor de la aplicación y accesible con facilidad por otros desarrolladores. Además, esa información, además de añadir su propio ID, debe contener el ID que tenía la barra en el programa original. Eso permitiría que la modificación introducida por el programa externo de cálculo de uniones pudiera ser utilizada por el programa original, en función de sus capacidades. Si éstas son limitadas, las ignorará y punto, pero al menos podrá dar un aviso de que hay información añadida a sus elementos que no sabe interpretar. Si el programa es más completo, por ejemplo porque calcula algunos tipos de uniones, podrá utilizar su lógica interna para aprovechar los resultados de otros programas, igual que la utiliza para aprovechar sus propios resultados, y podrá sacar el despiece de una pieza o la medición de kilos de hierro de la estructura incorporando tanto sus uniones como las uniones calculadas por otro u otros programas.
Se puede borrar una barra en el programa original sin ningún problema, y este programa puede detectar que el programa externo incorporó una unión para una barra que ha sido eliminada, y dar el aviso de que hay uniones que no se pueden incorporar porque las barras ya no existen. También se puede volver al programa externo, que podrá detectar que ya no existe la barra para la que se calculó la unión y dar el aviso oportuno. Por supuesto, ambos programas pueden aplicar estrategias todo lo avanzadas que se desee para mantener los datos que se introdujeron antes de que el otro programa produjera sus cambios y que puedan seguir siendo útiles.
Lo fundamental es que la información se conserva, en la medida de lo posible, y que nadie cambia los resultados incorporados por otros. Porque en el fondo no estamos hablando sólo de programas, sino de técnicos, de responsabilidades y de seguros.