Pular para o conteúdo principal

Usando a pré-seleção do AutoCAD - "Pickfirst"

Muitos comandos do AutoCAD que o trabalham em conjuntos de entidades ou seja, você pode selecionar um conjunto de objetos e aplicar um comando. Isso basicamente significa que se o usuário tem pré-selecionado um conjunto de entidades e, em seguida, lança comando e será necessário solicitar que o usuário selecioná-los novamente, isso é pratico é útil.


Isto é possível usando algo chamado PICKFIRST que está definido dentro de AutoCAD. Para aproveitar esse recurso dentro de seus comandos, a primeira coisa a fazer é usar uma CommandFlag  especial chamada "UsePickSet": isto diz o editor do AutoCAD não para limpar o conjunto PICKFIRST quando o comando é invocado. Em seguida, a implementação do comando usará o método SelectImplied () no objeto editor para recuperar o conjunto PICKFIRST, deve estar disponível. Nesta fase também é boa prática para limpar o PICKFIRST definido com SetImpliedSelection ().

O problema é que ele pode não ter selecionado nada e ai como se faz?

O exemplo mostra como usar o PICKFIRST permitindo que mesmo que o usuário não selecione nada ele volte a pedir uma seleção,ou seja, se não houver um conjunto PICKFIRST. Quanto ao que fazemos com as entidades selecionadas é a aplicação.



 using Autodesk.AutoCAD;  
 using Autodesk.AutoCAD.Runtime;  
 using Autodesk.AutoCAD.ApplicationServices;  
 using Autodesk.AutoCAD.DatabaseServices;  
 using Autodesk.AutoCAD.EditorInput;  
 namespace SelectionTest  
 {  
  public class PickfirstTestCmds  
  {  
   // Must have UsePickSet specified  
   [CommandMethod("PFT", CommandFlags.UsePickSet |  
              CommandFlags.Redraw |  
              CommandFlags.Modal)  
   ]  
   static public void PickFirstTest()  
   {  
    Document doc =  
     Application.DocumentManager.MdiActiveDocument;  
    Editor ed = doc.Editor;  
    try  
    {  
     PromptSelectionResult selectionRes =  
      ed.SelectImplied();  
     // If there's no pickfirst set available...  
     if (selectionRes.Status == PromptStatus.Error)  
     {  
      // ... ask the user to select entities  
      PromptSelectionOptions selectionOpts =  
       new PromptSelectionOptions();  
      selectionOpts.MessageForAdding =  
       "\nSelect objects to list: ";  
      selectionRes =  
       ed.GetSelection(selectionOpts);  
     }  
     else  
     {  
      // If there was a pickfirst set, clear it  
      ed.SetImpliedSelection(new ObjectId[0]);  
     }  
     // If the user has not cancelled...  
     if (selectionRes.Status == PromptStatus.OK)  
     {  
      // ... take the selected objects one by one  
      Transaction tr =  
       doc.TransactionManager.StartTransaction();  
      try  
      {  
       ObjectId[] objIds = selectionRes.Value.GetObjectIds();  
       foreach (ObjectId objId in objIds)  
       {  
        Entity ent =  
         (Entity)tr.GetObject(objId, OpenMode.ForRead);  
        // In this simple case, just dump their properties  
        // to the command-line using list  
        ent.List();  
        ent.Dispose();  
       }  
       // Although no changes were made, use Commit()  
       // as this is much quicker than rolling back  
       tr.Commit();  
      }  
      catch (Autodesk.AutoCAD.Runtime.Exception ex)  
      {  
       ed.WriteMessage(ex.Message);  
       tr.Abort();  
      }  
     }  
    }  
    catch(Autodesk.AutoCAD.Runtime.Exception ex)  
    {  
     ed.WriteMessage(ex.Message);  
    }  
   }  
  }  
 }  

Este post eu fiz porque estava melhorando alguns dos meus comando e incluindo essa funcionalidade, tanto o exemplo como a fonte para esse post estão no Blog do Kean Walmsey

Comentários

Postagens mais visitadas deste blog

Numeração Automática no AutoCAD

Sem dúvida esse é uma ferramenta única que fazia falta a tempos e foi introduzida recentemente no AutoCAD, na última década… Em 2013 tinha feito um programa para criar uma bolinhas de numeração automática usando o conceito de Leader eu fazia um controle dos números dos itens na mão mesmo, depois de um tempo resolvi fazer um menuzinho para controlar o conteúdo do número dos bullets, hoje isso não é mais necessário, existe um comando no próprio AutoCAD para isso e faz parte das Ferramentas Expressas do AutoCAD. Gosto de compartilhar ferramentas e dicas que tendem a ser menos conhecidas ou subutilizadas, mas ainda podem fornecer um impulso para sua produtividade e fluxo de trabalho e que eu mesmo me surpreendi quando as encontrei Hoje, quero apresentar outra ferramenta, a numeração automática. Como o nome indica, o comando Numeração automática permite que você adicione automaticamente um número às etiquetas ou texto em um desenho. Vou mostrar como a numeração automática pode ser usada par...

Unindo blocos em AutoCAD utilizando .NET

Hoje me deparai com uma necessidade de unir blocos com propriedades então resolvi fazer um comando para realizar esses procedimento. A principio esse procedimento não é tão complexo de ser executado individualmente mas por outro lado gostaria também de analisar um pouco melhor as possibilidades de se manipular blocos utilizando o AutoCAD. Abaixo o código que utilizei: using Autodesk.AutoCAD.ApplicationServices ; using Autodesk.AutoCAD.DatabaseServices ; using Autodesk.AutoCAD.EditorInput ; using Autodesk.AutoCAD.Runtime ; using System.Linq ; // This line is not mandatory, but improves loading performances [assembly: CommandClass(typeof(Merging_AutoCAD_blocks.Comandos))] namespace Merging_AutoCAD_blocks { public class Comandos { /// <summary> /// Uni dois ou mais blocos em um unico bloco. /// </summary> [CommandMethod("MERGBLKS")] public static void UnindoBlocos () {...

Operando com Imagens Georreferenciadas no AutoCAD - Ortofotos

A coisa mais desagradável para quem trabalha com documentos em DWG com ortofotos ( fotos aéreas georreferenciadas) é quando se recebe o documento e a ortofoto não é carregada. Uma linha de transmissão onde a plotagem da estruturas é feita em um documento combinado de planta e perfil. Na área da planta é feito pela topografia um serviço de recorte e renderização das imagens em formato de ortofoto na região do desenho. Como a linha de transmissão a projeção é feita sempre linear na planta observando os vértices uma mesma ortofoto pode ser representada várias vezes numa mesma folha em um enjanelamento diferente. Tratamento de Ortofotos no AutoCAD - EXTERNALREFERENCES As ortofotos no AutoCAD são tratadas como referências a objetos externos. Isso é bom porque cada ortofoto pode ter de poucos kb até Gb de tamanho. Se for parte integrante do DWG poderia deixa-lo grande de mais para ser manipulado. Cada projeção no documento funciona como uma imagem projetada em um...