最初由 asky333 发布
[B]在arx的帮助文档里面,region,solid,mline有子实体的功能,因此可以高亮某个子实体,但是polyline现在并不支持子实体。不知道能不能通过其他的方法实现高亮显示polyline的“子实体”? [/B]
由于没有提供AcDbPolyline::getGsMarkersAtSubentPath() 方法,所以亮显子段不能工作。
但是你可以自己实现AcDbPolyline类的getGsMarkersAtSubentPath() 方法,如下:
 - [font=courier]
- ErrorStatus AcDbPolyline::getGsMarkersAtSubentPath(
- const AcDbFullSubentPath& subPath,
- AcDbIntArray& gsMarkers) const
- {
- assertReadEnabled();
- gsMarkers.append( subPath.subentId().index() );
- return Acad::eOk;
- }
- [/font]
从AcDbPolyline派生自己的类,来实现AcDbPolyline::getGsMarkersAtSubentPath()
在亮显子段前,从自己的类创建一个新的对象,然后调用AcDbPolyline 类的copyFrom() 方法,使自己的类包含polyline的属性,然后用handOverTo() 方法替换原来的那个POLYLINE,你就可以量显子段了。
在亮显操作后,再调用handOverTo() 恢复刚才删除的那个POLYLINE。
实现自己的派生类时候,不要用 ACRX_DEFINE... 或者_DECLARE.. 宏,并且不调用::rxInit() 注册自己的派生类。因为copyFrom() 操作仅仅是在相同类对象之间操作。这样,ACAD就认为你的“派生类”就是普通的Pline了。 |