Você está aqui: Revit C# ::: Dicas & Truques ::: Selection, Seleção |
Como criar um filtro de seleção de elementos no Revit usando a interface ISelectionFilter da Revit C# APIQuantidade de visualizações: 238 vezes |
Quando estamos escrevendo macros ou plug-ins Revit que pedem para o usuário selecionar um ou mais elementos, é sempre uma boa idéia fornecer um filtro de elementos, ou seja, quais tipos de elementos serão permitidos na seleção. Isso faz sentido. Imagine, por exemplo, que o seu código está esperando que o usuário selecione uma parede e, sem perceber, o usuário seleciona uma porta. Sua macro ou add-in vai prosseguir com a execução e, caso não provoque um erro imediato, estará trabalhando com o elemento errado. As funções de seleção PickElementsByRectangle(), PickObject() e PickObjects() da classe Selection aceitam um argumento do tipo ISelectionFilter, que uma interface que nos permite definir um filtro para os elementos que poderão ser selecionados pelo usuário. Tudo que temos a fazer é criar uma classe que implementa esta interface e fornecer nossa própria implementação para os métodos AllowElement() e AllowReference(). Veja um trecho de código Revit C# API completo no qual pedimos para o usuário selecionar uma parede. O usuário pode até passar o mouse por cima de outros elementos, mas somente paredes serão destacadas e poderão ser selecionadas: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- using System; using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.DB.Structure; using Autodesk.Revit.UI.Selection; using System.Collections.Generic; using System.Linq; namespace Estudos { [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes. TransactionMode.Manual)] [Autodesk.Revit.DB.Macros.AddInId("ED8EC6C4-9489-48F7-B04E-B45B5D1BEB12")] public partial class ThisApplication { private void Module_Startup(object sender, EventArgs e) { // vamos obter uma referência ao UIDocument ativo UIDocument uidoc = this.ActiveUIDocument; // agora mostramos uma mensagem para o usuário selecionar uma // parede TaskDialog.Show("Aviso", "Selecione uma parede"); // obtemos uma referência ao objeto Selection do // UIDocument ativo Selection selecao = uidoc.Selection; // e finalmente esperamos que o usuário selecione o elemento FiltroSelecao filtroSelecao = new FiltroSelecao(); Reference selecionado = selecao.PickObject(ObjectType.Element, filtroSelecao, "Selecione uma parede"); // agora testamos se o usuário realmente selecionou uma // parede if (selecionado != null) { TaskDialog.Show("Aviso", "Você selecionou uma parede."); } } private void Module_Shutdown(object sender, EventArgs e) { // para fazer alguma limpeza de memória ou algo assim } #region Revit Macros generated code private void InternalStartup() { this.Startup += new System.EventHandler(Module_Startup); this.Shutdown += new System.EventHandler(Module_Shutdown); } #endregion } // classe personalizada que implementa a interface ISelectionFilter // para criar um filtro de seleção de elementos public class FiltroSelecao : ISelectionFilter { // indica os elementos que poderão ser selecionados public bool AllowElement(Element e) { // o elemento é do tipo parede? if (e.Category.Name == "Paredes") { return true; } return false; } // em geral este método retorna false para não permitir referências public bool AllowReference(Reference r, XYZ p) { return false; } } } |
![]() |
Revit C# ::: Dicas & Truques ::: Selection, Seleção |
Como pedir para o usuário selecionar um ou mais elementos no Revit usando a função PickElementsByRectangle() do objeto Selection da Revit C# APIQuantidade de visualizações: 316 vezes |
A Seleção por Retângulo (ou Retângulo de Seleção) do Revit funciona da seguinte forma: a) Desenhe uma caixa de seleção ao colocar o cursor em um dos lados do elemento a ser selecionado e arraste-o na diagonal para formar um limite retangular. b) Para selecionar somente os elementos que estejam completamente dentro do limite da caixa de seleção, arraste o cursor da esquerda para a direita. c) Para selecionar quaisquer elementos que estejam completamente ou parcialmente dentro do limite da caixa de seleção, arraste o cursor da direita para a esquerda. Via código C# usando a API do Revit, nós podemos pedir para o usuário selecionar elementos usando o retângulo de seleção por meio da função PickElementsByRectangle() do objeto Selection e retornar os elementos selecionados em uma IList. O primeiro passo é obter uma referência ao documento atual UIDocument a partir de uma chamada a this.ActiveUIDocument. Em seguida nós obtemos o objeto Selection a partir do UIDocument e chamamos a sua função PickElementsByRectangle(). Finalmente, de posse da lista IList de elementos selecionados nós só precisamos acessar sua propriedade Count para verificar a quantidade de elementos que o usuário selecionou. Veja o código Revit C# completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- using System; using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.UI.Selection; using System.Collections.Generic; using System.Linq; namespace Estudos { [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes. TransactionMode.Manual)] [Autodesk.Revit.DB.Macros.AddInId("ED8EC6C4-9489-48F7-B04E-B45B5D1BEB12")] public partial class ThisApplication { private void Module_Startup(object sender, EventArgs e) { // vamos obter uma referência ao UIDocument ativo UIDocument uidoc = this.ActiveUIDocument; // agora mostramos uma mensagem para o usuário selecionar um // elemento TaskDialog.Show("Aviso", "Selecione um ou mais elementos"); // obtemos uma referência ao objeto Selection do // UIDocument ativo Selection selecao = uidoc.Selection; // e finalmente esperamos que o usuário selecione um ou // mais elementos usando a seleção de retângulo e os // guardamos em uma lista IList<Element> selecionados = selecao.PickElementsByRectangle( "Selecione os elementos"); // agora mostramos a quantidade de elementos selecionados TaskDialog.Show("Aviso", "Você selecionou " + selecionados.Count + " elementos."); } private void Module_Shutdown(object sender, EventArgs e) { // para fazer alguma limpeza de memória ou algo assim } #region Revit Macros generated code private void InternalStartup() { this.Startup += new System.EventHandler(Module_Startup); this.Shutdown += new System.EventHandler(Module_Shutdown); } #endregion } } Ao executar esta macro você verá uma mensagem TaskDialog com o seguinte aviso: Você selecionou 4 elementos. |
Revit C# ::: Dicas & Truques ::: Selection, Seleção |
Como pedir para o usuário selecionar somente um elemento no Revit usando a função PickObject() do objeto Selection da Revit C# APIQuantidade de visualizações: 398 vezes |
Durante o desenvolvimento de plug-ins e macros para o Revit usando C# e a API do Revit, nós precisamos pedir para o usuário selecionar um elemento e efetuar alguma operação com ele. Para isso nós podemos usar a função PickObject() do objeto Selection. O objeto Selection é obtido a partir de um UIDocument, que, por sua vez, é obtido usando this.ActiveUIDocument. Após a aquisição do objeto Selection, nós chamamos a função PickObject() e retornamos um objeto Reference, para representar o elemento selecionado pelo usuário na área de desenho do Revit. Se o objeto Reference retornado for diferente de null, então sabemos que o usuário selecionou o elemento e podemos proseguir com a execução do código do Plug-in ou macro. Veja o código Revit C# completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- using System; using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.UI.Selection; using System.Collections.Generic; using System.Linq; namespace Estudos { [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes. TransactionMode.Manual)] [Autodesk.Revit.DB.Macros.AddInId("ED8EC6C4-9489-48F7-B04E-B45B5D1BEB12")] public partial class ThisApplication { private void Module_Startup(object sender, EventArgs e) { // vamos obter uma referência ao UIDocument ativo UIDocument uidoc = this.ActiveUIDocument; // agora mostramos uma mensagem para o usuário selecionar um // elemento TaskDialog.Show("Aviso", "Selecione um elemento"); // obtemos uma referência ao objeto Selection do // UIDocument ativo Selection selecao = uidoc.Selection; // e finalmente esperamos que o usuário selecione o elemento Reference selecionado = selecao.PickObject(ObjectType.Element); // agora testamos se o usuário realmente selecionou um // elemento if (selecionado != null) { TaskDialog.Show("Aviso", "Você selecionou um elemento."); } } private void Module_Shutdown(object sender, EventArgs e) { // para fazer alguma limpeza de memória ou algo assim } #region Revit Macros generated code private void InternalStartup() { this.Startup += new System.EventHandler(Module_Startup); this.Shutdown += new System.EventHandler(Module_Shutdown); } #endregion } } |
Revit C# ::: Dicas & Truques ::: Selection, Seleção |
Como pedir para o usuário selecionar vários elementos no Revit usando a função PickObjects() do objeto Selection da Revit C# APIQuantidade de visualizações: 341 vezes |
Nesta dica mostrarei como podemos usar a função PickObjects() do objeto Selection da Revit C# API para pedir ao usuário que selecione vários elementos na área de desenho do Revit e então efetuar alguma operação envolvendo todos eles, de uma só vez. Veja que o objeto Selection é retornado a partir de um UIDocument, que é obtido a partir de uma chamada this.ActiveUIDocument. Então nós chamamos a função PickObjects(), fornecendo o parâmetro ObjectType.Element e guardamos as referências retornadas como um objeto IList. O passo seguinte é acessar a propriedade Count da IList para mostrar a quantidade de objetos selecionados. Note que é preciso clicar o botão Concluir (fica entre o botão Cancelar e a caixa de seleção Múltiplo) para indicar que o usuário concluiu a seleção e nosso código poder prosseguir. Veja o código Revit C# completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- using System; using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.UI.Selection; using System.Collections.Generic; using System.Linq; namespace Estudos { [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes. TransactionMode.Manual)] [Autodesk.Revit.DB.Macros.AddInId("ED8EC6C4-9489-48F7-B04E-B45B5D1BEB12")] public partial class ThisApplication { private void Module_Startup(object sender, EventArgs e) { // vamos obter uma referência ao UIDocument ativo UIDocument uidoc = this.ActiveUIDocument; // agora mostramos uma mensagem para o usuário selecionar um // elemento TaskDialog.Show("Aviso", "Selecione um ou mais elementos"); // obtemos uma referência ao objeto Selection do // UIDocument ativo Selection selecao = uidoc.Selection; // e finalmente esperamos que o usuário selecione um ou // mais elementos e os guardamos em uma lista IList<Reference> selecionados = selecao.PickObjects(ObjectType.Element); // agora mostramos a quantidade de elementos selecionados TaskDialog.Show("Aviso", "Você selecionou " + selecionados.Count + " elementos."); } private void Module_Shutdown(object sender, EventArgs e) { // para fazer alguma limpeza de memória ou algo assim } #region Revit Macros generated code private void InternalStartup() { this.Startup += new System.EventHandler(Module_Startup); this.Shutdown += new System.EventHandler(Module_Shutdown); } #endregion } } Execute a macro, selecione um ou mais elementos, clique o botão Concluir e você verá uma janela TaskDialog com a seguinte mensagem: Você selecionou 5 elementos. |
Veja mais Dicas e truques de Revit C# |
Dicas e truques de outras linguagens |
Python - Como usar a biblioteca Pandas do Python em seus projetos de Data Science e Machine Learning Java - Estruturas de Dados em Java - Como obter o nó com menor valor em uma árvore binária de busca em Java |
Códigos Fonte |
![]() Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
![]() Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |