找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3980|回复: 12

[求助] (已解决)自定义实体为什么worlddraw不执行??

[复制链接]
发表于 2019-8-29 22:31:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 bbbxxxccclt 于 2019-9-5 22:10 编辑

最近在学习ARX自定义实体,定义好后,在CAD上使用,发现输入命令执行后,CAD上没有自定义实体图,全选后有几个夹点,刷新CAD马上就崩溃;后来试了下,发现worlddraw不执行;到底是什么原因了呢?我用的CAD2013,VS2010,ARX2013;下面是代码,麻烦帮忙检查下到底问题出在哪里呢?
自定义实体.h;
  1. <div>#pragma once
  2. #include "c:\objectarx\inc\dbmain.h"
  3. #include "stdafx.h"
  4. #include "stdarx.h"
  5. #include "acadstrc.h"
  6. #include "geassign.h"</div><div>
  7. /*
  8. #ifdef MYCUSTOMENTIY
  9. #define DLLIMPEXP __declspec( dllexport )
  10. #else
  11. #define DLLIMPEXP
  12. #endif
  13. */
  14. class MyCustomEntity :
  15. public AcDbEntity
  16. {
  17. public:</div><div> ACRX_DECLARE_MEMBERS(MyCustomEntity);
  18. MyCustomEntity();
  19. virtual ~MyCustomEntity(void);
  20. //virtual ACDB_PORT Adesk::Boolean subWorldDraw(AcGiWorldDraw *mode);

  21. void putVerts(AcGePoint3d p1,AcGePoint3d p2,AcGePoint3d p3,AcGePoint3d p4);

  22. protected:
  23.   virtual  Adesk::Boolean subWorldDraw(AcGiWorldDraw* mode) override;
  24. virtual Acad::ErrorStatus subGetGripPoints(AcGePoint3dArray& gripPoints,  AcDbIntArray & osnapModes,
  25.   AcDbIntArray & geomIds ) const override;</div><div> virtual Acad::ErrorStatus subMoveGripPointsAt(
  26.   const AcDbIntArray & indices,
  27.   const AcGeVector3d& offset
  28.   ) override;
  29. virtual Acad::ErrorStatus subGetOsnapPoints(
  30.   AcDb::OsnapMode osnapMode,
  31.   Adesk::GsMarker gsSelectionMark,
  32.   const AcGePoint3d& pickPoint,
  33.   const AcGePoint3d& lastPoint,
  34.   const AcGeMatrix3d& viewXform,
  35.   AcGePoint3dArray& snapPoints,
  36.   AcDbIntArray & geomIds
  37.   )const override;
  38. virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d & xform)override;
  39. virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler*)override;
  40. virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*) const override;
  41. virtual Acad::ErrorStatus subGetGeomExtents(AcDbExtents & extents) const override;</div><div>
  42. private:
  43. AcGePoint3d m_PtA;
  44. AcGePoint3d m_PtAB;
  45. AcGePoint3d m_PtB;
  46. AcGePoint3d m_PtBA;
  47. //CString     m_Text;
  48. };</div><div>
  49. </div>
