[求助]有谁继承过AcDbAttribute?
我实现继承了AcDbAttribute一个自定义实体,只是改变其画法也就是重写worldDraw,可是对其进行移动时只发现其AcDbBlockReference移动,这个块属性不移动,还有就是移动一会就会发生内存读取错误,有那个高手可以指点一下吗? 楼主请仔细读一下ARX帮助文件里关于自定义实体的部分, AcDbAttribute是列在不应被继承的类目下的. 所有列在不应被继承的类条目下的类, ARX都不支持对其完整继承(包括画法, 包括移动方式, 包括删除方式等等等等). 如果你继承了这些类, 就算把所有的virtual funtion都写好了, 也不保证运行.
如果要改变attribute的绘画方式, 应该从外部也就是attribute插入时的参数下手. 这个我查过了,没有这个类,原文如下:
<P class=body>Applications should not derive classes from the following:
<UL>
<LI class=bullet_1>AcDbDimension
<LI class=bullet_1>AcDbSymbolTable, AcDbSymbolTableRecord, and all classes derived from them
<LI class=bullet_1>AcDbBlockBegin
<LI class=bullet_1>AcDbBlockEnd
<LI class=bullet_1>AcDbSequenceEnd
<LI class=bullet_1>AcDb2dPolyline
<LI class=bullet_1>AcDb2dVertex
<LI class=bullet_1>AcDb3dPolyline
<LI class=bullet_1>AcDb3dPolylineVertex
<LI class=bullet_1>AcDbPolygonMesh
<LI class=bullet_1>AcDbPolygonMeshVertex
<LI class=bullet_1>AcDbPolyFaceMesh
<LI class=bullet_1>AcDbPolyFaceMeshVertex
<LI class=bullet_1>AcDbFaceRecord
<LI class=bullet_1>AcDbViewport
<LI class=bullet_1>AcDbMInsertBlock </LI></UL>
<UL>
<LI class=bullet_1_end>AcDbVertex</LI></UL>
<P class=bullet_1_end>还有我在调试过程中发现改自定义实体加入到块Ref时worldDraw竟然运行两次!不会是加入数据库两次吧?我想极可能是这个造成的,再说我的注记很复杂,不能简单的通过文本来解决,那位高手能指点一下吗 难道2002以上版本ARX已经支持AcDbAttribute继承了? 2000肯定不行.
再说就算它支持继承, 移动也跟worldDraw没关系啊, 移动算在transform function下的, 只告诉它怎么画不够啊.. 我是用2005的,2002的不能吗?我没用过2002,那怎么办啊!有那种算法可以实现块移动注记跟着移动而注记移动块却不移动的啊,就类似块的属性操作! ..按照ACAD自己的块插入(insert->block)的方式插入的注记块本身就是这样的呀(块移动注记也移动, 注记可以单独移动), 用程序的话就是有一个需要插入的块记录, 图纸里先插入一个块参考, 然后把块记录本身打开, 把其中的注记成分抄到attribute类里,再把attribute加入块参考. 这样做出来的块参考就是注记可以单独移动的了..
楼下电子书下载里有实例的, 王咣生版主好象也在什么地方放过Chalrs McAuley那本书里的例子? 哪位记得的指点一下吧, 偶实在是不想再把代码一个字一个字打出来了..=.= 看来楼上的mm误会了我的意思了,你说的那个我知道,只是我的注记没法弄到attribute中,因为我的注记有下划线,区域等等,只能通过改变类的worldDraw来实现,其实我已经实现了,只是编辑时系统会发生读取错误!,而我如果把注记类继承于AcDbText的话代码不变什么都好!,可是就没有了AcDbAttribute的块移动注记也跟着移动的性质了!现在最好的方法是怎样避免继承AcDbAttribute是发生的问题,我认为及有可能是worldDraw调用两次的原因!这个问题我到现在还搞不懂,为什么这个函数会调用两次! 如果是这样的话, 你不应该继承AcDbAttribute类, 因为它们是设计为只处理字母和数字输入, 下划线啊什么的处理不受支持.
可以考虑做一个新的entity(不是块), 里面的成员是块的图像和AcDbText做成的注记, 然后给这个entity定义你想要的移动方式.
页:
[1]