
OCCT
Отворена C++ 3D платформа за моделиране и симулация
Създавайте параметрични 3D модели, симулирайте физика и визуализирайте CAD данни чрез отворена C++ библиотека.
Какво е OCCT?
Open CASCADE Technology (OCCT) е мощна платформа с отворен код за софтуерна разработка на C++ за 3D CAD, CAM и CAE приложения. Тя предоставя обширни библиотеки за геометрично моделиране, генериране на мрежи, обмен на данни (STEP, IGES, STL), визуализация и симулация. Проектирана за високоточни инженерни и производствени процеси, OCCT позволява на разработчиците да създават надеждни параметрични инструменти за моделиране, CAD прегледачи и симулационни приложения с индустриални стандарти.
Библиотеката поддържа разширени операции за твърдо моделиране като булеви операции, заобляния, фаски и екструзии, както и моделиране на повърхности, NURBS геометрия и параметрично моделиране на функции. Модулната архитектура на OCCT включва специализирани набори от инструменти за топология, геометрия, визуализация, обмен на данни и приложна рамка, което я прави идеална за разработка на сложен инженеринг софтуер. С активна подкрепа от общността и редовни версии, OCCT служи като основа за множество търговски и изследователски 3D приложения по целия свят.
Започване с OCCT
OCCT се разпространява като отворени C++ библиотеки и може да се инсталира чрез компилация от изходен код или предварително компилирани бинарни файлове. Най‑лесният начин за започване е да изтеглите последната версия от хранилището [OCCT GitHub](https://github.com/Open-Cascade-SAS/OCCT). За потребителите на Linux много дистрибуции предоставят OCCT пакети чрез техните мениджъри на пакети (например `apt install libocct-dev` в Ubuntu). Разработчиците за Windows могат да използват предварително компилирани бинарни файлове или да компилират от изходен код, използвайки CMake и Visual Studio. Официалната документация включва стъпка по стъпка ръководства за изграждане за всички поддържани платформи.
Инсталиране на OCCT чрез пакетен мениджър (Ubuntu/Debian)
sudo apt update
sudo apt install libocct-dev libocct-data-exchange-dev libocct-visualization-devБулеви операции и моделиране на твърди тела
OCCT предоставя мощни булеви операции (обединяване, пресичане, изваждане) за 3D твърди тела, позволявайки създаването на сложни форми от базови примитиви. Неговото топологично ядро поддържа разширени функции като заобляния, фаски, отвори и ребра с висока прецизност. Разработчиците могат да създават параметрични функции, използвайки C++ API и да ги интегрират в CAD работни потоци. Библиотеката ефективно обработва топологични структури от данни, поддържайки както B-Rep, така и конструктивно твърдо геометрично (CSG) моделиране. Това прави OCCT идеален за разработване на инженерни приложения, изискващи прецизни геометрични изчисления и моделиране, базирано на функции.
Извършване на булево обединение на две твърди тела чрез C++
TopoDS_Shape box1 = BRepPrimAPI_MakeBox(10, 10, 10);
TopoDS_Shape box2 = BRepPrimAPI_MakeBox(20, 5, 5);
BRepAlgoAPI_Fuse fuseOp(box1, box2);
if (fuseOp.IsDone()) {
TopoDS_Shape result = fuseOp.Shape();
// Save or visualize result
}Обмен на данни (STEP & IGES)
OCCT включва комплексни модули за обмен на данни, поддържащи ISO‑стандартни формати като STEP (AP203/AP214) и IGES. Тези модули позволяват импортиране и експортиране на CAD модели, като запазват геометрията, топологията, метаданните и продуктовата структура. Четецът/писачът за STEP поддържа пълно съответствие с AP214 за данни от автомобилен и механичен дизайн. Разработчиците могат програмистки да обработват импортираните модели, да извличат лица/ръбове, да модифицират геометрията и да ги експортират отново в различни формати. Тази интероперативност е от съществено значение за CAD сътрудничеството между различни софтуерни екосистеми и осигурява безпроблемна интеграция в съществуващите работни процеси по проектиране.
Импортиране на STEP файл и експортиране като STL чрез C++
Handle(STEPCAFControl_Reader) reader = new STEPCAFControl_Reader();
IFSelect_ReturnStatus status = reader->ReadFile("model.step");
if (status == IFSelect_RetDone) {
Handle(TDocStd_Document) doc;
reader->Transfer(doc);
// Export to STL
STEPCAFControl_Writer writer;
writer.Write("output.stl");
}3D визуализация и рендериране
Визуализационният комплект на OCCT предоставя мощни възможности за 3D рендериране с поддръжка на хардуерно ускорен OpenGL, проследяване на лъчи и напреднало осветление. Разработчиците могат да създават интерактивни CAD прегледачи с инструменти за избор, подчертаване и навигация. Комплектът включва класове за управление на 3D изгледи, обработка на графа на сцената и персонализирани рендеринг конвейери. Функции като анти‑алиасинг, прозрачност и режими за показване на мрежа/скрити линии осигуряват визуализация с професионално качество. Това прави OCCT подходящ за разработване на инженерни визуализационни инструменти, приложения за виртуална реалност и браузъри за резултати от симулации с реално‑времево представяне.
Създаване на интерактивен 3D преглед с OCCT
Handle(V3d_Viewer) aViewer = new V3d_Viewer();
Handle(AIS_InteractiveContext) aContext = new AIS_InteractiveContext(aViewer);
Handle(AIS_Shape) anActor = new AIS_Shape(aShape);
aContext->Display(anActor, Standard_True);
// Enable rotation, zoom, pan
aViewer->InitActiveView();
aViewer->ActiveView()->SetDegenerateModeOn();Генериране на мрежа и анализ
OCCT включва инструменти за генериране на мрежи, които преобразуват B-Rep модели в триангулирани мрежи за симулация и визуализация. Модулът Mesh поддържа адаптивно мрежиране с контрол върху точността на тесселацията на ръбовете и лицата. Разработчиците могат да създават мрежи от крайни елементи за CAE анализ, да изчисляват метрики за качество на мрежата и да извършват операции с мрежата като уточняване и изглаждане. Библиотеката също предоставя инструменти за обмен на данни за мрежи (STL, OBJ) и интеграция с външни FEM решатели. Тази възможност свързва CAD дизайна и процесите на симулация, позволявайки цялостно разработване на приложения за инженерни анализи.
Генериране на мрежа от B-Rep форма чрез C++
BRepMesh_IncrementalMesh aMesh(aShape, 0.01);
// Access mesh data
TopExp_Explorer anExp(aShape, TopAbs_FACE);
for (; anExp.More(); anExp.Next()) {
TopoDS_Face aFace = TopoDS::Face(anExp.Current());
Handle(Poly_Triangulation) aTriangulation =
BRep_Tool::Triangulation(aFace, aLoc);
if (!aTriangulation.IsNull()) {
// Process triangulation nodes and triangles
}
}