自定义实体.cpp

  1. <div>#include "stdafx.h"
  2. #include "MyCustomEntity.h"</div><div>//1、自定义实体的类名2、当前文件版本3、当前控件版本4、代理实体处理标志5、Dfx0组码对应值6、类说明
  3. ACRX_DXF_DEFINE_MEMBERS(MyCustomEntity,AcDbObject,AcDb::kDHL_CURRENT,AcDb::kMReleaseCurrent,AcDbProxyEntity::kAllAllowedBits,自定义实体, "autoCAD")         

  4. MAKE_ACDBOPENOBJECT_FUNCTION(MyCustomEntity);</div><div>MyCustomEntity::MyCustomEntity()
  5. {
  6. }
  7. MyCustomEntity::~MyCustomEntity(void)
  8. {
  9. }
  10. void MyCustomEntity::putVerts(AcGePoint3d p1,AcGePoint3d p2,AcGePoint3d p3,AcGePoint3d p4)
  11. {
  12. acutPrintf(_T("\n**输入角点了\n"));
  13. m_PtA  = p1;
  14. m_PtAB = p2;
  15. m_PtB  = p3;
  16. m_PtBA = p4;

  17. }</div><div> Acad::ErrorStatus MyCustomEntity::subGetGripPoints( AcGePoint3dArray& gripPoints,  AcDbIntArray & osnapModes, \
  18. AcDbIntArray & geomIds ) const
  19. {
  20. gripPoints.append(m_PtA);
  21. gripPoints.append(m_PtAB);
  22. gripPoints.append(m_PtB);
  23. gripPoints.append(m_PtBA);
  24.     gripPoints.append(AcGePoint3d((m_PtB.x+m_PtA.x)/2.0,\
  25.             (m_PtB.y+m_PtA.y)/2.0,m_PtA.z));
  26. acutPrintf(_T("\n**夹点已经加载了**\n"));
  27. return (Acad::eOk);
  28. }
  29. Acad::ErrorStatus MyCustomEntity::subMoveGripPointsAt(
  30.   const AcDbIntArray & indices,
  31.   const AcGeVector3d& offset
  32. )
  33. {
  34. acutPrintf(_T("\n**已经移动夹点**"));
  35. assertWriteEnabled();
  36. for(int i=0; i<indices.length(); i++) {
  37.   int idx = indices.at(i);
  38.   // For A and center point
  39.   if (idx==0 && idx==4) m_PtA += offset;
  40.   // For AB and center point
  41.   if (idx==1 && idx==4) m_PtAB += offset;
  42.   // For B and center point
  43.   if (idx==2 && idx==4) m_PtB += offset;
  44.   // For BA and center point
  45.   if (idx==3 && idx==4) m_PtBA += offset;
  46. }
  47. return (Acad::eOk);
  48. }</div><div>Acad::ErrorStatus MyCustomEntity::subGetOsnapPoints(
  49. AcDb::OsnapMode osnapMode,
  50. Adesk::GsMarker gsSelectionMark,
  51. const AcGePoint3d& pickPoint,
  52. const AcGePoint3d& lastPoint,
  53. const AcGeMatrix3d& viewXform,
  54. AcGePoint3dArray& snapPoints,
  55. AcDbIntArray & geomIds
  56. )const
  57. {</div><div> acutPrintf(_T("\n**捕捉点已经加载了"));
  58. assertReadEnabled();   
  59. switch (osnapMode) {
  60. case AcDb::kOsModeEnd:
  61.   snapPoints.append(m_PtA);
  62.   snapPoints.append(m_PtAB);
  63.   snapPoints.append(m_PtB);
  64.   snapPoints.append(m_PtBA);
  65.   break;
  66. case AcDb::kOsModeMid:
  67.   snapPoints.append(m_PtA+((m_PtAB -\
  68.    m_PtA).length()/2.0)*((m_PtAB-m_PtA).normalize()));
  69.   snapPoints.append(m_PtAB+((m_PtB-\
  70.    m_PtAB).length()/2.0)*((m_PtB-m_PtAB).normalize()));
  71.   snapPoints.append(m_PtB+((m_PtBA-\
  72.    m_PtB).length()/2.0)*((m_PtBA-m_PtB).normalize()));
  73.   snapPoints.append(m_PtBA+((m_PtA-\
  74.    m_PtBA).length()/2.0)*((m_PtA-m_PtBA).normalize()));
  75.   break;
  76. case AcDb::kOsModeCen:
  77.   snapPoints.append(AcGePoint3d((m_PtB.x+m_PtA.x)/2.0,\
  78.    (m_PtB.y+m_PtA.y)/2.0, m_PtA.z));
  79.   break;
  80. }</div><div> return (Acad::eOk); </div><div>}</div><div>Acad::ErrorStatus MyCustomEntity::subTransformBy(const AcGeMatrix3d & xform)
  81. {
  82. acutPrintf(_T("\n**已经变换吗了"));
  83. assertWriteEnabled();
  84. m_PtA.transformBy(xform);
  85. m_PtAB.transformBy(xform);
  86. m_PtB.transformBy(xform);
  87. m_PtBA.transformBy(xform);
  88. return (Acad::eOk);
  89. }
  90. Acad::ErrorStatus MyCustomEntity::dwgInFields(AcDbDwgFiler* pFiler){
  91. acutPrintf(_T("\nd**wginfields加载了"));
  92. assertWriteEnabled();
  93. AcDbObject::dwgInFields(pFiler);
  94. if (pFiler->filerType()==AcDb::kWblockCloneFiler)
  95. {
  96.   AcDbHardPointerId Id;
  97.   pFiler->readItem(&Id);
  98. }
  99. pFiler->readPoint3d(&m_PtA);
  100. pFiler->readPoint3d(&m_PtAB);
  101. pFiler->readPoint3d(&m_PtB);
  102. pFiler->readPoint3d(&m_PtBA);
  103. /*ACHAR* _temp=NULL;
  104. pFiler->readString(&_temp);
  105. m_Text.Format(_T("%s"),_temp);
  106. acutDelString(_temp);*/
  107. return pFiler->filerStatus();
  108. }
  109. Acad::ErrorStatus MyCustomEntity::dwgOutFields(AcDbDwgFiler* pFiler) const{
  110. acutPrintf(_T("\n**dwgoutfields已经加载了"));
  111. assertReadEnabled();
  112. AcDbObject::dwgOutFields(pFiler);</div><div> if (pFiler->filerType()==AcDb::kWblockCloneFiler)
  113. {
  114.   pFiler->writeHardPointerId((AcDbHardPointerId)ownerId());
  115. }
  116. pFiler->writePoint3d(m_PtA);
  117. pFiler->writePoint3d(m_PtAB);
  118. pFiler->writePoint3d(m_PtB);
  119. pFiler->writePoint3d(m_PtBA);
  120.    // pFiler->writeString(static_cast<const ACHAR*>(m_Text));
  121. return pFiler->filerStatus();
  122. }</div><div>
  123. Acad::ErrorStatus MyCustomEntity::subGetGeomExtents(AcDbExtents & extents) const
  124. {
  125. assertReadEnabled();
  126. AcGePoint3dArray vPos;
  127. vPos[0] = m_PtA;
  128. vPos[1] = m_PtAB;
  129. vPos[2] = m_PtB;
  130. vPos[3] = m_PtBA;
  131. AcGePoint3d vLeftBottom;
  132. AcGePoint3d vRightTob;
  133. vLeftBottom = vPos[0];
  134. vRightTob = vPos[0];</div><div> for (int i = 1; i < 4; i++)
  135. {
  136.   if (vLeftBottom.x > vPos[i].x)
  137.    vLeftBottom.x = vPos[i].x;
  138.   if (vLeftBottom.y > vPos[i].y)
  139.    vLeftBottom.y = vPos[i].y;
  140.   if (vRightTob.x < vPos[i].x)
  141.    vRightTob.x = vPos[i].x;
  142.   if (vRightTob.y < vPos[i].y)
  143.    vRightTob.y = vPos[i].y;
  144. }</div><div> extents.set(vLeftBottom, vRightTob);</div><div> return Acad::eOk;
  145. }</div><div>
  146. Adesk::Boolean
  147. MyCustomEntity::subWorldDraw (AcGiWorldDraw* mode)
  148. {
  149. acutPrintf(_T("\n加载了worlDraw"));
  150. assertReadEnabled();
  151. // 边界多段线
  152. AcGePoint3d pts[4];
  153. pts[0] = m_PtA;
  154. pts[1] = m_PtAB;
  155. pts[2] = m_PtB;
  156. pts[3] = m_PtBA;
  157. //mode->subEntityTraits().setSelectionMarker(1); // Mark 1
  158. //mode->subEntityTraits().setColor(1); // Red
  159. mode->geometry().polygon(4,pts);
  160. //mode->subEntityTraits().setSelectionMarker(2); // Mark 2
  161. mode->subEntityTraits().setColor(256);// ByLayer
  162. return Adesk::kTrue;
  163. }</div><div>
  164. </div>
