明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1462|回复: 6

[图元] 如何循环插入同一个块

[复制链接]
发表于 2015-4-27 08:32:20 | 显示全部楼层 |阅读模式

我想实现的功能是点击插入块时,能插入4个相同的块。把For循环去掉,单独插入一个块是没有错误的,能正常插入块。但加上就出错了,提示“内部错误:!dbobji.cpp@6266:eNotOpenForWrite”请给位大侠给小妹看看呗,十分感谢!!!
       public void InsIcons()
        {
            Database db = HostApplicationServices.WorkingDatabase;
            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
            ObjectId blkId;
            Point3d point3d = new Point3d();
            BlockReference br = null;
            try
            {
                ed.WriteMessage(fileName);
                using (Transaction trans = db.TransactionManager.StartTransaction())
                {
                    blkId = CommonFunction.m_ImportBlock(filePath, fileName, blockName, true);
                    if (blkId != ObjectId.Null)
                    {
                        BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
                        BlockTableRecord modelSpace = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                        for (int i = 0; i < 4; i++)
                        {

                            if (i == 0)
                                point3d = CommonFunction.GetPoint(ed, "请选择一个插入点");
                            else
                                point3d = new Point3d(point3d.X, point3d.Y + 7 * scale3d, 0);
                            br = new BlockReference(point3d, blkId);
                            br.ScaleFactors = new Scale3d(scale3d);
                            modelSpace.AppendEntity(br);
                            trans.AddNewlyCreatedDBObject(br, true);
                            trans.Commit();
                        }

                    }
                    else
                    {
                        Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("您要插入的块不存在!");
                        return;
                    }
                }
            }
            catch (System.Exception ex)
            {
                ed.WriteMessage(ex.StackTrace + "\n" + ex.Message + "\n" + ex.TargetSite);
                return;
            }
        }



发表于 2015-4-27 09:03:08 来自手机 | 显示全部楼层
Trans.commit()放循环外
发表于 2015-4-27 10:33:01 | 显示全部楼层
循环里应该放一个QueueForGraphicsFlush
发表于 2015-4-27 11:02:28 | 显示全部楼层
[em0] 楼主你好,小弟是新人。想请教个问题:
blkId = CommonFunction.m_ImportBlock(filePath, fileName, blockName, true);
这段代码,是读取你的符号的。小弟完全不知道怎么实现的,求楼主教下~ 给下读取的源码最好拉~
发表于 2015-4-29 08:04:54 | 显示全部楼层
               .net还没接触过
发表于 2015-4-29 15:38:55 | 显示全部楼层
把块先插入在内存中,完成后提交事务即可,即按飞弧大哥的提示修改即可
发表于 2015-4-29 18:17:49 来自手机 | 显示全部楼层
插入了要及时显示才好,仅在database循环时不直观

点评

是不是每插入之前先清理一下  发表于 2015-5-3 22:35
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-29 04:36 , Processed in 0.189640 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表