
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 поддерживает адаптивную генерацию сеток с контролем точности тесселяции ребер и граней. Разработчики могут создавать конечноправильные (finite element) сетки для 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
}
}