如何在 OpenCASCADE 中创建两个或多个形状的 TopTools_ListOfShape
TopTools_ListOfShape 只是 NCollection_List<TopoDS_Shape> 的另一个名称。
使用我的 OCCUtils 库,这非常简单:
list_to_occ_list.cpp
#include <TopTools_ListOfShape.hxx>
#include <occutils/ListUtils.hxx>
using namespace OCCUtils;
/* ... */
TopoDS_Solid solid1 = /* ... */;
TopoDS_Solid solid2 = /* ... */;
TopTools_ListOfShape shapes = ListUtils::ToOCCList({solid1, solid2});ListUtils::ToOCCList() 几乎可以接受任何参数,std::initializer_list(这是上面示例中的花括号语法),也可以是任何类型的 STL 容器如 std::vector 或 std::list,并将其转换为 NCollection_List<T>:
list_to_occ_list.cpp
#include <TopTools_ListOfShape.hxx>
#include <occutils/ListUtils.hxx>
#include <vector>
using namespace OCCUtils;
/* ... */
TopoDS_Solid solid1 = /* ... */;
TopoDS_Solid solid2 = /* ... */;
std::vector<TopoDS_Shape> shapeVector({solid1, solid2});
TopTools_ListOfShape shapes = ListUtils::ToOCCList(shapeVector);如果你不想使用 OCCUtils,这是手动创建 TopTools_ListOfShape 的方法:
manual_append.cpp
TopTools_ListOfShape list;
list.Append(shape1);
list.Append(shape2);由于 NCollection_List(因此也包括 TopTools_ListOfShape)内部是链表,你也可以使用 list.Prepend(shape); 将形状添加到列表前面而不会产生任何性能损失。
如果你想从 std::vector 或任何类似 STL 容器创建列表,使用此代码片段:
manual_append.cpp
std::vector<TopoDS_Shape>& shapeVector = /* ... */;
TopTools_ListOfShape list;
for(const TopoDS_Shape& shape : shapeVector) {
list.Append(shape);
}创建容器后,你可以使用 C++11 基于范围的 for 循环迭代它:
iterate_listofshape.cpp
TopTools_ListOfShape myShapes = /* ... */;
// 迭代 myShapes
for(const TopoDS_Shape& shape : myShapes) {
/* ... */
}请参见如何在 OpenCASCADE 中迭代 TopTools_ListOfShape和如何在 OpenCASCADE 中迭代 NCollection_List了解更多详情。
Check out similar posts by category:
C/C++, OpenCASCADE
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow