+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+
// File: GeomAlgoAPI_Extrusion.cpp
// Created: 06 Jun 2014
// Author: Artem ZHIDKOV
#include <TopTools_ListIteratorOfListOfShape.hxx>
#include <Precision.hxx>
#include <TDF_TagSource.hxx>
-#include <boost/shared_ptr.hpp>
+#include <memory>
#include <BRepPrimAPI_MakePrism.hxx>
#include <TopoDS_Shape.hxx>
const double tolerance = Precision::Angular();
// Constructor
GeomAlgoAPI_Extrusion::GeomAlgoAPI_Extrusion(
- boost::shared_ptr<GeomAPI_Shape> theBasis, double theSize)
+ std::shared_ptr<GeomAPI_Shape> theBasis, double theSize)
: mySize(theSize), myDone(false), myShape(new GeomAPI_Shape()),
myFirst(new GeomAPI_Shape()), myLast(new GeomAPI_Shape())
{
}
//============================================================================
-void GeomAlgoAPI_Extrusion::build(const boost::shared_ptr<GeomAPI_Shape>& theBasis)
+void GeomAlgoAPI_Extrusion::build(const std::shared_ptr<GeomAPI_Shape>& theBasis)
{
bool isFirstNorm = true;
gp_Dir aShapeNormal;
-
TopoDS_Face aBasis = TopoDS::Face(theBasis->impl<TopoDS_Shape>());
Handle(Geom_Plane) aPlane = Handle(Geom_Plane)::DownCast(
BRep_Tool::Surface(aBasis));
if(aBuilder) {
setImpl(aBuilder);
myDone = aBuilder->IsDone() == Standard_True;
- if (myDone) {
- BRepCheck_Analyzer aChecker(aBuilder->Shape());
- myDone = aChecker.IsValid() == Standard_True;
- }
- if(myDone) {
+ if (myDone) {
TopoDS_Shape aResult;
if(aBuilder->Shape().ShapeType() == TopAbs_COMPOUND)
aResult = GeomAlgoAPI_DFLoader::refineResult(aBuilder->Shape());
else
aResult = aBuilder->Shape();
-
- for (TopExp_Explorer Exp(aResult,TopAbs_FACE); Exp.More(); Exp.Next()) {
- boost::shared_ptr<GeomAPI_Shape> aCurrentShape(new GeomAPI_Shape());
- aCurrentShape->setImpl(new TopoDS_Shape(Exp.Current()));
- myMap.bind(aCurrentShape, aCurrentShape);
- }
-
+ // fill data map to keep correct orientation of sub-shapes
+ for (TopExp_Explorer Exp(aResult,TopAbs_FACE); Exp.More(); Exp.Next()) {
+ std::shared_ptr<GeomAPI_Shape> aCurrentShape(new GeomAPI_Shape());
+ aCurrentShape->setImpl(new TopoDS_Shape(Exp.Current()));
+ myMap.bind(aCurrentShape, aCurrentShape);
+ }
myShape->setImpl(new TopoDS_Shape(aResult));
myFirst->setImpl(new TopoDS_Shape(aBuilder->FirstShape()));
myLast->setImpl(new TopoDS_Shape(aBuilder-> LastShape()));
myMkShape = new GeomAlgoAPI_MakeShape (aBuilder);
- }
- }
+ }
+ }
}
//============================================================================
//============================================================================
const bool GeomAlgoAPI_Extrusion::isValid() const
{
- return myDone;
+ BRepCheck_Analyzer aChecker(myShape->impl<TopoDS_Shape>());
+ return (aChecker.IsValid() == Standard_True);
}
//============================================================================
}
//============================================================================
-const boost::shared_ptr<GeomAPI_Shape>& GeomAlgoAPI_Extrusion::shape () const
-{return myShape;}
-
-//============================================================================
-/*void GeomAlgoAPI_Extrusion::generated(
- const boost::shared_ptr<GeomAPI_Shape> theShape, ListOfShape& theHistory)
+const std::shared_ptr<GeomAPI_Shape>& GeomAlgoAPI_Extrusion::shape () const
{
- theHistory.clear();
- if(myDone) {
- const TopTools_ListOfShape& aList = implPtr<BRepPrimAPI_MakePrism>()
- ->Generated(theShape->impl<TopoDS_Shape>());
- TopTools_ListIteratorOfListOfShape it(aList);
- for(;it.More();it.Next()) {
- boost::shared_ptr<GeomAPI_Shape> aShape(new GeomAPI_Shape());
- aShape->setImpl(&(it.Value()));
- theHistory.push_back(aShape);
- }
- }
+ return myShape;
}
-*/
+
//============================================================================
-const boost::shared_ptr<GeomAPI_Shape>& GeomAlgoAPI_Extrusion::firstShape()
+const std::shared_ptr<GeomAPI_Shape>& GeomAlgoAPI_Extrusion::firstShape()
{
return myFirst;
}
//============================================================================
-const boost::shared_ptr<GeomAPI_Shape>& GeomAlgoAPI_Extrusion::lastShape()
+const std::shared_ptr<GeomAPI_Shape>& GeomAlgoAPI_Extrusion::lastShape()
{
return myLast;
}
{
if (myImpl) {
myMap.clear();
- //delete myImpl;
}
}
\ No newline at end of file