找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 124|回复: 1

亮显 面 顶点 边

[复制链接]

1

主题

0

回帖

37

积分

管理员

积分
37
发表于 2024-5-4 18:36:42 | 显示全部楼层 |阅读模式
  1.                 ads采用name ss;
  2.                 if (acedSSGet(NULL,NULL,NULL,NULL,ss)!=RTNORM)
  3.                 {
  4.                         return;
  5.                 }
  6.                 struct resbuf* res;
  7.                 if (acedSSNameX(&res,ss,0)!=RTNORM)
  8.                 {
  9.                         acedSSFree(ss);
  10.                         return;
  11.                 }
  12.                 acedSSFree(ss);
  13.                 struct resbuf* buf;
  14.                 int i;
  15.                 for (i=1,buf=res;i<3;i++,buf=buf->rbnext)
  16.                 {;}
  17.                 ads采用name ent;
  18.                 ads采用name采用set(buf->resval.rlname,ent);
  19.                 buf=buf->rbnext;
  20.                 int maker=buf->resval.rint;
  21.                 acutRelRb(res);
  22.                 AcDbObjectId entId;
  23.                 AcDbEntity *pEnt=NULL;
  24.                 acdbGetObjectId(entId,ent);
  25.                 if (acdbOpenObject(pEnt,entId,AcDb::kForWrite)==Acad::eOk)
  26.                 {
  27.                         AcGePoint3d ptOnOrNear;
  28.                         AcGeMatrix3d mat;
  29.                         int sunEntNums;
  30.                         AcDbFullSubentPath* subentIds;
  31.                         ACHAR leixing[100];
  32.                         acedGetString(0,采用T("输入需要高亮显示的子实体类型:"),leixing);
  33.                         if (*leixing==*采用T("边"))
  34.                         {
  35.                                 pEnt->getSubentPathsAtGsMarker(AcDb::kEdgeSubentType,maker,ptOnOrNear,mat,sunEntNums,subentIds);
  36.                         }
  37.                         else if (*leixing==*采用T("面"))
  38.                         {
  39.                                 pEnt->getSubentPathsAtGsMarker(AcDb::kFaceSubentType,maker,ptOnOrNear,mat,sunEntNums,subentIds);
  40.                         }
  41.                         else if (*leixing==*采用T("顶点"))
  42.                         {
  43.                                 pEnt->getSubentPathsAtGsMarker(AcDb::kVertexSubentType,maker,ptOnOrNear,mat,sunEntNums,subentIds);
  44.                         }
  45.                         else
  46.                         {
  47.                                 acedAlert(采用T("没有此类型的子实体........................."));
  48.                         }
  49.                         if (sunEntNums>0)
  50.                         {
  51.                                 for (int i=0;i<sunEntNums;i++)
  52.                                 {
  53.                                         pEnt->highlight(subentIds[i]);
  54.                                 }
  55.                                 ACHAR str[20]={0};
  56.                                 acedGetString(0,采用T("按回车键结束高亮显示并进入低亮显示"),str);
  57.                                 for (int i=0;i<sunEntNums;i++)
  58.                                 {
  59.                                         pEnt->unhighlight(subentIds[i]);
  60.                                 }
  61.                         }
  62.                 }
  63.                 pEnt->close();
复制代码

1

主题

0

回帖

37

积分

管理员

积分
37
 楼主| 发表于 2024-5-4 18:36:59 | 显示全部楼层
  1.         static void highlightEdge(const AcDbObjectId& objId, const int marker)
  2.         {
  3.                 TCHAR dummy[133]; // space for acedGetStringB pauses below
  4.                 AcDbEntity *pEnt;
  5.                 acdbOpenAcDbEntity(pEnt, objId, AcDb::kForRead);
  6.                 AcGePoint3d pickpnt;
  7.                 AcGeMatrix3d xform;
  8.                 int numIds;
  9.                 AcDbFullSubentPath *subentIds;
  10.                 pEnt->getSubentPathsAtGsMarker(AcDb::kEdgeSubentType,
  11.                         marker, pickpnt, xform, numIds, subentIds);
  12.                 // At this point the subentId's variable contains the
  13.                 // address of an array of AcDbFullSubentPath objects.
  14.                 // The array should be one element long, so the picked
  15.                 // edge's AcDbFullSubentPath is in subentIds[0].
  16.                 //
  17.                 // For objects with no edges (such as a sphere), the
  18.                 // code to highlight an edge is meaningless and must
  19.                 // be skipped.
  20.                 //
  21.                 if (numIds > 0) {
  22.                         // Highlight the edge.
  23.                         //
  24.                         pEnt->highlight(subentIds[0]);
  25.                         // Pause to let user see the effect.
  26.                         //
  27.                         acedGetString(0, 采用T("\npress <RETURN> to continue..."),
  28.                                 dummy);
  29.                         // Unhighlight the picked edge.
  30.                         //
  31.                         pEnt->unhighlight(subentIds[0]);
  32.                         // Get a copy of the edge, and add it to the database.
  33.                         //
  34.                         AcDbEntity *pEntCpy = pEnt->subentPtr(subentIds[0]);
  35.                         AcDbObjectId objId;
  36.                         CMoftenuse::PostToModelSpace( pEntCpy);
  37.                 }
  38.                 delete []subentIds;
  39.                 pEnt->close();
  40.         }
  41. static        void        highlightFaces(const AcDbObjectId& objId, const int marker)
  42.         {
  43.                 TCHAR dummy[133];
  44.                 AcDbEntity *pEnt;
  45.                 acdbOpenAcDbEntity(pEnt, objId, AcDb::kForRead);
  46.                 // Get the subentIds for the faces.
  47.                 //
  48.                 AcGePoint3d pickpnt;
  49.                 AcGeMatrix3d xform;
  50.                 int numIds;
  51.                 AcDbFullSubentPath *subentIds;
  52.                 pEnt->getSubentPathsAtGsMarker(AcDb::kFaceSubentType,
  53.                         marker, pickpnt, xform, numIds, subentIds);
  54.                 // Walk the subentIds list, highlighting each face subentity.
  55.                 //
  56.                 for (int i = 0;i < numIds; i++) {
  57.                         pEnt->highlight(subentIds[i]); // Highlight face.
  58.                         // Pause to let the user see the effect.
  59.                         //
  60.                         acedGetString(0, 采用T("\npress <RETURN> to continue..."),
  61.                                 dummy);
  62.                         pEnt->unhighlight(subentIds[i]);
  63.                 }
  64.                 delete []subentIds;
  65.                 pEnt->close();
  66.         }
  67. static        void        highlightAll(const AcDbObjectId& objId)
  68.         {
  69.                 TCHAR dummy[133];
  70.                 AcDbEntity *pEnt;
  71.                 acdbOpenAcDbEntity(pEnt, objId, AcDb::kForRead);
  72.                 // Highlight the whole solid.
  73.                 //
  74.                 pEnt->highlight();
  75.                 // Pause to let user see the effect.
  76.                 //
  77.                 acedGetString(0, 采用T("\npress <RETURN> to continue..."),
  78.                         dummy);
  79.                 pEnt->unhighlight();
  80.                 pEnt->close();
  81.         }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-1-4 13:15 , Processed in 0.131269 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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