找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1847|回复: 1

[分享] ObjectARX常用代码(一)

[复制链接]

已领礼包: 13个

财富等级: 恭喜发财

发表于 2016-6-11 12:39:01 | 显示全部楼层 |阅读模式

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

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

×
  1. //  Function name    : SetCurTextStyle
  2. //  Description        : 设置当前TextStyle
  3. //  Return type        : Acad::ErrorStatus
  4. //  Argument         : const char* lpStyleName
  5. //  Argument         : AcDbDatabase* pDb/* = NULL */
  6. Acad::ErrorStatus SetCurTextStyle( const   char *  lpStyleName, AcDbDatabase *  pDb /*  = NULL  */ )
  7. {
  8.     AcDbDatabase *  pCurDb  =  pDb;
  9.      if  (pCurDb  ==  NULL)
  10.         pCurDb  =  acdbHostApplicationServices() -> workingDatabase();

  11.     AcDbTextStyleTableRecordPointer spRecord(lpStyleName, pCurDb, AcDb::kForRead);
  12.     Acad::ErrorStatus es  =  spRecord.openStatus();
  13.      if  (es  ==  Acad::eOk)
  14.      {
  15.         es  =   pCurDb -> setTextstyle(spRecord -> objectId());
  16.     }
  17.      return  es;
  18. }


  19. //  Function name    : SetCurLayer
  20. //  Description        : 设置当前层
  21. //  Return type        : Acad::ErrorStatus
  22. //  Argument         : const char* lpLayerName
  23. //  Argument         : AcDbDatabase* pDb/* = NULL */
  24. Acad::ErrorStatus SetCurLayer( const   char *  lpLayerName, AcDbDatabase *  pDb /*  = NULL  */ )
  25. {
  26.     AcDbDatabase *  pCurDb  =  pDb;
  27.      if  (pCurDb  ==  NULL)
  28.         pCurDb  =  acdbHostApplicationServices() -> workingDatabase();

  29.     AcDbLayerTableRecordPointer spRecord(lpLayerName, pCurDb, AcDb::kForRead);
  30.     Acad::ErrorStatus es  =  spRecord.openStatus();
  31.      if  (es  ==  Acad::eOk)
  32.      {
  33.         es  =   pCurDb -> setClayer(spRecord -> objectId());
  34.     }
  35.      return  es;
  36. }


  1. //功能描述:选择指定图层上的所有实体!

  2. // ************************************************************************
  3. // 函数名称:selectEntityInLayer
  4. // 函数类型:Acad::ErrorStatus
  5. // 返回值:  正常:Acad::eOk
  6. // 功能描述:选择指定图层上的所有实体!
  7. // 函数作者:Darcy
  8. // 创建日期:200X-XX-XX
  9. // 参数列表:
  10. // 变量名:nLayerName     变量类型:const char*           变量说明:(输入)图层名
  11. // 变量名:nIDs           变量类型:AcDbObjectIdArray&    变量说明:(输出)图层中实体的对象标识符集合
  12. // ************************************************************************
  13. Acad::ErrorStatus selectEntityInLayer( const   char *  nLayerName,AcDbObjectIdArray &  nIDs)
  14. {
  15.     Acad::ErrorStatus es  =  Acad::eOk;

  16.     ads_name ents;
  17.      struct  resbuf  * rb;
  18.     rb = acutNewRb(AcDb::kDxfLayerName);
  19.     rb -> restype = 8 ;
  20.     rb -> resval.rstring = ( char * )nLayerName;
  21.     rb -> rbnext = NULL;
  22.     acedSSGet( " X " ,NULL,NULL,rb,ents);
  23.      long  entNums = 0 ;
  24.     acedSSLength(ents, & entNums);
  25.      if  (entNums  ==   0 )
  26.         es  =  Acad::eInvalidInput;
  27.      else
  28.       {
  29.          for  ( long  a  =   0 ; a  <  entNums ; a  ++ )
  30.          {
  31.             AcDbObjectId  objId;
  32.             ads_name      ent;
  33.             acedSSName(ents,a,ent);
  34.             acdbGetObjectId(objId, ent);
  35.             nIDs.append(objId);
  36.         }
  37.     }
  38.     acedSSFree(ents);
  39.     acutRelRb(rb);

  40.      return  es;
  41. }
  42. 另一种实现
  43. //************************************************************************
  44. //函数名称:selectEntityInLayer
  45. //函数类型:Acad::ErrorStatus
  46. //返回值:
  47. //功能描述:选择指定层上的实体,得到其对象属性标识符!
  48. //函数作者:Darcy
  49. //创建日期:200X-XX-XX
  50. //参数列表:
  51. //变量名:nLayerName      变量类型:CString               变量说明:
  52. //变量名:nIDs            变量类型:AcDbObjectIdArray&    变量说明:
  53. //变量名:nModelSpace     变量类型:bool                  变量说明:
  54. //************************************************************************
  55. Acad::ErrorStatus    selectEntityInLayer(
  56.                                          CString nLayerName,
  57.                                          AcDbObjectIdArray& nIDs,
  58.                                          bool nModelSpace
  59.                                          )
  60. {
  61.     Acad::ErrorStatus es=Acad::eOk;

  62.     AcDbBlockTable*        pBlockTable=NULL;
  63.     AcDbBlockTableRecord*  pSpaceRecord=NULL;
  64.     if (acdbHostApplicationServices()->workingDatabase()==NULL)
  65.         return Acad::eNoDatabase;
  66.     if ((es = acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead))==Acad::eOk)
  67.     {
  68.         char entryName[13];
  69.         if (nModelSpace)
  70.             strcpy(entryName,ACDB_MODEL_SPACE);
  71.         else
  72.             strcpy(entryName,ACDB_**_SPACE);
  73.         //Get the Model or ** Space record and open it for read:  
  74.         if ((es = pBlockTable->getAt((const char*)entryName, pSpaceRecord, AcDb::kForRead))==Acad::eOk)
  75.         {
  76.                 AcDbBlockTableRecordIterator* pIter;
  77.                 if (pSpaceRecord->newIterator(pIter)==Acad::eOk)
  78.                 {
  79.                     for (pIter->start();!pIter->done();pIter->step())
  80.                     {
  81.                         char *name=NULL;
  82.                         AcDbEntity* pEntity;
  83.                         if (pIter->getEntity(pEntity,AcDb::kForRead)==Acad::eOk)
  84.                         {
  85.                             name=pEntity->layer();
  86.                             if (nLayerName.CompareNoCase(name)==0)
  87.                                 nIDs.append(pEntity->objectId());

  88.                             pEntity->close();
  89.                             acutDelString(name);
  90.                         }
  91.                     }
  92.                     delete pIter;
  93.                 }            
  94.                 pSpaceRecord->close();
  95.         }   
  96.         pBlockTable->close();
  97.     }

  98.     return es;
  99. }



  100. 生成新组
  101. //生成新组(sGroupName)
  102. //追加数组中所有实体到该组中
  103. //组名字 ,   Id数组
  104. int createGroup(CString sGroupName,
  105.                                    const AcDbObjectIdArray *idArr)
  106. {
  107.     AcDbGroup       *pGroup = new AcDbGroup((LPSTR)(LPCTSTR)sGroupName);
  108.     AcDbObjectId     groupObjectId;
  109.     AcDbDictionary  *pGroupDict = NULL;

  110.     acdbHostApplicationServices()->workingDatabase()
  111.         ->getGroupDictionary(pGroupDict, AcDb::kForWrite);
  112.     pGroupDict->setAt(sGroupName, pGroup, groupObjectId);
  113.     pGroupDict->close();
  114.       pGroup->close();
  115.     acdbOpenObject(pGroup, groupObjectId, AcDb::kForWrite);
  116.     for (int i = 0; i < idArr->length(); i++)
  117.     {
  118.         groupObjectId = idArr->at(i);
  119.         pGroup->append(groupObjectId);   
  120.     }
  121.     pGroup->close();
  122.     return TRUE;
  123. }

