Kingtop 发表于 2002-11-20 18:09:00

如何在AcDbDatabase中使用类似acedSSGet的方法选择对象?

各位前辈,我想打开一个指定文件名的DWG文件,将其中的部分对象作为外部块插入到当前图形。可以无法找到一种方法可以不在当前图形中选择对象。请问该怎么实现?

zhengkuo 发表于 2002-11-20 18:45:00

ok

先定义选择集
   ads_nameSS;
   acedSSGet(NULL,NULL,NULL,NULL,ss);
此时,你所选择的对象已经被ss标记
若是想改变选择方式(比如窗选、Crossing选等,可以通过改变前面几个参数)

Kingtop 发表于 2002-11-20 19:03:00

谢谢,但这只能在当前图形选择

怎么在没有显示的图形中创建选择集并选择?

leeyeafu 发表于 2002-11-21 08:31:00

在没有显示的图形中创建选择集并选择?如何选择?大概先要显示图形吧

首先,对你的需求我作这样的假设:你需要将非活动文档显示给用户,并由用户完成选择,然后切换回原来的活动文档。是不是这样?
如此,程序将牵涉ACAD多文档处理,只能在ACAD 2000以上版本及相应的ARX中实现,在此给你一个基本思路,实现的具体细节你须参考ARX帮助中的AcAp类库。
先给当前文档解除锁定,然后打开新文档。在这要注意,打开文档不是acedReadDwgFile(),这样只是打开AcDbDatebase数据库,不能完成用户交互的aced命令。要使用AcApDocManager->openDocument()。
然后,将新文档置为活动文档并锁定。此后你可以使用acedSSGet()获得选择集,完成之后,再切换回原来的文档。
估计大致如此,你先试试。

Kingtop 发表于 2002-11-21 12:11:00

谢谢你的建议,这基本能满足我的需求,其实我的程序不需要用户交互

谢谢你的建议,这基本能满足我的需求,其实我的程序不需要用户交互。
你提的方法我没有用过,我昨天利用浏览器对块表进行遍历,我的想法是判断对象是否在制定的区域内,如果是,将它加入到ArrayID中,最后由wblock方法创建为外部块,在插入到当前图形中。所有的过程都可以实现,就是不知道该怎么判断对象是否在制定的区域内。请问该怎么实现?

Kingtop 发表于 2002-11-21 19:52:00

废了很大劲,还是没有实现你的思路,能否贴出部分代码,谢谢了

不管怎么着,程序总是停在acDocManager->openDocument();的位置除非使用Ctrl+Tab切换到原来的图形,不然无法继续执行。老大,请务必说明这个思路的关键所在啦。最好是写一些代码来。太感谢了
页: [1]
查看完整版本: 如何在AcDbDatabase中使用类似acedSSGet的方法选择对象?