See the top rated post in this thread. Click here

Results 1 to 9 of 9

Thread: Exemplos AutoCAD.NET com C#

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Active Member pferreira's Avatar
    Join Date
    2006-06
    Location
    Lisbon, Portugal
    Posts
    88
    Login to Give a bone
    1

    Lightbulb Exemplos AutoCAD.NET com C#

    Olá,
    Neste Thread vou enviar alguns exemplos de rotinas que vou criando para aprender AutoCAD.NET e C#, espero encorajar todos os outros que estejam interessados nesta tecnologia em enviar tambem exemplos, podem ser exemplos criados pelos próprios ou exemplos que encontrem noutros sitios.
    O exemplo que vou enviar hoje demonstra a selecção de uma entidade através dos "SelectionSet", este exemplo é basedo nos exemplos do Kean Walmsley http://through-the-interface.typepad.com.
    O IDE utilizado foi o SharpDevelop 2.1http://www.sharpdevelop.net/OpenSource/SD/Download/ e o .NET Framework SDK 2.0 http://www.microsoft.com/downloads/d...displaylang=en.
    Criem uma nova solução no sharpdevelop do tipo Class Library (para criar um dll) copiem o código aqui indicado para o ficheiro criado e para compilar o código têm que acrescentar ao projecto duas referências, C:\Program Files\AutoCAD 2008\acdbmgd.dll e C:\Program Files\AutoCAD 2008\acmgd.dll.
    Depois de compilado podem carregar no AutoCAD através de NETLOAD o dll criado pelo compilador e executar o comando "SINGLEPICK".
    Code:
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using Autodesk.AutoCAD.ApplicationServices;
    using Autodesk.AutoCAD.DatabaseServices;
    using Autodesk.AutoCAD.EditorInput;
    using Autodesk.AutoCAD.Geometry;
    using Autodesk.AutoCAD.Runtime;
    
    
    namespace singlePick
    {
    	public class singlePick
    	{
    
    		[CommandMethod("SINGLEPICK")]//Exemplo de selecção de uma entidade através dos "SelectionSet".
    		public void singlepick()
    		{
    			//Setup
    			Document doc = Application.DocumentManager.MdiActiveDocument;//1º Abrimos o documento activo e passamo-lo para a variável "doc" que é do tipo "Document".
    			Editor ed = doc.Editor;//2º Abrimos o editor do documento actual e passamo-lo para a variável "ed" que é do tipo Editor.
    			Database db = doc.Database;//3º Abrimos a base de dados do documento actual e passamo-lo para a variável "db" que é do tipo Database.
    			/*
    			 * A classe "Database" representa o ficheiro do desenho AutoCAD, cada
    			 * objecto "Database" contêm as várias variáveis de cabeçalho "header variables",
    			 * Tabelas de simbolos "Symbol tables", "Table Records", entidades e objectos que
    			 * são o que fazem um desenho. Esta classe contem funções que permitem o acesso a
    			 * todos os "Symbol Tables", a ler e a escrever um ficheiro DWG, a aceder e a modificar
    			 * os defaults da base de dados, a executar várias operações ao nivel da base de dados
    			 * tais como "wblock" e "deepCloneObjects", e a aceder e modificar todas as variáveis de cabeçalho "header variables".
    			 */
    			
    			//Opções para a selecção de uma unica entidade com selection sets
    			PromptSelectionOptions Opso = new PromptSelectionOptions();//Opso é um novo objecto do tipo "PromptSelectionOptions"
    			Opso.SingleOnly = true;//A propriedade "SingleOnly" indica se a selecção é feita só para uma entidade ou não, é do tipo boolean.
    			Opso.MessageForAdding = "\nSelect a single entity: ";
    			PromptSelectionResult psr = ed.GetSelection(Opso);
    			
    			if(psr.Status == PromptStatus.Error)
    			{
    				return;
    			}
    			
    			SelectionSet ss = psr.Value;//O resultado da selecção unica que está na variável "psr" é passado para uma variável "ss" do tipo "SelectionSet".
    			ObjectId[] idarray = ss.GetObjectIds();//Passamos agora o "Object Id" do objecto seleccionado para uma variável "idarray" do tipo ObjectId[], sendo esta um array de ObjectId's.
    			
    			Transaction tr = db.TransactionManager.StartTransaction();//Damos incio ás transacções com a base de dados actual do documento AutoCAD
    			/*
    			 * A partir do momento que começamos as Transacções com a base de dados podemos começar a alterar e a ler os objectos do desenho
    			 * no final de todas as operações temos que terminar as transações o que neste caso será com o método "tr.Commit()" se as Transações
    			 * não forem fechadas ou se usar o método "tr.Abort()" todas as alterações que efectuamos não serão gravadas na base de dados.
    			 *  A utilização do método "Abort()" é útil quando se quer abortar as operações efectuadas por um qualquer erro ou porque o
    			 * utilizador decidiu cancelar as operações que estava a efectuar.
    			 */
    			using(tr)
    			{
    				foreach(ObjectId objid in idarray)
    				{
    					DBObject obj = tr.GetObject(objid, OpenMode.ForWrite, true);//Recolhemos o objecto que foi passado do array de ObjectID[] e abrimo-lo no modo de escrita.
    					Entity entity = (Entity) obj;//Aqui fazemos uma conversão explicita de obj que é um objecto do tipo DBObject para uma classe Entity que deriva da classe DBOject.
    					ed.WriteMessage("\nYou Selected: {0}", entity.GetType().FullName);//Aqui escrevemos na linha de comandos o tipo de entidade seleccionada.
    				}
    				tr.Commit();//Aqui Terminamos as nossas transacções.
    			}
    		}
    	}
    }
    Junto segue tambem apenas o dll já compilado que podem testar no AutoCAD.
    NETLOAD->Carregar o dll singlepick.dll->executar o comando "singlepick".

    Obrigado
    Attached Files Attached Files

Similar Threads

  1. 2012: Problems in autocad 2012 when opening files from autocad 2011 saved as 2000
    By debora.fernandes in forum AutoCAD General
    Replies: 13
    Last Post: 2012-06-30, 02:12 PM
  2. Replies: 15
    Last Post: 2010-09-23, 01:57 PM
  3. Replies: 6
    Last Post: 2009-06-01, 07:10 AM
  4. Replies: 3
    Last Post: 2007-09-07, 04:36 PM
  5. AutoCAD 2002 - Function / Tool that edits AutoCAD command quick keys
    By stevejlipski in forum AutoCAD Customization
    Replies: 3
    Last Post: 2007-01-02, 12:07 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •