我正在尝试更改OpenCASCADE中现有的TopoDS_Shape的几何形状。一种可能的应用是在不重建整个 body 的情况下修改主体的边缘(例如,更改圆柱体一个帽的半径,在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创建的原始和修改的几何
    c++ - 如何在OpenCASCADE中更改TopoDS_Shape的基础几何-LMLPHP

    最佳答案

    从OpenCASCADE论坛和文档中可以了解到,您不能直接更改形状的子形状。但是您可以创建一个新的子形状并替换旧的。

    请参阅下面的OpenCASCADE论坛主题。希望能帮助到你。

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

    Modify shape

    Replacing a face with X faces

    Edit topology

    关于c++ - 如何在OpenCASCADE中更改TopoDS_Shape的基础几何,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41592413/

    10-10 19:12