X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOM_I%2FGEOM_ILocalOperations_i.cc;h=5a174094f24083d0aaaa2ae72bd37cf500851680;hb=8b1511ff6327ae63c450b10e49714d3c83577eda;hp=5b2430e9fc97d052fe0259970752816b825415b0;hpb=9499b99fe2dcb53e1ea364f97986f8f432b04600;p=modules%2Fgeom.git diff --git a/src/GEOM_I/GEOM_ILocalOperations_i.cc b/src/GEOM_I/GEOM_ILocalOperations_i.cc index 5b2430e9f..5a174094f 100644 --- a/src/GEOM_I/GEOM_ILocalOperations_i.cc +++ b/src/GEOM_I/GEOM_ILocalOperations_i.cc @@ -1,22 +1,25 @@ -// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + #include #include "GEOM_ILocalOperations_i.hh" @@ -34,8 +37,8 @@ */ //============================================================================= GEOM_ILocalOperations_i::GEOM_ILocalOperations_i (PortableServer::POA_ptr thePOA, - GEOM::GEOM_Gen_ptr theEngine, - ::GEOMImpl_ILocalOperations* theImpl) + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_ILocalOperations* theImpl) :GEOM_IOperations_i(thePOA, theEngine, theImpl) { MESSAGE("GEOM_ILocalOperations_i::GEOM_ILocalOperations_i"); @@ -62,12 +65,8 @@ GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletAll { GEOM::GEOM_Object_var aGEOMObject; - if (theShape == NULL) return aGEOMObject._retn(); - //Get the reference shape - Handle(GEOM_Object) aShapeRef = GetOperations()->GetEngine()->GetObject - (theShape->GetStudyID(), theShape->GetEntry()); - + Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape); if (aShapeRef.IsNull()) return aGEOMObject._retn(); //Create the Fillet @@ -86,21 +85,18 @@ GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletAll //============================================================================= GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletEdges (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR, - const GEOM::ListOfLong& theEdges) + const GEOM::ListOfLong& theEdges) { GEOM::GEOM_Object_var aGEOMObject; - if (theShape == NULL) return aGEOMObject._retn(); - //Get the reference shape - Handle(GEOM_Object) aShapeRef = GetOperations()->GetEngine()->GetObject - (theShape->GetStudyID(), theShape->GetEntry()); + Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape); if (aShapeRef.IsNull()) return aGEOMObject._retn(); //Get the reference edges int ind = 0; int aLen = theEdges.length(); - list anEdges; + std::list anEdges; for (; ind < aLen; ind++) { anEdges.push_back(theEdges[ind]); } @@ -114,6 +110,38 @@ GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletEdges return GetObject(anObject); } +//============================================================================= +/*! + * MakeFilletEdges R1 R2 + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletEdgesR1R2 + (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR1, + CORBA::Double theR2, const GEOM::ListOfLong& theEdges) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Get the reference shape + Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape); + if (aShapeRef.IsNull()) return aGEOMObject._retn(); + + //Get the reference edges + int ind = 0; + int aLen = theEdges.length(); + std::list anEdges; + for (; ind < aLen; ind++) { + anEdges.push_back(theEdges[ind]); + } + + //Create the Fillet + Handle(GEOM_Object) anObject = + GetOperations()->MakeFilletEdgesR1R2(aShapeRef, theR1, theR2, anEdges); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + //============================================================================= /*! * MakeFilletFaces @@ -121,21 +149,18 @@ GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletEdges //============================================================================= GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletFaces (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR, - const GEOM::ListOfLong& theFaces) + const GEOM::ListOfLong& theFaces) { GEOM::GEOM_Object_var aGEOMObject; - if (theShape == NULL) return aGEOMObject._retn(); - //Get the reference shape - Handle(GEOM_Object) aShapeRef = GetOperations()->GetEngine()->GetObject - (theShape->GetStudyID(), theShape->GetEntry()); + Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape); if (aShapeRef.IsNull()) return aGEOMObject._retn(); //Get the reference faces int ind = 0; int aLen = theFaces.length(); - list aFaces; + std::list aFaces; for (; ind < aLen; ind++) { aFaces.push_back(theFaces[ind]); } @@ -149,6 +174,102 @@ GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletFaces return GetObject(anObject); } +//============================================================================= +/*! + * MakeFilletFaces R1 R2 + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletFacesR1R2 + (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR1, + CORBA::Double theR2, const GEOM::ListOfLong& theFaces) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Get the reference shape + Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape); + if (aShapeRef.IsNull()) return aGEOMObject._retn(); + + //Get the reference faces + int ind = 0; + int aLen = theFaces.length(); + std::list aFaces; + for (; ind < aLen; ind++) { + aFaces.push_back(theFaces[ind]); + } + + //Create the Fillet + Handle(GEOM_Object) anObject = + GetOperations()->MakeFilletFacesR1R2(aShapeRef, theR1, theR2, aFaces); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + +//============================================================================= +/*! + * MakeFillet2D + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFillet2D + (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR, + const GEOM::ListOfLong& theVertexes) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Get the reference shape + Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape); + if (aShapeRef.IsNull()) return aGEOMObject._retn(); + + //Get the reference vertex + int ind = 0; + int aLen = theVertexes.length(); + std::list aVertexes; + for (; ind < aLen; ind++) { + aVertexes.push_back(theVertexes[ind]); + } + + //Create the Fillet + Handle(GEOM_Object) anObject = + GetOperations()->MakeFillet2D(aShapeRef, theR, aVertexes); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + +//============================================================================= +/*! + * MakeFillet1D + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFillet1D + (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR, + const GEOM::ListOfLong& theVertexes) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Get the reference shape (wire) + Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape); + if (aShapeRef.IsNull()) return aGEOMObject._retn(); + + //Get the reference vertex + int ind = 0; + int aLen = theVertexes.length(); + std::list aVertexes; + for (; ind < aLen; ind++) { + aVertexes.push_back(theVertexes[ind]); + } + + //Create the Fillet + Handle(GEOM_Object) anObject = + GetOperations()->MakeFillet1D(aShapeRef, theR, aVertexes); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + //============================================================================= /*! * MakeChamferAll @@ -159,12 +280,8 @@ GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferAll { GEOM::GEOM_Object_var aGEOMObject; - if (theShape == NULL) return aGEOMObject._retn(); - //Get the reference shape - Handle(GEOM_Object) aShapeRef = GetOperations()->GetEngine()->GetObject - (theShape->GetStudyID(), theShape->GetEntry()); - + Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape); if (aShapeRef.IsNull()) return aGEOMObject._retn(); //Create the Chamfer @@ -183,16 +300,13 @@ GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferAll //============================================================================= GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferEdge (GEOM::GEOM_Object_ptr theShape, - CORBA::Double theD1, CORBA::Double theD2, - CORBA::Long theFace1, CORBA::Long theFace2) + CORBA::Double theD1, CORBA::Double theD2, + CORBA::Long theFace1, CORBA::Long theFace2) { GEOM::GEOM_Object_var aGEOMObject; - if (theShape == NULL) return aGEOMObject._retn(); - //Get the reference shape - Handle(GEOM_Object) aShapeRef = GetOperations()->GetEngine()->GetObject - (theShape->GetStudyID(), theShape->GetEntry()); + Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape); if (aShapeRef.IsNull()) return aGEOMObject._retn(); //Create the Chamfer @@ -203,6 +317,30 @@ GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferEdge return GetObject(anObject); } +//============================================================================= +/*! + * MakeChamferEdgeAD + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferEdgeAD + (GEOM::GEOM_Object_ptr theShape, + CORBA::Double theD, CORBA::Double theAngle, + CORBA::Long theFace1, CORBA::Long theFace2) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Get the reference shape + Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape); + if (aShapeRef.IsNull()) return aGEOMObject._retn(); + + //Create the Chamfer + Handle(GEOM_Object) anObject = + GetOperations()->MakeChamferEdgeAD(aShapeRef, theD, theAngle, theFace1, theFace2); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} //============================================================================= /*! @@ -211,22 +349,19 @@ GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferEdge //============================================================================= GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferFaces (GEOM::GEOM_Object_ptr theShape, - CORBA::Double theD1, CORBA::Double theD2, - const GEOM::ListOfLong& theFaces) + CORBA::Double theD1, CORBA::Double theD2, + const GEOM::ListOfLong& theFaces) { GEOM::GEOM_Object_var aGEOMObject; - if (theShape == NULL) return aGEOMObject._retn(); - //Get the reference shape - Handle(GEOM_Object) aShapeRef = GetOperations()->GetEngine()->GetObject - (theShape->GetStudyID(), theShape->GetEntry()); + Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape); if (aShapeRef.IsNull()) return aGEOMObject._retn(); //Get the reference faces int ind = 0; int aLen = theFaces.length(); - list aFaces; + std::list aFaces; for (; ind < aLen; ind++) { aFaces.push_back(theFaces[ind]); } @@ -239,6 +374,104 @@ GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferFaces return GetObject(anObject); } +//============================================================================= +/*! + * MakeChamferFacesAD + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferFacesAD + (GEOM::GEOM_Object_ptr theShape, + CORBA::Double theD, CORBA::Double theAngle, + const GEOM::ListOfLong& theFaces) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Get the reference shape + Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape); + if (aShapeRef.IsNull()) return aGEOMObject._retn(); + + //Get the reference faces + int ind = 0; + int aLen = theFaces.length(); + std::list aFaces; + for (; ind < aLen; ind++) { + aFaces.push_back(theFaces[ind]); + } + + //Create the Chamfer + Handle(GEOM_Object) anObject = + GetOperations()->MakeChamferFacesAD(aShapeRef, theD, theAngle, aFaces); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + +//============================================================================= +/*! + * MakeChamferEdges + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferEdges + (GEOM::GEOM_Object_ptr theShape, + CORBA::Double theD1, CORBA::Double theD2, + const GEOM::ListOfLong& theEdges) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Get the reference shape + Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape); + if (aShapeRef.IsNull()) return aGEOMObject._retn(); + + //Get the reference edges + int ind = 0; + int aLen = theEdges.length(); + std::list aEdges; + for (; ind < aLen; ind++) { + aEdges.push_back(theEdges[ind]); + } + + //Create the Chamfer + Handle(GEOM_Object) anObject = + GetOperations()->MakeChamferEdges(aShapeRef, theD1, theD2, aEdges); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + +//============================================================================= +/*! + * MakeChamferEdgesAD + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferEdgesAD + (GEOM::GEOM_Object_ptr theShape, + CORBA::Double theD, CORBA::Double theAngle, + const GEOM::ListOfLong& theEdges) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Get the reference shape + Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape); + if (aShapeRef.IsNull()) return aGEOMObject._retn(); + + //Get the reference edges + int ind = 0; + int aLen = theEdges.length(); + std::list aEdges; + for (; ind < aLen; ind++) { + aEdges.push_back(theEdges[ind]); + } + + //Create the Chamfer + Handle(GEOM_Object) anObject = + GetOperations()->MakeChamferEdgesAD(aShapeRef, theD, theAngle, aEdges); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} //============================================================================= /*! @@ -246,17 +479,14 @@ GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferFaces */ //============================================================================= GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeArchimede (GEOM::GEOM_Object_ptr theShape, - CORBA::Double theWeight, - CORBA::Double theWaterDensity, - CORBA::Double theMeshingDeflection) + CORBA::Double theWeight, + CORBA::Double theWaterDensity, + CORBA::Double theMeshingDeflection) { GEOM::GEOM_Object_var aGEOMObject; - if (theShape == NULL) return aGEOMObject._retn(); - //Get the reference shape - Handle(GEOM_Object) aShapeRef = GetOperations()->GetEngine()->GetObject - (theShape->GetStudyID(), theShape->GetEntry()); + Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape); if (aShapeRef.IsNull()) return aGEOMObject._retn(); //Create the Archimede @@ -276,13 +506,9 @@ GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeArchimede (GEOM::GEOM_Object_ CORBA::Long GEOM_ILocalOperations_i::GetSubShapeIndex (GEOM::GEOM_Object_ptr theShape, GEOM::GEOM_Object_ptr theSubShape) { - if (theShape == NULL || theSubShape == NULL) return -1; - //Get the reference shapes - Handle(GEOM_Object) aShapeRef = GetOperations()->GetEngine()->GetObject - (theShape->GetStudyID(), theShape->GetEntry()); - Handle(GEOM_Object) aSubShapeRef = GetOperations()->GetEngine()->GetObject - (theSubShape->GetStudyID(), theSubShape->GetEntry()); + Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape); + Handle(GEOM_Object) aSubShapeRef = GetObjectImpl(theSubShape); if (aShapeRef.IsNull() || aSubShapeRef.IsNull()) return -1; //Get the unique ID of inside