在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → 按步骤教你如何创建自定义实体ObjectARX

按步骤教你如何创建自定义实体ObjectARX

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:0.22M
  • 下载次数:14
  • 浏览次数:772
  • 发布时间:2020-09-04
  • 实例类别:一般编程问题
  • 发 布 人:robot666
  • 文件格式:.pdf
  • 所需积分:2
 

实例介绍

【实例简介】
使用ObjectARX向导,按步骤教你如何创建自定义实体~
一-选择“ My Cus tomEntity“节点(如果没有,点击” Refresh“图 标) 在其上右击鼠标选择“ Add variable。“ Autodesk class Explorer Group by Type }ot∈tyEx . CCus ErttyDEXoo AdMe“a;, .O MycustomEntty( %e -1Curoe Erbo ◆: Erya ew DDwsFe1 9 Acad: BorsMtus dwgnfe de(e"1 Adesk Boclean woddDraw-G WooDman F9 Aead Ear sata geto nan Ports(eDe OraoMode. t sons Ae 3d 3. enst AeGaePort 变量名写“mPtA”,类型为 AcGePoint3d,模式 protected; 选择" Participate to dWG filing protocol",禁止 Incrcasc version number 一-选择" Implement Get/ Put methods"可以为其添加希望的提 不信息 重复这个过程,增加"mPtB"," m PtAB"和" m ptBA"; 一-现在,增加一个 CString变量" m Text 记着修改我们在Lab3中做的那些修改 现在应该编译你的代码了 在头文件中会出现 static adesk::UInt32 kCurrentversionnumber=NaN;这是作者让自己调整版本号,需要将 “=NaN”去掉,在cpp文件中有定义 Adesk::UInt32 My CustomEntity: kCurrentversionnumber=1;然后修改cpp文件中 i if version >=NaN /*&& version(= endVersion*/) pIler> readitem(&mPtA);类似语句,将NaN用 kCurrentversionnumber代替; Add Member Variable wizard -CustEntity DBX Welcome to the Add Member Variable ward Th rzd add a meneer vase b ro eMs, shuet e unes protec onoe pe vanoc oam Saxons Text v Pamoate s DNG Sngpotooo incease Person neber ngEe E Methods ogent/ notation not requred: Text Caree 由于 rcaditcm和 writtem不支持 CString类型,因此 pIler> readItem( m Text)和 fIler> writtem( m text)会出错 要进行类型转换 再进行下一步之前,我们应该移出一些不用的函数,先从.h文 件中移除:(后面还有这部分的代码,晕!) virtual Acad: ErrorStatus getGrip Points (AcDb Grip DataPtrArray &grips, const double cur Unitsize, const int grip Size, const Ac 3d &cur viewDir, const int bitflags)const; virtual Acad: ErrorStatus moveGripPointsAt(const AcDb VoidPtrArray &gripAppData, const AcGe Vector3d &offset, const int bitflags); 有4种get0 appoints0方法.我们只使用下面这种方法: virtual Acad: ErrorStatus getOsnap Points(AcDb: OsnapMode osnapMode, int gsSelectionMark, const AcGePoint3d &pickpoint, const AcGepoint3d &lastPoint, const AcGeMatrix3d &view Xform, AcGePoint3dArray &snap Points, AcDbIntArray &geomIds)const 现在,你需要删掉那些cpp文件里的相应函数 WORLDDRAW 要画出来我们的自定义实体,需要向 worldDrawO方法中增加 如下的代码: assertReadEnabledo / Bounding Polyline AcGcPoint3d pts [4] pts[0]=m PtA pts[l]=m PtAB pts[2]=m PtB; pts[3]=m PtBA mode->sub Entity Traits( setSelection Marker(1); Mark I mode->sub Entity Traits. setColor(1); //Red mode->geometry polygon(4,pts) / Entity's Text mode->subEntity Traits(). setSelection Marker(2); //Mark 2 mode->sub Entity Traits. setcolor(256); // By Layer AcGiTextStyle style style. setFileName(txt. Shx") style. setBig Font FileName("); style set Textsize(25) style. loadstylereco AcGePoint3d txtPt((m PtB x+m PtA. x)/2.0,(m PtBy+m PtA. y)/2.0 PtA.z mode->geometry. text(txtPt, Ac Ge Vector3d KZAxis (m PtAB-m PtA), m Text, m Text. GetLengtho), Adesk: k False, style) return adesk, k True GRIP Points 打开cp文件中仅剩的那个 getGripPointse(方法; 我们要增加5个捕获点,每个点一个(A点、B点、AB点、BA点), 加上中心点 在 getGrippoints(方法中增加如下代码 grippoints. append(m PtA) gripPoints. append(m PtAB); gripPoints. append(m PtB) grippoints. append (m PtBA) gripPoints. append (Ac GePoint3d((m PtB x+m PtA. x)/2.0,(m PtBy+m PtA. y)/2.0, m PtA.2)); 现在,当我们点击每一个捕获点时我们希望完成一个事件,这就 需要用 moveGrippointsAt0方法来完成 我们需要使用 gctGripPoints(方法来检査当前焦点的捕点的 索引值,然后进行变换; 在剩余的 moveGripPointsAt(方法中增加如下代码: assert Write Enabled for(int i=0; K<indices length(; i++)i int idx=indices at(1); // For a and center point if (idx==0 idx==4 )m PtA += offset / For Ab and center point if (idx=-1 idx--4)m PtAB+=offset; / For b and center point if (idx==2 idx==4)m PtB+= offset // For ba and center point if (idx==3 idx=4)m PtBA+=offset return(Acad: eOk) if语句两个条件之间缺少&&运算符; OSNAP Points 打开 getOsnapPoints(方法,我们增加3种0snap方式: EndPoint, Midpoint and Center assertReadEnabledo switch(osnap Mode)i case acdb kos modeend snapPoints. append (m ptA) snappoints. append(m PtAB) snappoints. append(m PtB) snapPoints. append(m PtBA) Dreak case acdb: k Os Modemid snapPoints. append(m PtA+((m PtABm PtA) length(/2.0)((m PtAB-m PtA). normalize)) snapPoints. append(m PtAB+((m PtBm PtAB).length(/2.) *((m PtB-m PtAB). normalize)) snappoints. append(m PtB+((m PtBAm PtB).length(/2.0)((m PtBA-m PtB). normalize)) snapPoints. append(m PtBA+((m PtAm PtBa)length(/2. 0)*((m PtA-m PtBA). normalize) break. case AcDb kOsModeCen snap points. append( Acge Point3d((m PtBx+m PtA. x)/2.0, (m PtB y+m PtA. y)/2.0, m PtA. z)) break return(Acad eOk); TRANSFORMATION 用户自定义实体通过 transformBy(方法来实现 打廾 Autodesk类浏览器,展廾 MyCustomEntity节点,展开Base Classes节点再展开 AcDbEntity节点 滚动列表选择 Acad Error Status transformBy(const AcGeMatrix3d & 在该方法上右击鼠标选择" Implement Base Class method" 这个函数逻辑非常简单,只需增加如下代码 assert Write Enabled m PtA transformBy(xform) m PtAB transformBy(xform) m PtB transform By (xform) m PtBA transformBy(xform) return(Acad: eOk) 这个函数实现用户自定义实体的变换 ARX PROJECT 首先我们需要增加一个新的命令" My CustEnt"; 这将在 acxrEntrypoint.cpp文件中生成一个方法; 现在增加必须的头文件 #include "StdAfx. h #include ". CustEntity dBX My Custom Entity. h 在这个函数中我们将生成我们的实体 / Input information ads point ptl, pt2 if (aced GetPoint(NULL, "Set the first point: n"ptD)!=RtnOrm return: if (aced Corner(ptl, "Set the second point: \n, pt2)!=RTNORM return char buffer 5121; if (aced GetString(0, Enter the text: \n", buffer)!-RTNORM) return / Setup entity MyCustom Entity * pEnt=new MyCustomEntityO 【实例截图】
【核心代码】

标签:

实例下载地址

按步骤教你如何创建自定义实体ObjectARX

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警