Este projeto é uma biblioteca de classes desenvolvida como um plugin para o Autodesk Revit 2025. Ele utiliza a API do Revit e o framework .NET 8 para automatizar o processo de detecção de conflitos (clash detection) entre elementos estruturais (pisos e lajes) e elementos MEP (tubos e conduítes) em modelos vinculados. Após a detecção, o plugin gera automaticamente furações nas lajes e pisos, garantindo a coordenação entre as disciplinas.
- Revit API 2025: Para interação direta com o ambiente e modelos do Revit.
- .NET 8: Framework de desenvolvimento robusto e moderno.
- C# 13.0: Linguagem de programação.
Este plugin não possui dependências externas, o que simplifica sua implantação e manutenção.
Para instalar e preparar o plugin para uso, siga os passos abaixo:
- Clone o repositório (ou obtenha os arquivos do projeto).
- Restaure as dependências NuGet:
dotnet restore
- Compile o projeto:
dotnet build
Após a compilação bem-sucedida, os arquivos de saída (DLLs e recursos necessários) serão automaticamente copiados para a pasta padrão de plugins do Revit, tornando-o acessível na próxima vez que você iniciar o Revit.
Caso prefira realizar a instalação através do executável, a versão final está disponível em: ClashOpenings-Setup-0.1-win64.exe
Uma vez que o plugin esteja instalado e o Revit iniciado, siga estas instruções para utilizá-lo:
- Abra seu projeto no Revit que contém os modelos vinculados (estrutural e MEP) para os quais você deseja realizar a detecção de conflitos.
- Acesse o plugin:
- Painel Acoplável (Dockable Panel):
- Selecione os Vínculos:
- Utilize os
ComboBoxpara selecionar os modelos vinculados que representam a disciplina estrutural (contendo pisos e lajes) e a disciplina MEP (contendo tubos e conduítes).
- Utilize os
- Inicie a Detecção de Conflitos:
- Após selecionar os vínculos, clique no botão "Criar Passagem" (ou texto similar no botão).
- Processamento e Criação de Furações:
- O plugin executará a lógica de detecção de conflitos entre os elementos selecionados dos dois modelos.
- Para cada conflito detectado, o plugin instanciará uma família de furação no modelo atual, nas posições corretas.
- Dimensionamento das Furações:
- A altura da furação é definida pela espessura da laje mais uma folga de 10 cm.
- O comprimento e a largura da furação são determinados pelo diâmetro do tubo ou conduíte em conflito, mais 1 cm de folga.
- Rastreabilidade dos Dados:
- Resumo da Execução:
Este processo garante uma coordenação eficiente entre as disciplinas, reduzindo retrabalho e erros durante a fase de construção.
Foi adotado o padrão de design Model-View-ViewModel (MVVM). Esta escolha arquitetural visa garantir uma separação de responsabilidades, promovendo a modularidade, manutenibilidade e a colaboração eficaz.
O MVVM é um padrão de arquitetura de software que estrutura a aplicação em três componentes interconectados:
- Model: Representa a lógica de negócios central, as regras de validação de dados, e a interface com os serviços de dados e o ambiente do Revit. O Model é completamente independente da interface do usuário e encapsula as operações fundamentais do plugin, como a interação com a API do Revit, manipulação de elementos e persistência de dados.
- View: Corresponde à interface do usuário (UI) exibida ao utilizador. No contexto deste plugin, a View compreende
o painel acoplável () com seus controles interativos, como
ComboBoxese botões. A View é "passiva", refletindo o estado apresentado pelo ViewModel e delegando as interações do usuário (eventos) de volta ao ViewModel, geralmente através de data binding.DockablePane - ViewModel: Atua como um intermediário entre a View e o Model. Ele expõe os dados e operações do Model de uma forma que a View possa consumir facilmente através de mecanismos de data binding. O ViewModel contém a lógica de apresentação, gerencia o estado da View, e orquestra as chamadas para o Model em resposta às ações do usuário. Crucialmente, o ViewModel não possui conhecimento direto da View, permitindo que a lógica de apresentação seja desenvolvida e testada independentemente da UI.
-
Namespace:
ClashOpenings.PresentationEste namespace é dedicado à camada de apresentação, englobando os componentesVieweViewModel.DockablePaneService.cs- Responsabilidade: Esta classe é fundamental para a integração da interface do usuário do plugin com o
ambiente do Revit. Ela é encarregada de gerenciar o ciclo de vida do painel acoplável (), incluindo sua
criação, registro junto à API do Revit e controle de visibilidade. A
DockablePaneServiceatua como um host para aViewdo plugin, garantindo que a interface seja corretamente exibida e funcional dentro da aplicação Revit. No contexto MVVM, ela facilita a "montagem" daViewno ambiente hospedeiro.DockablePane
- Responsabilidade: Esta classe é fundamental para a integração da interface do usuário do plugin com o
ambiente do Revit. Ela é encarregada de gerenciar o ciclo de vida do painel acoplável (), incluindo sua
criação, registro junto à API do Revit e controle de visibilidade. A
-
Namespace:
ClashOpenings.ServicesEste namespace contém a lógica de negócios principal do plugin, representando a camada Model.ClashDetective.cs-
Responsabilidade: Esta é a classe central para a funcionalidade de detecção de conflitos (
Clash Detection). Suas responsabilidades abrangem:- Aquisição e processamento de dados de elementos (pisos, lajes, tubos, conduítes) de modelos vinculados no Revit.
- Implementação de algoritmos de detecção de interferências entre elementos estruturais e MEP.
- Cálculo preciso das transformações geométricas e dimensões necessárias para as aberturas (furações) com
base nos conflitos identificados. A presença de métodos como
CalculateClashTransforms(que retorna(Transform transform1, Transform transform2, Transform transform2To1)) sublinha seu papel na manipulação e análise de dados geométricos. - Orquestração da criação de instâncias de famílias de furação no modelo do Revit, incluindo a definição de seus parâmetros (altura, largura, comprimento) e a atribuição de IDs de rastreabilidade para os elementos em conflito.
-
Papel no MVVM: Atua como um componente vital do Model, provendo as operações de negócios e manipulação de dados que são invocadas pelo
ViewModelpara executar a funcionalidade primária do plugin.
-
Além das classes explicitamente mencionadas, a arquitetura MVVM implica a existência de outros componentes essenciais:
- Views (Arquivos XAML): Espera-se a presença de arquivos XAML (ex:
MainView.xamlouClashPanel.xaml) dentro do namespaceClashOpenings.Presentation. Estes arquivos são responsáveis por definir a estrutura visual da interface do usuário do painel acoplável, incluindo os controles interativos e elementos de exibição de resultados. - ViewModels (Classes C#): Complementando as Views, haverá classes C# correspondentes (ex:
MainViewModel.csouClashPanelViewModel.cs) também no namespaceClashOpenings.Presentation. Estas classes expõem as propriedades observáveis para data binding com a View (e.g., listas de modelos vinculados, status da execução) e implementam os comandos que a View pode acionar (e.g., o comando para iniciar a detecção de conflitos). OViewModelinterage com oClashDetectivee outros serviços doModelpara realizar as operações e atualizar o estado daView.
Em suma, a adesão ao padrão MVVM e a clara segregação de responsabilidades entre as camadas Presentation e Services
capacitam o plugin ClashOpenings com uma base arquitetural sólida. Esta estrutura não só otimiza a legibilidade e a
manutenibilidade do código, mas também facilita o desenvolvimento e a evolução contínua das funcionalidades do plugin.
Muito obrigado ao Ricaun por disponibilizar projetos de exemplo para se trabalhar com dockable panels, a maior parte dos serviços para integração, cadastro e inicialização dos painéis com a API do Revit foram feitas usando os recursos disponíveis nos repositórios:




