新建的图形数据库,如何进行编辑?
本帖最后由 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)进行编辑有没有更好的方式?我担心自己一开始就错了
这个没办法 必须是文档才有的 本帖最后由 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:45 编辑
雪山飞狐_lzh 发表于 2015-6-2 10:31 static/image/common/back.gif
这个没办法 必须是文档才有的
也就是如何新建一个dwg,再对它进行编辑,或编辑多个dwg的其中一个/交互编辑 只要命令有文档的相关操作 都要声明session 本帖最后由 ivde 于 2015-6-2 13:41 编辑
既然是database操作,把代码在new里写,都操作完成再save
select是基于视口显示的,没有视口时就判断Extent3d在不在范围内 雪山飞狐_lzh 发表于 2015-6-2 13:06 static/image/common/back.gif
只要命令有文档的相关操作 都要声明session
明白了,新建前后的document都要lock
页:
[1]