pangyugonggong 发表于 2012-9-12 10:30:55

绘制实体时发生eAlreadyInDb异常,求教

代码如下,我的思路是通过CreateBox()函数返回Solid3d列表 ,然后用DrawSolids进行一次性绘制,但是DrawSolids运行到
btr.AppendEntity(solid)时发出如题异常,字面意思可以理解为实体已存在于数据库中,但是之前CreateBox函数并没有进行相关操作,难道创建的任何实体不需要进行事务操作就进入数据库了?求解答

      
private static Solid3d CreateBox(PipeInfo info) {
            Solid3d box = new Solid3d();
            box.CreateBox(info.lenght, info.width, info.pipeLine.Length);
            box.Layer = info.layer;
            return box;
      }


       private static void DrawSolids(List<Solid3d> solids) {
            Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
            using (Transaction tran =db.TransactionManager.StartTransaction()) {
                BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                BlockTableRecord btr = tran.GetObject(bt, OpenMode.ForWrite) as BlockTableRecord;
                foreach (Solid3d solid in solids){
                  btr.AppendEntity(solid);//-----------此句出现eAlreadyInDb异常
                  tran.AddNewlyCreatedDBObject(solid, true);
                }
                tran.Commit();
            }
      }



sieben 发表于 2012-9-12 10:55:39

代码没有看到 List<Solid3d> solids 是怎么来的,或许solids里面的对象重复了。

pangyugonggong 发表于 2012-9-12 11:21:40

sieben 发表于 2012-9-12 10:55 static/image/common/back.gif
代码没有看到 List solids 是怎么来的,或许solids里面的对象重复了。

不会重复的,代码如下,其中PipeInfo 是根据图形中的线提取的信息                foreach (PipeInfo pipeInfo in pipeInfos) {
                  if (pipeInfo.isBox)
                  solids.Add(CreateBox(info));
                  else
                        solids.Add(CreateCylinder(info));
                }

pangyugonggong 发表于 2012-9-12 11:48:08

自己已解决,是参数传递的原因,将DrawSolids(List<Solid3d> solids)改变传递方式即可,
DrawSolids ( ref List<Solid3d> solids),即用引用传递

sieben 发表于 2012-9-12 11:52:34

if (solid.ObjectId == ObjectId.Null)
{
               btr.AppendEntity(solid);
               tran.AddNewlyCreatedDBObject(solid, true);
}
那这样试试
页: [1]
查看完整版本: 绘制实体时发生eAlreadyInDb异常,求教