因为PS是由ACAD开发团队移植到MS上的,它的开发方式还是基于ACAD的,这里的ObjectId跟MS的ElementID不是同一个概念,你发代码中获取具体元素不应该通过SetObjectId的方式,而应该通过PsTransaction类获取,基本方式如下代码:
//创建选择集 PsSelection sel = new PsSelection(); sel.Initialize(); //创建筛选条件 PsFilterObject filter = new PsFilterObject(); //设置筛选条件为:RebarSingle filter.set_FilterConcreteRebarSingle(true); int id; id = sel.PickObject("选择单根钢筋"); if (filter.CheckObject(id)) { PsTransaction trans = new PsTransaction(); PsRebarSingle rebarSingle = new PsRebarSingle(); trans.GetObject(id, PsOpenMode.kForRead, ref rebarSingle); ................ }
---------------------------------------------------------------
中国市政工程西北设计研究院有限公司武汉分院
谢谢郑工!我获取对象的时候也是通过了PsTransaction类,但对应属性不全,所有我想通过ID获取对应PsShapeInfo的信息,进行属性的不全。但传入ID值,调用Getinfo后信息已经为空,所以就不清楚差哪里了!
还有一个相关问题,就是利用Pickobject函数获取同一根钢筋,关闭文件后再打开获取时,ID是可能变化的,有那个值是固定不变的呢,ElementID是不是应该保持不变?在已知ElementID时,怎么能够获得实体类,类似于trans.GetObject(elementid,.......
ElementID是不变的
Gengbo.Zhong said:在已知ElementID时,怎么能够获得实体类
请参考如下Wiki文章:
https://communities.bentley.com/communities/other_communities/chinafirst/w/chinawiki/38229/microstation-ps