另一个
  1.         Acad::ErrorStatus CDrawFunction::createGroup(CString groupname,AcDbObjectIdArray IdArray)
  2. {
  3.         Acad::ErrorStatus es=Acad::eOk;
  4.         AcDbDictionary *pGroupDict=NULL;
  5.         AcDbGroup *pGroup=NULL;
  6.         if((es=acdbHostApplicationServices()->workingDatabase()->getGroupDictionary(pGroupDict,AcDb::kForWrite))!=Acad::eOk)
  7.         {
  8.                 return es;
  9.         }
  10.         AcDbObjectId groupId;
  11.         es=pGroupDict->getAt(groupname,groupId);
  12.         if(es==Acad::eInvalidKey)
  13.         {
  14.                 acutPrintf("\n输入的词典名无效!");
  15.                 pGroupDict->close();
  16.                 return es;
  17.         }
  18.         else if(es==Acad::eKeyNotFound)
  19.         {
  20.                 pGroup=new AcDbGroup("GroupDiscription");
  21.                 if((es=pGroupDict->setAt(groupname,pGroup,groupId))!=Acad::eOk)
  22.                 {
  23.                         pGroup->close();pGroupDict->close();return es;
  24.                 }
  25.         }
  26.         else if(es==Acad::eOk )
  27.         {
  28.                 if((es=acdbOpenObject(pGroup,groupId,AcDb::kForWrite))!=Acad::eOk)
  29.                 {
  30.                         pGroupDict->close();return es;
  31.                 }
  32.         }
  33.         for(int i=0;i pGroup->append(IdArray);
  34.                 pGroup->setSelectable(FALSE);
  35.                 pGroupDict->close();
  36.         pGroup->close();
  37.         return es;
  38. }


旋转整个group
  1. void CMyDatabase::rotationGroup(CString strGroupName ,CReiPoint ptRotation,double rotationAngle)
  2. {
  3.     AcGePoint3d pt;
  4.     AcDbDictionary *pGroupDict;
  5.     acdbCurDwg()->getGroupDictionary(pGroupDict,AcDb::kForWrite);
  6.     AcDbObjectId groupId;
  7.     AcDbGroup *pGroup;
  8.     pt.x=ptRotation.x;
  9.     pt.y=ptRotation.y;
  10.     pt.z=ptRotation.z;
  11.     if(pGroupDict->getAt(strGroupName,groupId)==Acad::eOk)
  12.        acdbOpenObject(pGroup,groupId,AcDb::kForWrite);
  13.     else
  14.     {
  15.         pGroupDict->close();
  16.         return;
  17.     }
  18.     pGroupDict->close();
  19.     AcDbGroupIterator* pIter=pGroup->newIterator();
  20.     AcDbEntity* pEnt;
  21.     AcDbObjectId objId;
  22.         pIter=pGroup->newIterator();
  23.     for(;!pIter->done();pIter->next())
  24.     {
  25.         objId=pIter->objectId();
  26.         acdbOpenAcDbEntity(pEnt,objId,AcDb::kForWrite);
  27.         rotationEntity(pEnt,pt,rotationAngle);
  28.         pEnt->close();
  29.     }
  30.     delete pIter;
  31.     pGroup->close();
  32. }


  1. 新建一个图层
  2. //==========================================================
  3. 功能:新建一个图层
  4. 参数:LayerName -- 图层名,LayerColor -- 颜色名
  5. 返回:图层ID
  6. //==========================================================
  7. AcDbObjectId CreateNewLayer(CString LayerName, AcCmColor LayerColor)
  8. {
  9.     // 获得当前图形数据库的符号表
  10.     AcDbLayerTable *pLayerTable;
  11.     acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pLayerTable,
  12.         AcDb::kForWrite);
  13.     // 生成新的图层表记录
  14.     AcDbLayerTableRecord *pLayerTableRecord = new AcDbLayerTableRecord;
  15.     pLayerTableRecord->setName(LayerName);        // 设置图层名
  16.     pLayerTableRecord->setColor(LayerColor);    // 设置图层颜色
  17.     AcDbObjectId layerId;
  18.     pLayerTable->add(layerId,pLayerTableRecord);
  19.     // 关闭图层表和图层表记录
  20.     pLayerTable->close();
  21.     pLayerTableRecord->close();
  22.     return layerId;
  23. }

  1. //==========================================================
  2. 功能:在指定图层上新建一条直线
  3. 参数:见注释
  4. 返回:直线ID
  5. //==========================================================
  6. AcDbObjectId CreateLine( double x1,double y1,double z1,  // 起点坐标
  7.                      double x2,double y2,double z2,  // 终点坐标
  8.                      AcDbObjectId layer)                   // 直线所在图层
  9. {
  10.     AcGePoint3d StartPt(x1,y1,z1);    // 起点
  11.     AcGePoint3d EndPt(x2,y2,z2);    // 终点
  12.     AcDbLine *pLine = new AcDbLine(StartPt,EndPt);
  13.     // 获得当前图形数据库的符号表
  14.     AcDbBlockTable *pBlockTable;
  15.     acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable,
  16.         AcDb::kForRead);
  17.     // 获得符号表中的模型空间块表记录指针,用于添加对象
  18.     AcDbBlockTableRecord *pBlockTableRecord;
  19.     pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
  20.     pBlockTable->close();
  21.     // 将直线添加到模型空间块表记录中
  22.     AcDbObjectId lineId;
  23.     pLine->setLayer(layer,Adesk::kTrue);    // 设置直线所在图层
  24.     pBlockTableRecord->appendAcDbEntity(lineId,pLine);
  25.     // 关闭块表记录指针和直线指针
  26.     pBlockTableRecord->close();
  27.     pLine->close();
  28.     // 返回直线ID号
  29.     return lineId;
  30. }


