Подсчет расширенных функций в пошаговом файле

#step #opencascade

#шаг #opencascade

Вопрос:

Моя цель — подсчитать количество объектов ADVANCED_FACEs, которые определяют твердое тело в файле STEP. Для этого я решил использовать OpenCascade. Я прочитал документацию о выборе экземпляров, однако для меня это довольно сложно, и мне не удалось понять, как использовать предопределенные операторы, такие как step214-placed-items , step214-shape-def-repr и так далее.

Затем я посмотрел в комментариях к файлу XSControl_Reader.hxx, где они пишут:

   //! For example, if you wanted to select only the advanced_faces in a STEP
  //! file you would use the following code:
  //! Example
  //! Reader.GiveList("xst-transferrable-roots","step-type(ADVANCED_FACE)");
  

На данный момент мой код выглядит следующим образом.

 int main(int argc, char* argv[])
{
    //read file
    STEPControl_Reader reader;
    IFSelect_ReturnStatus stat = reader.ReadFile(argv[1]);

    //check entities
    IFSelect_PrintCount mode = IFSelect_ShortByItem;
    reader.PrintCheckLoad(false, mode);

    //count number of roots to transfer
    Standard_Integer numberOfRoots = reader.NbRootsForTransfer();
    cout << "Number of roots = " << numberOfRoots << endl << endl;

    //transfer roots
    Standard_Integer numberOfRootsTransfered = reader.TransferRoots();
    reader.PrintCheckTransfer(false, mode);
    cout << "Number of roots transfered = " << numberOfRootsTransfered << endl << endl;

    //get list of all entities
    Handle(TColStd_HSequenceOfTransient) list = reader.GiveList();
    cout << "Number of entities = " << list->Length() << endl;

    //get list of ADVANCED_FACE entities
    Handle(TColStd_HSequenceOfTransient) listOfFaces = reader.GiveList("xst-transferrable-roots", "step-type(ADVANCED_FACE)");
    cout << "Number of ADVANCED_FACE entities = " << listOfFaces->Length() << endl;

    getchar();

    return 0;
}
  

Результат, который я получаю, следующий:

  Nb Total:0  for 0 items
Number of roots = 1

Check  : W:COMPOSITE_CURVE: Segments are not connected
  - Nb: 3 :   130267  130273  130279
Check  : W:COMPOSITE_CURVE: Segments were disordered; fixed
  - Nb: 1 :   130279
Check  : W:EDGE_LOOP: Edges were intersecting, corrected
  - Nb: 155 :   166207  166215  166222  166238  166276  .. etc
Check  : W:B_SPLINE_CURVE_WITH_KNOTS: Poor result from projection vertex / curve 3d
  - Nb: 4 :   151531  151531  151532  151532
Check  : W:EDGE_CURVE: Edge was self-intersecting, corrected
  - Nb: 3 :   163318  163502  163502
 Nb Total:166  for 5 items
Number of roots transfered = 1

Number of entities = 1
Number of ADVANCED_FACE entities = 1
  

Проблема в том, что с файлом, который я передаю в качестве аргумента main, я ожидаю получить количество объектов ADVANCED_FACE, намного превышающее 1. Что я делаю не так?