Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
cpias de arquivos DLL referenciada pode causar resultados inesperados quando voc carregar o seu assembly no AutoCAD.
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
informaes sobre transaes, veja o objeto Transaction Manager, consulte como utilizar as transaes com o Transaction Manager.
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.
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: Layer table record em Layers symbol table Layout no dicionrio ACAD_LAYOUT Document em DocumentCollection Attributes em uma referncia de bloco(block reference)
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);
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 } }
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
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 } }
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 } }
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 } }
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
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: 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.
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() { . . . }
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