11
  Conceitos Básicos de AutoCAD® .NET Augusto Gonçalves Autodesk CP222-2V Está curioso para saber o que é .NET? Nesta classe iremos apresentar a informação básica que você precisa para começar a escrever seu próprios aplicativos .NET baseados na interface de programação AutoCAD .NET . Esta classe inclui os seguintes fundamentos: uma revisão do Framework .NET e sua aplicação para programadores; como escrever seu primeiro complemento em AutoCAD .NET ; interações com usuário; discussão da estrutura de vários dados DWG"; como adicionar entidades CAD ao banco de dados DWG"; e como percorrer todas as e ntidades presentes no DWG". About the Speaker: Augusto é membro do time DevTech desde 2008 e trabalha escritório de São Paulo. É especialista nas APIs AutoCAD, Civil3D e Revit. Antes de trabalhar na Autodesk, Augusto trabalhou em projetos CAD para engenharia e comércio eletrônico. É graduado em Engenharia Civil e pós-graduado em Engenharia de Computação. [email protected]

63687385 Basico Autocad Net

Embed Size (px)

DESCRIPTION

Está curioso para saber o que é .NET? Nesta classe iremos apresentar a informação básica que você precisa para começar a escrever seu próprios aplicativos .NET baseados na interface de programação AutoCAD .NET . Esta classe inclui os seguintes fundamentos: uma revisão do Framework .NET e sua aplicação para programadores; como escrever seu primeiro complemento em AutoCAD .NET ; interações com usuário; discussão da estrutura de vários dados DWG"; como adicionar entidades CAD ao banco de dados DWG"; e como percorrer todas as entidades presentes no DWG".

Citation preview

Page 1: 63687385 Basico Autocad Net

5/14/2018 63687385 Basico Autocad Net - slidepdf.com

http://slidepdf.com/reader/full/63687385-basico-autocad-net 1/11

 

 

Conceitos Básicos de AutoCAD® .NET Augusto Gonçalves – Autodesk

CP222-2V Está curioso para saber o que é .NET? Nesta classe iremos apresentar a informaçãobásica que você precisa para começar a escrever seu próprios aplicativos .NET baseados na interfacede programação AutoCAD .NET . Esta classe inclui os seguintes fundamentos: uma revisão doFramework .NET e sua aplicação para programadores; como escrever seu primeiro complemento emAutoCAD .NET ; interações com usuário; discussão da estrutura de vários dados DWG"; como adicionarentidades CAD ao banco de dados DWG"; e como percorrer todas as entidades presentes no DWG".

About the Speaker:Augusto é membro do time DevTech desde 2008 e trabalha escritório de São Paulo. É especialista nasAPIs AutoCAD, Civil3D e Revit. Antes de trabalhar na Autodesk, Augusto trabalhou em projetos CADpara engenharia e comércio eletrônico. É graduado em Engenharia Civil e pós-graduado emEngenharia de Computaçã[email protected]

Page 2: 63687385 Basico Autocad Net

5/14/2018 63687385 Basico Autocad Net - slidepdf.com

http://slidepdf.com/reader/full/63687385-basico-autocad-net 2/11

 

Conceitos Básicos de AutoCAD® .NET 

2

Introdução

No meu trabalho como consultor de desenvolvimento na Autodesk em São Paulo tenho treinado diversos

desenvolvedores nas APIs Autodesk, principalmente AutoCAD. Para esta classe organizei os principaisconceitos e passos necessários para iniciar o desenvolvimento de plugins nas seguintes seções:

Uma revisão da plataforma .NET e seus benefícios O que é necessário para começar e onde encontrar o material necessário Como funciona e como criar um primeiro plugin A estrutura básica do DWG® e como desenhar Como extrair informação de um desenho

Plataforma .NET

Atualmente a Microsoft vem evoluindo com a plataforma de desenvolvimento .NET, que é considerada abase padrão para aplicativos para Windows. Inclusive diversos novos recursos e ferramentas já utilizam.NET. Uma vantagem imediata é que o utilização interna da plataforma ajuda na depuração de erros emelhoramentos de performance, mas indiretamente aumenta consideravelmente a quantidade dematerial avançado na web, assim como a quantidade de pessoas discutindo e trocando informações emgrupos de discussão.

A atual versão 4 do .NET traz uma enorme quantidade de recursos. Apesar de boa parte dos recursos jáestarem disponíveis desde a versão 2, as recentes novidades em interface e performance fazem do.NET uma plataforma cada vez mais confiável.

