Revit 2014 FÓRMULAS PARA EL DÍA A DÍA Este post está basado en una entrada en revitforum.org de Klaus Munkholm. Para explotar todas las capacidades del editor de familias de Revit, es muy importante conocer qué fórmulas tenemos a nuestra disposición para controlar los parámetros de las familias. Obviamente no tenemos todas las capacidades que podríamos utilizar en una hoja de cálculo de Excel, pero sí las suficientes para poder construir familias con un comportamiento “inteligente”. A continuación paso a transcribiros y a poner algunos ejemplos de las fórmulas que tenemos disponibles y cuál es su sintaxis, que es prácticamente igual que en Excel. Operadores básicos Suma: + Resta: Multiplicación: * División: / Exponencial: ^: x^y, x elevado a la potencia de y Logaritmo: log(x) Raíz cuadrada: De un valor = sqrt(16) De un parámetro = sqrt(Anchura) De una fórmula = sqrt(Anchura + Altura) Seno: sin(x) Coseno: cos(x) Tangente: tan(x) Arcoseno: asin(x) Arcocoseno: acos(x) Arcotangente: atan(x) e elevado a una potencia de x: exp(x) Valor absoluto: abs(x) Pi: pi() www.arquitecton.es [email protected] Revit 2014 Forzar parámetros sí/no a estar marcados o no marcados, o lograr el valor verdadero/falso Forzar marcado =1<2 Forzar no marcado =1>2 Instrucciones condicionales Se pueden usar instrucciones condicionales en las fórmulas para definir acciones en una familia que depende del estado de otros parámetros. Las instrucciones condicionales usan la siguiente estructura: IF(<condición> , <resultado-si-verdadera> , <resultado-si-falsa> ) Esto significa que los valores especificados para el parámetro dependen de si la condición se cumple (verdadera) o no (falsa). Operadores condicionales soportados < Menor que > Mayor que = Igual AND() Ambas instrucciones son verdaderas OR() Alguna de las instrucciones es verdadera NOT() La instrucción es falsa Las instrucciones condicionales pueden contener valores numéricos, nombres de parámetros numéricos y parámetros Sí/No. Por el momento, <= y >= no se han implementado. Para expresar esta clase de comparación se puede emplear un operador lógico NOT. Por ejemplo, a<=b se puede expresar como NOT(a>b). A continuación se presentan varias fórmulas de ejemplo con instrucciones condicionales: IF simple: o = IF ( Longitud < 3000 mm , 200 mm , 300 mm ) IF con un parámetro de texto: o = IF ( Longitud > 350mm , “Texto 1” , “Texto 2” ) IF con AND lógico: o = IF ( AND ( x = 1 , y = 2 ), 8 , 3 ) www.arquitecton.es [email protected] Revit 2014 IF con OR lógico: o = IF ( OR ( A = 1 , B = 3 ) , 8 , 3 ) Instrucciones IF anidadas: o = IF ( Longitud < 350mm , 50mm , IF ( Longitud < 450mm , 60mm , IF ( Longitud < 550mm , 70mm , 80mm ) ) ) IF con condición Sí/No: o = Longitud > 40 (si es verdadero devuelve una casilla marcada, si es falso, una casilla sin marcar) NOT con condición Sí/No: o = NOT ( Param ) Devuelve una casilla marcada si el parámetro "Param" no está marcado y viceversa. Redondeo Desde la versión de Revit de 2012 también podemos utilizar expresiones de redondeo. Redondeo Round(x) La función redondeo devuelve el número entero más cercano al evaluado. No tiene en consideración la dirección del redondeo (arriba o abajo). Ejemplos: round ( 23.4 ) = 23 round ( 23.5 ) = 24 round ( 23.6 ) = 24 round ( -23.4 ) = -23 round ( -23.5 ) = -23 round ( -23.6 ) = -24 Redondeo hacia abajo Rounddown(x) “x” es un valor sin unidad que devuelve el número entero de valor menor más cercano o igual a "x". Ejemplos: rounddown ( 23.0 ) = 23 rounddown ( 23.5 ) = 23 rounddown ( 23.9 ) = 23 rounddown ( -23.0 ) = -23 rounddown ( -23.5 ) = -24 rounddown ( -23.9 ) = -24 www.arquitecton.es [email protected] Revit 2014 Redondeo hacia arriba Roundup(X) “x” es un valor sin unidad que devuelve el número entero de valor mayor más cercano o igual a "x". Ejemplos: roundup ( 23.0 ) = 23 roundup ( 23.5 ) = 24 roundup ( 23.9 ) = 24 roundup ( -23.0 ) = -23 roundup ( -23.5 ) = -23 roundup ( -23.9 ) = -23 Las expresiones enumeradas anteriormente son las bases de aplicaciones para el control de las familias. Con dichas expresiones se pueden generar fórmulas para resolver una gran variedad de situaciones diferentes, como pueden ser las siguientes: Trigonometría para triángulos rectos Conociendo: a+b c = sqrt( a ^ 2 + b ^ 2 ) A = atan( a / b ) B = atan( b / a ) b = sqrt( c ^ 2 - a ^ 2 ) A = asin( a / c ) B = acos( a / c ) a+c www.arquitecton.es [email protected] Revit 2014 a+A b = a * tan(A) c = a * sin(A) B = 90° - A b = a * tan(B) c = a * cos(B) A = 90° - B a = sqrt( c ^ 2 - b ^ 2 ) A = acos( b / c ) B = asin( b / c ) a+B b+c b+A a = b * tan(A) c = a * sin(A) B = 90° - A b+B a = b * tan(B) c = b * sin(B) A = 90° - B a = c * sin(A) b = c * cos(A) B = 90° - A a = c * cos(B) b = c * sin(B) A = 90° - B c+A c+B www.arquitecton.es [email protected] Revit 2014 Cómo obtener el mayor de tres valores con instrucciones condicionales IF AND OR Digamos que tenemos tres parámetros de longitud, y queremos un cuarto parámetro que nos devuelva el mayor valor/longitud de los tres: Long A Long B Long C Long Mayor (Devuelve el mayor de los tres parámetros de longitud) Una opción es usar un parámetro "Calc" adicional, lo cual es un poco más chapucero pero también mucho más fácil y manejable para los que no controlan al 100% las instrucciones condicionales. Calc = IF( Long A > Long B , Long A , Long B ) Long Mayor = IF( Calc > Long C , Calc , Long C ) Rango de valores Dados los siguientes parámetros: Valor Usuario = x Valor Min = a Valor Max = z Especifica un rango de valores de entrada válidos, con los parámetros “Valor Min” y “Valor Max”; Luego, usa el “Valor Actual” si está dentro del rango. Si no, usa el valor máximo o mínimo que nosotros le digamos. Valor Actual = IF( Valor Usuario < Valor Min , Valor Min , IF( Valor Usuario > Valor Max , Valor Max , Valor Usuario ) ) www.arquitecton.es [email protected]