Ich hätte da eine Frage bezüglich neu erstellte Objekte einfügen.
Bisher hab ich das so gemacht:
Code:
Database db = Application.DocumentManager.MdiActiveDocument.Database;
Autodesk.AutoCAD.DatabaseServices.TransactionManager tm = db.TransactionManager;
Transaction tr = tm.StartTransaction();
BlockTable bt = (BlockTable)tm.GetObject(db.BlockTableId, OpenMode.ForRead, false);
BlockTableRecord btr = (BlockTableRecord)tm.GetObject(Utils.UtilsDb.IsPaperSpace(db) ? bt[BlockTableRecord.PaperSpace] : bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite, false);
Circle MeasuringPoint = new Circle(InsertPoint, new Vector3d(0, 0, 1), Radius);
btr.AppendEntity(MeasuringPoint);
tm.AddNewlyCreatedDBObject(MeasuringPoint, true);
tr.Commit();
Das funktioniert ja ohne Probleme.
Wie stellt man es aber am besten an, wenn man eine Funktion machen möchte und eine ganze Reihe von Objekten einfügen möchte?
Ich hab es bisher noch nicht geschafft.
Ich habe folgenden Lösungsansatz probiert, geht aber irgendwie nicht.
Code:
public void DrawObjects(DBObjectCollection ents)
{
//Debug.Assert(ents != null);
//Debug.Assert(db != null);
using (tr = tm.StartTransaction())
{
BlockTable bt = (BlockTable)tm.GetObject(db.BlockTableId, OpenMode.ForRead, false);
BlockTableRecord btr = (BlockTableRecord)tm.GetObject(Utils.UtilsDb.IsPaperSpace(db) ? bt[BlockTableRecord.PaperSpace] : bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite, false);
//BlockTableRecord btr = (BlockTableRecord)tm.GetObject(Application.Editor.CurrentViewportObjectId, OpenMode.ForWrite, false); foreach (Entity tmpEnt in ents)
{
//Debug.Assert(tmpEnt.IsWriteEnabled);
btr.AppendEntity(tmpEnt);
tm.AddNewlyCreatedDBObject(tmpEnt, true);
}
}
}
db und tm hab ich vorher im code schon definiert.
Hat vielleicht jemand von euch eine Funktion geschrieben die Objekte ähnlich wie oben gezeigt einfügt?
------------------
Roland
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP