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:
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 😉
Muy bueno compadre.
Gracias Mouse!
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.
tengo una duda, lo que pasa que quiero insertar un dibujo que ya tengo creado a uno nuevo, pero he estado buscando algun ejemplo y no encuentro como, gracias
buen dia quien me podria ayudar con un tutoria de visual basic net dirigido para autocad
Estoy en la misma. Si encuentras algo por favor comparte
Gracias por el codigo, tengo una consulta ahora para aplicarlo a un boton del formulario. La idea sería al pulsar el boton que lo haga automatico. Es decir que habra autocad y lo dibuje sin necesidad de llamarlo desde la linea de comandos. Como puedo hacer esto????
Is Amoxicillin Safe During Pregnancy viagra 875 Mg Amoxicillin Vente Generique Cialis Professional