Você está na página 1de 11

Conceitos Bsicos de AutoCAD .

NET
Augusto Gonalves Autodesk

Est curioso para saber o que .NET? Nesta classe iremos apresentar a informao bsica que voc precisa para comear a escrever seu prprios aplicativos .NET baseados na interface de programao AutoCAD .NET . Esta classe inclui os seguintes fundamentos: uma reviso do Framework .NET e sua aplicao para programadores; como escrever seu primeiro complemento em AutoCAD .NET ; interaes com usurio; discusso da estrutura de vrios dados DWG"; como adicionar entidades CAD ao banco de dados DWG"; e como percorrer todas as entidades presentes no DWG".

CP222-2V

About the Speaker:


Augusto membro do time DevTech desde 2008 e trabalha escritrio de So Paulo. especialista nas APIs AutoCAD, Civil3D e Revit. Antes de trabalhar na Autodesk, Augusto trabalhou em projetos CAD para engenharia e comrcio eletrnico. graduado em Engenharia Civil e ps-graduado em Engenharia de Computao. Augusto.Goncalves@Autodesk.com

Conceitos Bsicos de AutoCAD .NET

Introduo
No meu trabalho como consultor de desenvolvimento na Autodesk em So Paulo tenho treinado diversos desenvolvedores nas APIs Autodesk, principalmente AutoCAD. Para esta classe organizei os principais conceitos e passos necessrios para iniciar o desenvolvimento de plugins nas seguintes sees: y y y y y Uma reviso da plataforma .NET e seus benefcios O que necessrio para comear e onde encontrar o material necessrio Como funciona e como criar um primeiro plugin A estrutura bsica do DWG e como desenhar Como extrair informao de um desenho

Plataforma .NET
Atualmente a Microsoft vem evoluindo com a plataforma de desenvolvimento .NET, que considerada a base padro para aplicativos para Windows. Inclusive diversos novos recursos e ferramentas j utilizam .NET. Uma vantagem imediata que o utilizao interna da plataforma ajuda na depurao de erros e melhoramentos de performance, mas indiretamente aumenta consideravelmente a quantidade de material avanado na web, assim como a quantidade de pessoas discutindo e trocando informaes em grupos de discusso. A atual verso 4 do .NET traz uma enorme quantidade de recursos. Apesar de boa parte dos recursos j estarem disponveis desde a verso 2, as recentes novidades em interface e performance fazem do .NET uma plataforma cada vez mais confivel. Importante: O AutoCAD 2011 foi desenvolvido para o .NET 3.5, desta forma alguns recursos do .NET 4.0 podem no estar disponveis ou causar conflitos. Mais detalhes sero discutidos a frente. Comparativamente com outras linguagens, vemos por experincia na prtica treinando desenvolvedores que a curva de aprendizado considervel. Isso quer dizer que ao compararmos o que novos desenvolvedores .NET conseguem produzir aps nosso treinamento consideravelmente maior que em treinamentos com C++. Neste caso a comparao feita com uma linguagem poderosa, visto que .NET traz grande poder de programao a um custo de aprendizado relativamente baixo. Alm disso, a mesma linguagem e plataforma .NET pode ser utilizada em outros produtos Autodesk. Atualmente possvel utilizar o mesmo conhecimento de programao com APIs AutoCAD e verticais como Map3D, Civil3D, alm de Revit, Inventor, Navisworks, dentre outros.

Benefcios da Tecnologia .NET


Um dos grandes benefcios de trabalhar com .NET a facilidade atrelada com o avanado paradigma de programao orientado a objetos. Sim, esta maneira de desenvolver tambm est disponvel em outras linguagens, mas aqui bastante facilitada. Resumindo em poucas palavras, o desenvolvimento orientado a objetos permite um alto ndice de reuso de cdigo, o que no limite evita o precrio copiar & colar.

Conceitos Bsicos de AutoCAD .NET

