top of page
BLOG BIM 360° NEWSLETTER.png

O IFC - como funciona

  • Foto do escritor: William Formigoni
    William Formigoni
  • 12 de out. de 2024
  • 4 min de leitura

Atualizado: 12 de dez. de 2024

Quando fui começar a estudar a fundo a especificação IFC, me deparei com cursos e os detalhes disponíveis no site da buildingsmart. Por mais que os cursos que fiz sejam bons, acredito que uma boa parte da assimilação que tive com as bases e lógicas da especificação vieram do fato de eu ter algumas habilidades de programação. Ora mas por que isso viria a ser algo relevante no BIM?

Nesse artigo pretendo expor isso, explicar como analogias de programação facilitaram meu entendimento e mesmo que pessoas que não sabem programação podem usar essas analogias para entender a estrutura de dados IFC e posteriormente manipular ela assim como manipulamos desenhos num CAD e modelos 3D num Revit.

O IFC é escrito no padrão Step Physical File Format (ISO 10303-21:2002) usando a linguagem EXPRESS. Ok isso não quer dizer muita coisa. Basicamente é um meio de codificação dos dados em formato de texto em que cada instância das entidades é escrita de forma que os atributos são estabelecidos em ordem sequenciais sem valores nomeados, ou seja, uma linha com ID e os respectivos atributos separados por vírgula, muito similar a um CSV.

Experimente abrir um IFC com o bloco de notas no seu computador e veja o que encontra.

Veja abaixo um exemplo de IFC fornecido publicamente pela Buildingsmart:

Note que cada objeto está numa linha.

Cada linha tem um ID no início #123.

Depois do sinal = aparecem os dados.

O primeiro dado é o nome da Classe do objeto.

Falaremos de classe mais adiante nesse post e mais profundamente em outro post.

Oa dados do objeto são delimitados pelos parênteses #123- IFCSITE(Dados,Aqui,Separados,Por,Vírgula)

Pronto. Isso é a estrutura de qualquer objeto num arquivo IFC. Todas palavras começam com a primeira letra em maiúsculo. O nome desse padrão é CamelCase.

No IFC tudo é objeto. Tudo.

Todo objeto tem uma classe.

Cada objeto pode ou não ter instâncias dele.

As instâncias são entidades que representam elementos do mundo real e toda instância sempre terá uma classe.

Vou dar um exemplo com animais e espécies que foi uma das formas que usei para entender classes em programação e me ajudou muito aqui também.

(espécie) Classe: IFCCao

A espécie cão tem a seguinte estrutura de dados (características padrões):

#1=IFCCao(

Cauda: verdadeiro [verdadeiro ou falso],

Patas: 4 [número inteiro],

Sexo: macho | fêmea [uma de duas opções],

Nome: qualquer nome [texto qualquer]

)

Em colchetes coloquei o tipo de dado. (Datatype do atributo ou propriedade)

Uma instância da classe IfcCao seria o cachorro Bob. Bob terá a seguinte estrutura de dados.

#123=IFCCao(

Cauda: verdadeiro,

Patas: 4,

Sexo: macho,

Nome: Bob

)

Agora do Rex:

#12345=IFCCao(

Cauda: falso - rex não tem cauda,

Patas: 4,

Sexo: macho,

Nome: Rex

)

Percebam que, ambos os cachorros são da classe IFCCao (espécie), mas são indivíduos (entidades) diferentes da mesma espécie. Todo indivíduo tem uma espécie (toda instância tem uma classe). Ambos, espécie e indivíduos, são objetos sob a ótica de dados IFC. Tudo é objeto. Classe e instâncias são ambas objetos.

A espécie (classe) IFCCao é instanciavel pois permite existir instâncias (indivíduos) com essa espécie.

Uma classe não instanciavel seria por exemplo a chuva. Não existe “uma” chuva. Chuva é usado para descrever um fenômeno.

Agora vejam, nas propriedades e atributos da classe IFCCao poderíamos incluir o atributo: 

Dono [texto qualquer, opcional].

Isso faria todos os cães terem esse atributo, pois seria algo de todas as classes. Mas o que diria se o cão tem dono ou não, seria as condições específicas daquela instância (indivíduo).

Como no IFC tudo é objeto, até mesmo as relações entre objetos são objetos também. Imagine que para relacionar um IfcCao e um IfcPessoa você precise relacionar eles com outro objeto. Seria o IfcColeira por exemplo. Se atualizarmos a estrutura de dados do IfcCao para essa lógica ficaria assim:

IFCCao: ( 

Cauda: verdadeiro [verdadeiro ou falso],

Patas: 4 [número inteiro],

Sexo: macho | fêmea [uma de duas opções],

Nome: qualquer nome [texto qualquer],

Dono: qualquer nome [texto qualquer, opcional],

Coleira: #123456 [id do objeto do tipo IfcColeira, máximo de 1 coleira]  

)

Agora veja que o atributo Coleira na classe IfcCao pede um dado que obrigatoriamente deve ser um valor que represente um objeto da classe IfcColeira, ou seja, não é permitido escrever o tipo de dado que quisermos nesse atributo, somente o id de um objeto IfcColeira.

Já o objeto IfcColeira teria uma estrutura de dados conforme o seguinte:

#123456=IfcColeira(

Cão: #123 [id de um objeto do tipo IfcCao],

Pessoa: #456 [id de um objeto do tipo IfcPessoa],

Tipo: pano | couro [somente um dos dois tipos]

)

A pessoa teria a seguinte estrutura de dados:

#456=IfcPessoa(

Nome: qualquer nome [texto qualquer],

Coleira: #123456 [id de objeto do tipo IfcColeira],

Idade: número [número positivo],

Sexo: masculino | feminino [uma de duas opções]

)

Agora veja como a relação acontece. Ambos os objetos IfcCao e IfcPessoa podem possuir instâncias e para que os dois estejam relacionados eles dependem de um objeto de relação, no caso, é o papel do objeto IfcColeira fornece essa relação. No atributo da relação, tanto cão quanto pessoa tem por obrigação ter o valor que aponte para o id de um objeto do tipo IfcColeira.

Essa é uma das melhores analogias que encontrei para compreender estruturas de dados na programação e também no IFC, que no fundo tem as bases de linguagem de programação.

Nos próximos artigos pretendo trazer mais detalhes de como o IFC funciona e facilitar a compreensão dos seus conceitos.

Comments


bottom of page