Мне нужно читать простые файлы шагов (поворотные части) с C ++. Поэтому я стараюсь использовать Open Cascade. Я уже могу открыть свой файл шага и прочитать количество фигур в моем файле. Теперь мне нужно получить геометрические данные (длина, ширина, диаметры …), но я не знаю, как это работает, хотя я читаю всю документацию.
Есть ли кто-нибудь, кто уже работал с Open Cascade и может помочь мне с моей проблемой? Я был бы очень счастлив, большое спасибо !!
Это мой код с тех пор
#include <iostream>
#include <STEPControl_Reader.hxx>
#include <string>
using namespace std;int main() {
STEPControl_Reader reader;
IFSelect_ReturnStatus stat = reader.ReadFile("C:\\Users\\Kelevradesktop.Kelevra-desktop\\Desktop\\Studienarbeit\\steptest.step");
IFSelect_PrintCount mode = IFSelect_ListByItem;
reader.PrintCheckLoad(false, mode);
Standard_Integer NbRoots = reader.NbRootsForTransfer(); //Transfer whole file
Standard_Integer num = reader.TransferRoots();
Standard_Integer NbTrans = reader.TransferRoots();
TopoDS_Shape result = reader.OneShape();
TopoDS_Shape shape = reader.Shape();cout << NbRoots << endl;
cout << NbTrans << endl;
cout << num << endl;
system("pause");
return 0;
}
Проверьте исходный код FreeCad. Они используют OpenCascade и могут импортировать step и iges. Это должно помочь вам начать. Функция ImportStepParts (…) в https://github.com/FreeCAD/FreeCAD/blob/master/src/Mod/Part/App/ImportStep.cpp это то, что вы ищете.
использование TopExpExplorer
класс для итерации по объектам (вершинам, ребрам, граням ..) фигуры. Итерирующий пример, который вы можете найти в этом руководство.
использование GProp_GProps
учебный класс чтобы получить свойства формы. Пример:
GProp_GProps propertiesSystemFace;
BRepGProp::VolumeProperties(shape, propertiesSystemFace);
double shapeVolume = propertiesSystemFace.Mass();
gp_Pnt centerOfMass = propertiesSystemFace.CentreOfMass();
Также вы можете конвертировать TopoDS_Edge
в кривая объект, чтобы получить некоторые другие параметры в соответствии с типом ребра:
BRepAdaptor_Curve adaptCrv = BRepAdaptor_Curve(edge);