将 TopoDS_Shape 的中心平移(移动)到原点

Translate (Move) the center of TopoDS_Shape to origin

我正在处理步骤文件 reader,我在其中加载文件并查看其功能。我想要实现的是将步骤文件移向原点,这意味着我希望零件的中心位于原点。

零件的中心是指零件周围的边界框的中心。但是,我在理解如何在 OpenCascade 中执行此操作时遇到了一些问题。这是我认为应该对我有用的一段代码

STEPControl_Reader reader;
IFSelect_ReturnStatus stat = reader.ReadFile(inputFilename.c_str());
reader.NbRootsForTransfer();
reader.TransferRoots();
Handle(TColStd_HSequenceOfTransient) list = reader.GiveList();
reader.TransferList(list)                                                                                                                                                                          
TopoDS_Shape Old_Original_Solid = reader.OneShape();                                                                                                                                                                   
// Translate this shape to center                                                                                                                                                                                      
gp_Trsf trsf;
// TODO: How to fill this? How do I get the bounding box for Old_Original_Solid                                                                                                                                                                                                   
gp_Vec translation;                                                                                                                                                                                                     
trsf.SetTranslation(translation);                                                                                                                                                                                      
BRepBuilderAPI_Transform aBRepTrsf (Old_Original_Solid, aTrsf, Standard_False);                                                                                                                                        
TopoDS_Shape Original_Solid = aBRepTrsf.Shape();  

我已删除此代码中的所有检查和日志。我的具体问题是我的方法(最后 5 行)是否完全正确以及我应该如何填充翻译向量。

谢谢。

我找到了答案,所以这里是答案

Bnd_Box box;
BRepBndLib::Add(Old_Original_Solid, box);
Standard_Real theXmin, theYmin, theZmin, theXmax, theYmax, theZmax;
box.Get(theXmin, theYmin, theZmin, theXmax, theYmax, theZmax);
                                                                                                                                                    
// Translate this shape to center
gp_Trsf trsf;                                                                                                                                                                                                 
trsf.SetTranslation(gp_Vec(-(theXmax + theXmin)*0.5, -(theYmax + theYmin)*0.5, -(theZmax + theZmin)*0.5));

Bnd_Box计算出传递给它的形状的边界框,然后我们得到边界框在每个方向上的最大值和最小值并向中心移动。