Codificação usando entidades IFC: Exemplo 5
Unidades
Identificados os dados do usuário e da aplicação e os pontos na origem e direcções principais segundo os eixos coordenados, procede-se à definição das unidades que serão ou poderão ser usadas no ficheiro IFC. A lista de unidades aplica-se a todos os valores de medida dentro do arquivo (é definida globalmente), por exemplo, a unidade de comprimento usada na geometria será o metro (#28), os ângulos serão medidos em graus (#43), o peso em quilogramas (#36), etc. As unidades podem ser classificadas como grandezas fundamentais (primitivas) ou derivadas. As grandezas fundamentais que não dependem de outras para serem definidas são sete e são elas o comprimento, massa, tempo, intensidade de corrente eléctrica, intensidade luminosa, temperatura termodinâmica e quantidade de matéria. As grandezas derivadas são definidas por relação entre grandezas fundamentais.
Para se definir uma unidade que não faça parte do sistema SI, é necessário fazer a respectiva conversão através do IfcConversionBaseUnit. Tomando como exemplo a conversão de radianos para graus apresentada na Figura "Exemplo - Conversação de unidades", primeiro faz-se a identificação da unidade a converter com a entidade IfcSIUnit (radianos), depois identifica-se a quantidade dessa unidade que corresponde ao valor unitário da unidade para a qual se pretende fazer a conversão (graus), especificando o tipo de medição que é necessário efectuar com a classe IfcMeasureWithUnit (medição angular -> 0.01745329 rad ≈ 1º). De seguida definem-se os exponentes dimensionais com o IfcDimensionalExponents onde neste caso todos os exponentes são nulos pois o grau é uma medida adimensional. Por fim juntam-se todas as propriedades no IfcConversionBasedUnit, que faz a conversão das unidades com informação calculada a partir de outros atributos, usando expressões definidas.
As unidades de grandezas fundamentais ficam a cargo da entidade IfcSIUnit, quanto às unidades de grandezas derivadas necessitam de pelo menos duas entidades para fazer a sua definição, uma ou mais entidades IfcDerivedUnitElement e uma IfcDerivedUnit que define a relação entre as unidades fundamentais e o tipo de unidade derivada em que resulta essa relação.
O Pascal [Pa] é exemplo de uma unidade de grandeza derivada. É uma unidade padrão de pressão e tensão no sistema internacional de unidades (SI). Equivale à força de 1 Newton [N] aplicada uniformemente sobre uma superfície de 1 m², logo Pa = [N/m²]. Para se definir esta unidade derivada através do uso de entidades, primeiro identificam-se quais as instâncias que possuem as unidades fundamentais necessárias (#20 -> m²; #21 -> N) e seus exponentes no IfcDerivedUnitElement. O sinal positivo num exponente define a unidade em numerador (“1” -> N) e o sinal negativo no exponente define a unidade em denominador (“-1” -> m²). Para concluir a construção da unidade derivada utiliza-se o IfcDerivedUnit que faz a junção das unidades fundamentais, multiplicando as unidades que estão em denominador e multiplicando as unidades que estão em denominador.
A entidade que será atribuída ao IfcProject e que desse modo fará a atribuição das unidades a todo o ficheiro é a IfcUnitAssignment, é nela que se deve fazer o agrupamento das entidades de unidades. Portanto devem ser agrupadas nessa classe as unidades fundamentais no sistema SI (IfcSIUnit), as unidades convertidas (IfcConversionBasedUnit) e as unidades derivadas (IfcDerivedUnit). No caso das unidades convertidas não se faz a atribuição da unidade base, pois resultaria num conflito de unidades, por exemplo, apenas se atribui a instância “#43” que define os graus, a instância “#40” que define os radianos não é atribuída.