o básico da api do autocad

Upload: helioelias

Post on 17-Jul-2015

843 views

Category:

Documents


3 download

DESCRIPTION

API do AutoCAD.NET permite manipular arquivos de desenho no AutoCAD e de programação com assemblies ou bibliotecas que estão expostas. Com esses objetos expostos, eles podem ser acessados por muitas linguagens de programação diferentes e ambientes

TRANSCRIPT

O bsico da API do AutoCAD.NET ContedoViso Geral da API do AutoCAD.NET ......................................................................................... 2 Componentes da API do AutoCAD.NET ..................................................................................... 2 Entendendo a Hierarquia dos Objetos da API do AutoCAD.NET............................................... 3 Objeto Application (Aplicao) ................................................................................................. 4 Objeto Document (Documento) ............................................................................................... 4 Objeto Database (Banco de dados do AutoCAD) ...................................................................... 5 Objetos Graphs e Nongraphs (Grficos e no graficos) ............................................................ 6 Objeto Collection....................................................................................................................... 7 Objetos Non-Native Graphical e Nongraphical (No nativos Grficos e no grficos) ............. 7 Acessando a Hierarquia de Objetos .......................................................................................... 8 Objetos de Referncia na Hierarquia de Objetos ................................................................. 8 Acessando o objeto Application ............................................................................................ 9 Colees de Objetos(Collection Objects) .................................................................................. 9 Acessando uma Collection .................................................................................................. 10 Adicionando um novo membro a um objeto de Collection ................................................ 10 Interar um objeto atravs da Collection ............................................................................. 11 Interar atravs do objeto LayerTable .................................................................................. 11 Apagar um membro do objeto Collection........................................................................... 12 Entendendo Propriedades e Mtodos .................................................................................... 13 Out-of-Process versus In-Process ............................................................................................ 13 Definir Comandos(Commands) e funes AutoLISP ............................................................... 15 Definio do Command ....................................................................................................... 15 Definio da funo AutoLISP ............................................................................................. 16 Bibliografia .................................................................................................................................. 17

1

Viso Geral da API do AutoCAD.NETAPI do AutoCAD.NET permite manipular arquivos de desenho no AutoCAD e de programao com assemblies ou bibliotecas que esto expostas. Com esses objetos expostos, eles podem ser acessados por muitas linguagens de programao diferentes e ambientes. Existem vrias vantagens para a implementao de uma API .NET para AutoCAD: O acesso programtico aos desenhos do AutoCAD aberto para muitos ambientes de programao. Antes da API .NET, os desenvolvedores foram limitados as automaes do ActiveX e linguagens que se apiam em COM, AutoLISP e C + + com ObjectARX. A integrao com outras aplicaes baseadas em Windows, como o Microsoft Excel e Word, feita dramaticamente mais fcil usando um aplicativo nativo da API do .NET ou expostos a ActiveX/COM library. O .NET Framework foi projetado para sistemas operacionais de 32 bits e 64-bit. Visual Basic for Applications foi desenvolvido apenas para sistemas operacionais de 32 bits. Permite o acesso a interfaces de programao avanadas com uma curva de aprendizado menor do que aqueles para linguagens de programao mais tradicionais, como C + +.

Os objetos so os principais construtores de blocos da API do AutoCAD.NET. Cada objeto exposto representa uma parte precisa do AutoCAD, e elas so agrupadas em diferentes assemblies e namespaces. H muitos tipos diferentes de objetos na API do AutoCAD .NET. Por exemplo: Objetos grficos como linhas, arcos, texto e dimenses Configuraes de estilo, como camadas, tipos de linhas e estilos de dimenso Estruturas organizacionais, como layers, grupos e blocos A exibio de desenhos, como view e viewport Mesmo o desenho da aplicao AutoCAD

Componentes da API do AutoCAD.NETAPI do AutoCAD.NET composto de arquivos DLL diferentes que contm uma grande variedade de classes, estruturas, mtodos e eventos que proporcionam acesso aos objetos em um arquivo de desenho ou o aplicativo do AutoCAD. Cada arquivo DLL define diferentes namespaces que so usados para organizar os componentes das bibliotecas com base na funcionalidade. Os trs principais arquivos DLL da API AutoCAD.NET que voc usa com freqncia so: AcDbMgd.dll. Use quando estiver trabalhando com objetos em um arquivo de desenho. AcMgd.dll. Use quando estiver trabalhando com o aplicativo do AutoCAD. AcCui.dll. Use quando estiver trabalhando com arquivos de personalizao.

