找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 218|回复: 2

[每日一码] 改变显示顺序的代码

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-2-23 22:13:45 | 显示全部楼层 |阅读模式
  1. Acad::ErrorStatus changeDrawOrder(AcDbObjectId parent, AcDbObjectIdArray &childArray, AcEdDrawOrderCmdType variant)
  2. {
  3.    if (childArray.isEmpty()) return Acad::eInvalidInput;
  4.    Acad::ErrorStatus es = Acad::eOk;
  5.    AcDbSortentsTable *pSortTab = NULL;
  6.    AcDbObjectId spaceId = AcDbObjectId::kNull;
  7.    AcDbEntityPointer pEnt(childArray.first(),AcDb::kForRead);
  8.    if (pEnt.openStatus() == Acad::eOk)
  9.    {
  10.       spaceId = pEnt->ownerId();
  11.       pEnt->close();
  12.    }
  13.    if (!spaceId.isNull())
  14.    {
  15.       AcDbBlockTableRecordPointer pBTR(spaceId,AcDb::kForRead);
  16.       if (pBTR.openStatus() == Acad::eOk)
  17.       {
  18.          if (pBTR->getSortentsTable(pSortTab, AcDb::kForWrite, true) == Acad::eOk)
  19.          {
  20.             switch (variant)
  21.             {
  22.                case kDrawOrderBottom:
  23.                   es = pSortTab->moveToBottom(childArray);
  24.                   break;
  25.                                        
  26.                case kDrawOrderTop:
  27.                   es = pSortTab->moveToTop(childArray);
  28.                   break;
  29.                                                 
  30.                case kDrawOrderBelow:
  31.                   es = pSortTab->moveBelow(childArray,parent);
  32.                   break;
  33.                                                 
  34.                case kDrawOrderAbove:
  35.                   es = pSortTab->moveAbove(childArray,parent);
  36.                   break;
  37.             }
  38.             pSortTab->close();
  39.          }
  40.       }
  41.    }
  42.    return es;
  43. }
复制代码

0

主题

0

回帖

26

积分

管理员

积分
26
 楼主| 发表于 2024-2-23 22:14:07 | 显示全部楼层
  1. ads采用name entName;
  2. ads采用point entpoint;
  3. if (acedEntSel(采用T("\nlayer:"),entName,entpoint)!=RTNORM)
  4. {
  5.         return;
  6. }
  7. AcDbObjectId layerId;
  8. acdbGetObjectId(layerId,entName);
  9. AcDbEntity *pEnt;
  10. acdbOpenObject(pEnt,layerId,AcDb::kForWrite);
  11. TCHAR *layerName=pEnt->layer();
  12. pEnt->close();
  13. struct resbuf *rb;
  14. ads采用name ssname;
  15. rb=acutBuildList(8,layerName,RTNONE);
  16. int rc=acedSSGet(采用T("X"),NULL,NULL,rb,ssname);
  17. AcDbObjectIdArray objIds;
  18. if (rc!=RTNORM)
  19. {
  20.         acutRelRb(rb);
  21.         return;
  22. }
  23. long length;
  24. acedSSLength(ssname,&length);
  25. acutPrintf(采用T("\nlayer%sall%d个"),layerName,length);
  26. for (int i=0;i<length;i++)
  27. {
  28.         ads采用name ent;
  29.         acedSSName(ssname,i,ent);
  30.         AcDbObjectId objId;
  31.         acdbGetObjectId(objId,ent);
  32.         objIds.append(objId);
  33. }
  34. changeDrawOrder(NULL,objIds,kDrawOrderTop);
  35. //acedDrawOrderInherit(NULL,objIds,::kDrawOrderTop);
  36. acedSSFree(ssname);
  37. acutDelString(layerName);
  38. if (rb!=NULL)
  39. {
  40.         acutRelRb(rb);
  41. }
复制代码

0

主题

0

回帖

26

积分

管理员

积分
26
 楼主| 发表于 2024-2-23 22:14:21 | 显示全部楼层
  1. 改变选择的实体显示顺序到最下
  2. static void MoveToBottom(void)
  3. {
  4.   ads采用point p;
  5.   ads采用name en;
  6.   Acad::ErrorStatus es;
  7.   if (acedEntSel(L"\nSelect entity: ",en,p) == RTNORM) {
  8.     AcDbObjectId id; acdbGetObjectId(id,en);
  9.     AcDbSortentsTable *pSortTab = NULL;
  10.     AcDbObjectId spaceId = acdbCurDwg()->currentSpaceId();
  11.     AcDbObjectPointer<AcDbBlockTableRecord> pBTR(spaceId,AcDb::kForRead);
  12.     if ((es = pBTR.openStatus()) == Acad::eOk) {
  13.       if ((es = pBTR->getSortentsTable(pSortTab, AcDb::kForWrite, true)) == Acad::eOk) {
  14.         AcDbObjectIdArray ar; ar.append(id);
  15.         pSortTab->moveToBottom(ar);
  16.         pSortTab->close();
  17.       } else {
  18.         acutPrintf(L"\nError open AcDbSortentsTable: %s",acadErrorStatusText(es));
  19.       }
  20.     } else {
  21.       acutPrintf(L"\nError open AcDbBlockTableRecord: %s",acadErrorStatusText(es));
  22.     }
  23.   }
  24. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-28 14:53 , Processed in 0.137842 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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