Как выполнить сечение CAD-модели
Вопрос от нашего читателя Дмитрия:
Ваши рассуждения верны. Пакет HLR (Hidden Line Removal) библиотеки OpenCascade позволяет получить проекцию видимых очертаний детали на некоторую плоскость. На самом деле есть два алгоритма: HLRBRep_Algo и HLRBRep_PolyAlgo. Первый работает на криволинейном представлении детали, второй — на ее полигонах. Ходят слухи (сам не проверял), что полигональная версия надежнее.
Работа с HLR требует привлечения трех классов:
- HLRBRep_PolyAlgo — собственно алгоритм HLR.
- HLRAlgo_Projector — описывает плоскость проекции.
- HLRBRep_PolyHLRToShape — позволяет извлечь результат как топологическую структуру данных (TopoDS).
Код, приведенный ниже, демонстрирует использование алгоритма в C++.
// Inputs: TopoDS_Shape partShape = ...; // Your TopoDS_Shape. gp_Ax2 axes = ...; // Your projection plane. // Prepare projector. HLRAlgo_Projector projector(axes); // Prepare polygonal HLR algorithm which is known to be more reliable than // the "curved" version of HLR. Handle(HLRBRep_PolyAlgo) polyAlgo = new HLRBRep_PolyAlgo; // polyAlgo->Projector(projector); polyAlgo->Load(partShape); polyAlgo->Update(); // Create topological entities. HLRBRep_PolyHLRToShape HLRToShape; HLRToShape.Update(polyAlgo); // Prepare one compound shape to store HLR results. TopoDS_Compound hlrShape; BRep_Builder().MakeCompound(hlrShape); // Add visible edges to the result. TopoDS_Shape vcompound = HLRToShape.VCompound(); if ( !vcompound.IsNull() ) BRep_Builder().Add(hlrShape, vcompound); // vcompound = HLRToShape.OutLineVCompound(); if ( !vcompound.IsNull() ) BRep_Builder().Add(hlrShape, vcompound);
Переменная hlrShape хранит результат в виде неупорядоченного набора ребер. Эти ребра представлены двумерными параметрическими прямыми, определенными в плоскости проекции.
Ниже приведен сценарий построения плоского сечения в программе «Анализ Положения» (начиная с версии 0.2.6) для тестовой модели ANC101:
# Load sample part. set dir [pwd] clear load-brep $dir/data/cad/ANC101.brep fit # Cut with Boolean operation. set-as-var body make-box tool -25 -25 -25 500 125 250 cut clipped body tool donly clipped set-as-part clipped # Compute HLR. hlr proj 0 0 0 0 -1 0
Инструменты OpenCascade решают чисто геометрическую задачу о нахождении видимых ребер. Алгоритм HLR не наносит штриховок и не рисует осевые линии. Его следует рассматривать только как часть решения проблемы построения чертежей.