Pular para o conteúdo principal

Habilitando comandos globais em versões locais de AutoCAD

Já faz algum tempo que o AutoCAD permitiu que os comandos fossem traduzidos para as línguas nativas ao invés de se utilizar o tradicional Inglês, nesse sentido, ainda é possível usar o comando nativo com um simples underline na frente, por exemplo, o tradicional comando "move" quando instalado na versão luso-brasileira agora pode ser um "mover" mas podemos usar ainda o "_move" para referir ao mesmo comando.



Nisso o único problema está que isso é pouco prático especialmente para quem está trabalhando com o AutoCAD a muitos milênios e entende melhor o comando como "line" do que "linha"...

Bom para todos os gostos ou não, aqui está um código que trouxe, e já estou usando no meu AutoCAD, que é exatamente um programa que ajuda o AutoCAD a reconhecer comandos nativos mesmo em instalações personalizadas sem a necessidade de uso do underline na frente do comando.

O que ele faz basicamente é depois do comando ser dito tomado como invalido recuperar o comando e incluir o underline na frente e lança-lo novamente, caso dê invalido novamente o processo para.


O código em C#:


using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Runtime;
 
namespace CommandHelper
{
  public class Commands
  {
    // Mutex to stop unknown command handler re-entrancy
 
    private bool _launched = false;
 
    [CommandMethod("CMDS")]
    public void CommandTranslation()
    {
      var doc = Application.DocumentManager.MdiActiveDocument;
      if (doc == null)
        return;
 
      // AutoComplete and AutoCorrect cause problems with
      // this, so let's turn them off (we may want to warn
      // the user or reset the values, afterwards)
 
      doc.Editor.Command(
        "_.-INPUTSEARCHOPTIONS",
        "_autoComplete", "_No",
        "_autocoRrect", "_No",
        ""
      );
 
      // Add our command prefixing event handler
 
      doc.UnknownCommand += OnUnknownCommand;
    }
 
    [CommandMethod("CMDSX")]
    public void StopCommandTranslation()
    {
      var doc = Application.DocumentManager.MdiActiveDocument;
      if (doc == null)
        return;
 
      // Remove our command prefixing event handler
 
      doc.UnknownCommand -= OnUnknownCommand;
    }
 
    async void OnUnknownCommand(
      object sender, UnknownCommandEventArgs e
    )
    {
      var doc = sender as Document;
 
      // Check to make sure we're not re-entering the handler
 
      if (doc != null && !_launched)
      {
        try
        {
          // Set the mutex flag and call our command
 
          _launched = true;
          await doc.Editor.CommandAsync("_" + e.GlobalCommandName);
        }
        catch { } // Let's not be too fussy about what we catch
        finally
        {
          // Reset our flag, now we're done
 
          _launched = false;
        }
      }
    }
  }
}


Esse código está no blog do Kean Walmisley

Comentários

  1. Boa tarde, Victor, gostaria de entrar em contato com você para conversarmos sobre uma prestação de serviços sobre blocos dinâmicos, com dados a partir de planilhas excel e possíveis caixas de diálogo correlatas. Como podemos proceder esse contato?
    Obrigado.

    ResponderExcluir
  2. Olá,
    Desculpe a demora em responder, pode entrar em contato comigo pelo meu e.mail, victor.mobatista@gmail.com

    ResponderExcluir

Postar um comentário

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 gost...

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 () {...