![]() |
【转帖】如何在无模式对话框中对autocad数据库进行操作?
如何在无模式对话框中对autocad数据库进行操作?
如何在无模式对话框中对autocad数据库进行操作? 在无模式对话框中对当前acdbdatabase进行保存或新建acdbdatabase总出错?但用模式对话框则无问题?请问各位,这是不是程序锁定的问题?怎样做? ss 管理文档状态。 活动文档如果不是当前文档,就会有很多函数被禁止。 非模式对话框不是任何指定文档命令处理器状态的一部份 解决:要显式地管理文档状态。 see 原因 在多文档状态下, acdbhostapplicationservices()->workingdatabase()不是指一个文档,而是多个文档,如果此时对它进行写操作,就会使cad死机 在单文档状态时 acdbhostapplicationservices()->workingdatabase()相当于r14时的curdwg(), 对于对话框而言,模式对话框在创建时,已经是属于某一个文档了,因此它不会有问题, 非模式对话框则不是属于任何一个文档的,如果此时直接往数据库中加东西就会死机。 2、解决方法 从根本上讲,在使用非模式对话框时要显式地管理文档的状态,当然,如果本来就不需要多文档,则将系统变量sdi设为1也能解决非模式对话框的问题。 下面这段代码是向当前文档写入一条直线,至于不是向当前文档而是向指定文档写入实体,则可依此变化之。 acgepoint3d pt0(0,0,0),pt1(100,500,0); acdbline *pent=new acdbline(pt0,pt1); acdbblocktable *pblocktable; acdocmanager->lockdocument( acdocmanager->curdocument(), acap::kwrite, null, null,true) ; //将当前文档锁定,因为要写入实体了 acdocmanager->curdocument()->database()->getblocktable(pblocktable,acdb::kforread); //打开当前文档的块表 //acdbhostapplicationservices()->workingdatabase()->getblocktable(pblocktable,acdb::kforread); acdbblocktablerecord *pblocktablerec; pblocktable->getat(acdb_model_space,pblocktablerec,acdb::kforwrite); pblocktable->close(); acdbobjectid eid; pblocktablerec->appendacdbentity(eid,pent); pent->close(); pblocktablerec->close(); //运行完了要解锁 acdocmanager->unlockdocument( acdocmanager->curdocument()) ; see again 解决了问题,鲜花一朵,聊表谢意! 谢谢goldenshin,我也遇到过这种问题,看后已解决! |
| 所有的时间均为北京时间。 现在的时间是 03:11 AM. |