Pular para o conteúdo principal

Finalmente por dentro das Variáveis de Ambiente do AutoCAD 2015!

A muito tempo, que já utiliza o AutoCAD .NET sabe o sufoco que é mudar uma variável de ambiente do AutoCAD.



Lembro que nos primeiros programas que fiz utilizando AutoCAD .NET utilizava muito isso para configurar a interface, as barras de ferramentas, abrir arquivos e carregar o próprio .NET em outras DLL's setando o "FILEDIA" para "0".

O problema está quando os comandos se sobrepõem porque o computador é muito lento e não executa qualquer um deles fazendo o AutoCAD ficar desconfigurado...

Mas é possível agora altear diretamente pelo código em .NET, nesse Post do Kean mostra como isso é feito no AutoCAD 2015.


 using Autodesk.AutoCAD.ApplicationServices;  
 using Autodesk.AutoCAD.ApplicationServices.Core;  
 using Autodesk.AutoCAD.EditorInput;  
 using Autodesk.AutoCAD.Geometry;  
 using Autodesk.AutoCAD.Runtime;  
 using System;  
 namespace SystemVariableEnumeration  
 {  
  public class Commands  
  {  
   [CommandMethod("ESV")]  
   public static void EnumerateSysVars()  
   {  
    var doc = Application.DocumentManager.MdiActiveDocument;  
    if (doc == null)  
     return;  
    var ed = doc.Editor;  
    // Use the existing SystemObjects iteration mechanism  
    foreach (var v in SystemObjects.Variables)  
    {  
     PrintVariable(ed, v);  
    }  
   }  
   [CommandMethod("ESV2")]  
   public static void EnumerateSysVars2()  
   {  
    var doc = Application.DocumentManager.MdiActiveDocument;  
    if (doc == null)  
     return;  
    var ed = doc.Editor;  
    // Use the new system variable enumerator  
    var sve = new SystemVariableEnumerator();  
    while (sve.MoveNext())  
    {  
     var v = sve.Current;  
     if (v != null)  
     {  
      PrintVariable(ed, v);  
     }  
    }  
   }  
   // Helper function to print out the information about  
   // a particular variable  
   private static void PrintVariable(Editor ed, Variable v)  
   {  
    var t = GetType(v.PrimaryType);  
    ed.WriteMessage(  
     "\n{0} ({1}, {2} - {3}): {4}",  
     v.Name,  
     t == null ? "null" : t.Name,  
     v.PrimaryType, v.SecondaryType, v.TypeFlags  
    );  
    if (v.Range != null)  
    {  
     ed.WriteMessage(  
      " [{0}...{1}]",  
      v.Range.LowerBound, v.Range.UpperBound  
     );  
    }  
   }  
   // Determine the type of a system variable based on  
   // the internal representation  
   private static System.Type GetType(short v)  
   {  
    Type ret = null;  
    switch (v)  
    {  
     case 1:  
     case 5001: // RTREAL real number  
      {  
       ret = typeof(Double);  
       break;  
      }  
     case 2:  
     case 5002: // RTPOINT: 2D point X and Y only  
      {  
       ret = typeof(Point2d);  
       break;  
      }  
     case 3:  
     case 5003: // RTSHORT: short integer  
      {  
       ret = typeof(Int16);  
       break;  
      }  
     case 4:  
     case 5004: // RTANG: angle  
      {  
       ret = null; // Angle  
       break;  
      }  
     case 5:  
     case 5005: // RTSTR: string  
      {  
       ret = typeof(String);  
       break;  
      }  
     case 6:  
     case 5006: // RTENAME: entity name  
      {  
       ret = null;  
       break;  
      }  
     case 7:  
     case 5007: // RTPICKS: pick set  
      {  
       ret = null;  
       break;  
      }  
     case 8:  
     case 5008: // RTORIENT: orientation  
      {  
       ret = null; // Orientation  
       break;  
      }  
     case 9:  
     case 5009: // RT3DPOINT: 3D point - X, Y and Z  
      {  
       ret = typeof(Point3d);  
       break;  
      }  
     case 10:  
     case 5010: // RTLONG: long integer  
      {  
       ret = typeof(Int32);  
       break;  
      }  
     case 11:  
     case 5011: // 2D extents of some kind  
      {  
       ret = typeof(Point2d);  
       break;  
      }  
    }  
    return ret;  
   }  
  }  
 }  


Como ele mesmo explica, uma grande parte deste código realmente "decodificar" as informações e retornar o objeto System.Type. 

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

Alterar a cor de fundo do AutoCAD

Eu sou um adepto do fundo preto, tudo que eu posso mudo a cor do fundo para preto. Nas ultimas versões do AutoCAD tenho notado que não é mais o padrão o fundo preto absoluto, é um cinza escuro. As vezes gosto também de mudar a cor do Layout de branco para preto afinal de contas quando trabalhamos com penas e contraste no model space preto, ver um desenho no layout é impossível.  Você pode mudar sua cor de fundo do AutoCAD para a cor que quiser. Definindo cores personalizadas Primeiro, vá para o menu Opções (botão Aplicativo> Opções), selecione a guia Exibição e clique no botão Cores. Agora você deve ver a caixa de diálogo Cores da janela de desenho: Agora você pode atualizar as cores de qualquer elemento da interface. Isso incluí o plano de fundo em qualquer contexto (selecione Model e Layout). Você pode escolher qualquer uma das predefinições, ou você pode escolher a partir de todo o espectro (basta escolher a opção Selecionar Cor ...). Se você não gosta ai

Trabalhando mais rápido utilizando Express Tools

Se você não está usando o AutoCAD Express Tools, está perdendo tempo. O Express Tools é uma coleção de pequenas ferramentas de aprimoramento de produtividade que são instaladas com o AutoCAD. Eles são criadas usando as APIs do AutoCAD, como o AutoLISP, e, portanto, não estão disponíveis no AutoCAD LT também (aquela versão baratinha do AutoCAD). Aqui algumas possibilidades do Express Tools Nossa jornada começa com a barra de menus do estilo antigo. Ative-o com o comando MENUBAR e no estado 1. Clique em Express no lado direito e ele será expandido para mostrar mais de 10 categorias de ferramentas. Ainda fui mais longe e nos submenus consegui contar mais de 60 outros comandos. Ferramentas para blocos Existe dentro do Express Tools ferramentas específicas para blocos. vamos a algumas: Copy Nernest Objects - com essa ferramente você pode copiar objetos de dentro de um bloco para fora sem precisar explodir o bloco. Export Atribute Information - Você pode ain