Usando uma DLL da API do AutoCAD.NETAntes de classes, estruturas, mtodos e eventos encontrados em uma das DLLs relacionadas API do AutoCAD.NET que pode ser usada, voc deve fazer referncia a DLL em um projeto. Depois que uma DLL referenciada a um projeto, voc pode utilizar os namespaces e os componentes do arquivo da DLL em seu projeto. Uma vez que a DLL da API do AutoCAD. NET referenciada, voc deve definir a propriedade Copy Local do DLL referenciada como False. A propriedade Copy Local determina se o Microsoft Visual Studio cria uma cpia do arquivo da DLL referenciada e coloca-o no mesmo diretrio que o arquivo do projeto quando o assembly construdo. Uma vez que os arquivos referenciados j vm com o AutoCAD, criar

2

cpias de arquivos DLL referenciada pode causar resultados inesperados quando voc carregar o seu assembly no AutoCAD.

Localizao dos Arquivos DLL da API do AutoCAD.NETOs arquivos da DLL da API do AutoCAD.NET pode ser localizado em : \ Program Files programas \ AutoCAD 2010 ou como parte do SDK do AutoCAD 2010 ObjectARX que pode ser baixado em http://www.objectarx.com ou no site da Autodesk Developer Network (http://www.autodesk.com/adn). Aps a instalao do SDK do ObjectARX, os arquivos DLL podem ser encontrados nas subpastas incwin32-x64 e da pasta de instalao padro. Observao: A DLLs do SDK do ObjectARX so verses simplificadas dos mesmos arquivos que vm com o AutoCAD, como elas no contm dependncias na interface de usurio do AutoCAD. recomendado que voc faa o download e instale o SDK do ObjectARX, e depois referencie os arquivos DLL que vm com o SDK em vez daqueles que so encontrados no diretrio de instalao do AutoCAD 2010.

Entendendo a Hierarquia dos Objetos da API do AutoCAD.NETUm objeto o principal construtor de blocos da API do AutoCAD.NET. Cada objeto exposto representa uma parte precisa do AutoCAD. H diferentes tipos de objetos na API do AutoCAD.NET. Alguns dos objetos representados na API do AutoCAD.NET so: Objetos grficos como linhas, arcos, texto e dimenses Configuraes de estilo, como camadas, tipos de linhas e estilos de dimenso Estruturas organizacionais, como layers, grupos e blocos A exibio de desenhos, como view e viewport Mesmo o desenho da aplicao AutoCAD Os objetos so estruturados de forma hierrquica, com o objeto Application do AutoCAD na raiz. Esta estrutura hierrquica muitas vezes referida como o modelo de objetos (Object Model). A ilustrao a seguir mostra as relaes bsicas entre o objeto Application e uma entidade que est em um BlockTableRecord, como o Model Space. Existem muitos objetos da API do AutoCAD.NET que no esto representados aqui.

3

Objeto Application (Aplicao)O objeto Application o objeto raiz da API do AutoCAD.NET. A partir do objeto Application, voc pode acessar a janela principal bem como abrir qualquer desenho. Depois de ter o desenho, voc pode acessar seus objetos. Para obter informaes sobre como trabalhar com arquivos de desenho aberto veja o objeto Document. Por exemplo, o objeto Application tem uma propriedade DocumentManager que retorna o objeto DocumentCollection. Este objeto fornece acesso aos desenhos que esto abertos no AutoCAD, permite voc criar, salvar e abrir arquivos de desenho. Outra propriedade do objeto Application fornece acesso aos dados especficos do aplicativo como InfoCenter, a janela principal e a barra de status. A propriedade MainWindow permite acessar o nome do aplicativo, tamanho, localizao e visibilidade. Enquanto a maioria das propriedades do objeto Application permite acessar os objetos da API do AutoCAD.NET, existem alguns que fazem referncia a objetos do AutoCAD ActiveX Automation, Essas propriedades incluem uma verso COM do objeto do aplicativo (AcadApplication), o menu (MenuBar), grupos de menus carregados (MenuGroups) e preferncias (Preferences)

Continer para todos os objetos do documento (no h um objeto de documento para cada desenho que est aberto) Container para todos os objetos janela do documento (no um objeto de janela do documento para cada objeto de documento no DocumentManager) Contm uma referncia barra de ferramentas InfoCenter Contm uma referncia ao objeto de janela do aplicativo AutoCAD Contm uma referncia ao objeto COM MenuBar para a barra de menu no AutoCAD Contm uma referncia ao objeto COM MenuGroups que contm o nome do grupo de personalizao para cada arquivo CUIx carregado Contm uma referncia ao objeto COM Preferences que lhe permite modificar muitas das configuraes na Options dialog box Contm uma referncia para o objeto do Publisher que usada para a publicao de desenhos. Contm uma referncia para o objeto StatusBar para a janela do aplicativo Contm uma referncia para o objeto UserConfiguration que lhe permite trabalhar com o perfil gravado do usurio