Importante: O AutoCAD 2011 foi desenvolvido para o .NET 3.5, desta forma alguns recursos do .NET

4.0 podem não estar disponíveis ou causar conflitos. Mais detalhes serão discutidos a frente.

Comparativamente com outras linguagens, vemos por experiência na prática treinando desenvolvedoresque a curva de aprendizado é considerável. Isso quer dizer que ao compararmos o que novosdesenvolvedores .NET conseguem produzir após nosso treinamento é consideravelmente maior que emtreinamentos com C++. Neste caso a comparação é feita com uma linguagem poderosa, visto que .NETtraz grande poder de programação a um custo de aprendizado relativamente baixo.

Além disso, a mesma linguagem e plataforma .NET pode ser utilizada em outros produtos Autodesk.Atualmente é possível utilizar o mesmo conhecimento de programação com APIs AutoCAD e verticaiscomo Map3D, Civil3D, além de Revit, Inventor, Navisworks, dentre outros.

Benefícios da Tecnologia .NETUm dos grandes benefícios de trabalhar com .NET é a facilidade atrelada com o avançado paradigma deprogramação orientado a objetos. Sim, esta maneira de desenvolver também está disponível em outraslinguagens, mas aqui é bastante facilitada. Resumindo em poucas palavras, o desenvolvimentoorientado a objetos permite um alto índice de reuso de código, o que no limite evita o precário ‘copiar &

colar’. 

Page 3: 63687385 Basico Autocad Net

5/14/2018 63687385 Basico Autocad Net - slidepdf.com

http://slidepdf.com/reader/full/63687385-basico-autocad-net 3/11

 

Conceitos Básicos de AutoCAD® .NET 

3

Nesta classe trabalharemos com VB.NET, mas a tecnologia de linguagem intermediária da plataforma.NET permite mesclar códigos escritos em outras linguagens, como C# ou mesmo C++. Isto é umagrande vantagem por permitir que desenvolvedores com diferentes conhecimentos prévios e habilidades

possam trabalhar juntos.Finalmente, a Microsoft incorporou diversas ferramentas para permitir que o .NET pudesse se comunicarcom linguagens e tecnologias anteriores, tais como COM e C++ nativo. Neste classe não iremos abordartais tópicos, mas é importante saber que, quando necessário, podemos acessar recursos nativos dosistema ainda não disponíveis em .NET.

O que é necessário para começar?

Para desenvolver plugins para AutoCAD com .NET é necessário apenas uma IDE e AutoCAD instalado.O ambiente de desenvolvimento integrado (do inglês Integrated Development Environment, IDE) oficialda Microsoft é o Visual Studio. Atualmente a versão mais recente desta IDE é a 2010, mas para

AutoCAD 2011 é recomendada a versão 2008 devido a compatibilidade da versão do .NET.

Dica: Existe um problema conhecido de compatibilidade entre a versão 2011 do AutoCAD com a versão2010 do Visual Studio. É possível resolver este problema seguindo os passos apresentados neste artigo:http://through-the-interface.typepad.com/through_the_interface/2010/04/hitting-breakpoints-in-net-class-libraries-while-debugging-with-visual-studio-2010.html 

Nesta classe utilizaremos a linguagem Visual Basic .NET, juntamente com a versão gratuita do VisualStudio, chamada de Visual Basic Express Edition. Esta plataforma pode ser descarregada dehttp://www.microsoft.com/express/vb/ . Atualmente estão disponíveis as versões 2008 e 2010.

O AutoCAD instalado é necessário para obter a referencia, ou seja, ligação entre nosso código e a

plataforma AutoCAD, mas também para permitir a execução, teste e depuração do código. É possívelcompilar o código sem esta instalação utilizando as referencias do pacote ObjectARX, disponível emhttp://www.objectarx.com. 

O pacote ObjectARX ainda contém outros materiais de ajuda. Para treinamento em .NET é relevante aarquivo de ajuda  \Help\arxmgd.dll e os exemplos dentro da pasta  \Samples\dotNET. Além destes, asDLLs de referencia estão 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 código escrito em uma linguagem .NET, neste caso VB.NET, é agrupado em um projeto e referenciaas DLLs do aplicativo base (AutoCAD). Um projeto é uma unidade de organização do Visual Studio etodo o código de um projeto produz uma DLL. O processo de gerar uma DLL a partir do código de umprojeto é chamado de compilação. No linguajar de desenvolvedores .NET, uma DLL também é chamadade assembly .

Finalmente, o código escrito e compilado em .NET que referencia as DLLs necessárias é carregado e seintegra ao AutoCAD. Esta integração é tão forte que diversos recursos nativos do .NET estão disponíveis

