X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOM_I%2FGEOM_ILocalOperations_i.cc;h=0d89b61d33d86b57b38706215c6dbbaf6206d4f6;hb=31b91717e01915431d5658a7054af18a7b7044d5;hp=64737cbf36b8590647b6d92a39384a47c84c3502;hpb=f931ebe5b663153f8e276d607d870aa401a91048;p=modules%2Fgeom.git diff --git a/src/GEOM_I/GEOM_ILocalOperations_i.cc b/src/GEOM_I/GEOM_ILocalOperations_i.cc index 64737cbf3..0d89b61d3 100644 --- a/src/GEOM_I/GEOM_ILocalOperations_i.cc +++ b/src/GEOM_I/GEOM_ILocalOperations_i.cc @@ -1,3 +1,25 @@ +// Copyright (C) 2007-2016 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 +// +// 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, or (at your option) any later version. +// +// 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" @@ -15,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"); @@ -43,16 +65,12 @@ 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_NAMESPACE(GEOM_Object) aShapeRef = GetObjectImpl(theShape); if (aShapeRef.IsNull()) return aGEOMObject._retn(); //Create the Fillet - Handle(GEOM_Object) anObject = + HANDLE_NAMESPACE(GEOM_Object) anObject = GetOperations()->MakeFilletAll(aShapeRef, theR); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); @@ -67,27 +85,24 @@ 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_NAMESPACE(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]); } //Create the Fillet - Handle(GEOM_Object) anObject = + HANDLE_NAMESPACE(GEOM_Object) anObject = GetOperations()->MakeFilletEdges(aShapeRef, theR, anEdges); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); @@ -95,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_NAMESPACE(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_NAMESPACE(GEOM_Object) anObject = + GetOperations()->MakeFilletEdgesR1R2(aShapeRef, theR1, theR2, anEdges); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + //============================================================================= /*! * MakeFilletFaces @@ -102,27 +149,24 @@ 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_NAMESPACE(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]); } //Create the Fillet - Handle(GEOM_Object) anObject = + HANDLE_NAMESPACE(GEOM_Object) anObject = GetOperations()->MakeFilletFaces(aShapeRef, theR, aFaces); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); @@ -130,6 +174,103 @@ 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_NAMESPACE(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_NAMESPACE(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_NAMESPACE(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_NAMESPACE(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, + CORBA::Boolean doIgnoreSecantVertices) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Get the reference shape (wire) + HANDLE_NAMESPACE(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_NAMESPACE(GEOM_Object) anObject = + GetOperations()->MakeFillet1D(aShapeRef, theR, aVertexes, doIgnoreSecantVertices); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + //============================================================================= /*! * MakeChamferAll @@ -140,16 +281,12 @@ 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_NAMESPACE(GEOM_Object) aShapeRef = GetObjectImpl(theShape); if (aShapeRef.IsNull()) return aGEOMObject._retn(); //Create the Chamfer - Handle(GEOM_Object) anObject = + HANDLE_NAMESPACE(GEOM_Object) anObject = GetOperations()->MakeChamferAll(aShapeRef, theD); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); @@ -164,26 +301,47 @@ 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_NAMESPACE(GEOM_Object) aShapeRef = GetObjectImpl(theShape); if (aShapeRef.IsNull()) return aGEOMObject._retn(); //Create the Chamfer - Handle(GEOM_Object) anObject = + HANDLE_NAMESPACE(GEOM_Object) anObject = GetOperations()->MakeChamferEdge(aShapeRef, theD1, theD2, theFace1, theFace2); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); 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_NAMESPACE(GEOM_Object) aShapeRef = GetObjectImpl(theShape); + if (aShapeRef.IsNull()) return aGEOMObject._retn(); + + //Create the Chamfer + HANDLE_NAMESPACE(GEOM_Object) anObject = + GetOperations()->MakeChamferEdgeAD(aShapeRef, theD, theAngle, theFace1, theFace2); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} //============================================================================= /*! @@ -192,34 +350,129 @@ 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_NAMESPACE(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]); } //Create the Chamfer - Handle(GEOM_Object) anObject = + HANDLE_NAMESPACE(GEOM_Object) anObject = GetOperations()->MakeChamferFaces(aShapeRef, theD1, theD2, aFaces); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); 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_NAMESPACE(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_NAMESPACE(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_NAMESPACE(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_NAMESPACE(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_NAMESPACE(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_NAMESPACE(GEOM_Object) anObject = + GetOperations()->MakeChamferEdgesAD(aShapeRef, theD, theAngle, aEdges); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} //============================================================================= /*! @@ -227,21 +480,18 @@ 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_NAMESPACE(GEOM_Object) aShapeRef = GetObjectImpl(theShape); if (aShapeRef.IsNull()) return aGEOMObject._retn(); //Create the Archimede - Handle(GEOM_Object) anObject = GetOperations()->MakeArchimede + HANDLE_NAMESPACE(GEOM_Object) anObject = GetOperations()->MakeArchimede (aShapeRef, theWeight, theWaterDensity, theMeshingDeflection); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); @@ -257,13 +507,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_NAMESPACE(GEOM_Object) aShapeRef = GetObjectImpl(theShape); + HANDLE_NAMESPACE(GEOM_Object) aSubShapeRef = GetObjectImpl(theSubShape); if (aShapeRef.IsNull() || aSubShapeRef.IsNull()) return -1; //Get the unique ID of inside