Objeto Document (Documento)O objeto Document, que na verdade um desenho do AutoCAD, parte do objeto DocumentCollection e fornece acesso ao objeto de banco de dados que est associado com o objeto Document. O objeto Database contm todos os objetos grficos e a maior parte dos objetos no grficos do AutoCAD. Para obter informaes sobre o objeto de banco de dados, ver o objeto Database. Junto com o objeto Database, o objeto Document fornece acesso barra de status do desenho, da janela do documento aberto o Editor e o objeto de Transaction Manager (Gerenciador de Transaes). O objeto Editor fornece acesso s funes usadas para obter entrada do usurio na forma de um ponto ou uma String digitada ou um valor numrico. O objeto Transaction Manager usado para acessar mltiplos objetos de Database em uma nica operao conhecida como uma transao. As transaes podem ser aninhadas, quando voc faz uma transao voc pode confirmar (commit) ou anular as alteraes feitas (abort). Para obter

4

informaes sobre transaes, veja o objeto Transaction Manager, consulte como utilizar as transaes com o Transaction Manager.

Objeto Database (Banco de dados do AutoCAD)O objeto de Database contm todos os objetos grficos e a maior parte dos objetos no grficos do AutoCAD. Alguns dos objetos contidos na Database so entidades (Entity), tabelas de smbolos e dicionrios nomeados. Entidades da Database representam objetos grficos dentro de um desenho. Linhas, crculos, arcos, textos, hachuras e polilinhas so exemplos de entidades. Um usurio pode ver uma entidade na tela e pode manipul-la. Voc pode acessar o objeto de Database para o documento atual, o objeto Document membro da propriedade de Database.Application.DocumentManager.MdiActiveDocument.Database

Tabelas Smbolos e DicionriosTabelas de smbolos (Symbol) e objetos do dicionrio fornecer acesso para objetos no grficos (blocos, camadas, tipos de linhas, layouts, e assim por diante). Cada desenho contm um conjunto de nove tabelas de smbolos fixos, enquanto que o nmero de dicionrios em um desenho pode variar de acordo com as caractersticas e tipos de aplicaes utilizadas no AutoCAD. Novas Tabelas de Smbolos no podem ser adicionadas a uma Database. Exemplos de tabelas de smbolos so tabelas de camadas (LayerTable), que contm registros da tabela de camada e tabela de bloco (BlockTable), que contm registros de tabela de bloco (BlockTableRecord). Todas as entidades grficas (linhas, crculos, arcos e assim por diante) so de propriedade de um registro da tabela de blocos (BlockTableRecord). Por padro, cada desenho contm um BlockTableRecord para o modelo e para o Paper space. Cada layout do Paper space tem seu prprio BlockTableRecord. Para obter informaes sobre como trabalhar com tabelas de smbolos, veja o Collection Objects. Um dicionrio um container de objeto que pode conter qualquer objeto do AutoCAD ou um XRecord. Os dicionrios so armazenados na Database como um dicionrio de objeto nomeado ou como um dicionrio de extenso de um registro da tabela ou entidade grfica. O objeto dicionrio chamado

5

de tabela de mestre para todos os dicionrios associados com uma Database. Ao contrrio de tabelas de smbolos, novos dicionrios podem ser criados e adicionados ao dicionrio de objetos chamado. Para obter informaes sobre como trabalhar com dicionrios, veja Collection Objects. Observao: Dicionrios de objetos podem conter entidades de desenho.

Objetos Graphs e Nongraphs (Grficos e no graficos)Objetos grficos, tambm conhecidos como entidades, so os objetos visveis (linhas, crculos, imagens raster, e assim por diante) que formam um desenho. Objetos grficos adicionados a um desenho feito por referncia ao registro correto da tabela de bloco (BlockTable), e em seguida, usando o mtodo AppendEntity com o novo objeto para adicion-lo ao desenho. Para modificar ou consultar objetos, obter a referncia ao objeto BlockTableRecord, e ento usar os mtodos ou propriedades do prprio objeto. Cada objeto grfico tem mtodos que executam a maior parte da mesma funcionalidade que os comandos de edio do AutoCAD, tais como Copiar (Copy), Apagar (Erase), Mover (Move), Espelho (Mirror), e assim por diante. Esses objetos tambm tem mtodos para recuperar os dados estendidos (xdata), destacados e realados, e define as propriedades de outra entidade. A maioria dos objetos grficos tm algumas propriedades em comum uns com os outros, como LayerId, LinetypeId, Color, e Handle. Cada objeto grfico tambm tem propriedades especficas, tais como Center, StartPoint, Radius, e FitTolerance. Objetos no grficos so os invisveis (informativo) objetos que fazem parte de um desenho, como camadas (Layers), tipos de linhas (Linetypes), estilos de dimenso (Dimension styles), estilos de tabela (Table styles), e assim por diante. Para criar um novo registro da tabela de smbolos, use o mtodo Add na mesa proprietrio ou usar o mtodo SetAt para adicionar um dicionrio ao dicionrio objeto chamado. Para modificar ou consultar esses objetos, use os mtodos ou propriedades do objeto em si. Cada objeto no grficas tem mtodos e propriedades especficas para sua finalidade, tudo tem mtodos para recuperar dados estendidos (xdata), e apagar-se.

