如何在OpenCASCADE中更改TopoDS_Shape的基础几何体

时间:2017-01-11 13:36:20

标签: c++ geometry cad opencascade

我正在尝试在OpenCASCADE中更改现有TopoDS_Shape的几何图形。可能的应用是修改身体的边缘而无需重建整个身体(例如,改变圆柱体的一个帽的半径,在Bspline曲线/表面中移动控制点)。

  • OpenCASCADE中是否有标准的方法来执行此操作?
  • 是否可以在不创建新形状的情况下更新几何体?

我已经尝试使用BRepAdaptor_HCurve,但这并没有真正帮助。

Handle(Geom_Circle) aCircle = new Geom_Circle(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), 5); // create a circle in the xy plane, origin (0,0,0) radius 5;
TopoDS_Edge circ = BRepBuilderAPI_MakeEdge(aCircle); // switch to topological description;

STEPControl_Writer writer;

writer.Transfer(circ,STEPControl_AsIs); // access topology for output   

BRepAdaptor_Curve theAdaptor = BRepAdaptor_Curve(circ); // create an adaptor    
gp_Circ mod_circ = theAdaptor.Circle();
mod_circ.SetRadius(1); // change radius to 1

// I dont want to create a new circle, but reuse the old one with the updated geometry:
// writer.Transfer(circ, STEPControl_AsIs); // access topology for output

// in order to output the updated geometry, we also have to create a new edge
TopoDS_Edge another_circ = BRepBuilderAPI_MakeEdge(mod_circ);

writer.Transfer(another_circ, STEPControl_AsIs); // access topology for output
writer.Write("debug.stp");

通过撰写circanother_circ创建的原始和修改的几何体 Original and modified geometry

1 个答案:

答案 0 :(得分:3)

正如我从OpenCASCADE论坛和文档中所理解的那样,您无法直接更改形状的子形状。但是你可以创建一个新的子形状并替换旧的。

请参阅下面的OpenCASCADE论坛主题。希望它有所帮助。

How to modify sub-shapes of a given shape without copy

Modify shape

Replacing a face with X faces

Edit topology