不太常用的啊
已知一段弧的起点和终点以及其凸度,求其圆心

  1. int getCenter(ads_point startPoint,ads_point endPoint,double bulge,ads_point& center)
  2. {
  3.         if (bulge==0.0)
  4.         {
  5.                 ads_point_set(startPoint,center);
  6.                 return 0;
  7.         }
  8.         ads_point startPt,endPt;
  9.         if (bulge<0.0)
  10.         {
  11.                 ads_point_set(endPoint,startPt);
  12.                 ads_point_set(startPoint,endPt);
  13.                 bulge=bulge*(-1.0);
  14.         }
  15.         else
  16.         {
  17.                 ads_point_set(startPoint,startPt);
  18.                 ads_point_set(endPoint,endPt);
  19.         }
  20.         double distStartToEnd,distX,distY,radius;
  21.         distStartToEnd=ads_distance(startPt,endPt);
  22.         distX=distStartToEnd/2.0;
  23.         distY=bulge*distX;
  24.         radius=((distX*distX)+(distY*distY))/(2.0*distY);

  25.         double tmpAng;
  26.         ads_point tmpPt;

  27.         tmpAng=ads_angle(startPt,endPt);
  28.         ads_polar(startPt,tmpAng,distX,tmpPt);
  29.         ads_polar(tmpPt,(tmpAng+(_PI/2.0)),(radius-distY),center);
  30.         return 1;

  31. };



  1. create hatch的

  2. AcDbObjectId CreateHatch(
  3. AcDbObjectId dbOId,
  4. char cLayer[],
  5. char cPattern[] = "SOLID",
  6. int nColor = 256,
  7. double dAngle = 0.0,
  8. double dScale = 1.0,
  9. AcDbDatabase * pDbDatab = acdbHostApplicationServices()->workingDatabase())
  10. {
  11.         AcCmColor CmC;
  12.         AcDbObjectId DbOId;
  13.         AcDbObjectIdArray DbOIdA(0, 2);
  14.         AcDbBlockTable * pDbBT;
  15.         AcDbBlockTableRecord * pDbBTR;
  16.         AcGeVector3d normal(0.0, 0.0, 1.0);

  17.         DbOIdA.append(dbOId);

  18.         AcDbHatch* pDbHat = new AcDbHatch();

  19.         pDbHat->setDatabaseDefaults();

  20.         pDbHat->setAssociative(Adesk::kTrue); // BUG: doesn't do squat! have to set the reactor yourself to get associativity!

  21.         pDbHat->appendLoop(AcDbHatch::kExternal, DbOIdA);

  22.         pDbHat->setPatternScale(dScale);

  23.         pDbHat->setPatternAngle(dAngle);

  24.         pDbHat->setPattern(AcDbHatch::kPreDefined, cPattern);

  25.         pDbHat->setNormal(normal);

  26.         pDbHat->evaluateHatch(); // crucial call or nothing gets displayed!

  27.         pDbDatab->getSymbolTable(pDbBT, AcDb::kForRead);

  28.         pDbBT->getAt(ACDB_MODEL_SPACE, pDbBTR, AcDb::kForWrite);

  29.         pDbBTR->appendAcDbEntity(DbOId, pDbHat);

  30.         pDbHat->setLayer(cLayer);

  31.         CmC.setColorIndex(nColor);

  32.         ((AcDbEntity *)pDbHat)->setColor(CmC);

  33.         pDbBT->close();

  34.         pDbBTR->close();

  35.         pDbHat->close();

  36.         return DbOId;

  37. }



  1. 前阵困扰我的问题解决了,现在共享给大家:
  2. //************************************************************************
  3. //函数名称:getPointAtDistInGeCurve
  4. //函数类型:Acad::ErrorStatus
  5. //返回值:
  6. //功能描述:返回曲线上距起点某距离值处的点。
  7. //函数作者:Darcy
  8. //创建日期:2003-XX-XX
  9. //参数列表:
  10. //变量名:pGeCurve 变量类型:const AcGeCurve3d * 变量说明:
  11. //变量名:dist 变量类型:double 变量说明:
  12. //变量名:point 变量类型:AcGePoint3d& 变量说明:
  13. //备 注:
  14. //************************************************************************
  15. Acad::ErrorStatus getPointAtDistInGeCurve(const AcGeCurve3d * pGeCurve,double dist,AcGePoint3d& point)
  16. {
  17.         Acad::ErrorStatus es = Acad::eOk;

  18.         if ( pGeCurve != NULL )
  19.         {
  20.                 AcGePoint3d spt;
  21.                 double pa=0.,datumParam=0.;
  22.                 //距离从起点起算!
  23.                 Adesk::Boolean posParamDir=Adesk::kTrue;

  24.                 pGeCurve->hasStartPoint(spt);

  25.                 datumParam = pGeCurve->paramOf(spt);;

  26.                 pa = pGeCurve->paramAtLength(
  27.                         datumParam,
  28.                         dist,
  29.                         posParamDir
  30.                         );

  31.                 point=pGeCurve->evalPoint(pa);
  32.         }
  33.         else
  34.                 es = Acad::eInvalidInput;

  35.         return es;
  36. }

  1. 判断点是否在圆弧上
  2. /*****************************************************/
  3. BOOL
  4. IsAtArc(CAD_POINT firstPt,CAD_POINT secondPt,
  5. double radius,double direct,int More,CAD_POINT thePt)
  6. /* 判断某点是否在圆弧上
  7. firstPt 圆弧起点
  8. secondPt 圆弧终点
  9. radius 半径
  10. direct 偏向( >=0__左偏 <0__右偏 )
  11. More (More<0__小圆弧,More>0__大圆弧)
  12. thePt 判断点
  13. 返回:TRUE__在圆弧上 FALSE__不在圆弧上
  14. */
  15. {
  16.         CAD_POINT centerPt,sectionPt;
  17.         CAD_POINT startPt,endPt;
  18.         double startAngle,endAngle,chordAngle,vertAngle;
  19.         double intLine,chordLine;
  20.         /* centerPt 圆弧圆心
  21.         sectionPt 弦线中心点
  22.         startAngle 圆弧起点切线角度(弧度)
  23.         endAngle 圆弧终点切线角度(弧度)
  24.         chordAngle 弦线角度(弧度)
  25.         vertAngle 与弦线垂直的垂线角度(弧度)
  26.         intLine 弦线中心至圆心距离
  27.         chordLine 弦线长度
  28.         */
  29.         sectionPt.x = (firstPt.x + secondPt.x)/2;
  30.         sectionPt.y = (firstPt.y + secondPt.y)/2;

  31.         chordLine = sqrt( pow( (secondPt.x-firstPt.x),2 ) + pow( (secondPt.y-firstPt.y),2 ) );
  32.         intLine = sqrt((radius*radius-chordLine*chordLine/4) );

  33.         chordAngle = ads_angle(asDblArray(firstPt),asDblArray(secondPt)); //弦线的角度

  34.         if(direct>=0)//左偏
  35.         {
  36.                 startPt=firstPt;
  37.                 endPt=secondPt;
  38.                 vertAngle=chordAngle+Pai/2;
  39.         }
  40.         else if(direct<0)//右偏
  41.         {
  42.                 startPt=secondPt;
  43.                 endPt=firstPt;
  44.                 vertAngle=chordAngle-Pai/2;
  45.         }

  46.         if(More<=0)//小圆弧
  47.         {
  48.                 centerPt.x=sectionPt.x+intLine*cos(vertAngle);
  49.                 centerPt.y=sectionPt.y+intLine*sin(vertAngle);
  50.         }
  51.         else//大圆弧
  52.         {
  53.                 centerPt.x=sectionPt.x-intLine*cos(vertAngle);
  54.                 centerPt.y=sectionPt.y-intLine*sin(vertAngle);
  55.         }

  56.         if(fabs(centerPt.distanceTo(thePt)-radius)>1.0E-8)
  57.                 return FALSE;
  58.         startAngle = ads_angle(asDblArray(centerPt),asDblArray(startPt));
  59.         endAngle = ads_angle(asDblArray(centerPt),asDblArray(endPt));

  60.         AcDbArc *pArc=new AcDbArc(centerPt,radius,startAngle,endAngle);
  61.         AcDbLine *pLine=new AcDbLine(centerPt,thePt);
  62.         AcGePoint3dArray Points;
  63.         pLine->intersectWith(pArc,AcDb::kOnBothOperands,Points);
  64.         if(Points.isEmpty()) return FALSE;

  65.         return TRUE;
  66. }

  67. [code=cpp]
  68. 相object加xdata
  69. void affixXdata(char *appName, char *xData, AcDbObject *pObj)
  70. {
  71.     //向AcDbObject添加扩展数据Xdata
  72.     struct resbuf *pRb, *pTemp;

  73.     acdbRegApp(appName);
  74.     pRb = acutNewRb(AcDb::kDxfRegAppName);
  75.     pTemp = pRb;
  76.     pTemp->resval.rstring = new char[strlen(appName)+1];
  77.     strcpy(pTemp->resval.rstring, appName);

  78.     pTemp->rbnext = acutNewRb(AcDb::kDxfXdAsciiString);
  79.     pTemp = pTemp->rbnext;
  80.     pTemp->resval.rstring = new char[strlen(xData)+1];
  81.     strcpy(pTemp->resval.rstring, xData);

  82.     pObj->setXData(pRb);
  83.     acutRelRb(pRb);
  84. }

  1. //添加扩展数据
  2. //实体添加扩展数据(字符串)
  3. bool AddXData(CString appName, AcDbObjectId entId,CString data)
  4. {
  5.         //open entity for read
  6.         AcDbEntity*pEnt;
  7.         Acad::ErrorStatus es=acdbOpenAcDbEntity(pEnt,entId,AcDb::kForRead);
  8.         if(es!=Acad::eOk)
  9.         {
  10.                 ads_printf("error in open entity\n");
  11.                 return false;
  12.         }
  13.         //get XData buffer
  14.         struct resbuf*pRb,*pTemp;
  15.         pRb=pEnt->xData(appName);
  16.         if(pRb!=NULL)//have XData
  17.         {
  18.                 //pTemp移到表尾
  19.                 pTemp=pRb;
  20.                 for(pTemp=pRb;pTemp->rbnext!=NULL;pTemp=pTemp->rbnext){;}
  21.         }
  22.         else//NOT have XData
  23.         {
  24.                 //create new xData
  25.                 ads_regapp(appName);
  26.                 pRb=ads_newrb(AcDb::kDxfRegAppName);
  27.                 pRb->resval.rstring=(char*)malloc(appName.GetLength()+1);
  28.                 strcpy(pRb->resval.rstring,appName);
  29.                 pTemp=pRb;
  30.         }
  31.         //fill xData string
  32.         pTemp->rbnext=ads_newrb(AcDb::kDxfXdAsciiString);
  33.         pTemp=pTemp->rbnext;
  34.         pTemp->resval.rstring=(char*)malloc(data.GetLength()+1);
  35.         strcpy(pTemp->resval.rstring,data);
  36.         //add xData
  37.         es=pEnt->upgradeOpen();
  38.         if(es!=Acad::eOk)
  39.         {
  40.                 ads_printf("\nError occur in updateOpen.");
  41.                 pEnt->close();
  42.                 ads_relrb(pRb);
  43.                 return false;
  44.         }
  45.         es=pEnt->setXData(pRb);
  46.         if(es!=Acad::eOk)
  47.         {
  48.                 ads_printf("\nError occur in setXData.");
  49.                 pEnt->close();
  50.                 ads_relrb(pRb);
  51.                 return false;
  52.         }
  53.         //
  54.         pEnt->close();
  55.         ads_relrb(pRb);
  56.         return true;
  57. }

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 18:29 , Processed in 0.333723 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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