明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 662|回复: 5

跪求哪里出错了????

[复制链接]
发表于 2014-12-2 12:09:16 | 显示全部楼层 |阅读模式
class Test
    {      
        [CommandMethod("blk")]
        public void createBlkRef()
        {
            //获取块的插入点
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            PromptPointOptions ptOps = new PromptPointOptions("选择块的插入点");
            PromptPointResult ptRes;
            ptRes = ed.GetPoint(ptOps);
            Point3d ptInsert;
            if (ptRes.Status == PromptStatus.OK)
            {
                ptInsert = ptRes.Value;
            }
            else
            {
                ptInsert = new Point3d(0, 0, 0);
            }
            Database db = HostApplicationServices.WorkingDatabase;
            // 使用 "using"关键字指定事务的边界
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                //获取块表和模型空间
                BlockTable bt = (BlockTable)(trans.GetObject(db.BlockTableId, OpenMode.ForWrite));
                BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);

                //创建块引用
                BlockReference blkRef = new BlockReference(ptInsert, createBlkDef());// 指定插入点和所引用的块表记录
               // blkRef.Rotation = 1.57;//指定旋转角,按弧度
                //保存新创建的块引用到模型空间   
                btr.AppendEntity(blkRef);
                trans.AddNewlyCreatedDBObject(blkRef, true);    // 通知事务新创建了对象
                trans.Commit(); //提交事务
            }
        }
              


        public static ObjectId createBlkDef()
        {
            Document doc = openDoc("C:\\图例列表.dwg");
           // DocumentLock docLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument();
           // docLock.Dispose();
            Database db = doc.Database;
            //Database db = HostApplicationServices.WorkingDatabase;
            //定义函数的返回值ObjectId
            ObjectId blkObjId = new ObjectId();
            // 使用 "using"关键字指定事务的边界
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                //获取块表
                BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
                //通过块名myBlkName判断块表中是否包含块表记录
                if ((bt.Has("DET_001")))
                    blkObjId = bt["DET_001"];//如果已经存在,通过块名获取块对应的ObjectId
                trans.Commit(); //提交事务
            }
            return blkObjId;
        }




     //打开“图例列表.dwg”文件,但我做的是在cad中看到了,如果不看到,怎么做呢???
        public static Document openDoc(string fileName)
        {
            Document doc = null;
            DocumentCollection docMar = Application.DocumentManager;
            if (System.IO.File.Exists(fileName))
            {
                doc = docMar.Open(fileName, false);
                //docMar.MdiActiveDocument = doc;
            }
            else
                docMar.MdiActiveDocument.Editor.WriteMessage("\n 文件" + fileName + "不存在");
            return doc;
        }


    }

我是想把“图例列表.dwg”文件中块名为“DET_001”的块加入到一个.dwg的文件中,各位大神,我哪里出错了,整个cad崩溃了,还有就是我打开“图例列表.dwg”文件不在cad中显示怎么实现,我这里是在当前的cad中打开了,但不是当前Document。




发表于 2014-12-2 15:57:08 | 显示全部楼层
     BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
                //通过块名myBlkName判断块表中是否包含块表记录
                if ((bt.Has("DET_001")))
                    blkObjId = bt["DET_001"];//如果已经存在,通过块名获取块对应的ObjectId
                trans.Commit(); //提交事务


如果不存在呢?
发表于 2014-12-2 16:01:32 | 显示全部楼层
以后不用跪了
 楼主| 发表于 2014-12-3 14:52:43 | 显示全部楼层
我保证是存在的而且是唯一的。
发表于 2014-12-3 15:45:00 | 显示全部楼层
你是拿明朝的尚方宝剑砍清朝的官,搜一搜吧,论坛内有多吃讨论过这个内容
 楼主| 发表于 2014-12-3 16:00:22 | 显示全部楼层
恩,谢谢大家,我这个问题解决了。谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 12:39 , Processed in 0.159245 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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