复制代码
命令
  1. <div>// (C) Copyright 2002-2012 by Autodesk, Inc.
  2. //
  3. // Permission to use, copy, modify, and distribute this software in
  4. // object code form for any purpose and without fee is hereby granted,
  5. // provided that the above copyright notice appears in all copies and
  6. // that both that copyright notice and the limited warranty and
  7. // restricted rights notice below appear in all supporting
  8. // documentation.
  9. //
  10. // AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
  11. // AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
  12. // MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE.  AUTODESK, INC.
  13. // DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
  14. // UNINTERRUPTED OR ERROR FREE.
  15. //
  16. // Use, duplication, or disclosure by the U.S. ** is subject to
  17. // restrictions set forth in FAR 52.227-19 (Commercial Computer
  18. // Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
  19. // (Rights in Technical Data and Computer Software), as applicable.
  20. //</div><div>//-----------------------------------------------------------------------------
  21. //----- acrxEntryPoint.cpp
  22. //-----------------------------------------------------------------------------
  23. #include "StdAfx.h"
  24. #include "resource.h"
  25. #include "MyCustomEntity.h"
  26. //-----------------------------------------------------------------------------
  27. #define szRDS _RXST("cxb")</div><div>//-----------------------------------------------------------------------------
  28. //----- ObjectARX EntryPoint
  29. class ConeTestXiangMuApp : public AcRxArxApp {</div><div>public:
  30. ConeTestXiangMuApp () : AcRxArxApp () {}</div><div> virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {
  31.   // TODO: Load dependencies here</div><div>  // You *must* call On_kInitAppMsg here
  32.   AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;        </div><div>     MyCustomEntity::rxInit();
  33.      //acrxUnlockApplication(pkt);   
  34.     // acrxRegisterAppMDIAware(pkt);
  35.      acrxBuildClassHierarchy();
  36.      acutPrintf(_T("........."));
  37.      
  38.   // TODO: Add your initialization code here</div><div>  return (retCode) ;
  39. }</div><div> virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {
  40.   // TODO: Add your code here</div><div>  // You *must* call On_kUnloadAppMsg here
  41.   AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;
  42.     deleteAcRxClass(MyCustomEntity::desc());
  43.     acutPrintf(_T("+++++++"));
  44.   // TODO: Unload dependencies here</div><div>  return (retCode) ;
  45. }</div><div> virtual void RegisterServerComponents () {
  46. }

  47. // The ACED_ARXCOMMAND_ENTRY_AUTO macro can be applied to any static member
  48. // function of the ConeTestXiangMuApp class.
  49. // The function should take no arguments and return nothing.
  50. //
  51. // NOTE: ACED_ARXCOMMAND_ENTRY_AUTO has overloads where you can provide resourceid and
  52. // have arguments to define context and command mechanism.

  53. // ACED_ARXCOMMAND_ENTRY_AUTO(classname, group, globCmd, locCmd, cmdFlags, UIContext)
  54. // ACED_ARXCOMMAND_ENTRYBYID_AUTO(classname, group, globCmd, locCmdId, cmdFlags, UIContext)
  55. // only differs that it creates a localized name using a string in the resource file
  56. //   locCmdId - resource ID for localized command</div><div> // Modal Command with localized name
  57. // ACED_ARXCOMMAND_ENTRY_AUTO(ConeTestXiangMuApp, cxbMyGroup, MyCommand, MyCommandLocal, ACRX_CMD_MODAL)
  58. static void cxbMyGroupMyCommand () {
  59.   // Put your command code here
  60.   ads_point pt1,pt2;
  61.   if (acedGetPoint(NULL,_T("指定第一个点:\n"),pt1) != RTNORM)
  62.    return;
  63.   if (acedGetCorner(pt1,_T("指定第二个点:\n"),pt2) != RTNORM)
  64.    return;</div><div>  MyCustomEntity * pEnt = new MyCustomEntity();
  65.   pEnt->putVerts(asPnt3d(pt1),AcGePoint3d(pt2[X],pt1[Y],pt1[Z]),asPnt3d(pt2),AcGePoint3d(pt1[X],pt2[Y],pt2[Z]));
  66.   AcDbBlockTable *pBlockTable;
  67.   acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable,AcDb::kForRead);     
  68.   AcDbBlockTableRecord *pBlockTableRecord;
  69.   pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);   
  70.   pBlockTable->close();
  71.   AcDbObjectId retId = AcDbObjectId::kNull;</div><div>  pBlockTableRecord->appendAcDbEntity(retId, pEnt);
  72.   if (!retId.isNull())
  73.   {
  74.    acutPrintf(_T("有id了"));
  75.   }
  76.   pBlockTableRecord->close();
  77.   pEnt->close();
  78. }</div><div> // Modal Command with pickfirst selection
  79. // ACED_ARXCOMMAND_ENTRY_AUTO(ConeTestXiangMuApp, cxbMyGroup, MyPickFirst, MyPickFirstLocal, ACRX_CMD_MODAL | ACRX_CMD_USEPICKSET)
  80. static void cxbMyGroupMyPickFirst () {
  81.   ads_name result ;
  82.   int iRet =acedSSGet (ACRX_T("_I"), NULL, NULL, NULL, result) ;
  83.   if ( iRet == RTNORM )
  84.   {
  85.    // There are selected entities
  86.    // Put your command using pickfirst set code here
  87.   }
  88.   else
  89.   {
  90.    // There are no selected entities
  91.    // Put your command code here
  92.   }
  93. }</div><div> // Application Session Command with localized name
  94. // ACED_ARXCOMMAND_ENTRY_AUTO(ConeTestXiangMuApp, cxbMyGroup, MySessionCmd, MySessionCmdLocal, ACRX_CMD_MODAL | ACRX_CMD_SESSION)
  95. static void cxbMyGroupMySessionCmd () {
  96.   // Put your command code here
  97. }</div><div> // The ACED_ADSFUNCTION_ENTRY_AUTO / ACED_ADSCOMMAND_ENTRY_AUTO macros can be applied to any static member
  98. // function of the ConeTestXiangMuApp class.
  99. // The function may or may not take arguments and have to return RTNORM, RTERROR, RTCAN, RTFAIL, RTREJ to AutoCAD, but use
  100. // acedRetNil, acedRetT, acedRetVoid, acedRetInt, acedRetReal, acedRetStr, acedRetPoint, acedRetName, acedRetList, acedRetVal to return
  101. // a value to the Lisp interpreter.
  102. //
  103. // NOTE: ACED_ADSFUNCTION_ENTRY_AUTO / ACED_ADSCOMMAND_ENTRY_AUTO has overloads where you can provide resourceid.

  104. //- ACED_ADSFUNCTION_ENTRY_AUTO(classname, name, regFunc) - this example
  105. //- ACED_ADSSYMBOL_ENTRYBYID_AUTO(classname, name, nameId, regFunc) - only differs that it creates a localized name using a string in the resource file
  106. //- ACED_ADSCOMMAND_ENTRY_AUTO(classname, name, regFunc) - a Lisp command (prefix C:)
  107. //- ACED_ADSCOMMAND_ENTRYBYID_AUTO(classname, name, nameId, regFunc) - only differs that it creates a localized name using a string in the resource file</div><div> // Lisp Function is similar to ARX Command but it creates a lisp
  108. // callable function. Many return types are supported not just string
  109. // or integer.
  110. // ACED_ADSFUNCTION_ENTRY_AUTO(ConeTestXiangMuApp, MyLispFunction, false)
  111. static int ads_MyLispFunction () {
  112.   //struct resbuf *args =acedGetArgs () ;
  113.   
  114.   // Put your command code here</div><div>  //acutRelRb (args) ;
  115.   
  116.   // Return a value to the AutoCAD Lisp Interpreter
  117.   // acedRetNil, acedRetT, acedRetVoid, acedRetInt, acedRetReal, acedRetStr, acedRetPoint, acedRetName, acedRetList, acedRetVal</div><div>  return (RTNORM) ;
  118. }

  119. } ;</div><div>//-----------------------------------------------------------------------------
  120. IMPLEMENT_ARX_ENTRYPOINT(ConeTestXiangMuApp)</div><div>ACED_ARXCOMMAND_ENTRY_AUTO(ConeTestXiangMuApp, cxbMyGroup, MyCommand, mmm, ACRX_CMD_MODAL, NULL)
  121. ACED_ARXCOMMAND_ENTRY_AUTO(ConeTestXiangMuApp, cxbMyGroup, MyPickFirst, MyPickFirstLocal, ACRX_CMD_MODAL | ACRX_CMD_USEPICKSET, NULL)
  122. ACED_ARXCOMMAND_ENTRY_AUTO(ConeTestXiangMuApp, cxbMyGroup, MySessionCmd, MySessionCmdLocal, ACRX_CMD_MODAL | ACRX_CMD_SESSION, NULL)
  123. ACED_ADSSYMBOL_ENTRY_AUTO(ConeTestXiangMuApp, MyLispFunction, false)</div><div>
  124. </div>



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 960个

财富等级: 财运亨通

发表于 2019-8-30 08:19:25 | 显示全部楼层
不太了解,学习了解一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2019-8-30 08:55:18 | 显示全部楼层
本帖最后由 zeqi1991 于 2019-8-30 08:56 编辑

1111111111111
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 12个

财富等级: 恭喜发财

发表于 2019-8-30 14:17:23 | 显示全部楼层
你用的哪个版本的AutoCAD

点评

CAD2013,应该搭配没有问题  详情 回复 发表于 2019-8-31 10:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-31 10:02:33 | 显示全部楼层
小龙龙 发表于 2019-8-30 14:17
你用的哪个版本的AutoCAD

CAD2013,应该搭配没有问题

点评

请留下QQ,我远程给你看看  详情 回复 发表于 2019-8-31 10:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 12个

财富等级: 恭喜发财

发表于 2019-8-31 10:20:05 | 显示全部楼层
bbbxxxccclt 发表于 2019-8-31 10:02
CAD2013,应该搭配没有问题

请留下QQ,我远程给你看看
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2019-8-31 10:49:10 | 显示全部楼层
加载时要执行:
MyCustomEntityt::rxInit();
acrxBuildClassHierarchy();

点评

这个我有写的啊  详情 回复 发表于 2019-9-3 21:50
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2019-8-31 22:08:15 | 显示全部楼层
ACRX_DXF_DEFINE_MEMBERS(MyCustomEntity,AcDbObject,AcDb::kDHL_CURRENT,AcDb::kMReleaseCurrent,AcDbProxyEntity::kAllAllowedBits,自定义实体, "autoCAD")
AcDbObject 换成AcDbEntity

dwgInFields和out都应该是AcDbEntity

Acad::ErrorStatus MyCustomEntity::dwgInFields(AcDbDwgFiler* pFiler){
acutPrintf(_T("\nd**wginfields加载了"));
assertWriteEnabled();
AcDbObject::dwgInFields(pFiler);

关于MyCustomEntityt::rxInit();
acrxBuildClassHierarchy();
可以在自定义实体的头文件的尾部加入,就会自动注册
ACDB_REGISTER_OBJECT_ENTRY_AUTO(MyCustomEntity)

点评

谢谢你的回复,我先试试看  详情 回复 发表于 2019-9-3 22:19
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2019-8-31 22:24:27 | 显示全部楼层
另外夹点移动的时候的代码不知道是谁写的,理论上应该是这样的.
                // 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;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-3 21:50:13 | 显示全部楼层
ymd 发表于 2019-8-31 10:49
加载时要执行:
MyCustomEntityt::rxInit();
acrxBuildClassHierarchy();

这个我有写的啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-3 22:19:05 | 显示全部楼层
edata 发表于 2019-8-31 22:08
ACRX_DXF_DEFINE_MEMBERS(MyCustomEntity,AcDbObject,AcDb::kDHL_CURRENT,AcDb::kMReleaseCurrent,AcDbProx ...

谢谢你的回复,我先试试看

点评

大神啊!谢谢!谢谢!谢谢!按你说的改了,试了下终于出现图形了。;再问下如果把实体类改为DBX,代码有什么不同吗?  详情 回复 发表于 2019-9-5 22:08
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-5 22:08:46 | 显示全部楼层
bbbxxxccclt 发表于 2019-9-3 22:19
谢谢你的回复,我先试试看

大神啊!谢谢!谢谢!谢谢!按你说的改了,试了下终于出现图形了。;再问下如果把实体类改为DBX,代码有什么不同吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2019-9-8 18:07:21 | 显示全部楼层
如果你指的用dbx项目写自定义实体,代码上没什么区别,dbx主要就是为自定义实体类设计的项目类型,方便管理.
本质上arx是一个特殊的dll,dbx更像一个dll,

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-7 02:56 , Processed in 0.238327 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表