找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 164|回复: 0

为什么 RealDWG 文档说某些函数不适用“由于 AcDbSubentId 的图形依赖关系”?

[复制链接]

1

主题

0

回帖

35

积分

管理员

积分
35
发表于 2024-3-16 08:52:08 | 显示全部楼层 |阅读模式
  1. void cmdTestBrep()
  2. {
  3.         Acad::ErrorStatus es;
  4.         AcDbDatabase *db = new AcDbDatabase();
  5.         AcDb3dSolid *solid = new AcDb3dSolid;
  6.         solid->setDatabaseDefaults(db);
  7.         es = solid->createBox(200.0, 300.0, 400.0);
  8.         AcDbObjectId idSolid;
  9.         es = PostToDb(db, idSolid, solid);
  10.         AcBrBrep *pBrep = new AcBrBrep();
  11.         AcDbFullSubentPath adfsp(idSolid, kNullSubentId);
  12.         AcBr::ErrorStatus ebs = pBrep->setSubentPath(adfsp);
  13.         AcBrBrepFaceTraverser faceTraverser;
  14.         ebs = faceTraverser.setBrep(*pBrep);
  15.         assert(ebs == AcBr::eOk);
  16.         std::vector<Face2Edges> facePathToEdgePaths;
  17.         AcBrFace face;
  18.         AcDbFullSubentPath subFacePath, subEdgePath;
  19.         for (ebs = faceTraverser.restart(); !faceTraverser.done(); ebs = faceTraverser.next())
  20.         {
  21.                 ebs = faceTraverser.getFace(face);
  22.                 if (ebs == AcBr::eOk)
  23.                 {
  24.                         ebs = face.getSubentPath(subFacePath);
  25.                         if (ebs == AcBr::eOk)
  26.                         {
  27.                                 Face2Edges f2es;
  28.                                 f2es.face = subFacePath;                               
  29.                                 AcBrFaceLoopTraverser faceLoopTrav;
  30.                                 ebs = faceLoopTrav.setFace(face);
  31.                                 for (; !faceLoopTrav.done(); ebs = faceLoopTrav.next())
  32.                                 {
  33.                                         AcBrLoop loop;
  34.                                         ebs = faceLoopTrav.getLoop(loop);
  35.                                         if (ebs == AcBr::eOk)
  36.                                         {
  37.                                                 AcBrLoopEdgeTraverser loopEdgeTrav;
  38.                                                 ebs = loopEdgeTrav.setLoop(loop);
  39.                                                 for (; !loopEdgeTrav.done(); ebs = loopEdgeTrav.next())
  40.                                                 {
  41.                                                         AcBrEdge edge;
  42.                                                         ebs = loopEdgeTrav.getEdge(edge);
  43.                                                         if (ebs == AcBr::eOk)
  44.                                                         {
  45.                                                                 ebs = edge.getSubentPath(subEdgePath);
  46.                                                                 if (ebs == AcBr::eOk)
  47.                                                                         f2es.edges.append(subEdgePath);
  48.                                                         }
  49.                                                 }
  50.                                         }
  51.                                 }
  52.                                 facePathToEdgePaths.push采用back(std::move(f2es));
  53.                         }
  54.                 }
  55.         }
  56.         delete pBrep;
  57.         // recolor the faces
  58.         if ((es = acdbOpenObject(solid, idSolid, AcDb::kForWrite)) == Acad::eOk)
  59.         {
  60.                 AcCmColor color;
  61.                 Adesk::UInt16 colorIndex = 0;
  62.                
  63.                 for (const Face2Edges & f2es : facePathToEdgePaths)
  64.                 {
  65.                         color.setColorIndex(++colorIndex);
  66.                         es = solid->setSubentColor(f2es.face.subentId(), color);
  67.                 }
  68.                 static double dRadius = 10.0;
  69.                 static double dSetbackStart = 0.0;
  70.                 static double dSetbackEnd = 0.0;
  71.                 for (const Face2Edges& f2es : facePathToEdgePaths)
  72.                 {
  73.                         int count = f2es.edges.length();
  74.                         if (count>0)
  75.                         {
  76.                                 AcArray<AcDbSubentId> edgeIds;
  77.                                 AcArray<AcDbSubentId*> edgeIdPtrs;
  78.                                 AcGeDoubleArray startSetback, endSetback, radius;
  79.                                 edgeIds.setLogicalLength(count);
  80.                                 edgeIdPtrs.setLogicalLength(count);
  81.                                 radius.setLogicalLength(count);
  82.                                 startSetback.setLogicalLength(count);
  83.                                 endSetback.setLogicalLength(count);
  84.                                 for (int i=0; i<count; ++i)
  85.                                 {
  86.                                         color.setColorIndex(++colorIndex);
  87.                                         es = solid->setSubentColor(f2es.edges[i].subentId(), color);
  88.                                         const AcDbFullSubentPath& path = f2es.edges[i];
  89.                                         edgeIds[i] = path.subentId();
  90.                                         edgeIdPtrs[i] = &(edgeIds[i]);
  91.                                         radius[i] = dRadius;
  92.                                         startSetback[i] = dSetbackStart;
  93.                                         endSetback[i] = dSetbackEnd;
  94.                                 }
  95.                                 es = solid->filletEdges(edgeIdPtrs, radius, startSetback, endSetback);
  96.                                 break;
  97.                         }
  98.                 }
  99.                 solid->close();
  100.         }
  101.         db->saveAs(L"c:\\temp\\brep.dwg");
  102.         delete db;
  103. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-1-1 17:44 , Processed in 0.104022 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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