Professional Documents
Culture Documents
? 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
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
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