Real_King 发表于 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)进行编辑有没有更好的方式?我担心自己一开始就错了


雪山飞狐_lzh 发表于 2015-6-2 10:31:38

这个没办法 必须是文档才有的

Real_King 发表于 2015-6-2 10:45:56

本帖最后由 Real_King 于 2015-6-2 11:43 编辑

雪山飞狐_lzh 发表于 2015-6-2 10:31 static/image/common/back.gif
这个没办法 必须是文档才有的
飞狐老师,我又试过新建一个dwg,然后获取其database和document进行编辑,
参考了.NET人员开发手册 锁定和解锁文档
public static void LockDoc()
{
// 创建新图形Create a new drawing
DocumentCollection acDocMgr = Application.DocumentManager;
Document acNewDoc = acDocMgr.Add("acad.dwt");
Database acDbNewDoc = acNewDoc.Database;

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

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

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

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

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

      // 解锁文档   Unlock the document
}

// 设置新文档为当前文档   Set the new document current
acDocMgr.MdiActiveDocument = acNewDoc;
}
但是,我需要把这样的 新建-编辑 代码放到已有的代码里,所以是没法加进去的。对其进行编辑时,始终没有效果,请问如何让Session
的效果在已有函数内起作用呢?谢谢

Real_King 发表于 2015-6-2 11:42:34

本帖最后由 Real_King 于 2015-6-2 11:45 编辑

雪山飞狐_lzh 发表于 2015-6-2 10:31 static/image/common/back.gif
这个没办法 必须是文档才有的
也就是如何新建一个dwg,再对它进行编辑,或编辑多个dwg的其中一个/交互编辑

雪山飞狐_lzh 发表于 2015-6-2 13:06:09

只要命令有文档的相关操作 都要声明session

ivde 发表于 2015-6-2 13:37:10

本帖最后由 ivde 于 2015-6-2 13:41 编辑

既然是database操作,把代码在new里写,都操作完成再save
select是基于视口显示的,没有视口时就判断Extent3d在不在范围内

Real_King 发表于 2015-6-2 15:27:07

雪山飞狐_lzh 发表于 2015-6-2 13:06 static/image/common/back.gif
只要命令有文档的相关操作 都要声明session

明白了,新建前后的document都要lock
页: [1]
查看完整版本: 新建的图形数据库,如何进行编辑?