Salome HOME
Merge branch 'master' of newgeom:newgeom
authorszy <szy@opencascade.com>
Mon, 27 Oct 2014 15:48:46 +0000 (18:48 +0300)
committerszy <szy@opencascade.com>
Mon, 27 Oct 2014 15:48:46 +0000 (18:48 +0300)
Conflicts:
src/GeomAPI/GeomAPI_Shape.h

1  2 
src/FeaturesPlugin/FeaturesPlugin_Extrusion.cpp
src/GeomAPI/GeomAPI_Shape.h
src/Model/Model_ResultBody.cpp
src/ModelAPI/ModelAPI_ResultBody.h

index 737a563b34aeaa54469b29c06045357c45a75d86,0e997edafe6fe27d0eda36920a0cdb026c80a0e9..b49f5885488d020c7618e28923def08d36433ae3
@@@ -42,110 -33,16 +42,112 @@@ void FeaturesPlugin_Extrusion::execute(
        ModelAPI_AttributeSelection>(data()->attribute(FeaturesPlugin_Extrusion::FACE_ID()));
    if (!aFaceRef)
      return;
 +
    boost::shared_ptr<GeomAPI_Shape> aFace = 
      boost::dynamic_pointer_cast<GeomAPI_Shape>(aFaceRef->value());
+   if (!aFace)
+     return;
  
 +  boost::shared_ptr<GeomAPI_Shape> aContext = 
 +    boost::dynamic_pointer_cast<GeomAPI_Shape>(aFaceRef->context());
 +
    double aSize = data()->real(FeaturesPlugin_Extrusion::SIZE_ID())->value();
    if (data()->boolean(FeaturesPlugin_Extrusion::REVERSE_ID())->value())
      aSize = -aSize;
  
 -  boost::shared_ptr<ModelAPI_ResultBody> aResult = document()->createBody(data());
 -  aResult->store(GeomAlgoAPI_Extrusion::makeExtrusion(aFace, aSize));
 -  setResult(aResult);
 +  boost::shared_ptr<ModelAPI_ResultBody> 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<TopoDS_Shape>().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<ModelAPI_ResultBody> theResultBody, 
 +                                                               boost::shared_ptr<GeomAPI_Shape> theBasis,
 +                                   boost::shared_ptr<GeomAPI_Shape> theContext)
 +{  
 +
 +      
 +    //load result
 +      if(theBasis->impl<TopoDS_Shape>().IsEqual(theContext->impl<TopoDS_Shape>()))
 +        theResultBody->store(theFeature.shape());
 +      else
 +        theResultBody->storeGenerated(theContext, theFeature.shape());
 +
 +      TopTools_DataMapOfShapeShape aSubShapes;
 +      for (TopExp_Explorer Exp(theFeature.shape()->impl<TopoDS_Shape>(),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<TopoDS_Shape>(), TopAbs_EDGE);
 +  for (; aShapeExplorer.More(); aShapeExplorer.Next ()) {
 +    const TopoDS_Shape& aRoot = aShapeExplorer.Current ();
 +    if (!aView.Add(aRoot)) continue;
 +      boost::shared_ptr<GeomAPI_Shape> aRootG(new GeomAPI_Shape());
 +      aRootG->setImpl((void *)&aRoot);
 +      const ListOfShape& aShapes = theFeature.generated(aRootG);
 +      std::list<boost::shared_ptr<GeomAPI_Shape> >::const_iterator anIt = aShapes.begin(), aLast = aShapes.end();       
 +      for (; anIt != aLast; anIt++) {
 +      TopoDS_Shape aNewShape = (*anIt)->impl<TopoDS_Shape>(); 
 +      if (aSubShapes.IsBound(aNewShape)) {
 +        aNewShape.Orientation((aSubShapes(aNewShape)).Orientation());
 +      }
 +
 +        if (!aRoot.IsSame (aNewShape)) {
 +              boost::shared_ptr<GeomAPI_Shape> aNew(new GeomAPI_Shape());
 +          aNew->setImpl((void *)&aNewShape);
 +                theResultBody->generated(aRootG, aNew,_LATERAL_TAG); 
 +        }
 +      }
 +  }
 +
 +  //Insert bottom face
 +  const boost::shared_ptr<GeomAPI_Shape>& aBottomFace = theFeature.firstShape();
 +  if (!aBottomFace->impl<TopoDS_Shape>().IsNull()) {
 +        if (aSubShapes.IsBound(aBottomFace->impl<TopoDS_Shape>())) {
 +              aBottomFace->setImpl((void *)&aSubShapes(aBottomFace->impl<TopoDS_Shape>()));
 +        }    
 +  theResultBody->generated(aBottomFace, _FIRST_TAG);
 +  }
 +
 +  
 +
 + //Insert top face
 +  boost::shared_ptr<GeomAPI_Shape> aTopFace = theFeature.lastShape();
 +  if (!aTopFace->impl<TopoDS_Shape>().IsNull()) {
 +      if (aSubShapes.IsBound(aTopFace->impl<TopoDS_Shape>())) {
 +              aTopFace->setImpl((void *)&aSubShapes(aTopFace->impl<TopoDS_Shape>()));
 +      }
 +    theResultBody->generated(aTopFace, _FIRST_TAG);
 +  }
 +
- }
+ }
index acd39c6ec400dbcb37e0d388790647f2e11d6dec,96db714562f42983e3730546629d62bb049c306e..55db3759aec02a5e3cc56653910723489a845365
@@@ -32,5 -31,7 +32,11 @@@ class GEOMAPI_EXPORT GeomAPI_Shape : pu
  
  };
  
++<<<<<<< HEAD
 +typedef std::list<boost::shared_ptr<GeomAPI_Shape>> ListOfShape;
++=======
+ //! Pointer on attribute object
+ typedef boost::shared_ptr<GeomAPI_Shape> GeomShapePtr;
++>>>>>>> 01cda8378dd1cff425f88438e8c0085122ed7495
  #endif
Simple merge
Simple merge