Pular para o conteúdo principal

Criando seu primeiro app para AutoCAD

Uma das coisas mais difíceis em qualquer coisa é começar  dar aquele primeiro passo que parece um abismo para qualquer um, inclusive para mim, a até entender com funciona mesmo foi complicado.

Contudo, a Autodesk já tem alguns "facilitadores" para nós meros mortis que desejamos mais do AutoCAD, todos eles você pode encontrar na página da Autodesk Developer Network. Para inciar a programação em .NET a primeira coisa que você tem que ter é a biblioteca chamada de ObjectARX que nada mais são do que os "conectores" do .NET do AutoCAD para sua aplicação, em outro post mais oportuno falarei mais deles.

O ObjectARX para programação em .NET está disponível, pasmem!, desde o R14 mas se você foi no site da Autodesk só tem os mais atuais, contudo eu recolhi num post de um fórum da Autodesk os link's de todas as versões. É importante que você utilize a versão do .NET adequada para sua versão, o AutoCAD 2010, por exemplo, utiliza o .NET Framework 3.0 e não vai conseguir carregar automaticamente aplicações desenvolvidas com o .NET Framework4.0. Mais ainda, existem três "descontinuidades" nas aplicações e variáveis do ObjectARX, a Autodesk modificou muito a forma com que se manipula as aplicações do R14 até o 2008, do 2009 até o 2012 e agora o 2013 também é diferente de modo que você para construir um software que seja compatível com o 2012 e 2013 vai ter que mexer no código para fazer isso, não bastará apenas reconfigurar o ObjectARX e a vesão do .NET porque a forma de interagir com o AutoCAD muda... o que é lamentável para qualquer desenvolvedor.

Segue ai as versões do .NET

R14 ftp://ftp.autodesk.com/pub/developer/sdk/obarxsdk.exe
2000 ftp://ftp.autodesk.com/ProdSupp/autocad2000/ObjectARXSDK.exe
2000i ftp://ftp.autodesk.com/pub/objectarx/acad2000i/objectarx.exe
2002 ftp://ftp.autodesk.com/pub/objectarx/objectarx_2002/K030.arx.plus.all.zip
2004 ftp://ftp.autodesk.com/WebPub/autocad/oarx/arx_sdk.exe
2005 ftp://ftp.autodesk.com/WebPub/Developer/autocad/Arx_All2005.exe
2006 ftp://ftp.autodesk.com/WebPub/autocad/oarx2006/Arx_All.exe
2007: http://download.autodesk.com/esd/objectarx/2007/Arx_All.exe
2008 x86:  http://download.autodesk.com/esd/objectarx/2008/ObjectARX_2008_32Bit.exe
2008 x64:  http://download.autodesk.com/esd/objectarx/2008/ObjectARX_2008_64Bit.exe

As versões atuais para AutoCAD 2011, 2012 e 2013 você baixa através do site da Autodesk normalmente. http://mexico.autodesk.com/adsk/servlet/item?siteID=123112&id=785550

Vou tentar manter essa lista sempre atualizada porque ano que vem, quando lançar o AutoCAD 2014 o 2011 vai ficar na lista de coisas velhas....

Uma vez instalada a biblioteca você deve instalar (ou já ter instalado) o Visual Studio. O Visual Studio hoje está na versão 2012 que eu particularmente considero a melhor versão, tem tudo que tem no 2010 mas é bem mais leve em especial para quem trabalha no Windows 7 (meu caso). O problema é que o Wizard de construção de programas só funcionado no Visual Studio 2010, por isso, use o VS 2010, se achar ruim como eu instale o VS 2012!

Se você não tem instalado faça o Download da versão Express que é gratuita para qualquer um,  caso seja aluno da UFRJ como eu você pode baixar a versão Ultimate no site da MSDN. A diferença para quem esta começando é zero... quando os programas começam a ficar grandes ai surgem as necessidades que fazem a diferença, mas para tudo que eu pretendo mostrar aqui o Express é mais que suficiente.

