You are on page 1of 11

1

O bsico da API do AutoCAD.NET


Contedo
Viso 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
2
Viso Geral da API do AutoCAD.NET
API do AutoCAD.NET permite manipular arquivos de desenho no AutoCAD e de program
ao com assemblies ou bibliotecas que esto expostas. Com esses objetos expostos, ele
s 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 pr
ogramao. Antes da API .NET, os desenvolvedores foram limitados as automaes do Active
X 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 exp
ostos 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 operacionai
s 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 ob
jeto exposto representa uma parte precisa do AutoCAD, e elas so agrupadas em dife
rentes assemblies e namespaces. H muitos tipos diferentes de objetos na API do Au
toCAD .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.NET
API do AutoCAD.NET composto de arquivos DLL diferentes que contm uma grande varie
dade 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 di
ferentes namespaces que so usados para organizar os componentes das bibliotecas c
om 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 desen
ho.
? 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.NET
Antes de classes, estruturas, mtodos e eventos encontrados em uma das DLLs relaci
onadas 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 name
spaces 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 proprie
dade Copy Local do DLL referenciada como False. A propriedade Copy Local determi
na se o Microsoft Visual Studio cria uma cpia do arquivo da DLL referenciada e co
loca-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
3
cpias de arquivos DLL referenciada pode causar resultados inesperados quando voc c
arregar o seu assembly no AutoCAD.
Localizao dos Arquivos DLL da API do AutoCAD.NET
Os arquivos da DLL da API do AutoCAD.NET pode ser localizado em <unidade>: \ Pro
gram Files programas \ AutoCAD 2010 ou como parte do SDK do AutoCAD 2010 ObjectA
RX que pode ser baixado em http://www.objectarx.com ou no site da Autodesk Devel
oper Network (http://www.autodesk.com/adn).
Aps a instalao do SDK do ObjectARX, os arquivos DLL podem ser encontrados nas subpa
stas inc-win32-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 referenc
ie 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.NET
Um objeto o principal construtor de blocos da API do AutoCAD.NET. Cada objeto ex
posto representa uma parte precisa do AutoCAD. H diferentes tipos de objetos na A
PI 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 AutoCA
D na raiz. Esta estrutura hierrquica muitas vezes referida como o modelo de objet
os (Object Model). A ilustrao a seguir mostra as relaes bsicas entre o objeto Applica
tion e uma entidade que est em um BlockTableRecord, como o Model Space. Existem m
uitos objetos da API do AutoCAD.NET que no esto representados aqui.
4
Objeto Application (Aplicao)
O objeto Application o objeto raiz da API do AutoCAD.NET. A partir do objeto App
lication, voc pode acessar a janela principal bem como abrir qualquer desenho. De
pois de ter o desenho, voc pode acessar seus objetos. Para obter informaes sobre co
mo trabalhar com arquivos de desenho aberto veja o objeto Document.
Por exemplo, o objeto Application tem uma propriedade DocumentManager que retorn
a o objeto DocumentCollection. Este objeto fornece acesso aos desenhos que esto a
bertos no AutoCAD, permite voc criar, salvar e abrir arquivos de desenho. Outra p
ropriedade do objeto Application fornece acesso aos dados especficos do aplicativ
o como InfoCenter, a janela principal e a barra de status. A propriedade MainWin
dow permite acessar o nome do aplicativo, tamanho, localizao e visibilidade.
Enquanto a maioria das propriedades do objeto Application permite acessar os obj
etos da API do AutoCAD.NET, existem alguns que fazem referncia a objetos do AutoC
AD ActiveX Automation, Essas propriedades incluem uma verso COM do objeto do apli
cativo (AcadApplication), o menu (MenuBar), grupos de menus carregados (MenuGrou
ps) e preferncias (Preferences)
Objeto Document (Documento)
O objeto Document, que na verdade um desenho do AutoCAD, parte do objeto Documen
tCollection 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 d
ados, 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 Manag
er (Gerenciador de Transaes). O objeto Editor fornece acesso s funes usadas para obte
r entrada do usurio na forma de um ponto ou uma String digitada ou um valor numric
o.
O objeto Transaction Manager usado para acessar mltiplos objetos de Database em u
ma nica operao conhecida como uma transao. As transaes podem ser aninhadas, quando voc
az uma transao voc pode confirmar (commit) ou anular as alteraes feitas (abort). Para
obter
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 do
cumento 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 personali
zao 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
5
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 objet
os grficos dentro de um desenho. Linhas, crculos, arcos, textos, hachuras e polili
nhas so exemplos de entidades. Um usurio pode ver uma entidade na tela e pode mani
pul-la.
Voc pode acessar o objeto de Database para o documento atual, o objeto Document m
embro da propriedade de Database.
Application.DocumentManager.MdiActiveDocument.Database
Tabelas Smbolos e Dicionrios
Tabelas de smbolos (Symbol) e objetos do dicionrio fornecer acesso para objetos no
grficos (blocos, camadas, tipos de linhas, layouts, e assim por diante). Cada des
enho contm um conjunto de nove tabelas de smbolos fixos, enquanto que o nmero de di
cionrios em um desenho pode variar de acordo com as caractersticas e tipos de apli
caes 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 regist
ros da tabela de camada e tabela de bloco (BlockTable), que contm registros de ta
bela de bloco (BlockTableRecord). Todas as entidades grficas (linhas, crculos, arc
os e assim por diante) so de propriedade de um registro da tabela de blocos (Bloc
kTableRecord). Por padro, cada desenho contm um BlockTableRecord para o modelo e p
ara o Paper space. Cada layout do Paper space tem seu prprio BlockTableRecord. Pa
ra obter informaes sobre como trabalhar com tabelas de smbolos, veja o Collection O
bjects.
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 n
omeado ou como um dicionrio de extenso de um registro da tabela ou entidade grfica.
O objeto dicionrio chamado
6
de tabela de mestre para todos os dicionrios associados com uma Database. Ao cont
rrio de tabelas de smbolos, novos dicionrios podem ser criados e adicionados ao dic
ionrio 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, crcu
los, imagens raster, e assim por diante) que formam um desenho. Objetos grficos a
dicionados a um desenho feito por referncia ao registro correto da tabela de bloc
o (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 mtod
os que executam a maior parte da mesma funcionalidade que os comandos de edio do A
utoCAD, 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), destaca
dos 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, Linetyp
eId, Color, e Handle. Cada objeto grfico tambm tem propriedades especficas, tais co
mo Center, StartPoint, Radius, e FitTolerance.
Objetos no grficos so os invisveis (informativo) objetos que fazem parte de um desen
ho, como camadas (Layers), tipos de linhas (Linetypes), estilos de dimenso (Dimen
sion styles), estilos de tabela (Table styles), e assim por diante. Para criar u
m 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 modifica
r 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 te
m mtodos para recuperar dados estendidos (xdata), e apagar-se.
7
Objeto Collection
O AutoCAD agrupa a maioria dos objetos grficos e no grficos em colees ou objetos de c

ontineres. Embora colees contenham diferentes tipos de dados, eles podem ser proces
sados 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 d
e 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 Ac
tiveX. 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 usan
do 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 p
rogramaticamente. Alguns exemplos de propriedades que expem objetos COM atravs da
API do .NET so, preferncias(Preferences), barra de menus(Menubar), MenuGroups , Ac
adObject e AcadApplication. Observao: Quando trabalhando com objetos COM, voc vai q
uerer 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 arm
azenados na Options dialog box. Voc tambm pode definir e modificar variveis do sist
ema que no fazem parte da Options dialog box com os mtodos SetSystemVariable e Get
SystemVariable 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 ac
essar os utilitrios que convertem coordenadas ou definem um novo ponto com base e
m um ngulo e distncia, usando o objeto utilitrio que pode ser acessado a partir o o
bjeto 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 retorn
ar um ObjectId em vez do prprio objeto.
8
Acessando a Hierarquia de Objetos
Enquanto 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 d
o objeto Application permite que voc acesse o documento atual com a propriedade M
diActiveDocument. A partir do objeto de documento retornado pela propriedade Mdi
ActiveDocument, voc pode acessar seu banco de dados com a propriedade Database.
Exemplo: C# Application.DocumentManager.MdiActiveDocument.Database.Clayer;
Objetos de Referncia na Hierarquia de Objetos
Quando 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 obje
to 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 arquiv
o de desenho para o banco de dados do desenho atual. Observe que a hierarquia co
mea com a aplicao (Application) e depois vai para o objeto de banco de dados (Datab
ase). A partir do objeto de banco de dados, o mtodo AttachXref chamado:
Exemplo: C# string strFName, strBlkName; Autodesk.AutoCAD.DatabaseServices.Objec
tId objId; strFName = "c:/clients/Proj 123/grid.dwg"; strBlkName = System.IO.Pat
h.GetFileNameWithoutExtension(strFName); objId = Application.DocumentManager.Mdi
ActiveDocument.Database.AttachXref(strFName, strBlkName);

