[ARX]自定义实体类中添加外部文件中已定义的图块--相关问题
<FONT face=宋体><FONT size=2>初学ARX已三个月,虽然还未入门,为答谢论坛各位给我的帮助,将我目前收集的关于自定义实体类的相关内容组织成一个小程序,提供大家分享,同时希望高手可以更好的对我指导。<BR><FONT color=#ff0000>晓东也有我发布的相关帖子,你可以得到其她相关信息<FONT color=#000000><A href="http://www.xdcad.net/forum/showthread.php?s=&postid=2018597#post2018597" target="_blank" >http://www.xdcad.net/forum/showthread.php?s=&postid=2018597#post2018597</A></FONT></FONT></FONT></FONT><FONT face=宋体><FONT size=2></FONT></FONT><FONT face=宋体><FONT size=2>当前程序已经完成:<BR></FONT><FONT color=red>1. 一个简单的矩形框的自定义实体类创建,内有五个夹点。已经完成了对其基本函数的重载: </FONT><BR></FONT><FONT face=宋体><FONT size=2>virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* pFiler) const;<BR>virtual Acad::ErrorStatus dxfInFields(AcDbDxfFiler* pFiler);<BR>virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler) const;<BR>virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler* pFiler);<BR>virtual Adesk::Boolean worldDraw(AcGiWorldDraw* mode);<BR><BR>virtual Acad::ErrorStatus getOsnapPoints(AcDb::OsnapMode osnapMode,<BR>int gsSelectionMark,<BR>const AcGePoint3d& pickPoint,<BR>const AcGePoint3d& lastPoint,<BR>const AcGeMatrix3d& viewXform,<BR>AcGePoint3dArray& snapPoints,<BR>AcDbIntArray& geomIds) const;<BR>virtual Acad::ErrorStatus getGripPoints(AcGePoint3dArray& gripPoints,<BR>AcDbIntArray& osnapModes,<BR>AcDbIntArray& geomIds) const;<BR>virtual Acad::ErrorStatus moveGripPointsAt(const AcDbIntArray& indices,<BR>const AcGeVector3d& offset);<BR>virtual Acad::ErrorStatus transformBy(const AcGeMatrix3d& xform);<BR><BR></FONT><FONT color=red>2. 可以已经可以显示图块了,添加了一个函数<FONT color=#000000 size=2>AcDbObjectId cascoCEntity::GetBlockIdFromName(const char *dwgName, const char *blockName)</FONT>〔还很不完善,编译会出错,再编译就行,希望各位大侠指导,除去这个问题。〕</FONT></FONT><FONT face=宋体><FONT size=2> <BR><BR>在函数virtual Adesk::Boolean worldDraw(AcGiWorldDraw* mode);给出了一些操作。<BR>......<BR>AcDbBlockReference *ref = new AcDbBlockReference();<BR>ref->setColorIndex(5);<BR>ref->setBlockTransform(m_xform);<BR>ref->setPosition(mCenter);<BR>AcDbObjectId recordId;<BR>recordId = GetBlockIdFromName("Drawing0.dwg", "CIRCLE"); //TWO_RECT //CIRCLE<BR>if(recordId != NULL)<BR>ref->setBlockTableRecord(recordId);<BR>ref->worldDraw(mode);<BR>......<BR><BR></FONT><FONT color=red>编译环境、操作步骤、和问题(更为详细的说明参见CEnity工程) </FONT><BR></FONT><FONT face=宋体><FONT size=2>本程序为VC60+ACAD2002下调试过,使用方法先编译CEntity工程,然后编译EntityTest工程。加载后执行test命令就可以。<BR>单独编译和执行(*.dbx 和*.arx以及*.dwg中的图块要对应起来)TWO_RECT或者CIRCLE都不会有问题。如果调用错了就会出错,我调试能力有限,不知道如何操作。<BR><BR></FONT><FONT color=red>目的:</FONT></FONT><FONT face=宋体><FONT size=2> <BR>希望能够使用这样的方法(只在自定义实体中创建关联图块名称、夹点等关键属性)创建的自定义实体,使用该实体类,用户只需要选择该实体关联的图块和自定义夹点的位置等属性,就可以用一个或少数几个特征夹点的类实现ACAD自定义的实体类,这样的类定义出的实体具有更大的灵活性。<BR><BR></FONT><FONT color=red>可是如何进一步控制图块的的操作? </FONT><BR></FONT><FONT face=宋体 size=2>1. 能够同一个*.dbx 和*.arx就可以显示不同块的、保存后再打开也是一样。<BR>2. 可以拖动自定义实体,完成与自定义实体相连的直线的自动拉伸?<BR>2. 比如完成对图块里面图元的具体操作?<BR><BR>欢迎大家参与讨论,也希望您们和我联系!</FONT>
本帖最后由 作者 于 2005-7-2 18:31:54 编辑
目前已经可以重载不同的图块了,而且图块也可以自由设置大小,但是在复制的时候,还是不能和修改后的自定义实体一样,只是原来自定义实体的copy,这需要在那里重载? <p>这么好的帖子竟然没人顶。。。</p> 我来顶! 我也顶一个。虽然顶的有点像挖矿。
页:
[1]