[ARX]能否修改一个objectarx自定义实体体的形状

AutoCAD二次开发中ObjectARX 与.net的区别? - 知乎21被浏览<strong class="NumberBoard-itemValue" title="分享邀请回答01 条评论分享收藏感谢收起文档分类:
ObjectArx自定义实体入门.docx
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,
您的浏览器不支持进度条
下载文档到电脑,查找使用更方便
还剩?页未读,继续阅读
该用户其他文档
下载所得到的文件列表ObjectArx自定义实体入门.docx
文档介绍:
[资料] ObjectArx自定义实体入门(C++)及注意事项收藏
本文介绍了构造自定义实体的步骤、必须继承的函数和必须注意的事项
&#160;&#160;H; ?6 A: Z8 j- t! k/ \& e8 T1.新建一个从AcDbEntity继承的类,如EntTest,必须添加的头文件: &stdarx.h&,&acadstrc.h&, &geassign.h&。
. S0 P: ?# S% S& l& r&#39; U# S2.在该类头文件的类声明中添加宏:ACRX_DECLARE_MEMBERS(EntTest);, o, Y. O* x% G. a& v. d
3.在该类的cpp文件中,类的前面添加宏:
&#39; O& p&#39; ~( r9 w+ k. H2 V. p0 U: rACRX_DXF_DEFINE_MEMBERS(EntTest, AcDbEntity,AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent,0,平面实体,&autoCAD&);//第5个参数为在CAD中该实体类的名称,
$ b4 y1 N5 h0 |MAKE_ACDBOPENOBJECT_FUNCTION(EntTest);0 D( Y4 V* `& j* R/ V. T( Y
4.从AcDbEntity类中重载几个必须的虚函数:
8 T! u% f! s& p( [& `&#160; &#160;&#160; &#160;virtual Adesk::Boolean worldDraw(AcGiWorldDraw* mode);; `* o/ h1 Z* c
&#160; &#160;&#160;&#160;virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler*);&#160;&#160;]7 c, f7 g, B$ r, O: C- a
&#160; &#160; virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*)! l( q% a) P& D/ r+ Q
virtual Acad::ErrorStatus getGripPoints(AcGePoint3dArray& gripPoints,AcDbIntArray&osnapModes,AcDbIntArray& geomIds)&#160;&#160;t&#39; h( Q; m( v9 d2 a&#39; B
&#160; &#160; virtual Acad::ErrorStatus moveGripPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset);
: t* V5 O7 I4 {% f0 `&#39; [5.实现第4步中几个虚函数必须注意:
5 |&#39; b+ s9 Q5 t1 r6 m# Z&#160;&#160;在dwgInFields函数的开始处必须有:
1 I, O5 t# m( j. E&#160; &#160;assertWriteEnabled();$ t7 K& h. t$ l* ]6 \& H) o! x* G
AcDbObject::dwgInFields(pFiler);, [8 u+ Q6 [3 @% X( ]% S
if(pFiler-&filerType()==AcDb::kWblockCloneFiler)! @0 w&#39; U# g&
内容来自淘豆网www.taodocs.com转载请标明出处.
文件大小:29 KB
下载次数:&#xe621; 上传我的文档
&#xe602; 下载
&#xe60c; 收藏
粉丝量:125
把教育当作事业,用心来做。他师德高尚,业务精湛,立足教学,追求卓越。
&#xe602; 下载此文档
ObjectARX实训讲义二自定义实体
下载积分:1000
内容提示:ObjectARX实训讲义二自定义实体
文档格式:PPT|
浏览次数:91|
上传日期: 06:50:07|
文档星级:&#xe60b;&#xe60b;&#xe60b;&#xe60b;&#xe60b;
全文阅读已结束,如果下载本文需要使用
&#xe71b; 1000 积分
&#xe602;下载此文档
该用户还上传了这些文档
ObjectARX实训讲义二自定义实体
关注微信公众号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)
virtual Acad::ErrorStatus transformBy(const AcGeMatrix3d& xform);
virtual Acad::ErrorStatus getTransformedCopy(const AcGeMatrix3d& xform,AcDbEntity*& ent)
virtual Acad::ErrorStatus getGripPoint,AcDbIntArray& osnapModes,AcDbIntArray& getomIds)
virtual Acad::ErrorStatus moveGripPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset);
(2)通常需要重载的AcDbEntity函数
当从AcDbEntity派生自定义类时,下述函数通常需要重载,是否重载它们取决于自定义类的功能。
virtual void viewportDraw(AcGiViewportDraw* mode);
virtual void list()
vitual Acad::ErrorStatus intersectWith(const AcDbEntity* ent,AcDb::Intersect intType,AcGePoint3dArray& points,int thisGsMarker=0,int otherGsMarker=0)
virtual Acad::ErrorStatus intersectWith(const AcDbEntity* ent,AcDb::Intersect intType,const AcGePlane& projPlane,AcGePoint3dArray& points,int thisGsMarker=0,int otherGsMarker=0)
vitual Acad::ErrorStatus getOsnapPoints(AcDb::OsnapMode osnapMode,int gsSelectionMark,const AcGePoint3d& pickPoint,const AcGePoint3d& lastPoint,const AcGeMatrixed& viewXform,AcGePoint3dArray& snapPoints,AcDbIntArray& geomIds)
virtual Acad::ErrorStatus getStretchPoints(AcGePoint3dArray&)
virtual Acad::ErrorStatus moveStretchPointsAt(const AcDbIntArray& indeces,const AcGeVector3d& offset);
virtual Acad::ErrorStatus explode(AcDbVoidPtrArray& entitySet)
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)
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)
virtual Acad::ErrorStatus gerGsMarkersAtSubentPath(const AcDbFullSubentPath& subPath,AcDbIntArray& gsMarkers)
virtual Acad::ErrorStatus highlight(const AcDbFullSubentPath& subId=kNullSubent)
virtual Acad::ErrorStatus unhighlight(const AcDbFullSubentPath& subId=kNullSubent)
virtual AcDbEntity* subentPtr(const AcDbFullSubentPath& id)
virtual Adesk::Boolean saveImagesByDefault()
virtual void setAttributes(AcGiSubEntityTraits* pTraits);
阅读(...) 评论()ObjectARX自定义实体的最近点和垂点捕捉算法_c++编程-织梦者
当前位置:&>&&>& > ObjectARX自定义实体的最近点和垂点捕捉算法
ObjectARX自定义实体的最近点和垂点捕捉算法
本文为您介绍ObjectARX自定义实体的最近点和垂点捕捉算法的相关介绍,具体实例请看下文最近点用pickPoint来计算,垂点用lastPoint计算.一般AcDbCurve类可以用AcGe类的getClosestPointTo来实现计算需要的点值.下面是代码示例:
case AcDb::kOsModeNear:
AcGeLine3d line3d(m_ptA,m_ptC);
AcGePointOnCurve3d tmpPt;
line3d.getClosestPointTo(pickPoint,tmpPt);
AcGePoint3d pt=tmpPt.point();
snapPoints.append(AcGePoint3d(pt));
line3d.set(m_ptB,m_ptD);
line3d.getClosestPointTo(pickPoint,tmpPt);
pt=tmpPt.point();
snapPoints.append(AcGePoint3d(pt));
case AcDb::kOsModePerp:
AcGeLine3d line3d(m_ptA,m_ptC);
AcGePointOnCurve3d tmpPt;
line3d.getClosestPointTo(lastPoint,tmpPt);
AcGePoint3d pt=tmpPt.point();
snapPoints.append(AcGePoint3d(pt));
line3d.set(m_ptB,m_ptD);
line3d.getClosestPointTo(lastPoint,tmpPt);
pt=tmpPt.point();
snapPoints.append(AcGePoint3d(pt));
以上就是这篇文章的全部内容了,希望大家能够喜欢。
这些内容可能对你也有帮助
更多可查看c++编程列表页。
猜您也会喜欢这些文章

我要回帖

更多关于 自定义实体捕捉交点 的文章

 

随机推荐