X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FGEOMImpl%2FGEOMImpl_IShapesOperations.cxx;h=12b7f46924e6a38c045eab0e40e1321325ecd534;hb=11cbc17d51c4ea7226b75d501ea7d5ca2a1e1480;hp=c02c13f4d9aa161988aa3d65842f588ec1c79ff8;hpb=ef5ed77d707e6ad392684ff83d213296781ffd07;p=modules%2Fgeom.git diff --git a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx index c02c13f4d..12b7f4692 100644 --- a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -77,7 +77,6 @@ #include #include #include -#include #include #include #include @@ -90,6 +89,7 @@ #include #include #include +#include #include #include #include @@ -105,6 +105,14 @@ #include #include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC +// VSR 29/08/2017: 0023327, 0023428: eliminate unnecessary lines in Python dump +// Next macro, when defined, causes appearing of SubShapeAllIDs(), SubShapeAllSortedIDs(), GetSameIDs() +// and other such commands in Python dump. +// See also GEOM_Engine.cxx. +// --------------------------------------- +// #define DUMP_SUBSHAPE_IDS +// --------------------------------------- + namespace { void AddFlatSubShapes(const TopoDS_Shape& S, TopTools_ListOfShape& L, TopTools_MapOfShape& M) @@ -115,9 +123,9 @@ namespace { else { TopoDS_Iterator It(S, Standard_True, Standard_True); for (; It.More(); It.Next()) { - TopoDS_Shape SS = It.Value(); - if (M.Add(SS)) - AddFlatSubShapes(SS, L, M); + TopoDS_Shape SS = It.Value(); + if (M.Add(SS)) + AddFlatSubShapes(SS, L, M); } } } @@ -131,7 +139,7 @@ namespace * \brief Returns the vertex from theWhere shape that is coincident with * theVertex. * - * \param theWhere the shape where the coinsident vertex is searched. + * \param theWhere the shape where the coincident vertex is searched. * \param theVertex the vertex to be searched. * \return the coincident vertex if it is found. Otherwise null object. */ @@ -168,8 +176,8 @@ namespace * constructor: */ //============================================================================= -GEOMImpl_IShapesOperations::GEOMImpl_IShapesOperations (GEOM_Engine* theEngine, int theDocID) -: GEOM_IOperations(theEngine, theDocID) +GEOMImpl_IShapesOperations::GEOMImpl_IShapesOperations (GEOM_Engine* theEngine) +: GEOM_IOperations(theEngine) { MESSAGE("GEOMImpl_IShapesOperations::GEOMImpl_IShapesOperations"); } @@ -197,7 +205,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeEdge if (thePnt1.IsNull() || thePnt2.IsNull()) return NULL; //Add a new Edge object - Handle(GEOM_Object) anEdge = GetEngine()->AddObject(GetDocID(), GEOM_EDGE); + Handle(GEOM_Object) anEdge = GetEngine()->AddObject(GEOM_EDGE); //Add a new Vector function Handle(GEOM_Function) aFunction = @@ -223,9 +231,8 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeEdge return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); return NULL; } @@ -252,7 +259,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeEdgeOnCurveByLength if (theRefCurve.IsNull()) return NULL; //Add a new Edge object - Handle(GEOM_Object) anEdge = GetEngine()->AddObject(GetDocID(), GEOM_EDGE); + Handle(GEOM_Object) anEdge = GetEngine()->AddObject(GEOM_EDGE); //Add a new Vector function Handle(GEOM_Function) aFunction = @@ -282,9 +289,8 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeEdgeOnCurveByLength return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); return NULL; } @@ -311,7 +317,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeEdgeWire if (theWire.IsNull()) return NULL; //Add a new Edge object - Handle(GEOM_Object) anEdge = GetEngine()->AddObject(GetDocID(), GEOM_EDGE); + Handle(GEOM_Object) anEdge = GetEngine()->AddObject(GEOM_EDGE); //Add a new Vector function Handle(GEOM_Function) aFunction = @@ -338,9 +344,8 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeEdgeWire return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); return NULL; } @@ -377,7 +382,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeWire SetErrorCode(KO); //Add a new object - Handle(GEOM_Object) aWire = GetEngine()->AddObject(GetDocID(), GEOM_WIRE); + Handle(GEOM_Object) aWire = GetEngine()->AddObject(GEOM_WIRE); //Add a new function Handle(GEOM_Function) aFunction = @@ -412,9 +417,8 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeWire return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); return NULL; } @@ -449,7 +453,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeFace (Handle(GEOM_Object) th if (theWire.IsNull()) return NULL; //Add a new Face object - Handle(GEOM_Object) aFace = GetEngine()->AddObject(GetDocID(), GEOM_FACE); + Handle(GEOM_Object) aFace = GetEngine()->AddObject(GEOM_FACE); //Add a new Shape function for creation of a face from a wire Handle(GEOM_Function) aFunction = @@ -477,9 +481,8 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeFace (Handle(GEOM_Object) th return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); // to provide warning if (!aFunction->GetValue().IsNull()) { isWarning = Standard_True; @@ -509,7 +512,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeFaceWires SetErrorCode(KO); //Add a new object - Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), GEOM_FACE); + Handle(GEOM_Object) aShape = GetEngine()->AddObject(GEOM_FACE); //Add a new function Handle(GEOM_Function) aFunction = @@ -546,9 +549,8 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeFaceWires return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); // to provide warning if (!aFunction->GetValue().IsNull()) { isWarning = Standard_True; @@ -588,7 +590,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeFaceFromSurface SetErrorCode(KO); //Add a new object - Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), GEOM_FACE); + Handle(GEOM_Object) aShape = GetEngine()->AddObject(GEOM_FACE); //Add a new function Handle(GEOM_Function) aFunction = @@ -632,9 +634,8 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeFaceFromSurface return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); return NULL; } @@ -658,7 +659,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeFaceWithConstraints SetErrorCode(KO); //Add a new object - Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), GEOM_FILLING); + Handle(GEOM_Object) aShape = GetEngine()->AddObject(GEOM_FILLING); //Add a new function Handle(GEOM_Function) aFunction = @@ -720,9 +721,8 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeFaceWithConstraints return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); // to provide warning if (!aFunction->GetValue().IsNull()) { isWarning = Standard_True; @@ -799,7 +799,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeShape SetErrorCode(KO); //Add a new object - Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), theObjectType); + Handle(GEOM_Object) aShape = GetEngine()->AddObject(theObjectType); //Add a new function Handle(GEOM_Function) aFunction = @@ -833,9 +833,8 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeShape return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); return NULL; } @@ -869,7 +868,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeSolidFromConnectedFaces SetErrorCode(KO); //Add a new object - Handle(GEOM_Object) aSolid = GetEngine()->AddObject(GetDocID(), GEOM_SOLID); + Handle(GEOM_Object) aSolid = GetEngine()->AddObject(GEOM_SOLID); //Add a new function Handle(GEOM_Function) aFunction = @@ -904,9 +903,8 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeSolidFromConnectedFaces return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); return NULL; } @@ -947,7 +945,7 @@ GEOMImpl_IShapesOperations::MakeGlueFaces (std::list< Handle(GEOM_Object) >& the } //Add a new Glued object - Handle(GEOM_Object) aGlued = GetEngine()->AddObject(GetDocID(), GEOM_GLUED); + Handle(GEOM_Object) aGlued = GetEngine()->AddObject(GEOM_GLUED); //Add a new Glue function Handle(GEOM_Function) aFunction; @@ -972,9 +970,8 @@ GEOMImpl_IShapesOperations::MakeGlueFaces (std::list< Handle(GEOM_Object) >& the return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); // to provide warning if (!aFunction->GetValue().IsNull()) { isWarning = Standard_True; @@ -1095,7 +1092,7 @@ GEOMImpl_IShapesOperations::MakeGlueFacesByList(std::list< Handle(GEOM_Object) > } //Add a new Glued object - Handle(GEOM_Object) aGlued = GetEngine()->AddObject(GetDocID(), GEOM_GLUED); + Handle(GEOM_Object) aGlued = GetEngine()->AddObject(GEOM_GLUED); //Add a new Glue function Handle(GEOM_Function) aFunction; @@ -1122,9 +1119,8 @@ GEOMImpl_IShapesOperations::MakeGlueFacesByList(std::list< Handle(GEOM_Object) > return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); // to provide warning if (!aFunction->GetValue().IsNull()) { isWarning = Standard_True; @@ -1163,7 +1159,7 @@ GEOMImpl_IShapesOperations::MakeGlueEdges (std::list< Handle(GEOM_Object) >& the } //Add a new Glued object - Handle(GEOM_Object) aGlued = GetEngine()->AddObject(GetDocID(), GEOM_GLUED); + Handle(GEOM_Object) aGlued = GetEngine()->AddObject(GEOM_GLUED); //Add a new Glue function Handle(GEOM_Function) aFunction; @@ -1188,9 +1184,8 @@ GEOMImpl_IShapesOperations::MakeGlueEdges (std::list< Handle(GEOM_Object) >& the return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); // to provide warning if (!aFunction->GetValue().IsNull()) { isWarning = Standard_True; @@ -1223,7 +1218,7 @@ GEOMImpl_IShapesOperations::GetGlueShapes (std::list< Handle(GEOM_Object) >& the TopoDS_Shape aShape; TopTools_SequenceOfShape shapes; std::list< Handle(GEOM_Object) >::iterator s = theShapes.begin(); - Handle(GEOM_Object) lastCreatedGO; + Handle(GEOM_BaseObject) lastCreatedGO; for ( ; s != theShapes.end(); ++s ) { Handle(GEOM_Object) go = *s; @@ -1344,7 +1339,7 @@ GEOMImpl_IShapesOperations::MakeGlueEdgesByList (std::list< Handle(GEOM_Object) return NULL; } //Add a new Glued object - Handle(GEOM_Object) aGlued = GetEngine()->AddObject(GetDocID(), GEOM_GLUED); + Handle(GEOM_Object) aGlued = GetEngine()->AddObject(GEOM_GLUED); //Add a new Glue function Handle(GEOM_Function) aFunction; @@ -1370,9 +1365,8 @@ GEOMImpl_IShapesOperations::MakeGlueEdgesByList (std::list< Handle(GEOM_Object) return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); // to provide warning if (!aFunction->GetValue().IsNull()) { isWarning = Standard_True; @@ -1406,23 +1400,23 @@ GEOMImpl_IShapesOperations::GetExistingSubObjects(Handle(GEOM_Object) theShap Standard_Integer types = theGroupsOnly ? Groups : Groups|SubShapes; Handle(TColStd_HSequenceOfTransient) results = GetExistingSubObjects(theShape, types); + Handle(GEOM_BaseObject) lastCreatedGO = GEOM::GetCreatedLast(results); + lastCreatedGO = GEOM::GetCreatedLast(lastCreatedGO, theShape); + if (results->Length() > 0) { - //Make a Python command - TCollection_AsciiString anAsciiList; - for (int i = 1; i <= results->Length(); i++) + // Make a Python command + GEOM::TPythonDump pd (lastCreatedGO->GetLastFunction(), /*append=*/true); + pd << "["; + Standard_Integer i, aLen = results->Length(); + for (i = 1; i <= aLen; i++) { - Handle(GEOM_BaseObject) obj = Handle(GEOM_BaseObject)::DownCast( results->Value(i)); - obj->GetEntryString(); - if ( i < results->Length() ) - anAsciiList += ","; + Handle(GEOM_BaseObject) obj = Handle(GEOM_BaseObject)::DownCast(results->Value(i)); + pd << obj << ((i < aLen) ? ", " : ""); } - - GEOM::TPythonDump pd (theShape->GetLastFunction(), /*append=*/true); - pd << "[" << anAsciiList.ToCString(); pd << "] = geompy.GetExistingSubObjects("; pd << theShape << ", " << (bool)theGroupsOnly << ")"; } - + return results; } @@ -1452,16 +1446,15 @@ GEOMImpl_IShapesOperations::GetExistingSubObjects(Handle(GEOM_Object) theShap Standard_Integer aStrLen = anEntry.LengthOfCString(); char* anEntryStr = new char[aStrLen+1]; anEntry.ToUTF8CString(anEntryStr); - Handle(GEOM_BaseObject) anObj = GetEngine()->GetObject(GetDocID(), anEntryStr, false); + Handle(GEOM_BaseObject) anObj = GetEngine()->GetObject(anEntryStr, false); if (!anObj.IsNull() ) { bool isGroup = anObj->IsKind(STANDARD_TYPE(GEOM_Object)) && anObj->GetType() == GEOM_GROUP; bool isSubShape = anObj->IsKind(STANDARD_TYPE(GEOM_Object)) && anObj->GetType() != GEOM_GROUP; bool isField = anObj->IsKind(STANDARD_TYPE(GEOM_Field)); - if (theTypes & Groups && isGroup || - theTypes & SubShapes && isSubShape || - theTypes & Fields && isField) { + if ((theTypes & Groups && isGroup ) || + (theTypes & SubShapes && isSubShape ) || + (theTypes & Fields && isField )) aSeq->Append(anObj); - } } delete [] anEntryStr; } @@ -1507,11 +1500,11 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IShapesOperations::MakeExplode for (; It.More(); It.Next()) { TopoDS_Shape SS = It.Value(); if (mapShape.Add(SS)) { - if (theShapeType == TopAbs_FLAT) { + if (theShapeType == TopAbs_FLAT) { AddFlatSubShapes(SS, listShape, mapShape); - } + } else if (theShapeType == TopAbs_SHAPE || theShapeType == SS.ShapeType()) { - listShape.Append(SS); + listShape.Append(SS); } // VSR: for EXPLODE_NEW_INCLUDE_MAIN and EXPLODE_OLD_INCLUDE_MAIN: // it seems it is necessary to add top-level shape if theShapeType == TopAbs_COMPOUND @@ -1553,7 +1546,7 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IShapesOperations::MakeExplode //anObj = GetEngine()->AddSubShape(theShape, anArray); { - anObj = GetEngine()->AddObject(GetDocID(), GEOM_SUBSHAPE); + anObj = GetEngine()->AddObject(GEOM_SUBSHAPE); Handle(GEOM_Function) aFunction = anObj->AddFunction(GEOM_Object::GetSubShapeID(), 1); if (aFunction.IsNull()) return aSeq; @@ -1633,9 +1626,9 @@ Handle(TColStd_HSequenceOfInteger) GEOMImpl_IShapesOperations::SubShapeAllIDs for (; It.More(); It.Next()) { TopoDS_Shape SS = It.Value(); if (mapShape.Add(SS)) { - if (theShapeType == TopAbs_FLAT) { + if (theShapeType == TopAbs_FLAT) { AddFlatSubShapes(SS, listShape, mapShape); - } + } else if (theShapeType == TopAbs_SHAPE || theShapeType == SS.ShapeType()) { listShape.Append(SS); } @@ -1675,6 +1668,8 @@ Handle(TColStd_HSequenceOfInteger) GEOMImpl_IShapesOperations::SubShapeAllIDs Handle(GEOM_Function) aFunction = theShape->GetLastFunction(); + // VSR 29/08/2017: 0023327, 0023428: eliminate unnecessary lines in Python dump +#ifdef DUMP_SUBSHAPE_IDS //Make a Python command GEOM::TPythonDump pd (aFunction, /*append=*/true); pd << "listSubShapeIDs = geompy.SubShapeAll"; @@ -1691,6 +1686,7 @@ Handle(TColStd_HSequenceOfInteger) GEOMImpl_IShapesOperations::SubShapeAllIDs break; default: ; } +#endif // DUMP_SUBSHAPE_IDS SetErrorCode(OK); return aSeq; @@ -1766,7 +1762,7 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IShapesOperations::MakeSubShapes anArray = new TColStd_HArray1OfInteger(1,1); anArray->SetValue(1, id); - anObj = GetEngine()->AddObject(GetDocID(), GEOM_SUBSHAPE); + anObj = GetEngine()->AddObject(GEOM_SUBSHAPE); if (!anObj.IsNull()) { Handle(GEOM_Function) aFunction = anObj->AddFunction(GEOM_Object::GetSubShapeID(), 1); if (aFunction.IsNull()) return aSeq; @@ -2040,10 +2036,12 @@ Standard_Boolean GEOMImpl_IShapesOperations::IsSubShapeBelongsTo( Handle(GEOM_Ob if ( theObjectIndex > 0 ) { TopExp::MapShapes( shape, anIndices ); shape = anIndices.FindKey(theObjectIndex); + anIndices.Clear(); } if ( theSubObjectIndex > 0 ) { TopExp::MapShapes( subShape, anIndices ); subShape = anIndices.FindKey(theSubObjectIndex); + anIndices.Clear(); } TopExp::MapShapes( shape, anIndices ); @@ -2132,9 +2130,8 @@ Standard_Integer GEOMImpl_IShapesOperations::NumberOfSubShapes nbShapes = nbTypes[theShapeType]; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); return -1; } @@ -2155,7 +2152,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::ReverseShape(Handle(GEOM_Object) /* //Add a new reversed object - Handle(GEOM_Object) aReversed = GetEngine()->AddObject(GetDocID(), theShape->GetType()); + Handle(GEOM_Object) aReversed = GetEngine()->AddObject(theShape->GetType()); //Add a new Revese function Handle(GEOM_Function) aFunction; @@ -2180,9 +2177,8 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::ReverseShape(Handle(GEOM_Object) return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); return NULL; } @@ -2201,7 +2197,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::ReverseShape(Handle(GEOM_Object) if (aGen) { GEOMImpl_IHealingOperations* anIHealingOperations = - aGen->GetIHealingOperations(GetDocID()); + aGen->GetIHealingOperations(); aReversed = anIHealingOperations->ChangeOrientationCopy(theShape); SetErrorCode(anIHealingOperations->GetErrorCode()); } @@ -2250,9 +2246,12 @@ Handle(TColStd_HSequenceOfInteger) GEOMImpl_IShapesOperations::GetFreeFacesIDs //The explode doesn't change object so no new function is required. Handle(GEOM_Function) aFunction = theShape->GetLastFunction(); + // VSR 29/08/2017: 0023327, 0023428: eliminate unnecessary lines in Python dump +#ifdef DUMP_SUBSHAPE_IDS //Make a Python command GEOM::TPythonDump(aFunction, /*append=*/true) << "listFreeFacesIDs = geompy.GetFreeFacesIDs(" << theShape << ")"; +#endif // DUMP_SUBSHAPE_IDS SetErrorCode(OK); return aSeq; @@ -2438,7 +2437,7 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IShapesOperations::GetSharedShapes for (; itSel.More(); itSel.Next()) { const TopoDS_Shape& aSS = itSel.Value(); if (mapShape.Add(aSS) ) - aShared.Append(aSS); + aShared.Append(aSS); } } } @@ -2647,7 +2646,7 @@ Handle(TColStd_HSequenceOfInteger) aFinder.SetState(theState); aFinder.Perform(); - // Interprete results + // Interpret results Standard_Integer iErr = aFinder.ErrorStatus(); // the detailed description of error codes is in GEOMAlgo_FinderShapeOn2.cxx if (iErr) { @@ -2712,6 +2711,8 @@ Handle(TColStd_HSequenceOfInteger) // The GetShapesOnBox() doesn't change object so no new function is required. Handle(GEOM_Function) aFunction = GEOM::GetCreatedLast(theShape,theBox)->GetLastFunction(); + // VSR 29/08/2017: 0023327, 0023428: eliminate unnecessary lines in Python dump +#ifdef DUMP_SUBSHAPE_IDS // Make a Python command GEOM::TPythonDump(aFunction, /*append=*/true) << "listShapesOnBoxIDs = geompy.GetShapesOnBoxIDs(" @@ -2719,6 +2720,7 @@ Handle(TColStd_HSequenceOfInteger) << theShape << ", " << TopAbs_ShapeEnum(theShapeType) << ", " << theState << ")"; +#endif // DUMP_SUBSHAPE_IDS SetErrorCode(OK); return aSeqOfIDs; @@ -2836,7 +2838,7 @@ Handle(TColStd_HSequenceOfInteger) aFinder.SetState(theState); aFinder.Perform(); - // Interprete results + // Interpret results Standard_Integer iErr = aFinder.ErrorStatus(); // the detailed description of error codes is in GEOMAlgo_FinderShapeOn2.cxx if (iErr) { @@ -2907,13 +2909,16 @@ Handle(TColStd_HSequenceOfInteger) Handle(GEOM_Function) aFunction = GEOM::GetCreatedLast(theShape,theCheckShape)->GetLastFunction(); + // VSR 29/08/2017: 0023327, 0023428: eliminate unnecessary lines in Python dump +#ifdef DUMP_SUBSHAPE_IDS // Make a Python command GEOM::TPythonDump(aFunction, /*append=*/true) - << "listShapesOnBoxIDs = geompy.GetShapesOnShapeIDs(" + << "listShapesOnShapeIDs = geompy.GetShapesOnShapeIDs(" << theCheckShape << ", " << theShape << ", " << TopAbs_ShapeEnum(theShapeType) << ", " << theState << ")"; +#endif // DUMP_SUBSHAPE_IDS SetErrorCode(OK); return aSeqOfIDs; @@ -3000,7 +3005,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::GetShapesOnShapeAsCompound } //Add a new result object - Handle(GEOM_Object) aRes = GetEngine()->AddObject(GetDocID(), GEOM_SHAPES_ON_SHAPE); + Handle(GEOM_Object) aRes = GetEngine()->AddObject(GEOM_SHAPES_ON_SHAPE); Handle(GEOM_Function) aFunction = aRes->AddFunction(GEOMImpl_ShapeDriver::GetID(), SHAPES_ON_SHAPE); aFunction->SetValue(aCompound); @@ -3182,7 +3187,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeExtraction //Add a new Result object Handle(GEOM_Object) aResult = - GetEngine()->AddObject(GetDocID(), GEOM_EXTRACTION); + GetEngine()->AddObject(GEOM_EXTRACTION); //Add a new Extraction function Handle(GEOM_Function) aFunction = @@ -3213,9 +3218,8 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeExtraction return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); return NULL; } @@ -3303,9 +3307,8 @@ Handle(TColStd_HSequenceOfInteger) VertMax = T; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); return aSeqOfIDs; } // END: Mantis issue 0020961 @@ -3327,14 +3330,14 @@ Handle(TColStd_HSequenceOfInteger) // Default value=3 aFinder.SetNbPntsMin(3); // Sets the maximal number of inner points for edges or faces. - // It is usefull for the cases when this number is very big (e.g =2000) to improve + // It is useful for the cases when this number is very big (e.g =2000) to improve // the performance. If this value =0, all inner points will be taken into account. // Default value=0 aFinder.SetNbPntsMax(100); aFinder.Perform(); - // Interprete results + // Interpret results Standard_Integer iErr = aFinder.ErrorStatus(); // the detailed description of error codes is in GEOMAlgo_FinderShapeOn2.cxx if (iErr) { @@ -3915,10 +3918,13 @@ Handle(TColStd_HSequenceOfInteger) GEOMImpl_IShapesOperations::GetShapesOnPlaneI // The GetShapesOnPlaneIDs() doesn't change object so no new function is required. Handle(GEOM_Function) aFunction = GEOM::GetCreatedLast(theShape,theAx1)->GetLastFunction(); + // VSR 29/08/2017: 0023327, 0023428: eliminate unnecessary lines in Python dump +#ifdef DUMP_SUBSHAPE_IDS // Make a Python command GEOM::TPythonDump(aFunction, /*append=*/true) << "listShapesOnPlane = geompy.GetShapesOnPlaneIDs" << "(" << theShape << "," << aShapeType << "," << theAx1 << "," << theState << ")"; +#endif // DUMP_SUBSHAPE_IDS SetErrorCode(OK); return aSeq; @@ -3982,10 +3988,13 @@ Handle(TColStd_HSequenceOfInteger) GEOMImpl_IShapesOperations::GetShapesOnPlaneW // The GetShapesOnPlaneIDs() doesn't change object so no new function is required. Handle(GEOM_Function) aFunction = GEOM::GetCreatedLast(theShape,theAx1)->GetLastFunction(); + // VSR 29/08/2017: 0023327, 0023428: eliminate unnecessary lines in Python dump +#ifdef DUMP_SUBSHAPE_IDS // Make a Python command GEOM::TPythonDump(aFunction, /*append=*/true) << "listShapesOnPlane = geompy.GetShapesOnPlaneWithLocationIDs" << "(" << theShape << ", " << aShapeType << ", " << theAx1 << ", "<< thePnt << ", " << theState << ")"; +#endif // DUMP_SUBSHAPE_IDS SetErrorCode(OK); return aSeq; @@ -4028,11 +4037,14 @@ Handle(TColStd_HSequenceOfInteger) GEOMImpl_IShapesOperations::GetShapesOnCylind // The GetShapesOnCylinder() doesn't change object so no new function is required. Handle(GEOM_Function) aFunction = GEOM::GetCreatedLast(theShape,theAxis)->GetLastFunction(); + // VSR 29/08/2017: 0023327, 0023428: eliminate unnecessary lines in Python dump +#ifdef DUMP_SUBSHAPE_IDS // Make a Python command GEOM::TPythonDump(aFunction, /*append=*/true) << "listShapesOnCylinder = geompy.GetShapesOnCylinderIDs" << "(" << theShape << ", " << aShapeType << ", " << theAxis << ", " << theRadius << ", " << theState << ")"; +#endif // DUMP_SUBSHAPE_IDS SetErrorCode(OK); return aSeq; @@ -4096,11 +4108,14 @@ Handle(TColStd_HSequenceOfInteger) GEOMImpl_IShapesOperations::GetShapesOnCylind Handle(GEOM_Function) aFunction = GEOM::GetCreatedLast(theShape, GEOM::GetCreatedLast(thePnt,theAxis))->GetLastFunction(); + // VSR 29/08/2017: 0023327, 0023428: eliminate unnecessary lines in Python dump +#ifdef DUMP_SUBSHAPE_IDS // Make a Python command GEOM::TPythonDump(aFunction, /*append=*/true) << "listShapesOnCylinder = geompy.GetShapesOnCylinderWithLocationIDs" << "(" << theShape << ", " << aShapeType << ", " << theAxis << ", " << thePnt << ", " << theRadius << ", " << theState << ")"; +#endif // DUMP_SUBSHAPE_IDS SetErrorCode(OK); return aSeq; @@ -4146,11 +4161,14 @@ Handle(TColStd_HSequenceOfInteger) GEOMImpl_IShapesOperations::GetShapesOnSphere // The GetShapesOnSphere() doesn't change object so no new function is required. Handle(GEOM_Function) aFunction = GEOM::GetCreatedLast(theShape,theCenter)->GetLastFunction(); + // VSR 29/08/2017: 0023327, 0023428: eliminate unnecessary lines in Python dump +#ifdef DUMP_SUBSHAPE_IDS // Make a Python command GEOM::TPythonDump(aFunction, /*append=*/true) - << "listShapesOnCylinder = geompy.GetShapesOnSphereIDs" + << "listShapesOnSphere = geompy.GetShapesOnSphereIDs" << "(" << theShape << ", " << aShapeType << ", " << theCenter << ", " << theRadius << ", " << theState << ")"; +#endif // DUMP_SUBSHAPE_IDS SetErrorCode(OK); return aSeq; @@ -4163,9 +4181,9 @@ Handle(TColStd_HSequenceOfInteger) GEOMImpl_IShapesOperations::GetShapesOnSphere * \param theShape - the shape to explore * \param theShapeType - type of sub-shape of theShape * \param theTopLeftPoint - top left quadrangle corner - * \param theTopRigthPoint - top right quadrangle corner + * \param theTopRightPoint - top right quadrangle corner * \param theBottomLeftPoint - bottom left quadrangle corner - * \param theBottomRigthPoint - bottom right quadrangle corner + * \param theBottomRightPoint - bottom right quadrangle corner * \param theState - required state * \retval Handle(TColStd_HSequenceOfInteger) - IDs of found sub-shapes */ @@ -4174,25 +4192,25 @@ Handle(TColStd_HSequenceOfInteger) GEOMImpl_IShapesOperations::getShapesOnQuadrangleIDs (const Handle(GEOM_Object)& theShape, const Standard_Integer theShapeType, const Handle(GEOM_Object)& theTopLeftPoint, - const Handle(GEOM_Object)& theTopRigthPoint, + const Handle(GEOM_Object)& theTopRightPoint, const Handle(GEOM_Object)& theBottomLeftPoint, - const Handle(GEOM_Object)& theBottomRigthPoint, + const Handle(GEOM_Object)& theBottomRightPoint, const GEOMAlgo_State theState) { SetErrorCode(KO); if ( theShape.IsNull() || theTopLeftPoint.IsNull() || - theTopRigthPoint.IsNull() || + theTopRightPoint.IsNull() || theBottomLeftPoint.IsNull() || - theBottomRigthPoint.IsNull() ) + theBottomRightPoint.IsNull() ) return NULL; TopoDS_Shape aShape = theShape->GetValue(); TopoDS_Shape aTL = theTopLeftPoint->GetValue(); - TopoDS_Shape aTR = theTopRigthPoint->GetValue(); + TopoDS_Shape aTR = theTopRightPoint->GetValue(); TopoDS_Shape aBL = theBottomLeftPoint->GetValue(); - TopoDS_Shape aBR = theBottomRigthPoint->GetValue(); + TopoDS_Shape aBR = theBottomRightPoint->GetValue(); if (aShape.IsNull() || aTL.IsNull() || @@ -4240,14 +4258,14 @@ Handle(TColStd_HSequenceOfInteger) // Default value=3 aFinder.SetNbPntsMin(3); // Sets the maximal number of inner points for edges or faces. - // It is usefull for the cases when this number is very big (e.g =2000) to improve + // It is useful for the cases when this number is very big (e.g =2000) to improve // the performance. If this value =0, all inner points will be taken into account. // Default value=0 aFinder.SetNbPntsMax(100); aFinder.Perform(); - // Interprete results + // Interpret results Standard_Integer iErr = aFinder.ErrorStatus(); // the detailed description of error codes is in GEOMAlgo_FinderShapeOn2.cxx if (iErr) { @@ -4292,9 +4310,9 @@ Handle(TColStd_HSequenceOfInteger) * \param theShape - the shape to explore * \param theShapeType - type of sub-shape of theShape * \param theTopLeftPoint - top left quadrangle corner - * \param theTopRigthPoint - top right quadrangle corner + * \param theTopRightPoint - top right quadrangle corner * \param theBottomLeftPoint - bottom left quadrangle corner - * \param theBottomRigthPoint - bottom right quadrangle corner + * \param theBottomRightPoint - bottom right quadrangle corner * \param theState - required state * \retval Handle(TColStd_HSequenceOfInteger) - IDs of found sub-shapes */ @@ -4303,9 +4321,9 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IShapesOperations::GetShapesOnQuadrangle (const Handle(GEOM_Object)& theShape, const Standard_Integer theShapeType, const Handle(GEOM_Object)& theTopLeftPoint, - const Handle(GEOM_Object)& theTopRigthPoint, + const Handle(GEOM_Object)& theTopRightPoint, const Handle(GEOM_Object)& theBottomLeftPoint, - const Handle(GEOM_Object)& theBottomRigthPoint, + const Handle(GEOM_Object)& theBottomRightPoint, const GEOMAlgo_State theState) { // Find indices @@ -4313,9 +4331,9 @@ Handle(TColStd_HSequenceOfTransient) getShapesOnQuadrangleIDs( theShape, theShapeType, theTopLeftPoint, - theTopRigthPoint, + theTopRightPoint, theBottomLeftPoint, - theBottomRigthPoint, + theBottomRightPoint, theState); if ( aSeqOfIDs.IsNull() || aSeqOfIDs->IsEmpty() ) return NULL; @@ -4337,9 +4355,9 @@ Handle(TColStd_HSequenceOfTransient) << theShape << ", " << TopAbs_ShapeEnum(theShapeType) << ", " << theTopLeftPoint << ", " - << theTopRigthPoint << ", " + << theTopRightPoint << ", " << theBottomLeftPoint << ", " - << theBottomRigthPoint << ", " + << theBottomRightPoint << ", " << theState << ")"; SetErrorCode(OK); @@ -4353,9 +4371,9 @@ Handle(TColStd_HSequenceOfTransient) * \param theShape - the shape to explore * \param theShapeType - type of sub-shape of theShape * \param theTopLeftPoint - top left quadrangle corner - * \param theTopRigthPoint - top right quadrangle corner + * \param theTopRightPoint - top right quadrangle corner * \param theBottomLeftPoint - bottom left quadrangle corner - * \param theBottomRigthPoint - bottom right quadrangle corner + * \param theBottomRightPoint - bottom right quadrangle corner * \param theState - required state * \retval Handle(TColStd_HSequenceOfInteger) - IDs of found sub-shapes */ @@ -4364,9 +4382,9 @@ Handle(TColStd_HSequenceOfInteger) GEOMImpl_IShapesOperations::GetShapesOnQuadrangleIDs (const Handle(GEOM_Object)& theShape, const Standard_Integer theShapeType, const Handle(GEOM_Object)& theTopLeftPoint, - const Handle(GEOM_Object)& theTopRigthPoint, + const Handle(GEOM_Object)& theTopRightPoint, const Handle(GEOM_Object)& theBottomLeftPoint, - const Handle(GEOM_Object)& theBottomRigthPoint, + const Handle(GEOM_Object)& theBottomRightPoint, const GEOMAlgo_State theState) { // Find indices @@ -4374,9 +4392,9 @@ Handle(TColStd_HSequenceOfInteger) getShapesOnQuadrangleIDs( theShape, theShapeType, theTopLeftPoint, - theTopRigthPoint, + theTopRightPoint, theBottomLeftPoint, - theBottomRigthPoint, + theBottomRightPoint, theState); if ( aSeqOfIDs.IsNull() || aSeqOfIDs->IsEmpty() ) return NULL; @@ -4384,21 +4402,24 @@ Handle(TColStd_HSequenceOfInteger) // Make a Python command // The GetShapesOnCylinder() doesn't change object so no new function is required. - Handle(GEOM_Object) lastObj = GEOM::GetCreatedLast(theShape,theTopLeftPoint); - lastObj = GEOM::GetCreatedLast(lastObj,theTopRigthPoint); - lastObj = GEOM::GetCreatedLast(lastObj,theBottomRigthPoint); + Handle(GEOM_BaseObject) lastObj = GEOM::GetCreatedLast(theShape,theTopLeftPoint); + lastObj = GEOM::GetCreatedLast(lastObj,theTopRightPoint); + lastObj = GEOM::GetCreatedLast(lastObj,theBottomRightPoint); lastObj = GEOM::GetCreatedLast(lastObj,theBottomLeftPoint); Handle(GEOM_Function) aFunction = lastObj->GetLastFunction(); + // VSR 29/08/2017: 0023327, 0023428: eliminate unnecessary lines in Python dump +#ifdef DUMP_SUBSHAPE_IDS GEOM::TPythonDump(aFunction, /*append=*/true) << "listShapesOnQuadrangle = geompy.GetShapesOnQuadrangleIDs(" << theShape << ", " << TopAbs_ShapeEnum(theShapeType) << ", " << theTopLeftPoint << ", " - << theTopRigthPoint << ", " + << theTopRightPoint << ", " << theBottomLeftPoint << ", " - << theBottomRigthPoint << ", " + << theBottomRightPoint << ", " << theState << ")"; +#endif // DUMP_SUBSHAPE_IDS SetErrorCode(OK); return aSeqOfIDs; @@ -4444,7 +4465,6 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::GetInPlace (Handle(GEOM_Object) if (aShapeResult.IsNull() == Standard_False) { TopoDS_Iterator anIt(aShapeResult); - Standard_Boolean isFirst = Standard_True; for (; anIt.More(); anIt.Next()) { const TopoDS_Shape &aPart = anIt.Value(); @@ -4697,6 +4717,42 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::GetInPlaceByHistory return aResult; } +//======================================================================= +//function : GetInPlaceMap +//purpose : +//======================================================================= +void GEOMImpl_IShapesOperations::GetInPlaceMap (Handle(GEOM_Object) theShapeWhere, + Handle(GEOM_Object) theShapeWhat, + std::vector< std::vector< int > > & theResVec) +{ + SetErrorCode(KO); + + if (theShapeWhere.IsNull() || theShapeWhat.IsNull()) return; + + TopoDS_Shape aWhere = theShapeWhere->GetValue(); + TopoDS_Shape aWhat = theShapeWhat->GetValue(); + + if (aWhere.IsNull() || aWhat.IsNull()) return; + + Handle(GEOM_Function) aWhereFunction = theShapeWhere->GetLastFunction(); + if (aWhereFunction.IsNull()) return; + + bool isFound = GEOMAlgo_GetInPlaceAPI::GetInPlaceMap( aWhereFunction, aWhat, theResVec ); + + if ( isFound ) + SetErrorCode(OK); + + Handle(GEOM_Function) aFunction = + GEOM::GetCreatedLast(theShapeWhere,theShapeWhat)->GetLastFunction(); + + GEOM::TPythonDump(aFunction, /*append=*/true) + << "resultList = geompy.GetInPlaceMap( " + << theShapeWhere << ", " + << theShapeWhat << ")"; + + return; +} + //======================================================================= //function : isSameEdge //purpose : Returns True if two edges coincide @@ -4740,6 +4796,10 @@ static bool isSameEdge(const TopoDS_Edge& theEdge1, const TopoDS_Edge& theEdge2) gp_Pnt P2 = C1->Value(U); //Compute a point on two thirds of the edge's length C2 = new Geom_TrimmedCurve(C2, U21, U22); + // vsr 04/10/2018: 0023312 - As curve may be periodic, its parameters may be normalized + // so, we re-take them from trimmed curve + U21 = C2->FirstParameter(); + U22 = C2->LastParameter(); if(!GeomLib_Tool::Parameter(C2, P1, MAX_TOLERANCE, U) || U < U21 || U > U22) return false; @@ -4754,7 +4814,6 @@ static bool isSameEdge(const TopoDS_Edge& theEdge1, const TopoDS_Edge& theEdge2) return true; } -#include //======================================================================= //function : isSameFace //purpose : Returns True if two faces coincide @@ -5113,11 +5172,14 @@ Handle(TColStd_HSequenceOfInteger) GEOMImpl_IShapesOperations::GetSameIDs // The GetSameIDs() doesn't change object so no new function is required. Handle(GEOM_Function) aFunction = GEOM::GetCreatedLast(theShapeWhere,theShapeWhat)->GetLastFunction(); + // VSR 29/08/2017: 0023327, 0023428: eliminate unnecessary lines in Python dump +#ifdef DUMP_SUBSHAPE_IDS // Make a Python command GEOM::TPythonDump(aFunction, /*append=*/true) << "listSameIDs = geompy.GetSameIDs(" << theShapeWhere << ", " << theShapeWhat << ")"; +#endif // DUMP_SUBSHAPE_IDS return aSeq; } else { SetErrorCode(NOT_FOUND_ANY); @@ -5141,7 +5203,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::ExtendEdge } //Add a new Edge object - Handle(GEOM_Object) aResEdge = GetEngine()->AddObject(GetDocID(), GEOM_EDGE); + Handle(GEOM_Object) aResEdge = GetEngine()->AddObject(GEOM_EDGE); //Add a new Vector function Handle(GEOM_Function) aFunction = @@ -5173,9 +5235,8 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::ExtendEdge return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); return NULL; } @@ -5208,7 +5269,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::ExtendFace } //Add a new Face object - Handle(GEOM_Object) aResFace = GetEngine()->AddObject(GetDocID(), GEOM_FACE); + Handle(GEOM_Object) aResFace = GetEngine()->AddObject(GEOM_FACE); //Add a new Vector function Handle(GEOM_Function) aFunction = @@ -5242,9 +5303,8 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::ExtendFace return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); return NULL; } @@ -5274,7 +5334,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeSurfaceFromFace } //Add a new Face object - Handle(GEOM_Object) aResFace = GetEngine()->AddObject(GetDocID(), GEOM_FACE); + Handle(GEOM_Object) aResFace = GetEngine()->AddObject(GEOM_FACE); //Add a new Vector function Handle(GEOM_Function) aFunction = @@ -5304,9 +5364,8 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeSurfaceFromFace return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); + catch (Standard_Failure& aFail) { + SetErrorCode(aFail.GetMessageString()); return NULL; }