6

Objeto CollectionO AutoCAD agrupa a maioria dos objetos grficos e no grficos em colees ou objetos de contineres. Embora colees contenham diferentes tipos de dados, eles podem ser processados utilizando tcnicas similares. Cada coleo tem um mtodo para adicionar um objeto ou obter um item de uma coleo. A maioria das colees usa os mtodos Add ou SetAt para adicionar um objeto a uma coleo. A Maioria das colees oferecem mtodos semelhantes e propriedades para torn-los fceis de usar e aprender. A propriedade Count retorna uma contagem baseada em zero dos objetos em uma coleo, enquanto a funo Item retorna um objeto de uma coleo. Exemplos de membros da coleo na API AutoCAD.NET so: Layer table record em Layers symbol table Layout no dicionrio ACAD_LAYOUT Document em DocumentCollection Attributes em uma referncia de bloco(block reference)

Objetos Non-Native Graphical e Nongraphical (No nativos Grficos e no grficos)A API do AutoCAD.NET uma implementao cruzada com o ObjectARX e automatizada com ActiveX. Enquanto voc pode acessar automao ActiveX do ObjectARX, A API do .NET torna o trabalho com os dois um pouco mais transparente. Ao trabalhar com objetos usando a API nativa do .NET, voc pode acessar a propriedade do objeto COM equivalente. Em alguns casos, o objeto COM a nica maneira de acessar um recurso do AutoCAD programaticamente. Alguns exemplos de propriedades que expem objetos COM atravs da API do .NET so, preferncias(Preferences), barra de menus(Menubar), MenuGroups , AcadObject e AcadApplication. Observao: Quando trabalhando com objetos COM, voc vai querer certificar-se de que voc fez referncia biblioteca do tipo do AutoCAD 2010. A propriedade de preferncias(Preferences) do objeto Application fornecem acesso a um conjunto de objetos, cada um correspondendo a uma guia de Opes(Options dialog box). Juntos, esses objetos fornecem acesso a todas as configuraes de registro armazenados na Options dialog box. Voc tambm pode definir e modificar variveis do sistema que no fazem parte da Options dialog box com os mtodos SetSystemVariable e GetSystemVariable do objeto Application. Para obter mais informaes sobre como usar o objeto de preferncias. Acessar objetos COM til se voc estiver trabalhando com cdigo existente que pode ter sido originalmente desenvolvido para VB ou VBA, ou at mesmo ao trabalhar com uma biblioteca de terceiros que pode funcionar com a biblioteca de automao de ActiveX da API do AutoCAD.NET. Com o objeto de preferncias(Preferences), voc tambm pode acessar os utilitrios que convertem coordenadas ou definem um novo ponto com base em um ngulo e distncia, usando o objeto utilitrio que pode ser acessado a partir o objeto de COM AcadApplication que o equivalente do objeto Application da API do .NET. Observao: Quando trabalhamos com ambos API do AutoCAD.NET e automatizao ActiveX, voc cria funes personalizadas que talvez precise retornar um objeto, recomendvel retornar um ObjectId em vez do prprio objeto.

7

Acessando a Hierarquia de ObjetosEnquanto o Application o objeto de raiz da API do AutoCAD.NET, voc normalmente ir trabalhar com o banco de dados do desenho atual. O DocumentManager propriedade do objeto Application permite que voc acesse o documento atual com a propriedade MdiActiveDocument. A partir do objeto de documento retornado pela propriedade MdiActiveDocument, voc pode acessar seu banco de dados com a propriedade Database. Exemplo: C#Application.DocumentManager.MdiActiveDocument.Database.Clayer;

Objetos de Referncia na Hierarquia de ObjetosQuando voc trabalha com a API de objetos do .NET, voc pode fazer referncia a alguns objetos diretamente ou atravs de uma varivel definida pelo usurio com base no objeto que voc est trabalhando. Para fazer referncia a um objeto diretamente, incluir o objeto na chamada da hierarquia. Por exemplo, a seguinte declarao anexa um arquivo de desenho para o banco de dados do desenho atual. Observe que a hierarquia comea com a aplicao (Application) e depois vai para o objeto de banco de dados (Database). A partir do objeto de banco de dados, o mtodo AttachXref chamado: Exemplo: C#string strFName, strBlkName; Autodesk.AutoCAD.DatabaseServices.ObjectId objId; strFName = "c:/clients/Proj 123/grid.dwg"; strBlkName = System.IO.Path.GetFileNameWithoutExtension(strFName); objId = Application.DocumentManager.MdiActiveDocument.Database.AttachXref(strFName, strBlkName);

