明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1430|回复: 6

新建的图形数据库,如何进行编辑?

[复制链接]
发表于 2015-6-2 09:53:07 | 显示全部楼层 |阅读模式
本帖最后由 Real_King 于 2015-6-2 11:15 编辑

       Editor ed = AcadApp.DocumentManager.MdiActiveDocument.Editor;//这是当前活动窗口的Editor
       PromptSelectionResult Inborderpsr = ed.SelectCrossingPolygon(Border, Inborderfilter);
        SelectionSet Inborderss = Inborderpsr.Value;
        Database dbnew = new Database(false, true);
        //下面的操作选择要复制到新建数据库中的实体
        //获取所选实体的ObjectId集合
        ObjectIdCollection ids = new ObjectIdCollection(Inborderss.GetObjectIds());
        //把当前数据库中所选择的实体复制到新建的数据库中,并指定插入点为当前数据库的基点
        dbnew = db.Wblock(ids, db.Ucsorg);

        dbnew为新建的图形数据库,需要对其做一个SelectCrossingPolygon,但是,如何获取(新建)它的Document对象及Editor对象,让它"显示在新建的dwg并出现在CAD中并作为当前活动窗口?"因为要建立一个选择集,请大家指教,谢谢!
        问题总结为,新建的database,如何像当前图形一样进行编辑,如何交互编辑,或者,关于新建一图形文档dwg(或者说database)进行编辑有没有更好的方式?我担心自己一开始就错了

  
发表于 2015-6-2 10:31:38 来自手机 | 显示全部楼层
这个没办法 必须是文档才有的
 楼主| 发表于 2015-6-2 10:45:56 | 显示全部楼层
本帖最后由 Real_King 于 2015-6-2 11:43 编辑
雪山飞狐_lzh 发表于 2015-6-2 10:31
这个没办法 必须是文档才有的

飞狐老师,我又试过新建一个dwg,然后获取其database和document进行编辑,
参考了.NET人员开发手册 锁定和解锁文档
  1. [CommandMethod("LockDoc", CommandFlags.Session)]
  2. public static void LockDoc()
  3. {
  4.   // 创建新图形  Create a new drawing
  5.   DocumentCollection acDocMgr = Application.DocumentManager;
  6.   Document acNewDoc = acDocMgr.Add("acad.dwt");
  7.   Database acDbNewDoc = acNewDoc.Database;

  8.   // 锁定新文档    Lock the new document
  9.   using (DocumentLock acLckDoc = acNewDoc.LockDocument())
  10.   {
  11.       // 在新数据库中启动事务   Start a transaction in the new database
  12.       using (Transaction acTrans = acDbNewDoc.TransactionManager.StartTransaction())
  13.       {
  14.           // 以只读方式打开块表   Open the Block table for read
  15.           BlockTable acBlkTbl;
  16.           acBlkTbl = acTrans.GetObject(acDbNewDoc.BlockTableId,
  17.                                        OpenMode.ForRead) as BlockTable;

  18.           // 以写方式打开模型空间块表记录   Open the Block table record Model space for write
  19.           BlockTableRecord acBlkTblRec;
  20.           acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  21.                                           OpenMode.ForWrite) as BlockTableRecord;

  22.           // 创建一个半径为3圆心在5,5的圆    Create a circle with a radius of 3 at 5,5
  23.           Circle acCirc = new Circle();
  24.           acCirc.SetDatabaseDefaults();
  25.           acCirc.Center = new Point3d(5, 5, 0);
  26.           acCirc.Radius = 3;

  27.           // 添加新对象到模型空间和事务中   Add the new object to Model space and the transaction
  28.           acBlkTblRec.AppendEntity(acCirc);
  29.           acTrans.AddNewlyCreatedDBObject(acCirc, true);

  30.           // 保存新对象到数据库中   Save the new object to the database
  31.           acTrans.Commit();
  32.       }

  33.       // 解锁文档   Unlock the document
  34.   }

  35.   // 设置新文档为当前文档   Set the new document current
  36.   acDocMgr.MdiActiveDocument = acNewDoc;
  37. }
但是,我需要把这样的 新建-编辑 代码放到已有的代码里,所以[CommandMethod("LockDoc", CommandFlags.Session)]是没法加进去的。对其进行编辑时,始终没有效果,请问如何让Session
的效果在已有函数内起作用呢?谢谢
 楼主| 发表于 2015-6-2 11:42:34 | 显示全部楼层
本帖最后由 Real_King 于 2015-6-2 11:45 编辑
雪山飞狐_lzh 发表于 2015-6-2 10:31
这个没办法 必须是文档才有的

也就是如何新建一个dwg,再对它进行编辑,或编辑多个dwg的其中一个/交互编辑
发表于 2015-6-2 13:06:09 来自手机 | 显示全部楼层
只要命令有文档的相关操作 都要声明session
发表于 2015-6-2 13:37:10 来自手机 | 显示全部楼层
本帖最后由 ivde 于 2015-6-2 13:41 编辑

既然是database操作,把代码在new里写,都操作完成再save
select是基于视口显示的,没有视口时就判断Extent3d在不在范围内
 楼主| 发表于 2015-6-2 15:27:07 | 显示全部楼层
雪山飞狐_lzh 发表于 2015-6-2 13:06
只要命令有文档的相关操作 都要声明session

明白了,新建前后的document都要lock
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 08:30 , Processed in 0.176679 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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