Page 4: 63687385 Basico Autocad Net

5/14/2018 63687385 Basico Autocad Net - slidepdf.com

http://slidepdf.com/reader/full/63687385-basico-autocad-net 4/11

 

Conceitos Básicos de AutoCAD® .NET 

4

de forma bastante transparente para desenvolvimento de plugins. A figura abaixo apresenta uma visãogeral desta arquitetura.

Um ponto importante desta arquitetura, que também é um erro comum, é que sempre temos que abrir oprojeto (arquivo .vbproj) no Visual Basic Express. Comumente vemos desenvolvedores abrindoerroneamente os arquivos .vb e tentando escrever e compilar o código, mas não é a maneira correta. Apartir da próxima seção trabalharemos em mais detalhes como criar um plugin.

Primeiro plugin .NET

Os passos para criar um primeiro plugin para AutoCAD são:

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 extensão aoaplicativo base, neste caso AutoCAD. Também é possível criar plugins como executáveis,extensão.exe, mas para tal é necessário utilizar a API COM, que não será trabalhada nestaclasse.

Page 5: 63687385 Basico Autocad Net

5/14/2018 63687385 Basico Autocad Net - slidepdf.com

http://slidepdf.com/reader/full/63687385-basico-autocad-net 5/11

 

Conceitos Básicos de AutoCAD® .NET 

5

2. Para começar a escrever código para um plugin AutoCAD é necessário adicionar referencias asDLLs AcMdg e AcDbMgd. A primeira permite acesso aos recursos de interface, ou seja, aaplicação acad.exe em execução. A segunda dá acesso à base de dados do AutoCAD, que seráo(s) arquivo(s) DWG em execução. O desenvolvimento de plugin com uma instalação do

AutoCAD não permite acessar a API sem uma instancia do AutoCAD (acad.exe) em execução.Para execução independente é necessário utilizar RealDWG, para mais detalhes visitehttp://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=770257 

Para adicionar as referências, clique com o botão 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 eclique OK.

Page 6: 63687385 Basico Autocad Net

5/14/2018 63687385 Basico Autocad Net - slidepdf.com

http://slidepdf.com/reader/full/63687385-basico-autocad-net 6/11

 

Conceitos Básicos de AutoCAD® .NET 

6

É muito importante marcar as referências como Copy Local  igual a falso. Isso irá evitar a cópiadesnecessária destas DLLs para a pasta do projeto, assim como erros de execução oudepuração. Para tal, acesse as propriedades do projeto, em seguida a aba References , marque

as novas referências e na paleta propriedades marque Copy Local como False.

Estes são os passos necessários para qualquer novo plugin para AutoCAD. Os próximos passossão específicos para este exemplo.

3. Um novo projeto criar em .NET automaticamente contêm uma Class1. Como vamos utilizarrecursos da API AutoCAD, podemos evitar digitar o nome completo das classes importando osconjuntos de classes, através de imports. 

Para um comando para o AutoCAD é necessário criar uma rotina, ou sub-rotina. Não é possívelutilizar function para comandos. Esta sub deve ser publica, marcada como tal através da palavrachave Public. Finalmente a rotina é marcada com um atributo CommandMethod . O valor dentrodeste atributo é o que o usuário irá digitar na linha de comando do AutoCAD para executar arotina, neste caso ‘meuComando’ irá executar a rotina ‘minhaRotina’. Observe que estes nomes

não precisam ser iguais.

Quase todos os comandos de interação com usuário necessitam utilizar o Editor, que é a linhade comando do AutoCAD. Finalmente podemos escrever uma mensagem com WriteMessage .

Imports Autodesk.AutoCAD.RuntimeImports Autodesk.AutoCAD.EditorInputImports 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 mensagemed.WriteMessage("Meu primeiro comando")

End SubEnd Class 

Page 7: 63687385 Basico Autocad Net

5/14/2018 63687385 Basico Autocad Net - slidepdf.com

http://slidepdf.com/reader/full/63687385-basico-autocad-net 7/11

 

Conceitos Básicos de AutoCAD® .NET 

7

4. Após escrever o código, é necessário compilar para gerar um assembly (DLL). Acesse o menuBuild  e escolha Build NOME_DO_PROJETO . Agora basta iniciar o AutoCAD e execute ocomando NETLOAD para carregar a DLL e finalmente executar o comando criado, neste caso

‘meuComando’.

Interação com o usuário

