diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 9bdfda2b2..893cd2a08 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -1699,9 +1699,16 @@ module GEOM * the path shape. The path shape can be a wire or an edge. * \param theBase Base shape to be extruded. * \param thePath Path shape to extrude the base shape along it. - * \return New GEOM_Object, containing the created pipe. + * \param IsGenerateGroups flag that tells if it is necessary to + * return groups (true) or not (false). + * \return The list of objects. The first one is a result pipe, + * the other ones are the created groups. If \a IsGenerateGroups + * is not set the returned list contains a single object, which + * is the operation result. */ - GEOM_Object MakePipe (in GEOM_Object theBase, in GEOM_Object thePath); + ListOfGO MakePipe (in GEOM_Object theBase, + in GEOM_Object thePath, + in boolean IsGenerateGroups); /*! * \brief Create a shape by revolution of the base shape around the axis @@ -1769,13 +1776,19 @@ module GEOM * contact with the spine. * \param theWithCorrection - defining that the section is rotated to be * orthogonal to the spine tangent in the correspondent point - * \return New GEOM_Object, containing the created pipe. + * \param IsGenerateGroups flag that tells if it is necessary to + * return groups (true) or not (false). + * \return The list of objects. The first one is a result pipe, + * the other ones are the created groups. If \a IsGenerateGroups + * is not set the returned list contains a single object, which + * is the operation result. */ - GEOM_Object MakePipeWithDifferentSections (in ListOfGO theSeqBases, - in ListOfGO theLocations, - in GEOM_Object thePath, - in boolean theWithContact , - in boolean theWithCorrection ); + ListOfGO MakePipeWithDifferentSections (in ListOfGO theSeqBases, + in ListOfGO theLocations, + in GEOM_Object thePath, + in boolean theWithContact , + in boolean theWithCorrection, + in boolean IsGenerateGroups); /*! * \brief Create a shape by extrusion of the profile shape along @@ -1793,23 +1806,35 @@ module GEOM * contact with the spine. * \param theWithCorrection - defining that the section is rotated to be * orthogonal to the spine tangent in the correspondent point - * \return New GEOM_Object, containing the created pipe. + * \param IsGenerateGroups flag that tells if it is necessary to + * return groups (true) or not (false). + * \return The list of objects. The first one is a result pipe, + * the other ones are the created groups. If \a IsGenerateGroups + * is not set the returned list contains a single object, which + * is the operation result. */ - GEOM_Object MakePipeWithShellSections (in ListOfGO theSeqBases, - in ListOfGO theSeqSubBases, - in ListOfGO theLocations, - in GEOM_Object thePath, - in boolean theWithContact , - in boolean theWithCorrection ); + ListOfGO MakePipeWithShellSections (in ListOfGO theSeqBases, + in ListOfGO theSeqSubBases, + in ListOfGO theLocations, + in GEOM_Object thePath, + in boolean theWithContact, + in boolean theWithCorrection, + in boolean IsGenerateGroups); /*! * \brief Create solids between given sections * \param theSeqBases - list of sections (shell or face). * \param theLocations - list of corresponding vertexes - * \return New GEOM_Object, containing the created solids. + * \param IsGenerateGroups flag that tells if it is necessary to + * return groups (true) or not (false). + * \return The list of objects. The first one is a result pipe, + * the other ones are the created groups. If \a IsGenerateGroups + * is not set the returned list contains a single object, which + * is the operation result. */ - GEOM_Object MakePipeShellsWithoutPath (in ListOfGO theSeqBases, - in ListOfGO theLocations); + ListOfGO MakePipeShellsWithoutPath (in ListOfGO theSeqBases, + in ListOfGO theLocations, + in boolean IsGenerateGroups); /*! * \brief Create a shape by extrusion of the base shape along @@ -1821,11 +1846,17 @@ module GEOM * \param theVec Vector defines a constant binormal direction to keep the * same angle beetween the Direction and the sections * along the sweep surface. - * \return New GEOM_Object, containing the created pipe. + * \param IsGenerateGroups flag that tells if it is necessary to + * return groups (true) or not (false). + * \return The list of objects. The first one is a result pipe, + * the other ones are the created groups. If \a IsGenerateGroups + * is not set the returned list contains a single object, which + * is the operation result. */ - GEOM_Object MakePipeBiNormalAlongVector (in GEOM_Object theBase, - in GEOM_Object thePath, - in GEOM_Object theVec); + ListOfGO MakePipeBiNormalAlongVector (in GEOM_Object theBase, + in GEOM_Object thePath, + in GEOM_Object theVec, + in boolean IsGenerateGroups); /*! diff --git a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx index 6cc3e28d9..977dca317 100644 --- a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx @@ -1446,8 +1446,10 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeDraftPrism * MakePipe */ //============================================================================= -Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipe (Handle(GEOM_Object) theBase, - Handle(GEOM_Object) thePath) +Handle(TColStd_HSequenceOfTransient) GEOMImpl_I3DPrimOperations::MakePipe + (const Handle(GEOM_Object) &theBase, + const Handle(GEOM_Object) &thePath, + const bool IsGenerateGroups) { SetErrorCode(KO); @@ -1488,12 +1490,28 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipe (Handle(GEOM_Object) th return NULL; } + Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient; + + aSeq->Append(aPipe); //Make a Python command - GEOM::TPythonDump(aFunction) << aPipe << " = geompy.MakePipe(" - << theBase << ", " << thePath << ")"; + GEOM::TPythonDump pyDump(aFunction); + + if (IsGenerateGroups) { + pyDump << aSeq; + } else { + pyDump << aPipe; + } + + pyDump << " = geompy.MakePipe(" << theBase << ", " << thePath; + + if (IsGenerateGroups) { + pyDump << ", True"; + } + + pyDump << ")"; SetErrorCode(OK); - return aPipe; + return aSeq; } @@ -1789,22 +1807,23 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeThruSections( * MakePipeWithDifferentSections */ //============================================================================= -Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithDifferentSections( - const Handle(TColStd_HSequenceOfTransient)& theBases, - const Handle(TColStd_HSequenceOfTransient)& theLocations, - const Handle(GEOM_Object)& thePath, - bool theWithContact, - bool theWithCorrections) +Handle(TColStd_HSequenceOfTransient) + GEOMImpl_I3DPrimOperations::MakePipeWithDifferentSections + (const Handle(TColStd_HSequenceOfTransient) &theBases, + const Handle(TColStd_HSequenceOfTransient) &theLocations, + const Handle(GEOM_Object) &thePath, + const bool theWithContact, + const bool theWithCorrections, + const bool IsGenerateGroups) { - Handle(GEOM_Object) anObj; SetErrorCode(KO); if(theBases.IsNull()) - return anObj; + return NULL; Standard_Integer nbBases = theBases->Length(); if (!nbBases) - return anObj; + return NULL; Standard_Integer nbLocs = (theLocations.IsNull() ? 0 :theLocations->Length()); //Add a new Pipe object @@ -1814,16 +1833,16 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithDifferentSections( Handle(GEOM_Function) aFunction = aPipeDS->AddFunction(GEOMImpl_PipeDriver::GetID(), PIPE_DIFFERENT_SECTIONS); - if (aFunction.IsNull()) return anObj; + if (aFunction.IsNull()) return NULL; //Check if the function is set correctly - if (aFunction->GetDriverGUID() != GEOMImpl_PipeDriver::GetID()) return anObj; + if (aFunction->GetDriverGUID() != GEOMImpl_PipeDriver::GetID()) return NULL; GEOMImpl_IPipeDiffSect aCI (aFunction); Handle(GEOM_Function) aRefPath = thePath->GetLastFunction(); if(aRefPath.IsNull()) - return anObj; + return NULL; Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient; Handle(TColStd_HSequenceOfTransient) aSeqLocs = new TColStd_HSequenceOfTransient; @@ -1859,7 +1878,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithDifferentSections( } if(!aSeqBases->Length()) - return anObj; + return NULL; aCI.SetBases(aSeqBases); aCI.SetLocations(aSeqLocs); @@ -1872,18 +1891,28 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithDifferentSections( OCC_CATCH_SIGNALS; if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Pipe with defferent section driver failed"); - return anObj; + return NULL; } } catch (Standard_Failure) { Handle(Standard_Failure) aFail = Standard_Failure::Caught(); SetErrorCode(aFail->GetMessageString()); - return anObj; + return NULL; } + Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient; + + aSeq->Append(aPipeDS); //Make a Python command GEOM::TPythonDump pyDump(aFunction); - pyDump << aPipeDS << " = geompy.MakePipeWithDifferentSections(["; + + if (IsGenerateGroups) { + pyDump << aSeq; + } else { + pyDump << aPipeDS; + } + + pyDump << " = geompy.MakePipeWithDifferentSections(["; for(i =1 ; i <= nbBases; i++) { @@ -1915,10 +1944,16 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithDifferentSections( } } - pyDump<< "], "<Length(); if (!nbBases) - return anObj; + return NULL; Standard_Integer nbSubBases = (theSubBases.IsNull() ? 0 :theSubBases->Length()); @@ -1956,17 +1992,17 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithShellSections( Handle(GEOM_Function) aFunction = aPipeDS->AddFunction(GEOMImpl_PipeDriver::GetID(), PIPE_SHELL_SECTIONS); - if (aFunction.IsNull()) return anObj; + if (aFunction.IsNull()) return NULL; //Check if the function is set correctly - if (aFunction->GetDriverGUID() != GEOMImpl_PipeDriver::GetID()) return anObj; + if (aFunction->GetDriverGUID() != GEOMImpl_PipeDriver::GetID()) return NULL; //GEOMImpl_IPipeDiffSect aCI (aFunction); GEOMImpl_IPipeShellSect aCI (aFunction); Handle(GEOM_Function) aRefPath = thePath->GetLastFunction(); if(aRefPath.IsNull()) - return anObj; + return NULL; Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient; Handle(TColStd_HSequenceOfTransient) aSeqSubBases = new TColStd_HSequenceOfTransient; @@ -2015,7 +2051,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithShellSections( } if(!aSeqBases->Length()) - return anObj; + return NULL; aCI.SetBases(aSeqBases); aCI.SetSubBases(aSeqSubBases); @@ -2029,18 +2065,28 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithShellSections( OCC_CATCH_SIGNALS; if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Pipe with shell sections driver failed"); - return anObj; + return NULL; } } catch (Standard_Failure) { Handle(Standard_Failure) aFail = Standard_Failure::Caught(); SetErrorCode(aFail->GetMessageString()); - return anObj; + return NULL; } + Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient; + + aSeq->Append(aPipeDS); //Make a Python command GEOM::TPythonDump pyDump(aFunction); - pyDump << aPipeDS << " = geompy.MakePipeWithShellSections(["; + + if (IsGenerateGroups) { + pyDump << aSeq; + } else { + pyDump << aPipeDS; + } + + pyDump << " = geompy.MakePipeWithShellSections(["; for(i =1 ; i <= nbBases; i++) { @@ -2088,10 +2134,16 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithShellSections( } } - pyDump<< "], "<Length(); if (!nbBases) - return anObj; + return NULL; Standard_Integer nbLocs = (theLocations.IsNull() ? 0 :theLocations->Length()); @@ -2124,10 +2177,10 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeShellsWithoutPath( Handle(GEOM_Function) aFunction = aPipeDS->AddFunction(GEOMImpl_PipeDriver::GetID(), PIPE_SHELLS_WITHOUT_PATH); - if (aFunction.IsNull()) return anObj; + if (aFunction.IsNull()) return NULL; //Check if the function is set correctly - if (aFunction->GetDriverGUID() != GEOMImpl_PipeDriver::GetID()) return anObj; + if (aFunction->GetDriverGUID() != GEOMImpl_PipeDriver::GetID()) return NULL; GEOMImpl_IPipeShellSect aCI (aFunction); @@ -2164,7 +2217,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeShellsWithoutPath( } if(!aSeqBases->Length()) - return anObj; + return NULL; aCI.SetBases(aSeqBases); aCI.SetLocations(aSeqLocs); @@ -2174,18 +2227,28 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeShellsWithoutPath( OCC_CATCH_SIGNALS; if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Pipe with shell sections without path driver failed"); - return anObj; + return NULL; } } catch (Standard_Failure) { Handle(Standard_Failure) aFail = Standard_Failure::Caught(); SetErrorCode(aFail->GetMessageString()); - return anObj; + return NULL; } + Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient; + + aSeq->Append(aPipeDS); //Make a Python command GEOM::TPythonDump pyDump(aFunction); - pyDump << aPipeDS << " = geompy.MakePipeShellsWithoutPath(["; + + if (IsGenerateGroups) { + pyDump << aSeq; + } else { + pyDump << aPipeDS; + } + + pyDump << " = geompy.MakePipeShellsWithoutPath(["; for(i =1 ; i <= nbBases; i++) { @@ -2217,10 +2280,16 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeShellsWithoutPath( } } - pyDump<< "])"; + pyDump<< "]"; + + if (IsGenerateGroups) { + pyDump << ", True"; + } + + pyDump << ")"; SetErrorCode(OK); - return aPipeDS; + return aSeq; } @@ -2229,9 +2298,12 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeShellsWithoutPath( * MakePipeBiNormalAlongVector */ //============================================================================= -Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeBiNormalAlongVector (Handle(GEOM_Object) theBase, - Handle(GEOM_Object) thePath, - Handle(GEOM_Object) theVec) +Handle(TColStd_HSequenceOfTransient) + GEOMImpl_I3DPrimOperations::MakePipeBiNormalAlongVector + (const Handle(GEOM_Object) &theBase, + const Handle(GEOM_Object) &thePath, + const Handle(GEOM_Object) &theVec, + const bool IsGenerateGroups) { SetErrorCode(KO); @@ -2274,12 +2346,30 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeBiNormalAlongVector (Han return NULL; } + Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient; + + aSeq->Append(aPipe); + //Make a Python command - GEOM::TPythonDump(aFunction) << aPipe << " = geompy.MakePipeBiNormalAlongVector(" - << theBase << ", " << thePath << ", " << theVec << ")"; + GEOM::TPythonDump pyDump(aFunction); + + if (IsGenerateGroups) { + pyDump << aSeq; + } else { + pyDump << aPipe; + } + + pyDump << " = geompy.MakePipeBiNormalAlongVector(" + << theBase << ", " << thePath << ", " << theVec; + + if (IsGenerateGroups) { + pyDump << ", True"; + } + + pyDump << ")"; SetErrorCode(OK); - return aPipe; + return aSeq; } //============================================================================= diff --git a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx index 3de3f3240..43ff36251 100644 --- a/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx @@ -98,8 +98,10 @@ class GEOMImpl_I3DPrimOperations : public GEOM_IOperations { Standard_EXPORT Handle(GEOM_Object) MakeDraftPrism (Handle(GEOM_Object) theInitShape, Handle(GEOM_Object) theBase, double theHeight, double theAngle, bool theFuse); - Standard_EXPORT Handle(GEOM_Object) MakePipe (Handle(GEOM_Object) theBase, - Handle(GEOM_Object) thePath); + Standard_EXPORT Handle(TColStd_HSequenceOfTransient) MakePipe + (const Handle(GEOM_Object) &theBase, + const Handle(GEOM_Object) &thePath, + const bool IsGenerateGroups); Standard_EXPORT Handle(GEOM_Object) MakeRevolutionAxisAngle (Handle(GEOM_Object) theBase, Handle(GEOM_Object) theAxis, @@ -121,28 +123,34 @@ class GEOMImpl_I3DPrimOperations : public GEOM_IOperations { double thePreci, bool theRuled); - Standard_EXPORT Handle(GEOM_Object) MakePipeWithDifferentSections( - const Handle(TColStd_HSequenceOfTransient)& theBases, - const Handle(TColStd_HSequenceOfTransient)& theLocations, - const Handle(GEOM_Object)& thePath, - bool theWithContact, - bool theWithCorrections); + Standard_EXPORT Handle(TColStd_HSequenceOfTransient) + MakePipeWithDifferentSections + (const Handle(TColStd_HSequenceOfTransient) &theBases, + const Handle(TColStd_HSequenceOfTransient) &theLocations, + const Handle(GEOM_Object) &thePath, + const bool theWithContact, + const bool theWithCorrections, + const bool IsGenerateGroups); - Standard_EXPORT Handle(GEOM_Object) MakePipeWithShellSections( - const Handle(TColStd_HSequenceOfTransient)& theBases, - const Handle(TColStd_HSequenceOfTransient)& theSubBases, - const Handle(TColStd_HSequenceOfTransient)& theLocations, - const Handle(GEOM_Object)& thePath, - bool theWithContact, - bool theWithCorrections); + Standard_EXPORT Handle(TColStd_HSequenceOfTransient) MakePipeWithShellSections + (const Handle(TColStd_HSequenceOfTransient) &theBases, + const Handle(TColStd_HSequenceOfTransient) &theSubBases, + const Handle(TColStd_HSequenceOfTransient) &theLocations, + const Handle(GEOM_Object) &thePath, + const bool theWithContact, + const bool theWithCorrections, + const bool IsGenerateGroups); - Standard_EXPORT Handle(GEOM_Object) MakePipeShellsWithoutPath - (const Handle(TColStd_HSequenceOfTransient)& theBases, - const Handle(TColStd_HSequenceOfTransient)& theLocations); + Standard_EXPORT Handle(TColStd_HSequenceOfTransient) MakePipeShellsWithoutPath + (const Handle(TColStd_HSequenceOfTransient) &theBases, + const Handle(TColStd_HSequenceOfTransient) &theLocations, + const bool IsGenerateGroups); - Standard_EXPORT Handle(GEOM_Object) MakePipeBiNormalAlongVector (Handle(GEOM_Object) theBase, - Handle(GEOM_Object) thePath, - Handle(GEOM_Object) theVec); + Standard_EXPORT Handle(TColStd_HSequenceOfTransient) MakePipeBiNormalAlongVector + (const Handle(GEOM_Object) &theBase, + const Handle(GEOM_Object) &thePath, + const Handle(GEOM_Object) &theVec, + const bool IsGenerateGroups); Standard_EXPORT Handle(GEOM_Object) MakeThickening (Handle(GEOM_Object) theObject, diff --git a/src/GEOM_I/GEOM_I3DPrimOperations_i.cc b/src/GEOM_I/GEOM_I3DPrimOperations_i.cc index 3a67fc182..61ba670e3 100644 --- a/src/GEOM_I/GEOM_I3DPrimOperations_i.cc +++ b/src/GEOM_I/GEOM_I3DPrimOperations_i.cc @@ -793,10 +793,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 +807,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(); } //============================================================================= @@ -973,14 +980,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(); @@ -993,11 +1001,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]); @@ -1013,16 +1021,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(); + Handle(TColStd_HSequenceOfTransient) aHSeq = + GetOperations()->MakePipeWithDifferentSections + (aSeqBases, aSeqLocations, + aPath, theWithContact, + theWithCorrections, 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(); } @@ -1031,15 +1046,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(); @@ -1054,11 +1070,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]); @@ -1083,17 +1099,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(); + Handle(TColStd_HSequenceOfTransient) aHSeq = + GetOperations()->MakePipeWithShellSections + (aSeqBases, aSeqSubBases, + aSeqLocations, aPath, + theWithContact, theWithCorrections, 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(); } @@ -1102,11 +1124,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(); @@ -1119,7 +1142,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]); @@ -1135,16 +1158,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(); } //============================================================================= @@ -1152,12 +1181,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(); @@ -1167,15 +1197,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(); + Handle(TColStd_HSequenceOfTransient) aHSeq = + GetOperations()->MakePipeBiNormalAlongVector + (aBase, aPath, aVec, 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(); } //============================================================================= diff --git a/src/GEOM_I/GEOM_I3DPrimOperations_i.hh b/src/GEOM_I/GEOM_I3DPrimOperations_i.hh index ab2f135f0..9792bb7a2 100644 --- a/src/GEOM_I/GEOM_I3DPrimOperations_i.hh +++ b/src/GEOM_I/GEOM_I3DPrimOperations_i.hh @@ -154,9 +154,10 @@ class GEOM_I_EXPORT GEOM_I3DPrimOperations_i : CORBA::Double theHeight, CORBA::Double theAngle, CORBA::Boolean theFuse); - - GEOM::GEOM_Object_ptr MakePipe (GEOM::GEOM_Object_ptr theBase, - GEOM::GEOM_Object_ptr thePath); + + GEOM::ListOfGO *MakePipe (GEOM::GEOM_Object_ptr theBase, + GEOM::GEOM_Object_ptr thePath, + CORBA::Boolean IsGenerateGroups); GEOM::GEOM_Object_ptr MakeRevolutionAxisAngle (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis, @@ -177,27 +178,35 @@ class GEOM_I_EXPORT GEOM_I3DPrimOperations_i : CORBA::Boolean theModeSolid, CORBA::Double thePreci, CORBA::Boolean theRuled); - - GEOM::GEOM_Object_ptr MakePipeWithDifferentSections(const GEOM::ListOfGO& theBases, - const GEOM::ListOfGO& theLocations, - GEOM::GEOM_Object_ptr thePath, - CORBA::Boolean theWithContact, - CORBA::Boolean theWithCorrections); - GEOM::GEOM_Object_ptr 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 *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_ptr MakePipeShellsWithoutPath(const GEOM::ListOfGO& theBases, - const GEOM::ListOfGO& theLocations); + GEOM::ListOfGO *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::ListOfGO *MakePipeShellsWithoutPath + (const GEOM::ListOfGO &theBases, + const GEOM::ListOfGO &theLocations, + CORBA::Boolean IsGenerateGroups); + + GEOM::ListOfGO *MakePipeBiNormalAlongVector + (GEOM::GEOM_Object_ptr theBase, + GEOM::GEOM_Object_ptr thePath, + GEOM::GEOM_Object_ptr theVec, + CORBA::Boolean IsGenerateGroups); - GEOM::GEOM_Object_ptr MakePipeBiNormalAlongVector (GEOM::GEOM_Object_ptr theBase, - GEOM::GEOM_Object_ptr thePath, - GEOM::GEOM_Object_ptr theVec); - GEOM::GEOM_Object_ptr MakeThickening (GEOM::GEOM_Object_ptr theObject, const GEOM::ListOfLong &theFacesIDs, CORBA::Double theOffset, diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.cc b/src/GEOM_I_Superv/GEOM_Superv_i.cc index 2108c89b8..8501474d8 100644 --- a/src/GEOM_I_Superv/GEOM_Superv_i.cc +++ b/src/GEOM_I_Superv/GEOM_Superv_i.cc @@ -1403,9 +1403,9 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePipe (GEOM::GEOM_Object_ptr theBase, beginService( " GEOM_Superv_i::MakePipe" ); MESSAGE("GEOM_Superv_i::MakePipe"); get3DPrimOp(); - GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakePipe(theBase, thePath); + GEOM::ListOfGO_var aList = my3DPrimOp->MakePipe(theBase, thePath, false); endService( " GEOM_Superv_i::MakePipe" ); - return anObj; + return aList[0]; } //============================================================================= @@ -1512,9 +1512,9 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePipeWithDifferentSections beginService( " GEOM_Superv_i::MakePipeWithDifferentSections" ); MESSAGE("GEOM_Superv_i::MakePipeWithDifferentSections"); get3DPrimOp(); - GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakePipeWithDifferentSections(theBases,theLocations, thePath,theWithContact,theWithCorrections); + GEOM::ListOfGO_var aList = my3DPrimOp->MakePipeWithDifferentSections(theBases,theLocations, thePath,theWithContact,theWithCorrections, false); endService( " GEOM_Superv_i::MakePipeWithDifferentSections" ); - return anObj; + return aList[0]; } @@ -1532,12 +1532,13 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePipeWithShellSections beginService( " GEOM_Superv_i::MakePipeWithShellSections" ); MESSAGE("GEOM_Superv_i::MakePipeWithShellSections"); get3DPrimOp(); - GEOM::GEOM_Object_ptr anObj = + GEOM::ListOfGO_var aList = my3DPrimOp->MakePipeWithShellSections(theBases, theSubBases, theLocations, thePath, - theWithContact, theWithCorrections); + theWithContact, theWithCorrections, + false); endService( " GEOM_Superv_i::MakePipeWithShellSections" ); - return anObj; + return aList[0]; } @@ -1551,10 +1552,10 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePipeShellsWithoutPath beginService( " GEOM_Superv_i::MakePipeShellsWithoutPath" ); MESSAGE("GEOM_Superv_i::MakePipeShellsWithoutPath"); get3DPrimOp(); - GEOM::GEOM_Object_ptr anObj = - my3DPrimOp->MakePipeShellsWithoutPath(theBases,theLocations); + GEOM::ListOfGO_var aList = + my3DPrimOp->MakePipeShellsWithoutPath(theBases,theLocations, false); endService( " GEOM_Superv_i::MakePipeShellsWithoutPath" ); - return anObj; + return aList[0]; } @@ -1569,10 +1570,10 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePipeBiNormalAlongVector beginService( " GEOM_Superv_i::MakePipeBiNormalAlongVector" ); MESSAGE("GEOM_Superv_i::MakePipeBiNormalAlongVector"); get3DPrimOp(); - GEOM::GEOM_Object_ptr anObj = - my3DPrimOp->MakePipeBiNormalAlongVector(theBase, thePath, theVec); + GEOM::ListOfGO_var aList = + my3DPrimOp->MakePipeBiNormalAlongVector(theBase, thePath, theVec, false); endService( " GEOM_Superv_i::MakePipeBiNormalAlongVector" ); - return anObj; + return aList[0]; } diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index 531c1bf18..5b867567d 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -3869,41 +3869,97 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return anObj ## Create a shape by extrusion of the base shape along - # the path shape. The path shape can be a wire or an edge. + # the path shape. The path shape can be a wire or an edge. It is + # possible to generate groups along with the result by means of + # setting the flag \a IsGenerateGroups.
+ # If \a thePath is a closed edge or wire and \a IsGenerateGroups is + # set, an error is occured. If \a thePath is not closed edge/wire, + # the following groups are returned: + # - If \a theBase is unclosed edge or wire: "Down", "Up", "Side1", + # "Side2"; + # - If \a theBase is closed edge or wire, face or shell: "Down", "Up", + # "Other". + # . + # "Down" and "Up" groups contain: + # - Edges if \a theBase is edge or wire; + # - Faces if \a theBase is face or shell.
+ # . + # "Side1" and "Side2" groups contain edges generated from the first + # and last vertices of \a theBase. The first and last vertices are + # determined taking into account edge/wire orientation.
+ # "Other" group represents faces generated from the bounding edges of + # \a theBase. + # # @param theBase Base shape to be extruded. # @param thePath Path shape to extrude the base shape along it. + # @param IsGenerateGroups flag that tells if it is necessary to + # create groups. It is equal to False by default. # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. # - # @return New GEOM.GEOM_Object, containing the created pipe. + # @return New GEOM.GEOM_Object, containing the created pipe if + # \a IsGenerateGroups is not set. Otherwise it returns new + # GEOM.ListOfGO. Its first element is the created pipe, the + # remaining ones are created groups. # # @ref tui_creation_pipe "Example" @ManageTransactions("PrimOp") - def MakePipe(self, theBase, thePath, theName=None): + def MakePipe(self, theBase, thePath, + IsGenerateGroups=False, theName=None): """ Create a shape by extrusion of the base shape along - the path shape. The path shape can be a wire or an edge. + the path shape. The path shape can be a wire or an edge. It is + possible to generate groups along with the result by means of + setting the flag IsGenerateGroups. + If thePath is a closed edge or wire and IsGenerateGroups is + set, an error is occured. If thePath is not closed edge/wire, + the following groups are returned: + - If theBase is unclosed edge or wire: "Down", "Up", "Side1", + "Side2"; + - If theBase is closed edge or wire, face or shell: "Down", "Up", + "Other". + "Down" and "Up" groups contain: + - Edges if theBase is edge or wire; + - Faces if theBase is face or shell. + "Side1" and "Side2" groups contain edges generated from the first + and last vertices of theBase. The first and last vertices are + determined taking into account edge/wire orientation. + "Other" group represents faces generated from the bounding edges of + theBase. Parameters: theBase Base shape to be extruded. thePath Path shape to extrude the base shape along it. + IsGenerateGroups flag that tells if it is necessary to + create groups. It is equal to False by default. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. Returns: - New GEOM.GEOM_Object, containing the created pipe. + New GEOM.GEOM_Object, containing the created pipe if + IsGenerateGroups is not set. Otherwise it returns new + GEOM.ListOfGO. Its first element is the created pipe, the + remaining ones are created groups. """ # Example: see GEOM_TestAll.py - anObj = self.PrimOp.MakePipe(theBase, thePath) + aList = self.PrimOp.MakePipe(theBase, thePath, IsGenerateGroups) RaiseIfFailed("MakePipe", self.PrimOp) - self._autoPublish(anObj, theName, "pipe") - return anObj + + if IsGenerateGroups: + self._autoPublish(aList, theName, "pipe") + return aList + + self._autoPublish(aList[0], theName, "pipe") + return aList[0] ## Create a shape by extrusion of the profile shape along # the path shape. The path shape can be a wire or an edge. # the several profiles can be specified in the several locations of path. + # It is possible to generate groups along with the result by means of + # setting the flag \a IsGenerateGroups. For detailed information on + # groups that can be created please see the method MakePipe(). # @param theSeqBases - list of Bases shape to be extruded. # @param theLocations - list of locations on the path corresponding # specified list of the Bases shapes. Number of locations @@ -3913,21 +3969,30 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # contact with the spine. # @param theWithCorrection - defining that the section is rotated to be # orthogonal to the spine tangent in the correspondent point + # @param IsGenerateGroups - flag that tells if it is necessary to + # create groups. It is equal to False by default. # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. # - # @return New GEOM.GEOM_Object, containing the created pipe. + # @return New GEOM.GEOM_Object, containing the created pipe if + # \a IsGenerateGroups is not set. Otherwise it returns new + # GEOM.ListOfGO. Its first element is the created pipe, the + # remaining ones are created groups. # # @ref tui_creation_pipe_with_diff_sec "Example" @ManageTransactions("PrimOp") def MakePipeWithDifferentSections(self, theSeqBases, theLocations, thePath, - theWithContact, theWithCorrection, theName=None): + theWithContact, theWithCorrection, + IsGenerateGroups=False, theName=None): """ Create a shape by extrusion of the profile shape along the path shape. The path shape can be a wire or an edge. the several profiles can be specified in the several locations of path. + It is possible to generate groups along with the result by means of + setting the flag IsGenerateGroups. For detailed information on + groups that can be created please see the method geompy.MakePipe(). Parameters: theSeqBases - list of Bases shape to be extruded. @@ -3939,23 +4004,37 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): contact with the spine(0/1) theWithCorrection - defining that the section is rotated to be orthogonal to the spine tangent in the correspondent point (0/1) + IsGenerateGroups - flag that tells if it is necessary to + create groups. It is equal to False by default. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. Returns: - New GEOM.GEOM_Object, containing the created pipe. + New GEOM.GEOM_Object, containing the created pipe if + IsGenerateGroups is not set. Otherwise it returns new + GEOM.ListOfGO. Its first element is the created pipe, the + remaining ones are created groups. """ - anObj = self.PrimOp.MakePipeWithDifferentSections(theSeqBases, + aList = self.PrimOp.MakePipeWithDifferentSections(theSeqBases, theLocations, thePath, - theWithContact, theWithCorrection) + theWithContact, theWithCorrection, + IsGenerateGroups) RaiseIfFailed("MakePipeWithDifferentSections", self.PrimOp) - self._autoPublish(anObj, theName, "pipe") - return anObj + + if IsGenerateGroups: + self._autoPublish(aList, theName, "pipe") + return aList + + self._autoPublish(aList[0], theName, "pipe") + return aList[0] ## Create a shape by extrusion of the profile shape along - # the path shape. The path shape can be a wire or a edge. + # the path shape. The path shape can be a wire or an edge. # the several profiles can be specified in the several locations of path. + # It is possible to generate groups along with the result by means of + # setting the flag \a IsGenerateGroups. For detailed information on + # groups that can be created please see the method MakePipe(). # @param theSeqBases - list of Bases shape to be extruded. Base shape must be # shell or face. If number of faces in neighbour sections # aren't coincided result solid between such sections will @@ -3974,21 +4053,30 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # contact with the spine. # @param theWithCorrection - defining that the section is rotated to be # orthogonal to the spine tangent in the correspondent point + # @param IsGenerateGroups - flag that tells if it is necessary to + # create groups. It is equal to False by default. # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. # - # @return New GEOM.GEOM_Object, containing the created solids. + # @return New GEOM.GEOM_Object, containing the created solids if + # \a IsGenerateGroups is not set. Otherwise it returns new + # GEOM.ListOfGO. Its first element is the created solids, the + # remaining ones are created groups. # # @ref tui_creation_pipe_with_shell_sec "Example" @ManageTransactions("PrimOp") def MakePipeWithShellSections(self, theSeqBases, theSeqSubBases, theLocations, thePath, - theWithContact, theWithCorrection, theName=None): + theWithContact, theWithCorrection, + IsGenerateGroups=False, theName=None): """ Create a shape by extrusion of the profile shape along - the path shape. The path shape can be a wire or a edge. + the path shape. The path shape can be a wire or an edge. the several profiles can be specified in the several locations of path. + It is possible to generate groups along with the result by means of + setting the flag IsGenerateGroups. For detailed information on + groups that can be created please see the method geompy.MakePipe(). Parameters: theSeqBases - list of Bases shape to be extruded. Base shape must be @@ -4009,19 +4097,30 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): contact with the spine (0/1) theWithCorrection - defining that the section is rotated to be orthogonal to the spine tangent in the correspondent point (0/1) + IsGenerateGroups - flag that tells if it is necessary to + create groups. It is equal to False by default. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. Returns: - New GEOM.GEOM_Object, containing the created solids. + New GEOM.GEOM_Object, containing the created solids if + IsGenerateGroups is not set. Otherwise it returns new + GEOM.ListOfGO. Its first element is the created solids, the + remaining ones are created groups. """ - anObj = self.PrimOp.MakePipeWithShellSections(theSeqBases, theSeqSubBases, + aList = self.PrimOp.MakePipeWithShellSections(theSeqBases, theSeqSubBases, theLocations, thePath, - theWithContact, theWithCorrection) + theWithContact, theWithCorrection, + IsGenerateGroups) RaiseIfFailed("MakePipeWithShellSections", self.PrimOp) - self._autoPublish(anObj, theName, "pipe") - return anObj + + if IsGenerateGroups: + self._autoPublish(aList, theName, "pipe") + return aList + + self._autoPublish(aList[0], theName, "pipe") + return aList[0] ## Create a shape by extrusion of the profile shape along # the path shape. This function is used only for debug pipe @@ -4031,7 +4130,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): @ManageTransactions("PrimOp") def MakePipeWithShellSectionsBySteps(self, theSeqBases, theSeqSubBases, theLocations, thePath, - theWithContact, theWithCorrection, theName=None): + theWithContact, theWithCorrection, + IsGenerateGroups=False, theName=None): """ Create a shape by extrusion of the profile shape along the path shape. This function is used only for debug pipe @@ -4050,16 +4150,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): tmpLocations = [ theLocations[i-1], theLocations[i] ] tmpSeqSubBases = [] if nbsubsect>0: tmpSeqSubBases = [ theSeqSubBases[i-1], theSeqSubBases[i] ] - anObj = self.PrimOp.MakePipeWithShellSections(tmpSeqBases, tmpSeqSubBases, + aList = self.PrimOp.MakePipeWithShellSections(tmpSeqBases, tmpSeqSubBases, tmpLocations, thePath, - theWithContact, theWithCorrection) + theWithContact, theWithCorrection, + IsGenerateGroups) if self.PrimOp.IsDone() == 0: print "Problems with pipe creation between ",i," and ",i+1," sections" RaiseIfFailed("MakePipeWithShellSections", self.PrimOp) break else: print "Pipe between ",i," and ",i+1," sections is OK" - res.append(anObj) + res.append(aList[0]) pass pass @@ -4069,57 +4170,92 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): self._autoPublish(resc, theName, "pipe") return resc - ## Create solids between given sections + ## Create solids between given sections. + # It is possible to generate groups along with the result by means of + # setting the flag \a IsGenerateGroups. For detailed information on + # groups that can be created please see the method MakePipe(). # @param theSeqBases - list of sections (shell or face). # @param theLocations - list of corresponding vertexes + # @param IsGenerateGroups - flag that tells if it is necessary to + # create groups. It is equal to False by default. # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. # - # @return New GEOM.GEOM_Object, containing the created solids. + # @return New GEOM.GEOM_Object, containing the created solids if + # \a IsGenerateGroups is not set. Otherwise it returns new + # GEOM.ListOfGO. Its first element is the created solids, the + # remaining ones are created groups. # # @ref tui_creation_pipe_without_path "Example" @ManageTransactions("PrimOp") - def MakePipeShellsWithoutPath(self, theSeqBases, theLocations, theName=None): + def MakePipeShellsWithoutPath(self, theSeqBases, theLocations, + IsGenerateGroups=False, theName=None): """ - Create solids between given sections + Create solids between given sections. + It is possible to generate groups along with the result by means of + setting the flag IsGenerateGroups. For detailed information on + groups that can be created please see the method geompy.MakePipe(). Parameters: theSeqBases - list of sections (shell or face). theLocations - list of corresponding vertexes + IsGenerateGroups - flag that tells if it is necessary to + create groups. It is equal to False by default. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. Returns: - New GEOM.GEOM_Object, containing the created solids. + New GEOM.GEOM_Object, containing the created solids if + IsGenerateGroups is not set. Otherwise it returns new + GEOM.ListOfGO. Its first element is the created solids, the + remaining ones are created groups. """ - anObj = self.PrimOp.MakePipeShellsWithoutPath(theSeqBases, theLocations) + aList = self.PrimOp.MakePipeShellsWithoutPath(theSeqBases, theLocations, + IsGenerateGroups) RaiseIfFailed("MakePipeShellsWithoutPath", self.PrimOp) - self._autoPublish(anObj, theName, "pipe") - return anObj + + if IsGenerateGroups: + self._autoPublish(aList, theName, "pipe") + return aList + + self._autoPublish(aList[0], theName, "pipe") + return aList[0] ## Create a shape by extrusion of the base shape along # the path shape with constant bi-normal direction along the given vector. # The path shape can be a wire or an edge. + # It is possible to generate groups along with the result by means of + # setting the flag \a IsGenerateGroups. For detailed information on + # groups that can be created please see the method MakePipe(). # @param theBase Base shape to be extruded. # @param thePath Path shape to extrude the base shape along it. # @param theVec Vector defines a constant binormal direction to keep the # same angle beetween the direction and the sections # along the sweep surface. + # @param IsGenerateGroups flag that tells if it is necessary to + # create groups. It is equal to False by default. # @param theName Object name; when specified, this parameter is used # for result publication in the study. Otherwise, if automatic # publication is switched on, default value is used for result name. # - # @return New GEOM.GEOM_Object, containing the created pipe. + # @return New GEOM.GEOM_Object, containing the created pipe if + # \a IsGenerateGroups is not set. Otherwise it returns new + # GEOM.ListOfGO. Its first element is the created pipe, the + # remaining ones are created groups. # # @ref tui_creation_pipe "Example" @ManageTransactions("PrimOp") - def MakePipeBiNormalAlongVector(self, theBase, thePath, theVec, theName=None): + def MakePipeBiNormalAlongVector(self, theBase, thePath, theVec, + IsGenerateGroups=False, theName=None): """ Create a shape by extrusion of the base shape along the path shape with constant bi-normal direction along the given vector. The path shape can be a wire or an edge. + It is possible to generate groups along with the result by means of + setting the flag IsGenerateGroups. For detailed information on + groups that can be created please see the method geompy.MakePipe(). Parameters: theBase Base shape to be extruded. @@ -4127,18 +4263,29 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theVec Vector defines a constant binormal direction to keep the same angle beetween the direction and the sections along the sweep surface. + IsGenerateGroups flag that tells if it is necessary to + create groups. It is equal to False by default. theName Object name; when specified, this parameter is used for result publication in the study. Otherwise, if automatic publication is switched on, default value is used for result name. Returns: - New GEOM.GEOM_Object, containing the created pipe. + New GEOM.GEOM_Object, containing the created pipe if + IsGenerateGroups is not set. Otherwise it returns new + GEOM.ListOfGO. Its first element is the created pipe, the + remaining ones are created groups. """ # Example: see GEOM_TestAll.py - anObj = self.PrimOp.MakePipeBiNormalAlongVector(theBase, thePath, theVec) + aList = self.PrimOp.MakePipeBiNormalAlongVector(theBase, thePath, + theVec, IsGenerateGroups) RaiseIfFailed("MakePipeBiNormalAlongVector", self.PrimOp) - self._autoPublish(anObj, theName, "pipe") - return anObj + + if IsGenerateGroups: + self._autoPublish(aList, theName, "pipe") + return aList + + self._autoPublish(aList[0], theName, "pipe") + return aList[0] ## Makes a thick solid from a shape. If the input is a surface shape # (face or shell) the result is a thick solid. If an input shape is diff --git a/src/GenerationGUI/GenerationGUI_PipeDlg.cxx b/src/GenerationGUI/GenerationGUI_PipeDlg.cxx index fe972a26c..dfd6f0755 100644 --- a/src/GenerationGUI/GenerationGUI_PipeDlg.cxx +++ b/src/GenerationGUI/GenerationGUI_PipeDlg.cxx @@ -480,7 +480,7 @@ bool GenerationGUI_PipeDlg::isValid (QString&) //================================================================================= bool GenerationGUI_PipeDlg::execute (ObjectList& objects) { - GEOM::GEOM_Object_var anObj; + GEOM::ListOfGO_var aList; GEOM::GEOM_I3DPrimOperations_var anOper = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation()); switch( getConstructorId() ) { @@ -489,15 +489,15 @@ bool GenerationGUI_PipeDlg::execute (ObjectList& objects) for (int i = 0; i < myBaseObjects.count(); i++) { switch ( getConstructorId() ) { case 0 : - anObj = anOper->MakePipe(myBaseObjects[i].get(), myPath.get()); + aList = anOper->MakePipe(myBaseObjects[i].get(), myPath.get(), false); break; case 1 : - anObj = anOper->MakePipeBiNormalAlongVector(myBaseObjects[i].get(), myPath.get(), myVec.get()); + aList = anOper->MakePipeBiNormalAlongVector(myBaseObjects[i].get(), myPath.get(), myVec.get(), false); break; } - - if (!anObj->_is_nil()) - objects.push_back(anObj._retn()); + + if (!aList[0]->_is_nil()) + objects.push_back(aList[0]._retn()); } break; case 2: @@ -512,12 +512,12 @@ bool GenerationGUI_PipeDlg::execute (ObjectList& objects) for (int i = 0; i < myLocations.count(); i++) { myLocationsGO[i] = myLocations[i].copy(); } - - anObj = anOper->MakePipeWithDifferentSections(myBaseGO.in(), myLocationsGO.in(), myPath.get(), + + aList = anOper->MakePipeWithDifferentSections(myBaseGO.in(), myLocationsGO.in(), myPath.get(), GroupMakePoints->CheckBox1->isChecked(), - GroupMakePoints->CheckBox2->isChecked()); - if (!anObj->_is_nil()) - objects.push_back(anObj._retn()); + GroupMakePoints->CheckBox2->isChecked(), false); + if (!aList[0]->_is_nil()) + objects.push_back(aList[0]._retn()); } break; default: