Revit : Unités incompatibles

Vous pourriez être tenté de vouloir utiliser une des fonctions mis à votre disposition pour réaliser un arrondi : vous avez la fonction round, la fonction roundup et la fonction rounddown (la liste complète des fonctions est fournie dans l'aide).

Supposons que vous voulez arrondir par exemple une surface. Vous allez alors créer une valeur calculée comme ceci :

Valeur calculée pour arrondir une surface

Vous validez et boom, vous êtes gratifié du message suivant :

Message affiché par Revit

En apparence, votre formule a l'air correcte : vous avez une surface en m², 49,6 m² par exemple, roundup(), qui arrondit à l'entier supérieur, devrait vous renvoyer 50 m². On ne voit pas trop où se situe ce problème d'unité.

En fait vous avez une erreur parce que les fonctions round* ne prennent en argument que des nombres sans unité.

La raison pour laquelle ces fonctions sont conçues de cette façon, c'est parce que Revit travaille avec une unité interne (des pieds carrés dans le cas des surfaces). Si vous avez une surface de 49,6 m², Revit a en fait dans sa mémoire une valeur en pieds carrés (533,9 ft^2 par exemple). Quand vous lui demandez de faire un arrondi, Revit ne peut pas faire l'arrondi en pieds carrés car cela ne va probablement pas produire le résultat que vous attendez : round(533,9 ft^2) -> 534 ft^2 -> 49,61 m^2.

Il ne peut pas non plus faire une conversion dans votre unité d'affichage (m²) avant de réaliser l'arrondi car cela pose problème si vous changez l'unité. Si par exemple vous avez la formule suivante : roundup(Surface) / 10 m, elle sera valide si l'unité d'affichage est le m², mais pas si on passe dans une autre unité comme le pied carré. Parce qu'à ce moment, roundup(Surface) va renvoyer des pieds carrés, divisé par des mètres et donc là on ne sait pas quelle unité doit être retournée entre les unités métrique et impériales.

La solution à ce problème, c'est de réécrire la formule de cette façon :

La nouvelle formule

On divise la surface par 1 m², ce qui retourne un nombre sans unité, qui est ensuite arrondi par roundup(), puis on multiplie le résultat par 1 m², ce qui nous redonne une surface. Ce n'est pas forcément très élégant, mais cela permet de garantir la compatibilité des unités.

Notez que ça fonctionne exactement de la même façon sous Inventor.

Le problème ne se pose pas pour les autres fonctions. Il y a quand même des contraintes : sqrt() ne fonctionne que pour des nombres sans unité ou pour des unités en dimension 2 comme les surfaces. cos(),sin()et tan() attendent un angle comme argument. acos un nombre sans unité...

Etiquettes:

Ajouter un commentaire