-// Copyright (C) 2017-2019 CEA/DEN, EDF R&D
+// Copyright (C) 2017-2022 CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
//
#include "GeomAlgoAPI_Chamfer.h"
+#include "GeomAlgoAPI_DFLoader.h"
#include <BRep_Tool.hxx>
#include <BRepFilletAPI_MakeChamfer.hxx>
//=================================================================================================
GeomAlgoAPI_Chamfer::GeomAlgoAPI_Chamfer(const GeomShapePtr& theBaseSolid,
const ListOfShape& theChamferShapes,
- const std::map<GeomShapePtr, GeomShapePtr> aMapEdgeFace,
+ const std::map<GeomShapePtr, GeomShapePtr> theMapEdgeFace,
const bool performDistances,
- const double aVal1,
- const double aVal2)
+ const double theVal1,
+ const double theVal2)
{
- build(theBaseSolid, theChamferShapes, aMapEdgeFace, performDistances, aVal1, aVal2);
+ build(theBaseSolid, theChamferShapes, theMapEdgeFace, performDistances, theVal1, theVal2);
}
//=================================================================================================
void GeomAlgoAPI_Chamfer::build(const GeomShapePtr& theBaseSolid,
const ListOfShape& theChamferShapes,
- const std::map<GeomShapePtr, GeomShapePtr> aMapEdgeFace,
+ const std::map<GeomShapePtr, GeomShapePtr> theMapEdgeFace,
const bool performDistances,
- const double aVal1,
- const double aVal2)
+ const double theVal1,
+ const double theVal2)
{
TopoDS_Shape aShapeBase = theBaseSolid->impl<TopoDS_Shape>();
TopTools_IndexedDataMapOfShapeListOfShape M;
TopExp::MapShapesAndAncestors(aShapeBase, TopAbs_EDGE, TopAbs_FACE, M);
-
+
// create chamfer builder
BRepFilletAPI_MakeChamfer* aChamferBuilder =
new BRepFilletAPI_MakeChamfer(aShapeBase);
setImpl(aChamferBuilder);
setBuilderType(OCCT_BRepBuilderAPI_MakeShape);
-
+
for (ListOfShape::const_iterator anIt = theChamferShapes.begin();
anIt != theChamferShapes.end(); ++anIt) {
if ((*anIt)->isEdge()) {
TopoDS_Edge E = (*anIt)->impl<TopoDS_Edge>();
- if (aMapEdgeFace.find(*anIt) != aMapEdgeFace.end()) {
- //TopoDS_Face F = (aMapEdgeFace[*anIt])->impl<TopoDS_Face>();
- TopoDS_Face F = (aMapEdgeFace.at(*anIt))->impl<TopoDS_Face>();
- if (!BRepTools::IsReallyClosed(E,F) && !BRep_Tool::Degenerated(E) &&
+ if (theMapEdgeFace.find(*anIt) != theMapEdgeFace.end()) {
+ //TopoDS_Face F = (theMapEdgeFace[*anIt])->impl<TopoDS_Face>();
+ TopoDS_Face F = (theMapEdgeFace.at(*anIt))->impl<TopoDS_Face>();
+ if (!BRepTools::IsReallyClosed(E,F) && !BRep_Tool::Degenerated(E) &&
M.FindFromKey(E).Extent() == 2) {
if (performDistances) {
- aChamferBuilder->Add(aVal1, aVal2, E, F);
+ aChamferBuilder->Add(theVal1, theVal2, E, F);
} else {
- aChamferBuilder->AddDA(aVal1, aVal2 * M_PI / 180., E, F);
+ aChamferBuilder->AddDA(theVal1, theVal2 * M_PI / 180., E, F);
}
}
} else {
const TopTools_ListOfShape& aFacesList = M.FindFromKey(E);
TopoDS_Face F = TopoDS::Face(aFacesList.First());
if (performDistances) {
- aChamferBuilder->Add(aVal1, aVal2, E, F);
+ aChamferBuilder->Add(theVal1, theVal2, E, F);
} else {
- aChamferBuilder->AddDA(aVal1, aVal2 * M_PI / 180., E, F);
+ aChamferBuilder->AddDA(theVal1, theVal2 * M_PI / 180., E, F);
}
}
}
aChamferBuilder->Build();
if (!aChamferBuilder->IsDone())
return;
- const TopoDS_Shape& aResult = aChamferBuilder->Shape();
+ TopoDS_Shape aResult = GeomAlgoAPI_DFLoader::refineResult(aChamferBuilder->Shape());
std::shared_ptr<GeomAPI_Shape> aShape(new GeomAPI_Shape());
aShape->setImpl(new TopoDS_Shape(aResult));