X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOM_I%2FGEOM_I3DPrimOperations_i.cc;h=3d5969f71571ec7c954cdfb0fc6ce5204e2cb123;hb=1839b501d4b7e21938af8af18c060fdf042302e0;hp=5f01b7c91f3a83058865cd0d13dc1e208878998a;hpb=69b2ec02a2002731ceaf0597fa9f4dd9cd57dc91;p=modules%2Fgeom.git diff --git a/src/GEOM_I/GEOM_I3DPrimOperations_i.cc b/src/GEOM_I/GEOM_I3DPrimOperations_i.cc index 5f01b7c91..3d5969f71 100644 --- a/src/GEOM_I/GEOM_I3DPrimOperations_i.cc +++ b/src/GEOM_I/GEOM_I3DPrimOperations_i.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2015 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 @@ -267,8 +267,8 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double th */ //============================================================================= GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRHA (CORBA::Double theR, - CORBA::Double theH, - CORBA::Double theA) + CORBA::Double theH, + CORBA::Double theA) { GEOM::GEOM_Object_var aGEOMObject; @@ -766,7 +766,8 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDraftPrism (GEOM::GEOM_Object_ptr theInitShape, GEOM::GEOM_Object_ptr theBase, CORBA::Double theHeight, CORBA::Double theAngle, - CORBA::Boolean theFuse) + CORBA::Boolean theFuse, + CORBA::Boolean theInvert) { GEOM::GEOM_Object_var aGEOMObject; @@ -780,7 +781,7 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDraftPrism if (aBase.IsNull() || aInit.IsNull()) return aGEOMObject._retn(); //Create the Prism - Handle(GEOM_Object) anObject = GetOperations()->MakeDraftPrism(aInit, aBase, theHeight, theAngle, theFuse); + Handle(GEOM_Object) anObject = GetOperations()->MakeDraftPrism(aInit, aBase, theHeight, theAngle, theFuse, theInvert); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); @@ -793,10 +794,12 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDraftPrism * MakePipe */ //============================================================================= -GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipe - (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr thePath) +GEOM::ListOfGO *GEOM_I3DPrimOperations_i::MakePipe + (GEOM::GEOM_Object_ptr theBase, + GEOM::GEOM_Object_ptr thePath, + CORBA::Boolean IsGenerateGroups) { - GEOM::GEOM_Object_var aGEOMObject; + GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO; //Set a not done flag GetOperations()->SetNotDone(); @@ -805,15 +808,20 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipe Handle(GEOM_Object) aBase = GetObjectImpl(theBase); Handle(GEOM_Object) aPath = GetObjectImpl(thePath); - if (aBase.IsNull() || aPath.IsNull()) return aGEOMObject._retn(); + if (aBase.IsNull() || aPath.IsNull()) return aSeq._retn(); //Create the Pipe - Handle(GEOM_Object) anObject = - GetOperations()->MakePipe(aBase, aPath); - if (!GetOperations()->IsDone() || anObject.IsNull()) - return aGEOMObject._retn(); + Handle(TColStd_HSequenceOfTransient) aHSeq = + GetOperations()->MakePipe(aBase, aPath, IsGenerateGroups); + if (!GetOperations()->IsDone() || aHSeq.IsNull()) + return aSeq._retn(); - return GetObject(anObject); + Standard_Integer aLength = aHSeq->Length(); + aSeq->length(aLength); + for (Standard_Integer i = 1; i <= aLength; i++) + aSeq[i-1] = GetObject(Handle(GEOM_Object)::DownCast(aHSeq->Value(i))); + + return aSeq._retn(); } //============================================================================= @@ -880,14 +888,14 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle2Ways */ //============================================================================= GEOM::GEOM_Object_ptr -GEOM_I3DPrimOperations_i::MakeFilling(GEOM::GEOM_Object_ptr theShape, - CORBA::Long theMinDeg, - CORBA::Long theMaxDeg, - CORBA::Double theTol2D, - CORBA::Double theTol3D, - CORBA::Long theNbIter, +GEOM_I3DPrimOperations_i::MakeFilling(const GEOM::ListOfGO& theContours, + CORBA::Long theMinDeg, + CORBA::Long theMaxDeg, + CORBA::Double theTol2D, + CORBA::Double theTol3D, + CORBA::Long theNbIter, GEOM::filling_oper_method theMethod, - CORBA::Boolean theApprox) + CORBA::Boolean theApprox) { GEOM::GEOM_Object_var aGEOMObject; @@ -895,9 +903,9 @@ GEOM_I3DPrimOperations_i::MakeFilling(GEOM::GEOM_Object_ptr theShape, GetOperations()->SetNotDone(); //Get the reference objects - Handle(GEOM_Object) aShape = GetObjectImpl(theShape); - - if (aShape.IsNull()) return aGEOMObject._retn(); + std::list< Handle(GEOM_Object) > aShapes; + if (! GetListOfObjectsImpl( theContours, aShapes )) + return aGEOMObject._retn(); int aMethod = 0; switch (theMethod) { @@ -925,8 +933,7 @@ GEOM_I3DPrimOperations_i::MakeFilling(GEOM::GEOM_Object_ptr theShape, //Create the Solid Handle(GEOM_Object) anObject = GetOperations()->MakeFilling - (aShape, theMinDeg, theMaxDeg, theTol2D, theTol3D, theNbIter, - aMethod, theApprox); + (aShapes, theMinDeg, theMaxDeg, theTol2D, theTol3D, theNbIter, aMethod, theApprox); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); @@ -974,14 +981,15 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeThruSections(const GEOM::Lis * MakePipeWithDifferentSections */ //============================================================================= -GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithDifferentSections - (const GEOM::ListOfGO& theBases, - const GEOM::ListOfGO& theLocations, - GEOM::GEOM_Object_ptr thePath, - CORBA::Boolean theWithContact, - CORBA::Boolean theWithCorrections) +GEOM::ListOfGO *GEOM_I3DPrimOperations_i::MakePipeWithDifferentSections + (const GEOM::ListOfGO &theBases, + const GEOM::ListOfGO &theLocations, + GEOM::GEOM_Object_ptr thePath, + CORBA::Boolean theWithContact, + CORBA::Boolean theWithCorrections, + CORBA::Boolean IsGenerateGroups) { - GEOM::GEOM_Object_var aGEOMObject; + GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO; //Set a not done flag GetOperations()->SetNotDone(); @@ -994,11 +1002,11 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithDifferentSections aNbLocs = theLocations.length(); if (aNbLocs && aNbBases != aNbLocs) - return aGEOMObject._retn(); + return aSeq._retn(); Handle(GEOM_Object) aPath = GetObjectImpl(thePath); if (aPath.IsNull()) - return aGEOMObject._retn(); + return aSeq._retn(); for (ind = 0; ind < aNbBases; ind++) { Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]); @@ -1014,16 +1022,23 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithDifferentSections aSeqBases->Append(aBase); } if (!aSeqBases->Length()) - return aGEOMObject._retn(); + return aSeq._retn(); // Make pipe - Handle(GEOM_Object) anObject = - GetOperations()->MakePipeWithDifferentSections(aSeqBases,aSeqLocations ,aPath, - theWithContact,theWithCorrections); - if (!GetOperations()->IsDone() || anObject.IsNull()) - return aGEOMObject._retn(); - - return GetObject(anObject); + Handle(TColStd_HSequenceOfTransient) aHSeq = + GetOperations()->MakePipeWithDifferentSections + (aSeqBases, aSeqLocations, + aPath, theWithContact, + theWithCorrections, IsGenerateGroups); + if (!GetOperations()->IsDone() || aHSeq.IsNull()) + return aSeq._retn(); + + Standard_Integer aLength = aHSeq->Length(); + aSeq->length(aLength); + for (Standard_Integer i = 1; i <= aLength; i++) + aSeq[i-1] = GetObject(Handle(GEOM_Object)::DownCast(aHSeq->Value(i))); + + return aSeq._retn(); } @@ -1032,15 +1047,16 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithDifferentSections * MakePipeWithShellSections */ //============================================================================= -GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithShellSections - (const GEOM::ListOfGO& theBases, - const GEOM::ListOfGO& theSubBases, - const GEOM::ListOfGO& theLocations, - GEOM::GEOM_Object_ptr thePath, - CORBA::Boolean theWithContact, - CORBA::Boolean theWithCorrections) +GEOM::ListOfGO *GEOM_I3DPrimOperations_i::MakePipeWithShellSections + (const GEOM::ListOfGO &theBases, + const GEOM::ListOfGO &theSubBases, + const GEOM::ListOfGO &theLocations, + GEOM::GEOM_Object_ptr thePath, + CORBA::Boolean theWithContact, + CORBA::Boolean theWithCorrections, + CORBA::Boolean IsGenerateGroups) { - GEOM::GEOM_Object_var aGEOMObject; + GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO; //Set a not done flag GetOperations()->SetNotDone(); @@ -1055,11 +1071,11 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithShellSections aNbLocs = theLocations.length(); if (aNbLocs && aNbBases != aNbLocs) - return aGEOMObject._retn(); + return aSeq._retn(); Handle(GEOM_Object) aPath = GetObjectImpl(thePath); if (aPath.IsNull()) - return aGEOMObject._retn(); + return aSeq._retn(); for (ind = 0; ind < aNbBases; ind++) { Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]); @@ -1084,17 +1100,23 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithShellSections } } if (!aSeqBases->Length()) - return aGEOMObject._retn(); + return aSeq._retn(); // Make pipe - Handle(GEOM_Object) anObject = - GetOperations()->MakePipeWithShellSections(aSeqBases, aSeqSubBases, - aSeqLocations, aPath, - theWithContact, theWithCorrections); - if (!GetOperations()->IsDone() || anObject.IsNull()) - return aGEOMObject._retn(); - - return GetObject(anObject); + Handle(TColStd_HSequenceOfTransient) aHSeq = + GetOperations()->MakePipeWithShellSections + (aSeqBases, aSeqSubBases, + aSeqLocations, aPath, + theWithContact, theWithCorrections, IsGenerateGroups); + if (!GetOperations()->IsDone() || aHSeq.IsNull()) + return aSeq._retn(); + + Standard_Integer aLength = aHSeq->Length(); + aSeq->length(aLength); + for (Standard_Integer i = 1; i <= aLength; i++) + aSeq[i-1] = GetObject(Handle(GEOM_Object)::DownCast(aHSeq->Value(i))); + + return aSeq._retn(); } @@ -1103,11 +1125,12 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithShellSections * MakePipeShellsWithoutPath */ //============================================================================= -GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeShellsWithoutPath - (const GEOM::ListOfGO& theBases, - const GEOM::ListOfGO& theLocations) +GEOM::ListOfGO *GEOM_I3DPrimOperations_i::MakePipeShellsWithoutPath + (const GEOM::ListOfGO &theBases, + const GEOM::ListOfGO &theLocations, + CORBA::Boolean IsGenerateGroups) { - GEOM::GEOM_Object_var aGEOMObject; + GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO; //Set a not done flag GetOperations()->SetNotDone(); @@ -1120,7 +1143,7 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeShellsWithoutPath aNbLocs = theLocations.length(); if (aNbLocs && aNbBases != aNbLocs) - return aGEOMObject._retn(); + return aSeq._retn(); for (ind = 0; ind < aNbBases; ind++) { Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]); @@ -1136,16 +1159,22 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeShellsWithoutPath } if (!aSeqBases->Length()) - return aGEOMObject._retn(); + return aSeq._retn(); // Make pipe - Handle(GEOM_Object) anObject = - GetOperations()->MakePipeShellsWithoutPath(aSeqBases,aSeqLocations); + Handle(TColStd_HSequenceOfTransient) aHSeq = + GetOperations()->MakePipeShellsWithoutPath + (aSeqBases, aSeqLocations, IsGenerateGroups); - if (!GetOperations()->IsDone() || anObject.IsNull()) - return aGEOMObject._retn(); + if (!GetOperations()->IsDone() || aHSeq.IsNull()) + return aSeq._retn(); - return GetObject(anObject); + Standard_Integer aLength = aHSeq->Length(); + aSeq->length(aLength); + for (Standard_Integer i = 1; i <= aLength; i++) + aSeq[i-1] = GetObject(Handle(GEOM_Object)::DownCast(aHSeq->Value(i))); + + return aSeq._retn(); } //============================================================================= @@ -1153,12 +1182,13 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeShellsWithoutPath * MakePipeBiNormalAlongVector */ //============================================================================= -GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeBiNormalAlongVector - (GEOM::GEOM_Object_ptr theBase, - GEOM::GEOM_Object_ptr thePath, - GEOM::GEOM_Object_ptr theVec) +GEOM::ListOfGO *GEOM_I3DPrimOperations_i::MakePipeBiNormalAlongVector + (GEOM::GEOM_Object_ptr theBase, + GEOM::GEOM_Object_ptr thePath, + GEOM::GEOM_Object_ptr theVec, + CORBA::Boolean IsGenerateGroups) { - GEOM::GEOM_Object_var aGEOMObject; + GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO; //Set a not done flag GetOperations()->SetNotDone(); @@ -1168,15 +1198,21 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeBiNormalAlongVector Handle(GEOM_Object) aPath = GetObjectImpl(thePath); Handle(GEOM_Object) aVec = GetObjectImpl(theVec); - if (aBase.IsNull() || aPath.IsNull() || aVec.IsNull()) return aGEOMObject._retn(); + if (aBase.IsNull() || aPath.IsNull() || aVec.IsNull()) return aSeq._retn(); //Create the Pipe - Handle(GEOM_Object) anObject = - GetOperations()->MakePipeBiNormalAlongVector(aBase, aPath, aVec); - if (!GetOperations()->IsDone() || anObject.IsNull()) - return aGEOMObject._retn(); - - return GetObject(anObject); + Handle(TColStd_HSequenceOfTransient) aHSeq = + GetOperations()->MakePipeBiNormalAlongVector + (aBase, aPath, aVec, IsGenerateGroups); + if (!GetOperations()->IsDone() || aHSeq.IsNull()) + return aSeq._retn(); + + Standard_Integer aLength = aHSeq->Length(); + aSeq->length(aLength); + for (Standard_Integer i = 1; i <= aLength; i++) + aSeq[i-1] = GetObject(Handle(GEOM_Object)::DownCast(aHSeq->Value(i))); + + return aSeq._retn(); } //============================================================================= @@ -1185,9 +1221,11 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeBiNormalAlongVector */ //============================================================================= GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeThickening - (GEOM::GEOM_Object_ptr theObject, - CORBA::Double theOffset, - CORBA::Boolean doCopy) + (GEOM::GEOM_Object_ptr theObject, + const GEOM::ListOfLong &theFacesIDs, + CORBA::Double theOffset, + CORBA::Boolean doCopy, + CORBA::Boolean theInside) { GEOM::GEOM_Object_var aGEOMObject; //Set a not done flag @@ -1207,12 +1245,25 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeThickening //Get the basic object Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); if (aBasicObject.IsNull()) return aGEOMObject._retn(); - + + // Get faces IDs. + Handle(TColStd_HArray1OfInteger) aFaceIDs; + Standard_Integer aNbIDs = theFacesIDs.length(); + Standard_Integer i; + + if (aNbIDs > 0) { + aFaceIDs = new TColStd_HArray1OfInteger (1, aNbIDs); + + for (i = 0; i < aNbIDs; i++) { + aFaceIDs->SetValue(i + 1, theFacesIDs[i]); + } + } + //Create the thickened shape if (doCopy) { Handle(GEOM_Object) anObject = GetOperations()->MakeThickening( - aBasicObject, theOffset, doCopy); + aBasicObject, aFaceIDs, theOffset, doCopy, theInside); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); @@ -1220,7 +1271,7 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeThickening } else { - GetOperations()->MakeThickening(aBasicObject, theOffset, doCopy); + GetOperations()->MakeThickening(aBasicObject, aFaceIDs, theOffset, doCopy, theInside); // Update GUI. UpdateGUIForObject(theObject);