A primeira etapa para interação com o usuário consiste em obter informação. Em geral um ponto,numero ou texto, ou mesmo selecionar algo na tela. Para todos estes casos é necessário utilizar o Editore passar as opções de prompt.

Em geral utiliza-se um PromptXXXXOptions para configurar as opções, como mensagens e restrições daentrada de dados, onde XXXX representa o que desejamos obter. Estas opções são passadas a linha decomando através de Editor.GetXXXX, o que retorna um objeto do tipo PromptXXXXResult. O exemploabaixo mostra como configurar as opções para selecionar um ponto, pede ao usuário para selecionar o

ponto e finalmente escreve as coordenadas (X, Y e Z) na linha de comando.

'Opções de seleção de um pontoDim opcoesPonto As New PromptPointOptions("Selecione um ponto: ")'Para para o editor - que irá pedir ao'usuário - e guardar o resultadoDim resultadoPonto As PromptPointResult = ed.GetPoint(opcoesPonto)'Acessar o ponto clicadoDim pontoClicado As Point3d = resultadoPonto.Value'Escrever o resultado na telaed.WriteMessage(pontoClicado.ToString)  

A entrada de outros tipos de dados, inclusive seleção do usuário, segue a mesma sequência. Embora

seja possível suprimir a configuração das opções passando a mensagem diretamente aoEditor.GetXXXX, a abordagem mais comum é configurar melhor as opções para evitar entradasinválidas.

Visão geral da estrutura de banco de dados

O banco de dados do AutoCAD é a representação em memória de um arquivo DWG. De fato cadaarquivo é expandido em memória para esta estrutura hierárquica de tabelas, das quais as mais utilizadassão a tabela de blocos (BlockTable) e a tabela de camadas (LayerTable). Ainda existem outras tabelas,conforme apresentado na figura abaixo, alem de dicionários que são utilizados para armazenarinformações não gráficas, tanto nativas do AutoCAD quanto personalizadas.

Um dos conceitos mais importantes desta visão geral é que todos os espaços de desenho e definiçõesde blocos são registros na tabela de blocos (BlockTableRecord). Isso que dizer que o tanto o modelspace, quanto os layouts (paper spaces), quando a definição de blocos criados, são armazenados emcomo records na tabela de blocos, ou seja, BlockTableRecord.

Page 8: 63687385 Basico Autocad Net

5/14/2018 63687385 Basico Autocad Net - slidepdf.com

http://slidepdf.com/reader/full/63687385-basico-autocad-net 8/11

 

Conceitos Básicos de AutoCAD® .NET 

8

Visto que tanto o model space quanto os layouts (paper spaces) quanto as definições de bloco sãoBlockTableRecord, a maneira de desenhar alguma coisa é a mesma para todos os casos. Tecnicamente,a ação de desenhar é adicionar uma entidade gráfica a um BlockTableRecord. Seguindo o conceito dehierarquia, podemos adicionar qualquer classe derivada de Entity ao bando de dados, e existem diversasclasses que podemos adicionar como linhas, textos ou círculos. A figura abaixo resume esta hierarquia.

Para realizar qualquer operação que modifica a base de dados do desenho é necessário iniciar umatransação, que é a maneira padrão. A transação representa o limite para uma operação, e quanto esta

Page 9: 63687385 Basico Autocad Net

5/14/2018 63687385 Basico Autocad Net - slidepdf.com

http://slidepdf.com/reader/full/63687385-basico-autocad-net 9/11

 

Conceitos Básicos de AutoCAD® .NET 

9

transação é finalizada é possível guardar ou descartar as modificações feitas. Ao final cada transaçãorepresentará uma opção de desfazer (undo ) no AutoCAD. Duas coisas são muito importantes quandolidamos com transações: (1) é necessário descartar o objeto de transação ao final do processo e (2)

qualquer entidade adicionada à base de dados deve ser informada a transação.Para evitar esquecer-se de descartar a transação é recomendado sempre utilizar a palavra chave using .Desta maneira o próprio mecanismo do .NET cuidará de descartar o objeto. Já para informar novosobjetos adicionados é necessário chamar AddNewlyCreatedDBObject, caso contrário o objetopermanecerá aberto e conseqüentemente a visualização do desenho ficará comprometida.

O código exemplo a seguir acessar a base de dados ativa, ou seja o documento aberto no AutoCAD,inicia uma transação, acessar o espaço ativo que geralmente é o model space, cria uma nova linhadesde o ponto 0,0,0 até o ponto 10,10,0, adiciona este linha ao espaço corrent, informa a transaçãodesta nova entidade e finalmente confirma as alterações com um commit .

'Acessar o banco de dados do desenho aberto no AutoCADDim db As Database = Application.DocumentManager.MdiActiveDocument.Database

'Iniciar uma transçãoUsing trans As Transaction = db.TransactionManager.StartTransaction

'Abrir o Model SpaceDim modelSpace As BlockTableRecord = _

trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite)

'Criar uma nova linhaDim novaLinha As New Line(New Point3d(0, 0, 0), New Point3d(10, 10, 0))

'Adicionar ao Model Space

modelSpace.AppendEntity(novaLinha)

'É necessário informar a transaçãotrans.AddNewlyCreatedDBObject(novaLinha, True)

'Confirmar a transaçãotrans.Commit()

End Using 'Fecha a transação 

Percorrer a base dados

Após adicionar entidades ao banco de dados, outra operação comum é ler as informações do desenho.Em geral esta operação consiste em abrir o desenho e percorrer cada entidade e, conforme o tipo destaentidade, ler um determinado conjunto de informações. Para tal, assim como para adicionar entidades, énecessário acessar o bando de dados ativo e iniciar uma transação. As transações devem ser utilizadastanto para modificação quanto para apenas leitura, e alem disso utilizar um commit ao final da transaçãotem melhor performance que abortar, o que é o padrão.

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 não é possível acessar um objeto de

Page 10: 63687385 Basico Autocad Net

5/14/2018 63687385 Basico Autocad Net - slidepdf.com

http://slidepdf.com/reader/full/63687385-basico-autocad-net 10/11

 

Conceitos Básicos de AutoCAD® .NET 

10

base de dados diretamente, as coleções de entidades como model space contêm a lista de objetId dasentidades. Ou seja, ao percorrer todas as entidades estamos de fato percorrendo uma lista de objectIds.Desta forma é necessário abrir cada entidade.

Tudo que é gráfico no desenho é derivado de Entity, então é necessário verificar o tipo específico decada entidade utilizando a palavra chave TypeOf do Visual Basic .NET. Desta forma podemos convertero objeto ao tipo correto e ler os dados específicos, o que no caso da linha são o ponto inicial e final.Outros tipos de entidade têm outros tipos de informações.

'Acessar o editor do AutoCADDim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor'Acessar o banco de dados do desenho aberto no AutoCADDim db As Database = Application.DocumentManager.MdiActiveDocument.Database'Iniciar uma transçãoUsing 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 entidadeDim entidade As Entity = trans.GetObject(idEntidade, OpenMode.ForRead)'Verificar o TipoIf TypeOf entidade Is Line Then

'É uma linha!Dim linha As Line = entidade'Escrever informações na telaed.WriteMessage("Linha começando em {0} mede {1}", _

linha.StartPoint, linha.Length)End If

Next'Confirmar a transaçãotrans.Commit()

End Using 'Fecha a transação 

Material Adicional

Para continuar o estudo da API AutoCAD .NET temos alguns materiais disponíveis online. Abaixo umalista dos principais.

Through the Interface bloghttp://through-the-interface.typepad.com 

   AutoCAD.NET Developer’s Guide http://www.autodesk.com/autocad-net-developers-guide 

Grupos de Discussãohttp://discussion.autodesk.com/forums/category.jspa?categoryID=8 

Autodesk Developer Networkhttp://www.autodesk.com/joinadn 

Page 11: 63687385 Basico Autocad Net

5/14/2018 63687385 Basico Autocad Net - slidepdf.com

http://slidepdf.com/reader/full/63687385-basico-autocad-net 11/11

 

Conceitos Básicos de AutoCAD® .NET 

11

Oferecemos diversos treinamentos de API Autodesk em nosso escritório de São Paulo, assim comoeventualmente em outros locais pelo Brasil. Visite o nosso site em www.autodesk.com/apitraining eescolha Schedule  para uma lista completa e inscrições. Vários treinamentos são em Português e

eventualmente em Inglês.

Conclusão

Obrigado por participar deste treinamento de API AutoCAD.NET. Espero que tenha gostado e seinteressado por esta poderosa ferramenta para automação e modificação do AutoCAD.

Com esta classe vimos como iniciar um projeto de addin e configurá-lo para AutoCAD, assim comointeragir com usuário e mostrar mensagens na linha de comando. Por fim vimos como percorrer a basede dados para extrair informação do desenho.

Agora o próximo passo é acessar um treinamento online desta API ou no nosso escritório. Aguardo você

e boa trabalho com desenvolvimento para AutoCAD.