Para referenciar os objetos atravs de uma varivel definida pelo usurio, definir a v
arivel como o tipo, em seguida, defina a varivel para o objeto apropriado. Por exe
mplo, o cdigo seguinte define uma varivel (acCurDb) do tipo Autodesk.AutoCAD.Datab
aseServices.Database e define a varivel igual ao banco de dados de corrente(Datab
ase).
Exemplo: C# Autodesk.AutoCAD.DatabaseServices.Database acCurDb; acCurDb = Applic
ation.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.Objec
tId objId; strFName = "c:/clients/Proj 123/grid.dwg"; strBlkName = System.IO.Pat
h.GetFileNameWithoutExtension(strFName); objId = acCurDb.AttachXref(strFName, st
rBlkName);
Recuperar entidades de um Model space
O exemplo a seguir retorna o objeto primeira entidade no Model space. Cdigo semel
hante pode fazer o mesmo para as entidades do Paper space. Note que todos os obj
etos grficos so definidos como um objeto de entidade(Entity).
Exemplo: C#
9
using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; usin
g Autodesk.AutoCAD.DatabaseServices; [CommandMethod("ListEntities")] public stat
ic void ListEntities() { // Get the current document and database, and start a t
ransaction Document acDoc = Application.DocumentManager.MdiActiveDocument; Datab
ase acCurDb = acDoc.Database; using (Transaction acTrans = acCurDb.TransactionMa
nager.StartTransaction()) { // Open the Block table record for read BlockTable a
cBlkTbl; acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as
BlockTable; // Open the Block table record Model space for read BlockTableRecor
d acBlkTblRec; acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSp
ace], OpenMode.ForRead) as BlockTableRecord; int nCnt = 0; acDoc.Editor.WriteMes
sage("\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.Edito
r.WriteMessage("\n No objects found"); } // Dispose of the transaction } }
Acessando o objeto Application
O objeto Application a raiz da hierarquia de objetos e fornece acesso janela pri
ncipal 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 segui
nte 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 Lis
t
Group Dictionary ? Contm todos os grupos no desenho
10
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 Aut
oCAD.
MenuGroup Collection ? Contm todos os grupos de customizaes carregados atualmente n
o AutoCAD. Um grupo de customizao representa o arquivo CUIx carregado que pode con
ter menus, barra de ferramentas, abas ribbon, entre outros elementos de interfac
e 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 Collection
A 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 e
xemplo, o cdigo seguinte define uma varivel e recupera o objeto LayersTable que re
presenta o conjunto de camadas(Layer Tables) no desenho corrente:
Exemplo: C# // Get the current document and start the Transaction Manager Databa
se acCurDb = Application.DocumentManager.MdiActiveDocument.Database; using (Tran
saction acTrans = acCurDb.TransactionManager.StartTransaction()) { // This examp
le returns the layer table for the current database LayerTable acLyrTbl; acLyrTb
l = acTrans.GetObject(acCurDb.LayerTableId, OpenMode.ForRead) as LayerTable; //
Dispose of the transaction }
Adicionando um novo membro a um objeto de Collection
Para 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.ApplicationSe
rvices; using Autodesk.AutoCAD.DatabaseServices; [CommandMethod("AddMyLayer")] p
ublic static void AddMyLayer() { // Get the current document and database, and s
tart a transaction Document acDoc = Application.DocumentManager.MdiActiveDocumen
t;
11
Database acCurDb = acDoc.Database; using (Transaction acTrans = acCurDb.Transact
ionManager.StartTransaction()) { // Returns the layer table for the current data
base LayerTable acLyrTbl; acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId, Ope
nMode.ForRead) as LayerTable; // Check to see if MyLayer exists in the Layer tab
le if (acLyrTbl.Has("MyLayer") != true) { // Open the Layer Table for write acLy
rTbl.UpgradeOpen(); // Create a new layer table record and name the layer "MyLay
er" LayerTableRecord acLyrTblRec = new LayerTableRecord(); acLyrTblRec.Name = "M
yLayer"; // Add the new layer table record to the layer table and the transactio
n acLyrTbl.Add(acLyrTblRec); acTrans.AddNewlyCreatedDBObject(acLyrTblRec, true);
// Commit the changes acTrans.Commit(); } // Dispose of the transaction } }
Interar um objeto atravs da Collection
Para 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 rep
resenta o nome do item. Como na maioria das colees, o mtodo Item est implcito, ou sej
a, 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 c
om uma tabela de smbolos ou dicionrio.
As instrues a seguir mostram como acessar o "MyLayer" um Layer table record em Lay
er symbol table.
Exemplo: C# acObjId = acLyrTbl["MyLayer"];
Interar atravs do objeto LayerTable
O 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.ApplicationSe
rvices; using Autodesk.AutoCAD.DatabaseServices; [CommandMethod("IterateLayers")
] public static void IterateLayers() { // Get the current document and database,
and start a transaction Document acDoc = Application.DocumentManager.MdiActiveD
ocument; Database acCurDb = acDoc.Database; using (Transaction acTrans = acCurDb
.TransactionManager.StartTransaction()) { // This example returns the layer tabl
e for the current database
12

LayerTable acLyrTbl; acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId, OpenMode


.ForRead) as LayerTable; // Step through the Layer table and print each layer na
me foreach (ObjectId acObjId in acLyrTbl) { LayerTableRecord acLyrTblRec; acLyrT
blRec = 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 Table
O exemplo a seguir verifica o objeto LayerTable para determinar se a layer chama
da MyLayer existe ou no, e exibe a mensagem apropriada:
Exemplo: C# using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationSe
rvices; using Autodesk.AutoCAD.DatabaseServices; [CommandMethod("FindMyLayer")]
public static void FindMyLayer() { // Get the current document and database, and
start a transaction Document acDoc = Application.DocumentManager.MdiActiveDocum
ent; Database acCurDb = acDoc.Database; using (Transaction acTrans = acCurDb.Tra
nsactionManager.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 Laye
r table if (acLyrTbl.Has("MyLayer") != true) { acDoc.Editor.WriteMessage("\n'MyL
ayer' does not exist"); } else { acDoc.Editor.WriteMessage("\n'MyLayer' exists")
; } // Dispose of the transaction } }
Apagar um membro do objeto Collection
Membros de um objeto de coleo(Collection) podem ser apagados usando o mtodo Erase e
ncontrado 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 po
de ser removida com segurana. Para determinar se uma camada ou outro objeto nomea
do 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.ApplicationSe
rvices; using Autodesk.AutoCAD.DatabaseServices; [CommandMethod("RemoveMyLayer")
] public static void RemoveMyLayer()
13
{ // Get the current document and database, and start a transaction Document acD
oc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Dat
abase; using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction(
)) { // Returns the layer table for the current database LayerTable acLyrTbl; ac
LyrTbl = 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(acLy
rTbl["MyLayer"], OpenMode.ForWrite) as LayerTableRecord; try { acLyrTblRec.Erase
(); acDoc.Editor.WriteMessage("\n'MyLayer' was erased"); // Commit the changes a
cTrans.Commit(); } catch { acDoc.Editor.WriteMessage("\n'MyLayer' could not be e
rased"); } } else { acDoc.Editor.WriteMessage("\n'MyLayer' does not exist"); } /
/ Dispose of the transaction } }
Entendendo Propriedades e Mtodos
Cada objeto possui propriedades e mtodos associados. Propriedades descrevem os as
pectos do objeto individual, enquanto os mtodos so aes que podem ser executadas no o
bjeto individual. Depois que um objeto criado, voc pode consultar e editar o obje
to atravs de suas propriedades e mtodos.
Por exemplo, um objeto crculo tem uma propriedade Center. Esta propriedade repres
enta 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 nov
o. 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, cons
ulte 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-Process
Quando voc desenvolve uma nova aplicao, que pode ser executado dentro ou fora do pr
ocesso. 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.
14
? 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 cri
ar um aplicativo que usa os mtodos CreateObject e GetObject para criar uma nova i
nstncia de um aplicativo AutoCAD ou retornar uma das instncias que est atualmente e
m execuo. Uma vez feita referncia um AcadApplication retornado, ento voc pode carrega
r o seu em in-process uma aplicao .NET para o AutoCAD usando o mtodo sendCommand qu
e membro da propriedade ActiveDocument do AcadApplication.
Como uma alternativa de executar um aplicativo. NET in-process, poderia usar a i
nteroperabilidade 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.A
utoCAD.Interop; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.Applicati
onServices; [CommandMethod("ConnectToAcad")] public static void ConnectToAcad()
{ AcadApplication acAppComObj = null; const string strProgId = "AutoCAD.Applicat
ion.18"; // Get a running instance of AutoCAD try { acAppComObj = (AcadApplicati
on)Marshal.GetActiveObject(strProgId); } catch // An error occurs if no instance
is running { try { // Create a new instance of AutoCAD acAppComObj = (AcadAppli
cation)Activator.CreateInstance(Type.GetTypeFromProgID(strProgId), true); } catc
h { // If an instance of AutoCAD is not created then message and exit System.Win
dows.Forms.MessageBox.Show("Instance of 'AutoCAD.Application'" + " could not be
created."); return; } } // Display the application and return the name and versi
on acAppComObj.Visible = true; System.Windows.Forms.MessageBox.Show("Now running
" + acAppComObj.Name + " version " + acAppComObj.Version); // Get the active do
cument AcadDocument acDocComObj; acDocComObj = acAppComObj.ActiveDocument; // Op
tionally, load your assembly and start your command or if your assembly // is de
mandloaded, simply start the command of your in-process assembly. acDocComObj.Se
ndCommand("(command " + (char)34 + "NETLOAD" + (char)34 + " " + (char)34 + "c:/m
yapps/mycommands.dll" + (char)34 + ") "); acDocComObj.SendCommand("MyCommand ");
}
15
Definir Comandos(Commands) e funes AutoLISP
Comandos e funes AutoLISP pode ser definido com a API do AutoCAD.NET atravs da util
izao de dois atributos: CommandMethod e LispFunction. Voc coloca um dos dois atribu
tos 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 entan
to, um mtodo utilizado para definir uma funo AutoLISP deve ser definido com um nico
argumento do tipo de objeto ResultBuffer.
Definio do Command
Ao definir um comando, voc pode usar o atributo CommandMethod. O atributo Command
Method espera um valor de String para usar como um nome global que est sendo defi
nido no command. Junto com um nome do command global, o atributo CommandMethod p
ode 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 pressionad
o
? 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 exibid
o 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 Descrio


ActionMacro
Command pode ser gravado com a ao do Action Recorder.
DocReadLock
Documento ser lido bloqueado quando o command invocado.
Interruptible
Command pode ser interrompido ao pedir uma entrada do usurio
Modal
Command no pode ser invocado enquanto outro command est ativo
NoActionRecording
Command no pode graver uma ao no Action Recorder.
NoBlockEditor
Command no pode ser usado a partir do Block Editor.
NoHistory
Command no adicionado lista de histrico repeat-last-command.
NoPaperSpace
Command no pode ser usado do Paper space.
NoTileMode
Command no pode ser usado quando o TILEMODE definido como 1.
NoUndoMarker
Command no suporta desfazer marcadores. Este se destina a commands que no modifica
m a database, e portanto no deve aparecer no arquivo de undo.
Redraw
Quando o pickfirst set ou grip set so recuperados, eles no so apagados.
Session
Command executado no contexto da aplicao, em vez do contexto do documento atual.
Transparent
Command pode ser usado enquanto outro command est ativo.
Undefined
Command pode ser usando somente via nome Global.
UsePickSet
Quando o pickfirst set recuperado, ele desmarcado.
A sintaxe para definir um Command
A 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.
16
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#. [Comman
dMethod("CheckForPickfirstSelection", CommandFlags.UsePickSet & CommandFlags.NoB
lockEditor)] public static void CheckForPickfirstSelection() { . . . }
Definio da funo AutoLISP
Ao definir uma funo AutoLISP, voc usa o atributo LispFunction. O atributo LispFunct
ion espera um valor de String para usar o nome global da funo AutoLISP que est send
o definida. Junto com um nome de funo global, a estrutura LispFunction pode aceita
r 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 exibid
o quando o comando est ativo e F1 pressionado
Sintaxe para definir uma funo AutoLISP
A seguinte demonstrao cria um atributo LispFunction que define uma funo AutoLISP cha
mado InsertDynamicBlock.
Exemplo: C# [LispFunction("DisplayFullName")] public static void DisplayFullName
(ResultBuffer rbArgs) { . . . }
Recuperar valores passados para uma funo AutoLISP
Use um Foreach loop para percorrer os valores retornados na ResultBuffer pela fu
no 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 cad
a valor passado para a funo AutoLISP. A propriedade Value usada para retornar o va
lor do objeto TypedValue.
Para definir uma funo AutoLISP
Este 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 val
ores String para produzir a sada correta. Carregue o projeto .NET no AutoCAD e di
gite o seguinte no prompt de comando: (displayfullname "First" "Last")
O seguinte sada exibida aps a execuo da funo AutoLISP: Name: First Last
Exemplo: C#
17
using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; [Lis
pFunction("DisplayFullName")] public static void DisplayFullName(ResultBuffer rb
Args) { if (rbArgs != null) { string strVal1 = ""; string strVal2 = ""; int nCnt
= 0; foreach (TypedValue rb in rbArgs) { if (rb.TypeCode == (int)Autodesk.AutoC
AD.Runtime.LispDataType.Text) { switch(nCnt) { case 0: strVal1 = rb.Value.ToStri
ng(); break; case 1: strVal2 = rb.Value.ToString(); break; } nCnt = nCnt + 1; }
} Application.DocumentManager.MdiActiveDocument.Editor. WriteMessage("\nName: "
+ strVal1 + " " + strVal2); } }
Bibliografia
AutoCAD .NET Developer's Guide

You might also like