Nesta classe trabalharemos com VB.NET, mas a tecnologia de linguagem intermediria da plataforma .NET permite mesclar cdigos escritos em outras linguagens, como C# ou mesmo C++. Isto uma grande vantagem por permitir que desenvolvedores com diferentes conhecimentos prvios e habilidades possam trabalhar juntos. Finalmente, a Microsoft incorporou diversas ferramentas para permitir que o .NET pudesse se comunicar com linguagens e tecnologias anteriores, tais como COM e C++ nativo. Neste classe no iremos abordar tais tpicos, mas importante saber que, quando necessrio, podemos acessar recursos nativos do sistema ainda no disponveis em .NET.

O que necessrio para comear?


Para desenvolver plugins para AutoCAD com .NET necessrio apenas uma IDE e AutoCAD instalado. O ambiente de desenvolvimento integrado (do ingls Integrated Development Environment, IDE) oficial da Microsoft o Visual Studio. Atualmente a verso mais recente desta IDE a 2010, mas para AutoCAD 2011 recomendada a verso 2008 devido a compatibilidade da verso do .NET. Dica: Existe um problema conhecido de compatibilidade entre a verso 2011 do AutoCAD com a verso 2010 do Visual Studio. possvel resolver este problema seguindo os passos apresentados neste artigo: http://through-the-interface.typepad.com/through_the_interface/2010/04/hitting-breakpoints-in-net-classlibraries-while-debugging-with-visual-studio-2010.html Nesta classe utilizaremos a linguagem Visual Basic .NET, juntamente com a verso gratuita do Visual Studio, chamada de Visual Basic Express Edition. Esta plataforma pode ser descarregada de http://www.microsoft.com/express/vb/. Atualmente esto disponveis as verses 2008 e 2010. O AutoCAD instalado necessrio para obter a referencia, ou seja, ligao entre nosso cdigo e a plataforma AutoCAD, mas tambm para permitir a execuo, teste e depurao do cdigo. possvel compilar o cdigo sem esta instalao utilizando as referencias do pacote ObjectARX, disponvel em http://www.objectarx.com. O pacote ObjectARX ainda contm outros materiais de ajuda. Para treinamento em .NET relevante a arquivo de ajuda \Help\arxmgd.dll e os exemplos dentro da pasta \Samples\dotNET. Alm destes, as DLLs de referencia esto na pasta \inc.

Como funciona um plugin para AutoCAD?


A arquitetura de plugin para AutoCAD similar a outros aplicativos, Autodesk ou de outras companhias. O cdigo escrito em uma linguagem .NET, neste caso VB.NET, agrupado em um projeto e referencia as DLLs do aplicativo base (AutoCAD). Um projeto uma unidade de organizao do Visual Studio e todo o cdigo de um projeto produz uma DLL. O processo de gerar uma DLL a partir do cdigo de um projeto chamado de compilao. No linguajar de desenvolvedores .NET, uma DLL tambm chamada de assembly. Finalmente, o cdigo escrito e compilado em .NET que referencia as DLLs necessrias carregado e se integra ao AutoCAD. Esta integrao to forte que diversos recursos nativos do .NET esto disponveis

Conceitos Bsicos de AutoCAD .NET

de forma bastante transparente para desenvolvimento de plugins. A figura abaixo apresenta uma viso geral desta arquitetura.

Um ponto importante desta arquitetura, que tambm um erro comum, que sempre temos que abrir o projeto (arquivo .vbproj) no Visual Basic Express. Comumente vemos desenvolvedores abrindo erroneamente os arquivos .vb e tentando escrever e compilar o cdigo, mas no a maneira correta. A partir da prxima seo trabalharemos em mais detalhes como criar um plugin.

Primeiro plugin .NET


