Как я могу изменить базовую геометрию TopoDS_Shape в OpenCASCADE

Я пытаюсь изменить геометрию существующего TopoDS_Shape в OpenCASCADE. Возможное применение — модифицировать край тела без необходимости реконструировать все тело (например, изменить радиус одной крышки цилиндра, сместить контрольную точку на кривой / поверхности 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");

Оригинальная и измененная геометрия, созданная письмом circ а также another_circ
Оригинальная и измененная геометрия

0

Решение

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

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

Как изменить под-фигуры заданной фигуры без копирования

Изменить форму

Замена лица на X лица

Изменить топологию

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]