Hallo,
bekomme wenn ich mehrmals hintereinander ein Solid mit dem unter dargestellten Code einfüge folgende Fehlermeldung. Autocad stürzt danach ab. Hat einer eine Idee woran es liegen kann?
Fehlermeldung:
Reentracy wurde erkannt.
Es wurde versucht, einen Aufruf in den verwalteten Code durchzuführen,
ohne dass zunächst ein Übergang erfolgt ist. Versuchen Sie nicht,
verwalteten Code innerhalb von systemeigenen Erweiterungspunkten
auf niedriger Ebene auszuführen, z.B. im vektoriellen Ausnahmehandler,
da dies Datenbeschädigung und -verlust zur Folge haben kann.
Hier der Code:
public class Zylinder
{
public bool doit()
{
Point3dCollection points = new Point3dCollection();
points.Add(new Point3d(10, 10, 0));
points.Add(new Point3d(100, 10, 0));
points.Add(new Point3d(150, 50, 0));
Point3d center = new Point3d(10, 10, 0);
//kreis senkrecht zum 1. Liniensegment
Vector3d normal = points[1] - points[0];
Circle dbkreis = new Circle(center, normal, 10);
//Kreis in Liste schreiben
DBObjectCollection curveSegments = new DBObjectCollection();
curveSegments.Add(dbkreis);
//Curve Segments in eine Region umwandeln
DBObjectCollection regionColl = Region.CreateFromCurves(curveSegments);
//Die Konvertierung kreis in Region darf nur ein Regionobjekt liefern
if (regionColl.Count != 1)
return false;
//Curve erzeugen
Curve pline = new Polyline3d(Poly3dType.SimplePoly, points, false);
Solid3d solid = new Solid3d();
//Zylinder als Solid3d erzeugen
solid.ExtrudeAlongPath((Region)regionColl[0], pline, 0);
Database db = Application.DocumentManager.MdiActiveDocument.Database;
DBTransMan tm = db.TransactionManager;
Transaction ta = tm.StartTransaction();
try
{
BlockTable bt = (BlockTable)ta.GetObject(db.BlockTableId, OpenMode.ForRead, false);
BlockTableRecord btr = (BlockTableRecord)ta.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite, false);
//Bauteil in DB schreiben und ID speichern
btr.AppendEntity(solid);
//Transaktion das neue Element zuweisen
ta.AddNewlyCreatedDBObject(solid, true);
ta.Commit();
}
catch
{
}
finally
{
ta.Dispose();
}
return true;
}
}
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP