Professional Documents
Culture Documents
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
1
Viso Geral da API do AutoCAD.NET
API 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:
Os trs principais arquivos DLL da API AutoCAD.NET que voc usa com freqncia so:
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.
Aps a instalao do SDK do ObjectARX, os arquivos DLL podem ser encontrados nas subpastas 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 referencie os arquivos DLL que vm
com o SDK em vez daqueles que so encontrados no diretrio de instalao do AutoCAD 2010.
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 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 UserConfiguration que lhe permite trabalhar com o
perfil gravado do usurio
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.
Voc pode acessar o objeto de Database para o documento atual, o objeto Document
membro da propriedade de Database.
Application.DocumentManager.MdiActiveDocument.Database
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.
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.
6
Objeto Collection
O 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:
Observao: Quando trabalhando com objetos COM, voc vai querer certificar-se de que voc fez
referncia biblioteca do tipo do AutoCAD 2010.
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 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 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;
Exemplo: C#
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#
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;
int nCnt = 0;
acDoc.Editor.WriteMessage("\nModel space objects: ");
nCnt = nCnt + 1;
}
Exemplo: C#
Autodesk.AutoCAD.ApplicationServices.Application.UpdateScreen();
Block Table Record Contm todas as entidades dentro bloco de definio especfica
File Dependency Collection Contm todos os itens na lista de File Dependency List
9
Hyperlink Collection Contm todos os hyperlinks dado de uma entidade(Entity)
Exemplo: C#
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;
// 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);
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"];
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;
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);
}
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;
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;
try
{
acLyrTblRec.Erase();
acDoc.Editor.WriteMessage("\n'MyLayer' was erased");
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.
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.
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()
{
return;
}
}
// 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 AutoLISP
Comandos 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 Command
Ao 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:
A tabela seguinte lista os sinalizadores disponveis que podem ser utilizados para definir o
comportamento de um comando.
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#.
Exemplo: C#
[LispFunction("DisplayFullName")]
public static void DisplayFullName(ResultBuffer rbArgs)
{
. . .
}
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);
}
}
Bibliografia
AutoCAD .NET Developer's Guide
17