首页 > 解决方案 > 如何在 OpenCASCADE 上创建浮雕和雕刻文字

问题描述

我正在搜索用于在我的 AIS_Shape 上创建浮雕文本的 API,如果没有更好的 API 可以做到这一点?,我正在考虑创建文本拉伸并使用 AIS_Shape 进行剪切操作,我们可以挤出文本吗?

标签: opencascade

解决方案


OCCT 不提供定义浮雕文本的直接工具 - 所以你是对的,你必须使用一般的布尔运算来做到这一点。

可以在 Draw Harness 附带的标准示例中找到一个总体思路 - 查看“建模”->“OCCT 教程瓶示例”示例 ( source $env(CSF_OCCTSamplesPath)/tcl/bottle.tcl):

Draw Harness 中的瓶子演示

使用工具:

  • Font_BRepFont加载字体并将字形转换为平面TopoDS_Shape
  • Font_BRepTextBuilder使用 . 格式化文本Font_BRepFont
  • BRepPrimAPI_MakePrism从文本定义实体。
  • BRepAlgoAPI_Cut在文本实体和另一个形状之间执行布尔运算。

这是一个伪代码:

  // text2brep
  const double aFontHeight = 20.0;
  Font_BRepFont aFont (Font_NOF_SANS_SERIF, Font_FontAspect_Bold, aFontHeight);
  Font_BRepTextBuilder aBuilder;
  TopoDS_Shape aTextShape2d = aBuilder.Perform (aFont, "OpenCASCADE");

  // prism
  const double anExtrusion = 5.0;
  BRepPrimAPI_MakePrism aPrismTool (aTextShape2d, gp_Vec (0,0,1) * anExtrusion);
  TopoDS_Shape aTextShape3d = aPrismTool->Shape();
  //aTextShape3d.SetLocation(); // move where needed

  // bopcut
  TopoDS_Shape theMainShape; // defined elsewhere
  BRepAlgoAPI_Cut aCutTool (theMainShape, aTextShape3d);
  if (!aCutTool.IsDone()) { error }
  TopoDS_Shape aResult = aCutTool.Shape();

推荐阅读