Para referenciar os objetos atravs de uma varivel definida pelo usurio, definir a varivel como o tipo, em seguida, defina a varivel para o objeto apropriado. Por exemplo, o cdigo seguinte define uma varivel (acCurDb) do tipo Autodesk.AutoCAD.DatabaseServices.Database e define a varivel igual ao banco de dados de corrente(Database). Exemplo: C#Autodesk.AutoCAD.DatabaseServices.Database acCurDb; acCurDb = Application.DocumentManager.MdiActiveDocument.Database;

A seguinte declarao, em seguida, anexa um arquivo de desenho para o banco de dados usando o acCurDb varivel definida pelo usurio: Exemplo: C#string strFName, strBlkName; Autodesk.AutoCAD.DatabaseServices.ObjectId objId; strFName = "c:/clients/Proj 123/grid.dwg"; strBlkName = System.IO.Path.GetFileNameWithoutExtension(strFName); objId = acCurDb.AttachXref(strFName, strBlkName);

Recuperar entidades de um Model spaceO exemplo a seguir retorna o objeto primeira entidade no Model space. Cdigo semelhante pode fazer o mesmo para as entidades do Paper space. Note que todos os objetos grficos so definidos como um objeto de entidade(Entity). Exemplo: C#

8

using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; [CommandMethod("ListEntities")] public static void ListEntities() { // Get the current document and database, and start a transaction Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // Open the Block table record for read BlockTable acBlkTbl; acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable; // Open the Block table record Model space for read BlockTableRecord acBlkTblRec; acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord; int nCnt = 0; acDoc.Editor.WriteMessage("\nModel space objects: "); // Step through each object in Model space and // display the type of object found foreach (ObjectId acObjId in acBlkTblRec) { acDoc.Editor.WriteMessage("\n" + acObjId.ObjectClass.DxfName); nCnt = nCnt + 1; } // If no objects are found then display a message if (nCnt == 0) { acDoc.Editor.WriteMessage("\n No objects found"); } // Dispose of the transaction } }

Acessando o objeto ApplicationO objeto Application a raiz da hierarquia de objetos e fornece acesso janela principal do AutoCAD. Por exemplo, a linha de cdigo a seguir atualiza o aplicativo Exemplo: C#Autodesk.AutoCAD.ApplicationServices.Application.UpdateScreen();

Colees de Objetos(Collection Objects)Uma coleo um tipo de objeto que contm muitas instncias de objetos similares. A seguinte lista contm alguns dos objetos da coleo que so encontrados no AutoCAD .NET API: Block Table Record Contm todas as entidades dentro bloco de definio especfica Block Table Contm todos os blocos no desenho Named Objects Dictionary Contm todos os dicionrios no desenho Dimension Style Table Contm todos os estilos de dimenses no desenho Document Collection Contm todos os desenhos abertos na sesso atual File Dependency Collection Contm todos os itens na lista de File Dependency List Group Dictionary Contm todos os grupos no desenho

9

Hyperlink Collection Contm todos os hyperlinks dado de uma entidade(Entity) Layer Table Contm todas as layers no desenho Layout Dictionary Contm todos os layouts no desenho Linetype Table Contm todas as linetypes no desenho MenuBar Collection Contm todos os menus carregados e exibidos atualmente no AutoCAD. MenuGroup Collection Contm todos os grupos de customizaes carregados atualmente no AutoCAD. Um grupo de customizao representa o arquivo CUIx carregado que pode conter menus, barra de ferramentas, abas ribbon, entre outros elementos de interface com o usurio Plot Configuration Dictionary Contm definies nomeadas do plot no desenho Registered Application Table Contm todas as aplicaes registradas no desenho Text Style Table Contm todos os estilos de texto no desenho UCS Table Contm todos os sistemas de coordenadas(UCS's) no desenho View Table Contm todas as vises(views) no desenho Viewport Table Contm todas as viewports no desenho

Acessando uma CollectionA maioria das colees e objetos container so acessados por meio dos objetos Document ou Database. O Document e os objetos Database contm uma propriedade para acessar um ID de objeto ou o objeto para a maioria dos objetos de colees disponveis. Por exemplo, o cdigo seguinte define uma varivel e recupera o objeto LayersTable que representa o conjunto de camadas(Layer Tables) no desenho corrente: Exemplo: C#// Get the current document and start the Transaction Manager Database acCurDb = Application.DocumentManager.MdiActiveDocument.Database; using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // This example returns the layer table for the current database LayerTable acLyrTbl; acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId, OpenMode.ForRead) as LayerTable; // Dispose of the transaction }

Adicionando um novo membro a um objeto de CollectionPara adicionar um novo membro para a coleo, use o mtodo Add. Por exemplo, o cdigo a seguir cria uma Layer e adiciona-o Layer table: Exemplo: C#using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; [CommandMethod("AddMyLayer")] public static void AddMyLayer() { // Get the current document and database, and start a transaction Document acDoc = Application.DocumentManager.MdiActiveDocument;

10

Database acCurDb = acDoc.Database; using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // Returns the layer table for the current database LayerTable acLyrTbl; acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId, OpenMode.ForRead) as LayerTable; // Check to see if MyLayer exists in the Layer table if (acLyrTbl.Has("MyLayer") != true) { // Open the Layer Table for write acLyrTbl.UpgradeOpen(); // Create a new layer table record and name the layer "MyLayer" LayerTableRecord acLyrTblRec = new LayerTableRecord(); acLyrTblRec.Name = "MyLayer"; // Add the new layer table record to the layer table and the transaction acLyrTbl.Add(acLyrTblRec); acTrans.AddNewlyCreatedDBObject(acLyrTblRec, true); // Commit the changes acTrans.Commit(); } // Dispose of the transaction } }

Interar um objeto atravs da CollectionPara selecionar um membro especfico de um objeto de coleo, use o item ou mtodo GetAt. O item e o mtodos GetAt requerem uma chave sob a forma de uma cadeia em que representa o nome do item. Como na maioria das colees, o mtodo Item est implcito, ou seja, voc realmente no precisa usar o mtodo. Como alguns objetos de coleo, voc tambm pode usar um nmero de ndice para especificar a localizao do item dentro da coleo que voc deseja recuperar. O mtodo que pode utilizar varia com base no idioma que voc est usando, bem como se voc estiver trabalhando com uma tabela de smbolos ou dicionrio. As instrues a seguir mostram como acessar o "MyLayer" um Layer table record em Layer symbol table. Exemplo: C#acObjId = acLyrTbl["MyLayer"];

Interar atravs do objeto LayerTableO exemplo a seguir itera atravs do objeto LayerTable e exibe os nomes de todos os seus registros da Layer table records: Exemplo: C#using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; [CommandMethod("IterateLayers")] public static void IterateLayers() { // Get the current document and database, and start a transaction Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // This example returns the layer table for the current database

11

LayerTable acLyrTbl; acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId, OpenMode.ForRead) as LayerTable; // Step through the Layer table and print each layer name foreach (ObjectId acObjId in acLyrTbl) { LayerTableRecord acLyrTblRec; acLyrTblRec = acTrans.GetObject(acObjId, OpenMode.ForRead) as LayerTableRecord; acDoc.Editor.WriteMessage("\n" + acLyrTblRec.Name); } // Dispose of the transaction } }

Encontrar um layer table record chamado MyLayer no objeto Layer TableO exemplo a seguir verifica o objeto LayerTable para determinar se a layer chamada MyLayer existe ou no, e exibe a mensagem apropriada: Exemplo: C#using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; [CommandMethod("FindMyLayer")] public static void FindMyLayer() { // Get the current document and database, and start a transaction Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // Returns the layer table for the current database LayerTable acLyrTbl; acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId, OpenMode.ForRead) as LayerTable; // Check to see if MyLayer exists in the Layer table if (acLyrTbl.Has("MyLayer") != true) { acDoc.Editor.WriteMessage("\n'MyLayer' does not exist"); } else { acDoc.Editor.WriteMessage("\n'MyLayer' exists"); } // Dispose of the transaction } }

Apagar um membro do objeto CollectionMembros de um objeto de coleo(Collection) podem ser apagados usando o mtodo Erase encontrado no objeto membro. Por exemplo, os cdigos seguintes apaga a Layer MyLayer a partir do objeto LayerTable. Antes de apagar uma camada(Layer) de um desenho, voc deve se certificar de que pode ser removida com segurana. Para determinar se uma camada ou outro objeto nomeado como um bloco ou um estilo de texto pode ser apagado, voc deve usar o mtodo de Purge. Exemplo: C#using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; [CommandMethod("RemoveMyLayer")] public static void RemoveMyLayer()

12

{ // Get the current document and database, and start a transaction Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // Returns the layer table for the current database LayerTable acLyrTbl; acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId, OpenMode.ForRead) as LayerTable; // Check to see if MyLayer exists in the Layer table if (acLyrTbl.Has("MyLayer") == true) { LayerTableRecord acLyrTblRec; acLyrTblRec = acTrans.GetObject(acLyrTbl["MyLayer"], OpenMode.ForWrite) as LayerTableRecord; try { acLyrTblRec.Erase(); acDoc.Editor.WriteMessage("\n'MyLayer' was erased"); // Commit the changes acTrans.Commit(); } catch { acDoc.Editor.WriteMessage("\n'MyLayer' could not be erased"); } } else { acDoc.Editor.WriteMessage("\n'MyLayer' does not exist"); } // Dispose of the transaction } }

Entendendo Propriedades e MtodosCada objeto possui propriedades e mtodos associados. Propriedades descrevem os aspectos do objeto individual, enquanto os mtodos so aes que podem ser executadas no objeto individual. Depois que um objeto criado, voc pode consultar e editar o objeto atravs de suas propriedades e mtodos. Por exemplo, um objeto crculo tem uma propriedade Center. Esta propriedade representa um ponto no sistema coordenadas do mundo (WCS) no centro desse crculo. Para mudar o centro do crculo, ajuste simplesmente a propriedade Center a um ponto novo. O objeto do crculo tem tambm um mtodo chamado GetOffsetCurves. Este mtodo cria um objeto novo em uma distncia offset especificada do crculo existente. Para ver uma lista de todas as propriedades e mtodos para o objeto do crculo, consulte ao objeto do crculo na guia de referncia de AutoCAD .NET ou use o Browser do objeto no Visual Studio de Microsoft.

Out-of-Process versus In-ProcessQuando voc desenvolve uma nova aplicao, que pode ser executado dentro ou fora do processo. A API do AutoCAD.NET foi concebida para ser executado no processo, s que diferente a partir da biblioteca de automao ActiveX que podem ser utilizado in ou -out-of-process. Aplicativos em processo so projetados para funcionar no mesmo espao de processo como o aplicativo host. Neste caso, um conjunto de DLL carregado no AutoCAD que a aplicao de acolhimento.

13

Aplicativos Out-of-process no so executados no mesmo espao que o aplicativo host. Estas aplicaes so muitas vezes construdas como stand-alone executveis.

Se voc precisar criar uma aplicao stand-alone para conduzir o AutoCAD, o melhor criar um aplicativo que usa os mtodos CreateObject e GetObject para criar uma nova instncia de um aplicativo AutoCAD ou retornar uma das instncias que est atualmente em execuo. Uma vez feita referncia um AcadApplication retornado, ento voc pode carregar o seu em in-process uma aplicao .NET para o AutoCAD usando o mtodo sendCommand que membro da propriedade ActiveDocument do AcadApplication. Como uma alternativa de executar um aplicativo. NET in-process, poderia usar a interoperabilidade COM para sua aplicao. Observao: O ProgID para aplicativos COM para o AutoCAD 2010 AutoCAD.Application.18. Exemplo: C#using System; using System.Runtime.InteropServices; using Autodesk.AutoCAD.Interop; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; [CommandMethod("ConnectToAcad")] public static void ConnectToAcad() { AcadApplication acAppComObj = null; const string strProgId = "AutoCAD.Application.18"; // Get a running instance of AutoCAD try { acAppComObj = (AcadApplication)Marshal.GetActiveObject(strProgId); } catch // An error occurs if no instance is running { try { // Create a new instance of AutoCAD acAppComObj = (AcadApplication)Activator.CreateInstance(Type.GetTypeFromProgID(strProgId), true); } catch { // If an instance of AutoCAD is not created then message and exit System.Windows.Forms.MessageBox.Show("Instance of 'AutoCAD.Application'" + " could not be created."); return; } } // Display the application and return the name and version acAppComObj.Visible = true; System.Windows.Forms.MessageBox.Show("Now running " + acAppComObj.Name + " version " + acAppComObj.Version); // Get the active document AcadDocument acDocComObj; acDocComObj = acAppComObj.ActiveDocument; // Optionally, load your assembly and start your command or if your assembly // is demandloaded, simply start the command of your in-process assembly. acDocComObj.SendCommand("(command " + (char)34 + "NETLOAD" + (char)34 + " " + (char)34 + "c:/myapps/mycommands.dll" + (char)34 + ") "); acDocComObj.SendCommand("MyCommand "); }

14

Definir Comandos(Commands) e funes AutoLISPComandos e funes AutoLISP pode ser definido com a API do AutoCAD.NET atravs da utilizao de dois atributos: CommandMethod e LispFunction. Voc coloca um dos dois atributos antes do mtodo a ser chamado no command ou funo AutoLISP executado no AutoCAD. Os mtodos utilizados para comandos no devem ser definidos com argumentos. No entanto, um mtodo utilizado para definir uma funo AutoLISP deve ser definido com um nico argumento do tipo de objeto ResultBuffer.

Definio do CommandAo definir um comando, voc pode usar o atributo CommandMethod. O atributo CommandMethod espera um valor de String para usar como um nome global que est sendo definido no command. Junto com um nome do command global, o atributo CommandMethod pode aceitar os seguintes valores: Command Flags Define o comportamento do comando Group Name nome do grupo de comando Local Name nome do comando local, geralmente linguagem especfica Help Topic Name nome tpico da Ajuda que deve ser exibido quando F1 pressionado Context Menu Type Flags Define o comportamento do menu de contexto quando o comando est ativo Help File Name Arquivo de ajuda que contm o tpico de ajuda que deve ser exibido quando o comando est ativo e F1 pressionado

A tabela seguinte lista os sinalizadores disponveis que podem ser utilizados para definir o comportamento de um comando. Enum Value ActionMacro DocReadLock Interruptible Modal NoActionRecording NoBlockEditor NoHistory NoPaperSpace NoTileMode NoUndoMarker Redraw Session Transparent Undefined UsePickSet Descrio Command pode ser gravado com a ao do Action Recorder. Documento ser lido bloqueado quando o command invocado. Command pode ser interrompido ao pedir uma entrada do usurio Command no pode ser invocado enquanto outro command est ativo Command no pode graver uma ao no Action Recorder. Command no pode ser usado a partir do Block Editor. Command no adicionado lista de histrico repeat-last-command. Command no pode ser usado do Paper space. Command no pode ser usado quando o TILEMODE definido como 1. Command no suporta desfazer marcadores. Este se destina a commands que no modificam a database, e portanto no deve aparecer no arquivo de undo. Quando o pickfirst set ou grip set so recuperados, eles no so apagados. Command executado no contexto da aplicao, em vez do contexto do documento atual. Command pode ser usado enquanto outro command est ativo. Command pode ser usando somente via nome Global. Quando o pickfirst set recuperado, ele desmarcado.

A sintaxe para definir um CommandA seguinte demonstrao cria um atributo CommandMethod que define um comando chamado CheckForPickfirstSelection. O atributo tambm usa a flag UsePickSet, comando para indicar que o comando permitido usar os objetos que esto selecionados antes que o comando seja iniciado.

15

Exemplo: C#[CommandMethod("CheckForPickfirstSelection", CommandFlags.UsePickSet)] public static void CheckForPickfirstSelection() { . . . }

Voc pode especificar o uso de mais de uma flag usando o operador & em C#.[CommandMethod("CheckForPickfirstSelection", CommandFlags.UsePickSet & CommandFlags.NoBlockEditor)] public static void CheckForPickfirstSelection() { . . . }

Definio da funo AutoLISPAo definir uma funo AutoLISP, voc usa o atributo LispFunction. O atributo LispFunction espera um valor de String para usar o nome global da funo AutoLISP que est sendo definida. Junto com um nome de funo global, a estrutura LispFunction pode aceitar os seguintes valores: Local Name Nome da funo local, geralmente de uma linguagem especfica Help Topic Name Nome tpico de ajuda que deve ser associado com a funo AutoLISP Help File Name Arquivo de ajuda que contm o tpico de ajuda que deve ser exibido quando o comando est ativo e F1 pressionado

Sintaxe para definir uma funo AutoLISPA seguinte demonstrao cria um atributo LispFunction que define uma funo AutoLISP chamado InsertDynamicBlock. Exemplo: C#[LispFunction("DisplayFullName")] public static void DisplayFullName(ResultBuffer rbArgs) { . . . }

Recuperar valores passados para uma funo AutoLISPUse um Foreach loop para percorrer os valores retornados na ResultBuffer pela funo AutoLISP. Um ResultBuffer uma coleo de objetos TypedValue. A propriedade TypeCode de um objeto TypedValue pode ser usado para determinar o tipo de valor para cada valor passado para a funo AutoLISP. A propriedade Value usada para retornar o valor do objeto TypedValue.

Para definir uma funo AutoLISPEste exemplo de cdigo define uma funo AutoLISP chamada DisplayFullName. Enquanto o mtodo definido no projeto .NET aceita um nico valor, a funo AutoLISP espera dois valores String para produzir a sada correta. Carregue o projeto .NET no AutoCAD e digite o seguinte no prompt de comando:(displayfullname "First" "Last")

O seguinte sada exibida aps a execuo da funo AutoLISP:Name: First Last

Exemplo: C#

16

using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; [LispFunction("DisplayFullName")] public static void DisplayFullName(ResultBuffer rbArgs) { if (rbArgs != null) { string strVal1 = ""; string strVal2 = ""; int nCnt = 0; foreach (TypedValue rb in rbArgs) { if (rb.TypeCode == (int)Autodesk.AutoCAD.Runtime.LispDataType.Text) { switch(nCnt) { case 0: strVal1 = rb.Value.ToString(); break; case 1: strVal2 = rb.Value.ToString(); break; } nCnt = nCnt + 1; } } Application.DocumentManager.MdiActiveDocument.Editor. WriteMessage("\nName: " + strVal1 + " " + strVal2); } }

BibliografiaAutoCAD .NET Developer's Guide

17