{"id":29614762,"url":"https://github.com/pabllodantas/clashopenings","last_synced_at":"2026-05-15T12:34:50.174Z","repository":{"id":304088244,"uuid":"1017691544","full_name":"PablloDantas/ClashOpenings","owner":"PablloDantas","description":"Clash Opening is a Revit plugin (C# + WPF) that automates the detection of clashes between pipes and slabs and inserts the drill-hole family at the conflict point.  PT-BR é um plugin para Revit (C# + WPF) que automatiza a detecção de interferências entre tubulações e lajes e insere a família de furação no ponto de conflito.","archived":false,"fork":false,"pushed_at":"2025-07-16T17:02:27.000Z","size":38544,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-07-17T15:17:21.901Z","etag":null,"topics":["clash","conflict-detection","revit-api"],"latest_commit_sha":null,"homepage":"https://www.linkedin.com/in/pabllodantas/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PablloDantas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-11T00:25:44.000Z","updated_at":"2025-07-16T17:02:31.000Z","dependencies_parsed_at":"2025-07-17T18:43:39.979Z","dependency_job_id":null,"html_url":"https://github.com/PablloDantas/ClashOpenings","commit_stats":null,"previous_names":["pabllodantas/slabintersectiondriller","pabllodantas/clashopenings"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/PablloDantas/ClashOpenings","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PablloDantas%2FClashOpenings","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PablloDantas%2FClashOpenings/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PablloDantas%2FClashOpenings/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PablloDantas%2FClashOpenings/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PablloDantas","download_url":"https://codeload.github.com/PablloDantas/ClashOpenings/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PablloDantas%2FClashOpenings/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266217170,"owners_count":23894242,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clash","conflict-detection","revit-api"],"created_at":"2025-07-21T00:00:35.550Z","updated_at":"2026-04-12T16:10:31.617Z","avatar_url":"https://github.com/PablloDantas.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿# ClashOpenings - Plugin Revit para Detecção de Conflitos e Criação Automática de Furos\n\nEste projeto é uma biblioteca de classes desenvolvida como um plugin para o Autodesk Revit 2025. Ele utiliza a API do\nRevit e o framework .NET 8 para automatizar o processo de detecção de conflitos (clash detection) entre elementos\nestruturais (pisos e lajes) e elementos MEP (tubos e conduítes) em modelos vinculados. Após a detecção, o plugin gera\nautomaticamente furações nas lajes e pisos, garantindo a coordenação entre as disciplinas.\n\n## Tecnologias Utilizadas\n\n* **Revit API 2025**: Para interação direta com o ambiente e modelos do Revit.\n* **.NET 8**: Framework de desenvolvimento robusto e moderno.\n* **C# 13.0**: Linguagem de programação.\n\nEste plugin não possui dependências externas, o que simplifica sua implantação e manutenção.\n\n## Início Rápido (Quick Start)\n\n### IDE / Building\n\nPara instalar e preparar o plugin para uso, siga os passos abaixo:\n\n1. **Clone o repositório** (ou obtenha os arquivos do projeto).\n2. **Restaure as dependências NuGet**:\n   ```bash\n   dotnet restore\n   ```\n3. **Compile o projeto**:\n   ```bash\n   dotnet build\n   ```\n\nApós a compilação bem-sucedida, os arquivos de saída (DLLs e recursos necessários) serão automaticamente copiados para a\npasta padrão de plugins do Revit, tornando-o acessível na próxima vez que você iniciar o Revit.\n\n### Instalador\n\nCaso prefira realizar a instalação através do executável, a versão final está disponível em:\n[ClashOpenings-Setup-0.1-win64.exe](https://github.com/PablloDantas/ClashOpenings/blob/560ce2b691ca48cce061b15c92f2b9194123c0f2/Release/ClashOpenings-Setup-0.1-win64.exe)\n\n## Como Utilizar\n\nUma vez que o plugin esteja instalado e o Revit iniciado, siga estas instruções para utilizá-lo:\n\n1. **Abra seu projeto no Revit** que contém os modelos vinculados (estrutural e MEP) para os quais você deseja realizar\n   a detecção de conflitos.\n2. **Acesse o plugin**:\n    * No Revit, localize a aba ou o painel onde o plugin \"Passagens BIM\" está disponível.\n    * Clique no botão \"Inserir Passagens\" do plugin para iniciar sua interface de usuário.\n    * ![Resources/Images/PluginButton.png](Resources/Images/PluginButton.png \"Plugin Button\")\n3. **Painel Acoplável (Dockable Panel)**:\n    * Ao clicar no botão, um painel acoplável será exibido na sua área de trabalho do Revit.\n    * Este painel contém dois `ComboBox` (caixas de seleção).\n    * ![Resources/Images/DockPanelInitial.png](Resources/Images/DockPanelInitial.png)\n4. **Selecione os Vínculos**:\n    * Utilize os `ComboBox` para selecionar os modelos vinculados que representam a disciplina estrutural (contendo\n      pisos e lajes) e a disciplina MEP (contendo tubos e conduítes).\n5. **Inicie a Detecção de Conflitos**:\n    * Após selecionar os vínculos, clique no botão \"Criar Passagem\" (ou texto similar no botão).\n6. **Processamento e Criação de Furações**:\n    * O plugin executará a lógica de detecção de conflitos entre os elementos selecionados dos dois modelos.\n    * Para cada conflito detectado, o plugin instanciará uma família de furação no modelo atual, nas posições corretas.\n    * **Dimensionamento das Furações**:\n        * A altura da furação é definida pela espessura da laje mais uma folga de 10 cm.\n        * O comprimento e a largura da furação são determinados pelo diâmetro do tubo ou conduíte em conflito, mais 1 cm\n          de folga.\n    * **Rastreabilidade dos Dados**:\n        * Para fins de rastreabilidade, os IDs dos elementos que foram analisados no clash detection (tanto do modelo\n          estrutural quanto do MEP) são adicionados como parâmetros nas instâncias das furações criadas.\n        * ![Resources/Images/Openings.png](Resources/Images/Openings.png)\n        * ![Resources/Images/OpeningsZoom.png](Resources/Images/OpeningsZoom.png)\n7. **Resumo da Execução**:\n    * Ao concluir o processo, a interface do usuário exibirá um resumo informando:\n        * Quantos conflitos foram encontrados.\n        * Quantas furações foram instanciadas no modelo.\n        * ![Resources/Images/DockPanelFinalState.png](Resources/Images/DockPanelFinalState.png)\n\nEste processo garante uma coordenação eficiente entre as disciplinas, reduzindo retrabalho e erros durante a fase de\nconstrução.\n\n## Fluxo da Aplicação / Arquitetura\n\n### Arquitetura do Plugin: Padrão Model-View-ViewModel (MVVM)\n\nFoi adotado o padrão de design **Model-View-ViewModel (MVVM)**. Esta escolha arquitetural visa garantir uma separação de\nresponsabilidades, promovendo a modularidade, manutenibilidade e a colaboração eficaz.\n\n#### Visão Geral do Padrão MVVM\n\nO MVVM é um padrão de arquitetura de software que estrutura a aplicação em três componentes interconectados:\n\n1. **Model**: Representa a lógica de negócios central, as regras de validação de dados, e a interface com os serviços de\n   dados e o ambiente do Revit. O Model é completamente independente da interface do usuário e encapsula as operações\n   fundamentais do plugin, como a interação com a API do Revit, manipulação de elementos e persistência de dados.\n2. **View**: Corresponde à interface do usuário (UI) exibida ao utilizador. No contexto deste plugin, a View compreende\n   o painel acoplável () com seus controles interativos, como `ComboBoxes` e botões. A View é \"passiva\", refletindo o\n   estado apresentado pelo ViewModel e delegando as interações do usuário (eventos) de volta ao ViewModel, geralmente\n   através de data binding. `DockablePane`\n3. **ViewModel**: Atua como um intermediário entre a View e o Model. Ele expõe os dados e operações do Model de uma\n   forma que a View possa consumir facilmente através de mecanismos de _data binding_. O ViewModel contém a lógica de\n   apresentação, gerencia o estado da View, e orquestra as chamadas para o Model em resposta às ações do usuário.\n   Crucialmente, o ViewModel não possui conhecimento direto da View, permitindo que a lógica de apresentação seja\n   desenvolvida e testada independentemente da UI.\n\n#### Componentes Arquiteturais e Responsabilidades\n\n- **Namespace: `ClashOpenings.Presentation`** Este namespace é dedicado à camada de apresentação, englobando os\n  componentes `View` e `ViewModel`.\n    - **`DockablePaneService.cs`**\n        - **Responsabilidade**: Esta classe é fundamental para a integração da interface do usuário do plugin com o\n          ambiente do Revit. Ela é encarregada de gerenciar o ciclo de vida do painel acoplável (), incluindo sua\n          criação, registro junto à API do Revit e controle de visibilidade. A `DockablePaneService` atua como um _host_\n          para a `View` do plugin, garantindo que a interface seja corretamente exibida e funcional dentro da aplicação\n          Revit. No contexto MVVM, ela facilita a \"montagem\" da `View` no ambiente hospedeiro. `DockablePane`\n\n- **Namespace: `ClashOpenings.Services`** Este namespace contém a lógica de negócios principal do plugin, representando\n  a camada **Model**.\n    - **`ClashDetective.cs`**\n        - **Responsabilidade**: Esta é a classe central para a funcionalidade de detecção de conflitos (\n          `Clash Detection`). Suas responsabilidades abrangem:\n            - Aquisição e processamento de dados de elementos (pisos, lajes, tubos, conduítes) de modelos vinculados no\n              Revit.\n            - Implementação de algoritmos de detecção de interferências entre elementos estruturais e MEP.\n            - Cálculo preciso das transformações geométricas e dimensões necessárias para as aberturas (furações) com\n              base nos conflitos identificados. A presença de métodos como `CalculateClashTransforms` (que retorna\n              `(Transform transform1, Transform transform2, Transform transform2To1)`) sublinha seu papel na manipulação\n              e análise de dados geométricos.\n            - Orquestração da criação de instâncias de famílias de furação no modelo do Revit, incluindo a definição de\n              seus parâmetros (altura, largura, comprimento) e a atribuição de IDs de rastreabilidade para os elementos\n              em conflito.\n\n        - **Papel no MVVM**: Atua como um componente vital do **Model**, provendo as operações de negócios e manipulação\n          de dados que são invocadas pelo `ViewModel` para executar a funcionalidade primária do plugin.\n\n#### Componentes Implícitos na Estrutura MVVM\n\nAlém das classes explicitamente mencionadas, a arquitetura MVVM implica a existência de outros componentes essenciais:\n\n- **Views (Arquivos XAML)**: Espera-se a presença de arquivos XAML (ex: `MainView.xaml` ou `ClashPanel.xaml`) dentro do\n  namespace `ClashOpenings.Presentation`. Estes arquivos são responsáveis por definir a estrutura visual da interface do\n  usuário do painel acoplável, incluindo os controles interativos e elementos de exibição de resultados.\n- **ViewModels (Classes C#)**: Complementando as Views, haverá classes C# correspondentes (ex: `MainViewModel.cs` ou\n  `ClashPanelViewModel.cs`) também no namespace `ClashOpenings.Presentation`. Estas classes expõem as propriedades\n  observáveis para _data binding_ com a View (e.g., listas de modelos vinculados, status da execução) e implementam os\n  comandos que a View pode acionar (e.g., o comando para iniciar a detecção de conflitos). O `ViewModel` interage com o\n  `ClashDetective` e outros serviços do `Model` para realizar as operações e atualizar o estado da `View`.\n\nEm suma, a adesão ao padrão MVVM e a clara segregação de responsabilidades entre as camadas `Presentation` e `Services`\ncapacitam o plugin ClashOpenings com uma base arquitetural sólida. Esta estrutura não só otimiza a legibilidade e a\nmanutenibilidade do código, mas também facilita o desenvolvimento e a evolução contínua das funcionalidades do plugin.\n\n![MainFlow.svg](Resources/Images/MainFlow.svg)\n\n## Créditos\n\nMuito obrigado ao Ricaun por disponibilizar projetos de exemplo para se trabalhar com dockable panels, a maior parte dos \nserviç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:\n* [ricaun.Revit.UI.Dockable](https://github.com/ricaun-io/RevitAddin.Dockable.Example)\n* [RevitAddin.Dockable.Example](https://github.com/ricaun-io/RevitAddin.Dockable.Example)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpabllodantas%2Fclashopenings","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpabllodantas%2Fclashopenings","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpabllodantas%2Fclashopenings/lists"}