From: szy Date: Mon, 27 Oct 2014 15:48:46 +0000 (+0300) Subject: Merge branch 'master' of newgeom:newgeom X-Git-Tag: V_0.5~69^2^2~3 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=d9db5498b576854aae37ddf8c0bb6fceb264712e;p=modules%2Fshaper.git Merge branch 'master' of newgeom:newgeom Conflicts: src/GeomAPI/GeomAPI_Shape.h --- d9db5498b576854aae37ddf8c0bb6fceb264712e diff --cc src/FeaturesPlugin/FeaturesPlugin_Extrusion.cpp index 737a563b3,0e997edaf..b49f58854 --- a/src/FeaturesPlugin/FeaturesPlugin_Extrusion.cpp +++ b/src/FeaturesPlugin/FeaturesPlugin_Extrusion.cpp @@@ -42,110 -33,16 +42,112 @@@ void FeaturesPlugin_Extrusion::execute( ModelAPI_AttributeSelection>(data()->attribute(FeaturesPlugin_Extrusion::FACE_ID())); if (!aFaceRef) return; + boost::shared_ptr aFace = boost::dynamic_pointer_cast(aFaceRef->value()); + if (!aFace) + return; + boost::shared_ptr aContext = + boost::dynamic_pointer_cast(aFaceRef->context()); + double aSize = data()->real(FeaturesPlugin_Extrusion::SIZE_ID())->value(); if (data()->boolean(FeaturesPlugin_Extrusion::REVERSE_ID())->value()) aSize = -aSize; - boost::shared_ptr aResult = document()->createBody(data()); - aResult->store(GeomAlgoAPI_Extrusion::makeExtrusion(aFace, aSize)); - setResult(aResult); + boost::shared_ptr aResultBody = document()->createBody(data()); + //TCollection_AsciiString anError; + GeomAlgoAPI_Extrusion aFeature(aFace, aSize); + if(!aFeature.isDone()) { + std::string aFeatureError = "Extrusion algorithm failed"; + Events_Error::send(aFeatureError, this); + return; + } + + // Check if shape is valid + if (!aFeature.shape()->impl().IsNull()) { + std::string aShapeError = "Resulting shape is Null"; + Events_Error::send(aShapeError, this); + #ifdef _DEBUG + std::cerr << aShapeError << std::endl; + #endif + return; + } + if(!aFeature.isValid()) { + std::string aFeatureError = "Warning: resulting shape is not valid"; + Events_Error::send(aFeatureError, this); + return; + } + //LoadNamingDS + LoadNamingDS(aFeature, aResultBody, aFace, aContext); + + setResult(aResultBody); +} + + //============================================================================ +void FeaturesPlugin_Extrusion::LoadNamingDS(GeomAlgoAPI_Extrusion& theFeature, + boost::shared_ptr theResultBody, + boost::shared_ptr theBasis, + boost::shared_ptr theContext) +{ + + + //load result + if(theBasis->impl().IsEqual(theContext->impl())) + theResultBody->store(theFeature.shape()); + else + theResultBody->storeGenerated(theContext, theFeature.shape()); + + TopTools_DataMapOfShapeShape aSubShapes; + for (TopExp_Explorer Exp(theFeature.shape()->impl(),TopAbs_FACE); Exp.More(); Exp.Next()) { + aSubShapes.Bind(Exp.Current(),Exp.Current()); + } + + //Insert lateral face : Face from Edge + //GeomAlgoAPI_DFLoader::loadAndOrientGeneratedShapes(*myBuilder, myBasis, TopAbs_EDGE, aLateralFaceBuilder, aSubShapes); + + + TopTools_MapOfShape aView; + TopExp_Explorer aShapeExplorer (theFeature.shape()->impl(), TopAbs_EDGE); + for (; aShapeExplorer.More(); aShapeExplorer.Next ()) { + const TopoDS_Shape& aRoot = aShapeExplorer.Current (); + if (!aView.Add(aRoot)) continue; + boost::shared_ptr aRootG(new GeomAPI_Shape()); + aRootG->setImpl((void *)&aRoot); + const ListOfShape& aShapes = theFeature.generated(aRootG); + std::list >::const_iterator anIt = aShapes.begin(), aLast = aShapes.end(); + for (; anIt != aLast; anIt++) { + TopoDS_Shape aNewShape = (*anIt)->impl(); + if (aSubShapes.IsBound(aNewShape)) { + aNewShape.Orientation((aSubShapes(aNewShape)).Orientation()); + } + + if (!aRoot.IsSame (aNewShape)) { + boost::shared_ptr aNew(new GeomAPI_Shape()); + aNew->setImpl((void *)&aNewShape); + theResultBody->generated(aRootG, aNew,_LATERAL_TAG); + } + } + } + + //Insert bottom face + const boost::shared_ptr& aBottomFace = theFeature.firstShape(); + if (!aBottomFace->impl().IsNull()) { + if (aSubShapes.IsBound(aBottomFace->impl())) { + aBottomFace->setImpl((void *)&aSubShapes(aBottomFace->impl())); + } + theResultBody->generated(aBottomFace, _FIRST_TAG); + } + + + + //Insert top face + boost::shared_ptr aTopFace = theFeature.lastShape(); + if (!aTopFace->impl().IsNull()) { + if (aSubShapes.IsBound(aTopFace->impl())) { + aTopFace->setImpl((void *)&aSubShapes(aTopFace->impl())); + } + theResultBody->generated(aTopFace, _FIRST_TAG); + } + - } + } diff --cc src/GeomAPI/GeomAPI_Shape.h index acd39c6ec,96db71456..55db3759a --- a/src/GeomAPI/GeomAPI_Shape.h +++ b/src/GeomAPI/GeomAPI_Shape.h @@@ -32,5 -31,7 +32,11 @@@ class GEOMAPI_EXPORT GeomAPI_Shape : pu }; ++<<<<<<< HEAD +typedef std::list> ListOfShape; ++======= + //! Pointer on attribute object + typedef boost::shared_ptr GeomShapePtr; + ++>>>>>>> 01cda8378dd1cff425f88438e8c0085122ed7495 #endif