将 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
计算出传递给它的形状的边界框,然后我们得到边界框在每个方向上的最大值和最小值并向中心移动。
我正在处理步骤文件 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
计算出传递给它的形状的边界框,然后我们得到边界框在每个方向上的最大值和最小值并向中心移动。