Comenzando a dibujar desde .NET

En el post anterior, solamente devolvimos un mensaje de texto ante la ejecución 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 (librería de clases) y vamos a utilizar la clase que se crea por defecto.

Agregamos las cláusulas using necesarias:

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;

Obtenemos la información del documento actual, su base de datos, y generamos una nueva transacción para ejecutar las modificaciones al dibujo:

      Document acDoc = Application.DocumentManager.MdiActiveDocument;
      Database acCurDb = acDoc.Database;
      using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
      {

Ahora vamos a crear las entidades que queremos agregar al dibujo: vamos a agregar una línea y un círculo.

        Line acLine = new Line(new Point3d(5, 5, 0), new Point3d(12, 3, 0));
        Circle acCircle = new Circle(new Point3d(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 transacción 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 función pueda ser llamada como un comando:

    [CommandMethod(“Dibujar”)]
    public static void DibujarLineaYCirculo()

Y ya estamos listos para ejecutarlo y ver lo que hace:

Demo2

Les comparto el código completo:

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
 
namespace Demo2
{
  public class Class1
  {
    [CommandMethod(“Dibujar”)]
    public static void DibujarLineaYCirculo()
    {
      Document acDoc = Application.DocumentManager.MdiActiveDocument;
      Database acCurDb = acDoc.Database;
 
      using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
      {
        BlockTable acBlkTbl;
        acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
          OpenMode.ForRead) as BlockTable;
 
        BlockTableRecord acBlkTblRec;
        acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
          OpenMode.ForWrite) as BlockTableRecord;

 
        Line acLine = new Line(new Point3d(5, 5, 0), new Point3d(12, 3, 0));
        Circle acCircle = new Circle(new Point3d(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😉

3 pensamientos en “Comenzando a dibujar desde .NET

  1. Zeus Paez

    Como se puede crear un codigo mediante el cual no se abra el objeto drawing, sino que ligemos el dibujo a una transaccion algo como esto:
    Dim myDB As New Database(False, True)
    ‘El SourceFile.FullName es el path de un dibujo, el IO.Path.CombineXXX es un simple log
    myDB.DxfIn(SourceFile.FullName, IO.Path.Combine(TargPath, “dxf.log”))
    Dim myBT As BlockTable = myTrans.GetObject(myDB.BlockTableId, OpenMode.ForRead)

    algo como esto, he visto que pueden modificar dibujos de autocad pero sin abrir el dibujo.

    Todos los ejemplos que he visto funcionan con algo como esto:
    Document acDoc = Application.DocumentManager.MdiActiveDocument;
    Database acCurDb = acDoc.Database;

    Sin embargo si tienes 15,000 dibujos para modificar es mas rápido el proceso si todo se realiza como una transacción. Realmente no conozco con exactitud como funciona pero me imagino que es posible.

    Responder

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s