c# - Autocad

download c# - Autocad

of 7

description

excelente coleccion de programacion de c# con autocad

Transcript of c# - Autocad

Primer programa en AutoCAD con.NET6 respuestasQu mejor manera de comenzar a aprender la programacin en AutoCAD con .NET que el clsico Hola mundo?Los requisitos para poder ejecutarlo son: Microsoft Visual Studio 2008 o 2010, ya que estaremos utilizando el .NET Framework 3.5. Autodesk AutoCAD 2010 o 2011. Las libreras de ObjectARX. (En elpost anteriorest el link de descarga).El primer paso es crear un nuevo proyecto, del tipo Librera de clases, que vamos a llamar HolaMundo, no olvidarse de usar el .NET Framework 3.5:

Luego agregamos la referencias a las libreras que estamos necesitando (las mismas se encuentran en el directorio donde instalamos ObjectARX): AcMgd.dll AcDbMgd.dllEstas son las libreras que nos van a permitir conectarnos con el entorno de AutoCAD. Como estas libreras ya estn incluidas en AutoCAD, no deben ser copiadas en el directorio de destino de nuestra librera, para ello cambiamos las propiedades de nuestras referencias como se muestra en la imagen y colocamos la copia local en falso:

Con esto estamos listos para comenzar a programar!!Vamos a utilizar la clase que Visual Studio cre automticamente cuando creamos el proyecto.Agregamos las clusulasusingnecesarias:

using Autodesk.AutoCAD.ApplicationServices;using Autodesk.AutoCAD.EditorInput;using Autodesk.AutoCAD.Runtime;Ahora creamos una nueva funcin, con visibilidad pblica, y que no devuelve nada, llamada HolaMundo:

public void HolaMundo(){}A ella le vamos a agregar un atributo, para que se transforme en un comando de AutoCAD y pueda ser ejecutado desde la lnea de comandos:

[CommandMethod("HolaMundo")]Dentro de nuestra funcin escribimos el cdigo que devuelve nuestro ya conocido mensaje: Hola Mundo!!:

Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;ed.WriteMessage("Hola Mundo!!");Y listo! Con esto ya creamos nuestro primer programa en AutoCAD!Para poder probarlo, luego de compilar nuestro proyecto, abrimos AutoCAD y ejecutamos el comandonetload, y cargamos la dll generada desde Visual Studio.El resultado de la ejecucin se puede ver en la imagen:

Les comparto abajo el cdigo completo:

using Autodesk.AutoCAD.ApplicationServices;using Autodesk.AutoCAD.EditorInput;using Autodesk.AutoCAD.Runtime;

namespace HolaMundo{public class Class1 {[CommandMethod("HolaMundo")]public void HolaMundo(){Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;ed.WriteMessage("Hola Mundo!!");}}}

Comenzando a dibujar desde.NET3 respuestasEn elpost anterior, solamente devolvimos un mensaje de texto ante la ejecucin de un comando.En este post vamos a comenzar a agregar entidades al dibujo. Para ello lo primero que vamos a hacer crear un nuevo proyecto (librera de clases) y vamos a utilizar la clase que se crea por defecto.Agregamos las clusulas using necesarias:usingAutodesk.AutoCAD.Runtime;usingAutodesk.AutoCAD.ApplicationServices;usingAutodesk.AutoCAD.DatabaseServices;usingAutodesk.AutoCAD.Geometry;Obtenemos la informacin del documento actual, su base de datos, y generamos una nueva transaccin para ejecutar las modificaciones al dibujo:DocumentacDoc=Application.DocumentManager.MdiActiveDocument;DatabaseacCurDb=acDoc.Database;using(TransactionacTrans=acCurDb.TransactionManager.StartTransaction()){Ahora vamos a crear las entidades que queremos agregar al dibujo: vamos a agregar una lnea y un crculo.LineacLine=newLine(newPoint3d(5,5,0),newPoint3d(12,3,0));CircleacCircle=newCircle(newPoint3d(7,4,0),Vector3d.ZAxis,2);acLine.SetDatabaseDefaults();acCircle.SetDatabaseDefaults();Una vez que tenemos todas las propiedades de nuestras dos entidades listas, las agregamos a la transaccin y hacemos un commit:acBlkTblRec.AppendEntity(acLine);acTrans.AddNewlyCreatedDBObject(acLine,true);acBlkTblRec.AppendEntity(acCircle);acTrans.AddNewlyCreatedDBObject(acCircle,true);acTrans.Commit();Agregamos el atributo para que esta funcin pueda ser llamada como un comando:[CommandMethod(Dibujar)]publicstaticvoidDibujarLineaYCirculo()Y ya estamos listos para ejecutarlo y ver lo que hace:

Les comparto el cdigo completo:usingAutodesk.AutoCAD.Runtime;usingAutodesk.AutoCAD.ApplicationServices;usingAutodesk.AutoCAD.DatabaseServices;usingAutodesk.AutoCAD.Geometry;namespaceDemo2{publicclassClass1{[CommandMethod(Dibujar)]publicstaticvoidDibujarLineaYCirculo(){DocumentacDoc=Application.DocumentManager.MdiActiveDocument;DatabaseacCurDb=acDoc.Database;using(TransactionacTrans=acCurDb.TransactionManager.StartTransaction()){BlockTableacBlkTbl;acBlkTbl=acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead)asBlockTable;BlockTableRecordacBlkTblRec;acBlkTblRec=acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite)asBlockTableRecord;LineacLine=newLine(newPoint3d(5,5,0),newPoint3d(12,3,0));CircleacCircle=newCircle(newPoint3d(7,4,0),Vector3d.ZAxis,2);acLine.SetDatabaseDefaults();acCircle.SetDatabaseDefaults();acBlkTblRec.AppendEntity(acLine);acTrans.AddNewlyCreatedDBObject(acLine,true);acBlkTblRec.AppendEntity(acCircle);acTrans.AddNewlyCreatedDBObject(acCircle,true);acTrans.Commit();}}}}Happy coding;)