Я делаю заполнение 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());
}
Это работает, если я добавлю только один провод и несколько точек. Если я пытаюсь добавить второй провод, программа вылетает.
Когда я пытаюсь изменить ограничение при добавлении провода, грань вообще не строится.
Есть идеи, как добавить другие провода, чтобы сделать отверстия?
Благодарю.
С Уважением,
Сербан Стоенеску
Задача ещё не решена.
Других решений пока нет …