Académique Documents
Professionnel Documents
Culture Documents
NET
Augusto Gonalves Autodesk
CP222-2V
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".
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:
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.
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.
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.
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.
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.
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
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.
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.
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 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
10
Material Adicional
Para continuar o estudo da API AutoCAD .NET temos alguns materiais disponveis online. Abaixo uma lista dos principais.
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
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