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