Os passos para criar um primeiro plugin para AutoCAD so: 1. Iniciar o Visual Basic Express e criar um novo projeto. Este projeto deve ser uma Class Library. Este tipo de projeto ir produzir uma DLL, ou assembly, o que funciona como uma extenso ao aplicativo base, neste caso AutoCAD. Tambm possvel criar plugins como executveis, extenso.exe, mas para tal necessrio utilizar a API COM, que no ser trabalhada nesta classe.

Conceitos Bsicos de AutoCAD .NET

2. Para comear a escrever cdigo para um plugin AutoCAD necessrio adicionar referencias as DLLs AcMdg e AcDbMgd. A primeira permite acesso aos recursos de interface, ou seja, a aplicao acad.exe em execuo. A segunda d acesso base de dados do AutoCAD, que ser o(s) arquivo(s) DWG em execuo. O desenvolvimento de plugin com uma instalao do AutoCAD no permite acessar a API sem uma instancia do AutoCAD (acad.exe) em execuo. Para execuo independente necessrio utilizar RealDWG, para mais detalhes visite http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=770257 Para adicionar as referncias, clique com o boto direto no nome do projeto, depois acesse Add Reference.

Em seguida localize a pasta do ObjectARX 2011\inc e selecione AcMgd.dll e AcDbMgd.dll e clique OK.

Conceitos Bsicos de AutoCAD .NET

muito importante marcar as referncias como Copy Local igual a falso. Isso ir evitar a cpia desnecessria destas DLLs para a pasta do projeto, assim como erros de execuo ou depurao. Para tal, acesse as propriedades do projeto, em seguida a aba References, marque as novas referncias e na paleta propriedades marque Copy Local como False.

Estes so os passos necessrios para qualquer novo plugin para AutoCAD. Os prximos passos so especficos para este exemplo. 3. Um novo projeto criar em .NET automaticamente contm uma Class1. Como vamos utilizar recursos da API AutoCAD, podemos evitar digitar o nome completo das classes importando os conjuntos de classes, atravs de imports. Para um comando para o AutoCAD necessrio criar uma rotina, ou sub-rotina. No possvel utilizar function para comandos. Esta sub deve ser publica, marcada como tal atravs da palavra chave Public. Finalmente a rotina marcada com um atributo CommandMethod. O valor dentro deste atributo o que o usurio ir digitar na linha de comando do AutoCAD para executar a rotina, neste caso meuComando ir executar a rotina minhaRotina. Observe que estes nomes no precisam ser iguais. Quase todos os comandos de interao com usurio necessitam utilizar o Editor, que a linha de comando do AutoCAD. Finalmente podemos escrever uma mensagem com WriteMessage. Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.EditorInput Imports Autodesk.AutoCAD.ApplicationServices Public Class Class1 <CommandMethod("meuComando")> _ Public Sub minhaRotina() 'Acessar o editor do AutoCAD '(linha de comando) Dim ed As Editor = Application.DocumentManager. _ MdiActiveDocument.Editor 'Escrever uma mensagem ed.WriteMessage("Meu primeiro comando") End Sub End Class

Conceitos Bsicos de AutoCAD .NET

4. Aps escrever o cdigo, necessrio compilar para gerar um assembly (DLL). Acesse o menu Build e escolha Build NOME_DO_PROJETO. Agora basta iniciar o AutoCAD e execute o comando NETLOAD para carregar a DLL e finalmente executar o comando criado, neste caso meuComando.

Interao com o usurio


A primeira etapa para interao com o usurio consiste em obter informao. Em geral um ponto, numero ou texto, ou mesmo selecionar algo na tela. Para todos estes casos necessrio utilizar o Editor e passar as opes de prompt. Em geral utiliza-se um PromptXXXXOptions para configurar as opes, como mensagens e restries da entrada de dados, onde XXXX representa o que desejamos obter. Estas opes so passadas a linha de comando atravs de Editor.GetXXXX, o que retorna um objeto do tipo PromptXXXXResult. O exemplo abaixo mostra como configurar as opes para selecionar um ponto, pede ao usurio para selecionar o ponto e finalmente escreve as coordenadas (X, Y e Z) na linha de comando. 'Opes de seleo de um ponto Dim opcoesPonto As New PromptPointOptions("Selecione um ponto: ") 'Para para o editor - que ir pedir ao 'usurio - e guardar o resultado Dim resultadoPonto As PromptPointResult = ed.GetPoint(opcoesPonto) 'Acessar o ponto clicado Dim pontoClicado As Point3d = resultadoPonto.Value 'Escrever o resultado na tela ed.WriteMessage(pontoClicado.ToString) A entrada de outros tipos de dados, inclusive seleo do usurio, segue a mesma sequncia. Embora seja possvel suprimir a configurao das opes passando a mensagem diretamente ao Editor.GetXXXX, a abordagem mais comum configurar melhor as opes para evitar entradas invlidas.

Viso geral da estrutura de banco de dados


O banco de dados do AutoCAD a representao em memria de um arquivo DWG. De fato cada arquivo expandido em memria para esta estrutura hierrquica de tabelas, das quais as mais utilizadas so a tabela de blocos (BlockTable) e a tabela de camadas (LayerTable). Ainda existem outras tabelas, conforme apresentado na figura abaixo, alem de dicionrios que so utilizados para armazenar informaes no grficas, tanto nativas do AutoCAD quanto personalizadas. Um dos conceitos mais importantes desta viso geral que todos os espaos de desenho e definies de blocos so registros na tabela de blocos (BlockTableRecord). Isso que dizer que o tanto o model space, quanto os layouts (paper spaces), quando a definio de blocos criados, so armazenados em como records na tabela de blocos, ou seja, BlockTableRecord.

Conceitos Bsicos de AutoCAD .NET

Visto que tanto o model space quanto os layouts (paper spaces) quanto as definies de bloco so BlockTableRecord, a maneira de desenhar alguma coisa a mesma para todos os casos. Tecnicamente, a ao de desenhar adicionar uma entidade grfica a um BlockTableRecord. Seguindo o conceito de hierarquia, podemos adicionar qualquer classe derivada de Entity ao bando de dados, e existem diversas classes que podemos adicionar como linhas, textos ou crculos. A figura abaixo resume esta hierarquia.

Para realizar qualquer operao que modifica a base de dados do desenho necessrio iniciar uma transao, que a maneira padro. A transao representa o limite para uma operao, e quanto esta

Conceitos Bsicos de AutoCAD .NET

transao finalizada possvel guardar ou descartar as modificaes feitas. Ao final cada transao representar uma opo de desfazer (undo) no AutoCAD. Duas coisas so muito importantes quando lidamos com transaes: (1) necessrio descartar o objeto de transao ao final do processo e (2) qualquer entidade adicionada base de dados deve ser informada a transao. Para evitar esquecer-se de descartar a transao recomendado sempre utilizar a palavra chave using. Desta maneira o prprio mecanismo do .NET cuidar de descartar o objeto. J para informar novos objetos adicionados necessrio chamar AddNewlyCreatedDBObject, caso contrrio o objeto permanecer aberto e consequentemente a visualizao do desenho ficar comprometida. O cdigo exemplo a seguir acessar a base de dados ativa, ou seja o documento aberto no AutoCAD, inicia uma transao, acessar o espao ativo que geralmente o model space, cria uma nova linha desde o ponto 0,0,0 at o ponto 10,10,0, adiciona este linha ao espao corrent, informa a transao desta nova entidade e finalmente confirma as alteraes com um commit. 'Acessar o banco de dados do desenho aberto no AutoCAD Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database 'Iniciar uma transo Using trans As Transaction = db.TransactionManager.StartTransaction 'Abrir o Model Space Dim modelSpace As BlockTableRecord = _ trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) 'Criar uma nova linha Dim novaLinha As New Line(New Point3d(0, 0, 0), New Point3d(10, 10, 0)) 'Adicionar ao Model Space modelSpace.AppendEntity(novaLinha) ' necessrio informar a transao trans.AddNewlyCreatedDBObject(novaLinha, True) 'Confirmar a transao trans.Commit() End Using 'Fecha a transao

