videorevitapipythonrevitpythonshell

As nove linhas — um script Revit de verdade, lido linha por linha

Nove linhas de Python que preenchem 400 campos em menos de dois segundos, lidas uma a uma: import, collector, transação, loop, LookupParameter, a linha da prudência, Commit.

Paulo Giavoni

Paulo Giavoni

Engenheiro & Especialista BIM

22 agosto 20265 min de leitura

Cinquenta e três minutos, ou dois segundos#

Quatrocentos dutos em um modelo, e cada um tem o seu campo “Comentários” para preencher à mão. Oito segundos por duto, se você nunca parar: dá cinquenta e três minutos. Uma hora da sua quarta-feira para escrever quatrocentas vezes a mesma palavra.

Nove linhas de Python fazem a mesma coisa em menos de dois segundos. Aqui vamos ler todas as nove, sem pular nenhuma.

A única imagem de que você precisa#

O Revit, para quem programa, é uma caixa de peças prontas. O Python são as suas mãos. No meio está o formato dos encaixes, e isso se chama API. Cada encaixe diz como se chama, o que você precisa entregar e o que ele devolve. Com isso em mente, cada linha a seguir é um encaixe.

Onde as coisas moram#

Revit.exe, RevitAPI.dll e RevitAPIUI.dll: o programa e as duas caixas de pecinhas
Revit.exe, RevitAPI.dll e RevitAPIUI.dll: o programa e as duas caixas de pecinhas
Em “Arquivos de Programas, Autodesk, Revit 2025” moram três inquilinos:
  • Revit.exe: o programa. Você nunca mexe nele.
  • RevitAPI.dll: a caixa de pecinhas do modelo. Paredes, dutos, parâmetros, transações. Lado DB, banco de dados.
  • RevitAPIUI.dll: a outra caixa, a interface. Seleção, janelas, ribbon. Lado UI.

Uma dll é uma biblioteca: um programa sem botão de iniciar, feito para ser usado por outros programas. Você não abre, você importa.

No RevitPythonShell, as duas caixas já estão em cima da mesa, reduzidas a duas palavras: doc, o modelo, e uidoc, a interface.

Começamos errando#

A pecinha existe, mas está dentro da caixa Autodesk.Revit.DB: falta o import
A pecinha existe, mas está dentro da caixa Autodesk.Revit.DB: falta o import
Três linhas que pedem as paredes do modelo, F5, e o console responde: NameError: name FilteredElementCollector is not defined. Traduzindo: e quem é esse cidadão?

Não é defeito, é o contrato falando. A pecinha existe, mas ainda está na caixa. Você a declara com um import: from Autodesk.Revit.DB import FilteredElementCollector. Da prateleira Autodesk-Revit-DB, me traga o collector.

As nove linhas#

Linha 6: FilteredElementCollector(doc).OfClass(Wall), e depois só as paredes
Linha 6: FilteredElementCollector(doc).OfClass(Wall), e depois só as paredes
Linha 12: if p and not p.IsReadOnly, a linha da prudência
Linha 12: if p and not p.IsReadOnly, a linha da prudência
Linha 14: Commit, e os quatrocentos dutos mudando juntos
Linha 14: Commit, e os quatrocentos dutos mudando juntos
Linha 6. walls = FilteredElementCollector(doc).OfClass(Wall). Abra o fichário do modelo e, depois, fique só com as paredes. O ponto se lê “e depois”. walls = dá um nome ao maço de fichas: uma variável.

Linha 8. t = Transaction(doc, "Preencher Comentários"). Uma transação é um contrato: vou mexer no modelo e, a partir de agora, até eu assinar, tudo é um bloco único. O texto entre aspas aparece no histórico do desfazer: use nomes de verdade.

Linha 9. t.Start(). O contrato se abre. Os parênteses vazios são o dedo apertando o botão.

Linha 10. for w in walls:. Um loop: para cada parede, faça o que vem a seguir. É por isso que quatrocentos dutos custam o mesmo que quatro. O recuo das linhas depois dos dois-pontos não é estética: em Python, é gramática.

Linha 11. p = w.LookupParameter("Commenti"). Desta parede, me dê o campo que se chama Commenti. Atenção: o nome é o do idioma da sua interface. O vídeo usa um Revit em italiano; em um Revit em português, ele se chama Comentários, e em inglês, Comments.

Linha 12. if p and not p.IsReadOnly:. A prudência. Se o parâmetro existe mesmo, e não é somente leitura. Sem esta linha, o script funciona por um tempo, até chegar a parede esquisita e ele parar no meio.

Linha 13. p.Set("Verificado"). O trabalho de verdade, em uma linha. Recuada duas vezes: está dentro do if, que está dentro do for.

Linha 14. t.Commit(). Assina-se. Se algo tivesse dado errado na parede duzentos e trinta, o contrato não fecha e o Revit deixa tudo como estava. Tudo, ou nada. Nunca pela metade.

Três palavras e um sobrenome#

Element: uma parede, uma vista, uma tabela, um carimbo são a mesma coisa
Element: uma parede, uma vista, uma tabela, um carimbo são a mesma coisa
A paleta Propriedades e a API: as mesmas fichas, vistas de outra janela
A paleta Propriedades e a API: as mesmas fichas, vistas de outra janela
  • Document: não é o arquivo .rvt. O arquivo é o livro fechado na estante; Document é o livro aberto na mesa, a sessão viva.
  • Element: tudo é Element. Uma parede, um duto, mas também a vista, a tabela, o nível, o carimbo. Um único conjunto de verbos serve para tudo.
  • Parameter: a ficha de cada elemento. Nome, comprimento, comentários, nível.
  • ElementId: o número único de cada elemento, válido dentro daquele documento e só.

E a virada que vale o vídeo inteiro: a paleta Propriedades não é a informação. É uma janela apontada para as fichas. A API olha as mesmas fichas por outra janela. É por isso que um script lê em um segundo o que à mão custa mil cliques: ele não clica mais rápido, ele não clica.

Três perguntas sem resposta técnica#

Por que preciso abrir uma transação? Por que as unidades internas são em pés? Por que, com dezesseis núcleos, o Revit usa um só? Nenhuma das três é capricho. São fósseis, e há um vídeo só sobre isso: “Os fósseis”.

Assista ao vídeo#

Dezesseis minutos na janela real do RevitPythonShell dentro do Revit: o erro, o import, as nove linhas rodando e os quatrocentos dutos mudando juntos. O vídeo está em italiano.

O vídeo completo está no YouTube: se você gostou, inscreva-se no canal e ative o sininho para os próximos episódios.

Dúvidas ou comentários?

Perguntas sobre os vídeos e o livro são bem-vindas: me escreva, ou comente embaixo do vídeo no YouTube.

No LinkedIn publico cada vídeo do canal, com algumas linhas a mais.