天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 160|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    半小时前
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    115

    主题

    11

    回帖

    1393

    积分

    管理员

    积分
    1393
    QQ
    发表于 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. }
    复制代码

     

     

     

     

    为什么 RealDWG 文档说某些函数不适用“由于 AcDbSubentId 的图形依赖关系”?
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-5 06:10 , Processed in 0.157074 second(s), 27 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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