乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 40|回复: 2

派生自定义实体重载函数【转载】

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
6
发表于 2012-7-13 22:37:00 | 显示全部楼层 |阅读模式
AcDbEntity 是所有具有图形表现的数据库对象的基类。它由AcDbObject派生。创建自定义实体包括以下步骤:
1.从AcDbEntity派生一个自定义类;
2.重载所有必要的AcDbObject函数;
3.重载要求的AcDbEntity函数;
4.重载支持自定义功能的其它函数;
5.如果要支持MATCHPROP命令,执行AcDbMatchProperties作为扩展协议;
6.如果要为自定义实体创建拖曳序列,执行自定义的AcEdJig。
(1)必须重载的AcDbEntity函数
当从AcDbEntity派生自定义类时,下述函数必须重载:
virtual Adesk::Boolean worldDraw(AcGiWorldDraw* mode);
virtual Acad::ErrorStatus getGeomExtents(AcDbExtents& extents)const;
virtual Acad::ErrorStatus transformBy(const AcGeMatrix3d& xform);
virtual Acad::ErrorStatus getTransformedCopy(const AcGeMatrix3d& xform,AcDbEntity*& ent)const;
virtual Acad::ErrorStatus getGripPoint,AcDbIntArray& osnapModes,AcDbIntArray& getomIds)const;
virtual Acad::ErrorStatus moveGripPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset);
(2)通常需要重载的AcDbEntity函数
当从AcDbEntity派生自定义类时,下述函数通常需要重载,是否重载它们取决于自定义类的功能。
virtual void viewportDraw(AcGiViewportDraw* mode);
virtual void list() const;
vitual Acad::ErrorStatus intersectWith(const AcDbEntity* ent,AcDb::Intersect intType,AcGePoint3dArray& points,int thisGsMarker=0,int otherGsMarker=0)const;
virtual Acad::ErrorStatus intersectWith(const AcDbEntity* ent,AcDb::Intersect intType,const AcGePlane& projPlane,AcGePoint3dArray& points,int thisGsMarker=0,int otherGsMarker=0)const;
vitual Acad::ErrorStatus getOsnapPoints(AcDb::OsnapMode osnapMode,int gsSelectionMark,const AcGePoint3d& pickPoint,const AcGePoint3d& lastPoint,const AcGeMatrixed& viewXform,AcGePoint3dArray& snapPoints,AcDbIntArray& geomIds)const;
virtual Acad::ErrorStatus getStretchPoints(AcGePoint3dArray&)const;
virtual Acad::ErrorStatus moveStretchPointsAt(const AcDbIntArray& indeces,const AcGeVector3d& offset);
virtual Acad::ErrorStatus explode(AcDbVoidPtrArray& entitySet)const;
virtual Acad::ErrorStatus getSubentPathsAtGsMarker(AcDb::SubentType type,int gsMark,const AcGePoint3d& pickPoint,const AcGeMatrix3d& viewXform,int& numPaths,AcDbFullSubentPaths*& subentPaths,int numInserts=0,AcDbObjectId* entAndInsertStack=NULL)const;
virtual Acad::ErrorStatus applyPartialUndo(AcDbDwgFiler* undoFiler,AcRxClass* classObj);
virtual void subSetDatabaseDefaults(AcDbDatabase* pDb);
virtual void saveAs(AcGiWorldDraw *mode,AcDb::SaveType st);
(3)很少重载的AcDbEntity函数
virtual Acad::ErrorStatus setColor(const AcCmColor &color);
virtual Acad::ErrorStatus setColorIndex(Adesk::UInt16 color);
virtual Acad::ErrorStatus setLinetype(const char* newVal);
virtual Acad::ErrorStatus setLinetype(AcDbObjectId newVal);
virtual void getEcs(AcGeMatrix3d& retVal)const;
virtual Acad::ErrorStatus gerGsMarkersAtSubentPath(const AcDbFullSubentPath& subPath,AcDbIntArray& gsMarkers)const;
virtual Acad::ErrorStatus highlight(const AcDbFullSubentPath& subId=kNullSubent)const;
virtual Acad::ErrorStatus unhighlight(const AcDbFullSubentPath& subId=kNullSubent)const;
virtual AcDbEntity* subentPtr(const AcDbFullSubentPath& id)const;
virtual Adesk::Boolean saveImagesByDefault() const;
virtual void setAttributes(AcGiSubEntityTraits* pTraits);
回复

使用道具 举报

0

主题

24

帖子

2

银币

初来乍到

Rank: 1

铜币
24
发表于 2012-9-7 10:50:00 | 显示全部楼层
总结不错,顶一个。
回复

使用道具 举报

13

主题

113

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
166
发表于 2012-9-7 12:31:00 | 显示全部楼层
列出这么个表,有啥用,还不如详细说一个呢
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 10:50 , Processed in 0.142946 second(s), 58 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表