Percorrer a base dados


Aps adicionar entidades ao banco de dados, outra operao comum ler as informaes do desenho. Em geral esta operao consiste em abrir o desenho e percorrer cada entidade e, conforme o tipo desta entidade, ler um determinado conjunto de informaes. Para tal, assim como para adicionar entidades, necessrio acessar o bando de dados ativo e iniciar uma transao. As transaes devem ser utilizadas tanto para modificao quanto para apenas leitura, e alem disso utilizar um commit ao final da transao tem melhor performance que abortar, o que o padro. Sempre que acessamos a base de dados estamos acessando o identificador deste objeto. O ObjectId um identificador nico de cada entidade da base de dados. Como no possvel acessar um objeto de

Conceitos Bsicos de AutoCAD .NET

base de dados diretamente, as colees de entidades como model space contm a lista de objetId das entidades. Ou seja, ao percorrer todas as entidades estamos de fato percorrendo uma lista de objectIds. Desta forma necessrio abrir cada entidade. Tudo que grfico no desenho derivado de Entity, ento necessrio verificar o tipo especfico de cada entidade utilizando a palavra chave TypeOf do Visual Basic .NET. Desta forma podemos converter o objeto ao tipo correto e ler os dados especficos, o que no caso da linha so o ponto inicial e final. Outros tipos de entidade tm outros tipos de informaes. 'Acessar o editor do AutoCAD Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor 'Acessar o banco de dados do desenho aberto no AutoCAD Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database 'Iniciar uma transo Using trans As Transaction = db.TransactionManager.StartTransaction 'Abrir o Model Space Dim modelSpace As BlockTableRecord = _ trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) 'Para cada ObjectId de entidade no model space... For Each idEntidade As ObjectId In modelSpace '...vamos abrir a entidade Dim entidade As Entity = trans.GetObject(idEntidade, OpenMode.ForRead) 'Verificar o Tipo If TypeOf entidade Is Line Then ' uma linha! Dim linha As Line = entidade 'Escrever informaes na tela ed.WriteMessage("Linha comeando em {0} mede {1}", _ linha.StartPoint, linha.Length) End If Next 'Confirmar a transao trans.Commit() End Using 'Fecha a transao

Material Adicional
Para continuar o estudo da API AutoCAD .NET temos alguns materiais disponveis online. Abaixo uma lista dos principais. y y y y Through the Interface blog http://through-the-interface.typepad.com AutoCAD.NET Developers Guide http://www.autodesk.com/autocad-net-developers-guide Grupos de Discusso http://discussion.autodesk.com/forums/category.jspa?categoryID=8 Autodesk Developer Network http://www.autodesk.com/joinadn

10

Conceitos Bsicos de AutoCAD .NET

Oferecemos diversos treinamentos de API Autodesk em nosso escritrio de So Paulo, assim como eventualmente em outros locais pelo Brasil. Visite o nosso site em www.autodesk.com/apitraining e escolha Schedule para uma lista completa e inscries. Vrios treinamentos so em Portugus e eventualmente em Ingls.

Concluso
Obrigado por participar deste treinamento de API AutoCAD.NET. Espero que tenha gostado e se interessado por esta poderosa ferramenta para automao e modificao do AutoCAD. Com esta classe vimos como iniciar um projeto de addin e configur-lo para AutoCAD, assim como interagir com usurio e mostrar mensagens na linha de comando. Por fim vimos como percorrer a base de dados para extrair informao do desenho. Agora o prximo passo acessar um treinamento online desta API ou no nosso escritrio. Aguardo voc e boa trabalho com desenvolvimento para AutoCAD.

11