
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
}
}