Agora vamos a parte dificil da instalação: Instalar o Wizard da Autodesk. Se você tiver sorte, o que é dificil ele vai instalar corretamente. São dois pacotes que estão hoje disponíveis na Autodesk: um apra o 2010 -2012 e outo para o 2013 a diferença é aquilo que eu já tinha comentado mudou tudo do 2012 para o 2013 mas mesmo assim eu vou começar a fazer as aplicações para o 2012. Depois explico como muda para o 2013.

o Link para Download do ObjectARX Wixard 2010-2012:  http://images.autodesk.com/adsk/files/objectarx_2012_wizards.zip


O Exemplo de aplicação
 Agora vamos fazer a nossa primeira aplicação para AutoCAD em .NET, vamos fazer uma coisa simples: aparecer uma mensagem de "Olá Mundo", como "Olá Mundo" e uma coisa tão clichê vamos usar uma mensagem mais parecida comigo: "Pisei num coco na rua..."
 
1. Abra o VS2010 e inicie um novo projeto

Ao iniciar esse novo projeto atenha-se a alguns detalhes, o primeiro é que existe um template da Autodesk na lista de templates de cada linguagem (C#,VB e C++) nesse caso vou fazer um programa simpleszinho em C# que é mais fácil. O segundo detalhe é a versão do .NET, para o AutoCAD 2012 o .NET v4 não serve, você deve compilar usando o .NET Framwrok 3.5 e por fim veja o nome do programa que você está criando.

2. Selecione as DLL adequadas com o seu projeto. Se você não sabe quais que você realmente vai usar faça como eu, selecione tudo, depois na versão final remova as não utilizadas.


Lembre-se de que as direções acima devem estar correta para que o  Visual Studio possa compilar o seu aplicativo utilizando-as.

3. Agora o seu projeto está pronto para receber umas linhas de comando. Note que exitem dois arquivos na lista de arquivos do "myCommands.cs" e "myPligin.cs"

O arquivo "myPligin.cs" é uma classe que implementa o carregamento o o descarregamento da DLL no AutoCAD, ou seja, ela tem duas funções que rodam imediatamente antes de qualquer coisa assim que a DLL é carregada e a outra (Terminate) roda imediatamente antes do fim da DLL, que como o AutoCAD não tem um comando para soltar a DLL isso ocorre no fim da seção do AutoCAD.

Não faça nada muito demorado dentro destas funções isso pode comprometer o aplicativo e ele não será carregado além disso também não é possível incluir nessas funções formulários, mensagens de texto na tela etc...
 
O outro arquivo é onde efetivamente você pode colocar seu código. Note que em "myCommands.cs" exitem quatro funções implementadas, utilize isso como referência para seus comandos

4. No primeiro comando "MyCommand", onde está "//Put your command code here" coloque a mensagem cagada:  "System.Windows.MessageBox.Show("Pisei num coco na rua...");".

5. Agora mande depurar o código (F5). Se na etapa 2 você configurou o AutoCAD corretamente ele será aberto através do Visual Studio e então você vai ter a impressão que não conteceu absolutamente nada! e está certo, não aconteceu nada, agora você tem que carregar a DLL que você criou com o ._NETLOAD , por isso você precisa lembrar do nome que você deu a ela.

6. Carrege a DLL com o comando NETLOAD, lembre-se que ela está dentro do probjeto em ../bin/Debug/suabiblioteca.dll.

7. Agora execute o comando que você colocou o seu código de mensagem ._MYCOMMAND e aparecerá a mensagem assim como você escreveu: "Pisei num coco na rua..."


Com esse procedimento acho que já deu para entender mais ou menos como funciona a programação em .NET para AutoCAD, podemos criar comando personalizados e com isso realizar as atividades que desejamos.

Exitem uma série de artigos para quem quer começar a programar em .NET para AutoCAD no site da Autodesk Developer Network sem dúvida é a melhor forma de fazer isso e está bem melhor que o meu artigo também.

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