2017-01-11 13 views
0

Я пытаюсь изменить геометрию существующей TopoDS_Shape в OpenCASCADE. Возможное применение заключается в модификации края тела без необходимости реконструировать все тело (например, изменить радиус одной крышки цилиндра, сдвинуть контрольную точку на кривой Bspline/поверхность).Как изменить базовую геометрию TopoDS_Shape в OpenCASCADE

  • Есть ли стандартный подход для этого в 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"); 

Оригинал и модифицированная геометрия, созданная в письменной форме circ и another_circ Original and modified geometry

ответ

1

Как я понял из форума OpenCASCADE и документации вы не можете изменить в subshapes от формы непосредственно. Но вы можете создать новую подзапись и заменить старый.

См. Ниже разделы форума OpenCASCADE. Надеюсь, поможет.

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

Modify shape

Replacing a face with X faces

Edit topology