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: 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#

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#



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#


- 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.


