OpenCASCADE — сделать заполнение с отверстиями

Я делаю заполнение OCC, используя BRepFill_Filling со следующим кодом. Вход состоит из набора проводов и набора точек. Первый провод определяет петлю внешнего края, то есть границу грани. Остальные провода — это петли отверстий на лицах. Множество точек определяет некоторые точки, через которые должно проходить лицо (они не имеют отношения к этому сообщению).

Код следующий:

TopoDS_Face MyFace::MakeOCCFilling_PointsMultipleWires(
std::vector<TopoDS_Wire> wires, //first wire defines the outer edge loop (face boundary), the rest are the edge loops which define holes
GenericList<gp_Pnt> points //these are points through which the face should pass (irrelevant for this post)
)
{

BRepFill_Filling makeFilling;
for (unsigned int i = 0; i < wires.size(); i++) //there are errors when I try to add more than one wire. For one wire, it works fine
{
TopExp_Explorer edge_explorer(wires[i], TopAbs_EDGE);
for (; edge_explorer.More(); edge_explorer.Next())
{
makeFilling.Add(TopoDS::Edge(edge_explorer.Current()), GeomAbs_C0, true); //if I try to modify the constraint to be GeomAbs_C1,GeomAbs_G1, or anything else, the face is not built
}
}

for (ListNode<gp_Pnt>* node = points.first; node; node = node->next) //the points which the face should contain
{
makeFilling.Add(*node->ptr);
}

makeFilling.Build();

return BRepBuilderAPI_MakeFace(makeFilling.Face());
}

Это работает, если я добавлю только один провод и несколько точек. Если я пытаюсь добавить второй провод, программа вылетает.

Когда я пытаюсь изменить ограничение при добавлении провода, грань вообще не строится.

Есть идеи, как добавить другие провода, чтобы сделать отверстия?

Благодарю.

С Уважением,

Сербан Стоенеску

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]