From 8345fbb56c53324efd8c305b71b4fe63fe16b77e Mon Sep 17 00:00:00 2001 From: eap Date: Thu, 16 Oct 2014 14:36:46 +0400 Subject: [PATCH] 0022749: [EDF] Improvement of Remove Internal Faces operation --- doc/salome/gui/GEOM/images/remove_webs.png | Bin 22004 -> 22102 bytes .../gui/GEOM/input/remove_webs_operation.doc | 8 ++-- .../gui/GEOM/input/repairing_operations.doc | 2 +- idl/GEOM_Gen.idl | 8 ++-- src/GEOMGUI/GEOM_msg_en.ts | 2 +- src/GEOMImpl/GEOMImpl_HealingDriver.cxx | 43 ++++++++++++++++-- src/GEOMImpl/GEOMImpl_HealingDriver.hxx | 2 +- src/GEOMImpl/GEOMImpl_IHealingOperations.cxx | 20 +++++--- src/GEOMImpl/GEOMImpl_IHealingOperations.hxx | 2 +- src/GEOM_I/GEOM_IHealingOperations_i.cc | 11 +++-- src/GEOM_I/GEOM_IHealingOperations_i.hh | 2 +- src/GEOM_SWIG/geomBuilder.py | 16 +++---- src/RepairGUI/RepairGUI_RemoveWebsDlg.cxx | 42 ++++++----------- src/RepairGUI/RepairGUI_RemoveWebsDlg.h | 2 +- 14 files changed, 94 insertions(+), 66 deletions(-) diff --git a/doc/salome/gui/GEOM/images/remove_webs.png b/doc/salome/gui/GEOM/images/remove_webs.png index 951f5a5c5cf15596f3b527cc6100f8f590e0fb0d..7f677f423881d0f75895d46ab0c8567758096451 100644 GIT binary patch literal 22102 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 literal 22004 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 internal faces in the Main Menu select Repair - > Remove internal faces. -This operation removes all shared faces from a compound to obtain +This operation removes all shared faces from given solids to obtain one or more bigger solids from a set of smaller solids. \image html remove_webs.png -\n Arguments: Name + one shape. +\n Arguments: Name + one or more shapes containing solids. \n Advanced option: \ref restore_presentation_parameters_page "Set presentation parameters and sub-shapes from arguments". @@ -19,8 +19,8 @@ faces will stay as is, use \ref glue_faces_operation_page or \ref partition_page Remove Internal Faces if you need to remove them. \n TUI Command:
-geompy.RemoveInternalFaces( theCompound ),
-where theCompound is a compound of solids. +geompy.RemoveInternalFaces( theSolids ),
+where theSolids is either a compound or a list of solids. \n Our TUI Scripts provide you with useful examples of the \ref tui_remove_webs "Remove Internal Faces" functionality usage. diff --git a/doc/salome/gui/GEOM/input/repairing_operations.doc b/doc/salome/gui/GEOM/input/repairing_operations.doc index 28bf44819..b53ed10d0 100644 --- a/doc/salome/gui/GEOM/input/repairing_operations.doc +++ b/doc/salome/gui/GEOM/input/repairing_operations.doc @@ -26,7 +26,7 @@ splits an edge in two.
  • \subpage change_orientation_operation_page "Change orientation" - reverses the normals of the selected faces.
  • \subpage remove_webs_operation_page "Remove internal faces" - -rebuilds the topology of a compound of solids by removing the faces +rebuilds the topology of solids by removing the faces are shared by several solids.
  • \subpage remove_extra_edges_operation_page "Remove extra edges" - removes seam and degenerated edges from the given shape.
  • diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index e4a539f91..354aa3a7a 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -3705,12 +3705,12 @@ module GEOM GEOM_Object SewAllowNonManifold(in ListOfGO theObjects, in double theTolerance); /*! - * Rebuild the topology of theCompound of solids by removing - * of the faces that are shared by several solids. - * \param theCompound Shape to be processed. + * Rebuild the topology of theSolids by removing + * the faces that are shared by several solids. + * \param theSolids A list of shapes containing solids to be processed. * \return New GEOM_Object, containing processed shape. */ - GEOM_Object RemoveInternalFaces (in GEOM_Object theCompound); + GEOM_Object RemoveInternalFaces (in ListOfGO theSolids); /*! * \brief Addition of a point to a given edge object. diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 5d7d875bc..b710fb019 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -4590,7 +4590,7 @@ Please, select face, shell or solid and try again GEOM_REMOVE_WEBS - Compound of solids + Solids REMOVE_WEBS_NEW_OBJ_NAME diff --git a/src/GEOMImpl/GEOMImpl_HealingDriver.cxx b/src/GEOMImpl/GEOMImpl_HealingDriver.cxx index 0678df2c7..5cb3b922c 100644 --- a/src/GEOMImpl/GEOMImpl_HealingDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_HealingDriver.cxx @@ -142,7 +142,7 @@ Standard_Integer GEOMImpl_HealingDriver::Execute(TFunction_Logbook& log) const Sew(&HI, anOriginalShape, aShape, true); break; case REMOVE_INTERNAL_FACES: - RemoveInternalFaces(anOriginalShape, aShape); + RemoveInternalFaces(&HI, anOriginalShape, aShape); break; case DIVIDE_EDGE: AddPointOnEdge(&HI, anOriginalShape, aShape); @@ -470,11 +470,44 @@ Standard_Boolean GEOMImpl_HealingDriver::Sew (GEOMImpl_IHealing* theHI, //function : RemoveInternalFaces //purpose : //======================================================================= -Standard_Boolean GEOMImpl_HealingDriver::RemoveInternalFaces (const TopoDS_Shape& theOriginalShape, - TopoDS_Shape& theOutShape) const +Standard_Boolean +GEOMImpl_HealingDriver::RemoveInternalFaces (GEOMImpl_IHealing* theHI, + const TopoDS_Shape& theOriginalShape, + TopoDS_Shape& theOutShape) const { + // get all input shapes + TopTools_SequenceOfShape shapeSeq; + shapeSeq.Append( theOriginalShape ); + Handle(TColStd_HSequenceOfTransient) otherObjs = theHI->GetShapes(); + if ( !otherObjs.IsNull() ) + for ( int ind = 1; ind <= otherObjs->Length(); ind++) + { + Handle(GEOM_Function) aRefShape = Handle(GEOM_Function)::DownCast(otherObjs->Value(ind)); + TopoDS_Shape aShape = aRefShape->GetValue(); + if (aShape.IsNull()) + Standard_NullObject::Raise("Null object given"); + shapeSeq.Append( aShape ); + } + + // pass input shapes to the algorithm GEOMAlgo_RemoverWebs aTool; - aTool.SetShape(theOriginalShape); + if ( shapeSeq.Length() == 1 ) + { + aTool.SetShape( shapeSeq.First() ); + } + else + { + TopoDS_Compound solidCompound; + BRep_Builder builder; + builder.MakeCompound( solidCompound ); + for ( int ind = 1; ind <= shapeSeq.Length(); ++ind ) + for ( TopExp_Explorer so( shapeSeq( ind ), TopAbs_SOLID ); so.More(); so.Next() ) + builder.Add( solidCompound, so.Current() ); + + aTool.SetShape( solidCompound ); + } + + // run the algorithm aTool.Perform(); if (aTool.ErrorStatus() == 0) { // OK @@ -929,7 +962,7 @@ GetCreationInformation(std::string& theOperationName, break; case REMOVE_INTERNAL_FACES: theOperationName = "REMOVE_WEBS"; - AddParam( theParams, "Selected shape", aCI.GetOriginal() ); + AddParam( theParams, "Selected shapes", aCI.GetOriginalAndShapes() ); break; default: return false; diff --git a/src/GEOMImpl/GEOMImpl_HealingDriver.hxx b/src/GEOMImpl/GEOMImpl_HealingDriver.hxx index 2da99fa4f..5784acd14 100644 --- a/src/GEOMImpl/GEOMImpl_HealingDriver.hxx +++ b/src/GEOMImpl/GEOMImpl_HealingDriver.hxx @@ -103,7 +103,7 @@ private: Standard_Boolean RemoveIntWires( GEOMImpl_IHealing*, const TopoDS_Shape&, TopoDS_Shape& ) const; Standard_Boolean RemoveHoles ( GEOMImpl_IHealing*, const TopoDS_Shape&, TopoDS_Shape& ) const; Standard_Boolean Sew ( GEOMImpl_IHealing*, const TopoDS_Shape&, TopoDS_Shape&, Standard_Boolean ) const; - Standard_Boolean RemoveInternalFaces ( const TopoDS_Shape&, TopoDS_Shape& ) const; + Standard_Boolean RemoveInternalFaces ( GEOMImpl_IHealing*, const TopoDS_Shape&, TopoDS_Shape& ) const; Standard_Boolean AddPointOnEdge( GEOMImpl_IHealing*, const TopoDS_Shape&, TopoDS_Shape& ) const; Standard_Boolean ChangeOrientation( GEOMImpl_IHealing*, const TopoDS_Shape&, TopoDS_Shape& ) const; void LimitTolerance( GEOMImpl_IHealing*, const TopoDS_Shape&, TopoDS_Shape& ) const; diff --git a/src/GEOMImpl/GEOMImpl_IHealingOperations.cxx b/src/GEOMImpl/GEOMImpl_IHealingOperations.cxx index 9c5d71fff..ab4975aa2 100644 --- a/src/GEOMImpl/GEOMImpl_IHealingOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IHealingOperations.cxx @@ -652,22 +652,27 @@ GEOMImpl_IHealingOperations::Sew (std::list& theObjects, * RemoveInternalFaces */ //============================================================================= -Handle(GEOM_Object) GEOMImpl_IHealingOperations::RemoveInternalFaces (Handle(GEOM_Object) theObject) +Handle(GEOM_Object) +GEOMImpl_IHealingOperations::RemoveInternalFaces (std::list< Handle(GEOM_Object)> & theSolids) { // set error code, check parameters SetErrorCode(KO); - if (theObject.IsNull()) + if (theSolids.empty()) return NULL; - Handle(GEOM_Function) aFunction, aLastFunction = theObject->GetLastFunction(); - if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be processed + Handle(TColStd_HSequenceOfTransient) objects = GEOM_Object::GetLastFunctions( theSolids ); + if ( objects.IsNull() || objects->IsEmpty() ) { + SetErrorCode("NULL argument shape"); + return NULL; + } // Add a new object Handle(GEOM_Object) aNewObject = GetEngine()->AddObject(GetDocID(), GEOM_COPY); //Add the function - aFunction = aNewObject->AddFunction(GEOMImpl_HealingDriver::GetID(), REMOVE_INTERNAL_FACES); + Handle(GEOM_Function) + aFunction = aNewObject->AddFunction(GEOMImpl_HealingDriver::GetID(), REMOVE_INTERNAL_FACES); if (aFunction.IsNull()) return NULL; //Check if the function is set correctly @@ -675,7 +680,8 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::RemoveInternalFaces (Handle(GEO // prepare "data container" class IHealing GEOMImpl_IHealing HI (aFunction); - HI.SetOriginal(aLastFunction); + HI.SetOriginal( theSolids.front()->GetLastFunction() ); objects->Remove(1); + HI.SetShapes( objects ); //Compute the result try { @@ -693,7 +699,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::RemoveInternalFaces (Handle(GEO } //Make a Python command - GEOM::TPythonDump(aFunction) << aNewObject << " = geompy.RemoveInternalFaces(" << theObject << ")"; + GEOM::TPythonDump(aFunction) << aNewObject << " = geompy.RemoveInternalFaces(" << theSolids << ")"; SetErrorCode(OK); return aNewObject; diff --git a/src/GEOMImpl/GEOMImpl_IHealingOperations.hxx b/src/GEOMImpl/GEOMImpl_IHealingOperations.hxx index 7dd25d87f..f8b17b371 100644 --- a/src/GEOMImpl/GEOMImpl_IHealingOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_IHealingOperations.hxx @@ -74,7 +74,7 @@ class GEOMImpl_IHealingOperations : public GEOM_IOperations { double theTolerance, bool isAllowNonManifold); - Standard_EXPORT Handle(GEOM_Object) RemoveInternalFaces (Handle(GEOM_Object) theObject); + Standard_EXPORT Handle(GEOM_Object) RemoveInternalFaces (std::list< Handle(GEOM_Object)> & theSolids); Standard_EXPORT Handle(GEOM_Object) DivideEdge( Handle(GEOM_Object) theObject, int theIndex, diff --git a/src/GEOM_I/GEOM_IHealingOperations_i.cc b/src/GEOM_I/GEOM_IHealingOperations_i.cc index 3876b8159..366875588 100644 --- a/src/GEOM_I/GEOM_IHealingOperations_i.cc +++ b/src/GEOM_I/GEOM_IHealingOperations_i.cc @@ -377,20 +377,21 @@ GEOM_IHealingOperations_i::SewAllowNonManifold (const GEOM::ListOfGO& theObjects * RemoveInternalFaces */ //============================================================================= -GEOM::GEOM_Object_ptr GEOM_IHealingOperations_i::RemoveInternalFaces (GEOM::GEOM_Object_ptr theCompound) +GEOM::GEOM_Object_ptr +GEOM_IHealingOperations_i::RemoveInternalFaces (const GEOM::ListOfGO& theSolids) { GEOM::GEOM_Object_var aGEOMObject; // Set a not done flag GetOperations()->SetNotDone(); - // Get the object - Handle(GEOM_Object) anObject = GetObjectImpl(theCompound); - if (anObject.IsNull()) + // Get the objects + std::list< Handle(GEOM_Object) > aShapes; + if (! GetListOfObjectsImpl( theSolids, aShapes )) return aGEOMObject._retn(); // Perform - Handle(GEOM_Object) aNewObject = GetOperations()->RemoveInternalFaces(anObject); + Handle(GEOM_Object) aNewObject = GetOperations()->RemoveInternalFaces(aShapes); if (!GetOperations()->IsDone() || aNewObject.IsNull()) return aGEOMObject._retn(); diff --git a/src/GEOM_I/GEOM_IHealingOperations_i.hh b/src/GEOM_I/GEOM_IHealingOperations_i.hh index 7cbc08d78..04802f639 100644 --- a/src/GEOM_I/GEOM_IHealingOperations_i.hh +++ b/src/GEOM_I/GEOM_IHealingOperations_i.hh @@ -75,7 +75,7 @@ class GEOM_I_EXPORT GEOM_IHealingOperations_i : GEOM::GEOM_Object_ptr SewAllowNonManifold (const GEOM::ListOfGO & theObject, CORBA::Double theTolerance); - GEOM::GEOM_Object_ptr RemoveInternalFaces (GEOM::GEOM_Object_ptr theCompound); + GEOM::GEOM_Object_ptr RemoveInternalFaces (const GEOM::ListOfGO& theSolids); GEOM::GEOM_Object_ptr DivideEdge (GEOM::GEOM_Object_ptr theObject, CORBA::Short theIndex, diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index 7d1ab412d..8890b42ca 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -6399,9 +6399,9 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): self._autoPublish(anObj, theName, "sewed") return anObj - ## Rebuild the topology of theCompound of solids by removing - # of the faces that are shared by several solids. - # @param theCompound Shape to be processed. + ## Rebuild the topology of theSolids by removing + # the faces that are shared by several solids. + # @param theSolids A compound or a list of solids to be processed. # @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. @@ -6410,13 +6410,13 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # # @ref tui_remove_webs "Example" @ManageTransactions("HealOp") - def RemoveInternalFaces (self, theCompound, theName=None): + def RemoveInternalFaces (self, theSolids, theName=None): """ - Rebuild the topology of theCompound of solids by removing - of the faces that are shared by several solids. + Rebuild the topology of theSolids by removing + the faces that are shared by several solids. Parameters: - theCompound Shape to be processed. + theSolids A compound or a list of solids to be processed. 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. @@ -6425,7 +6425,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): New GEOM.GEOM_Object, containing processed shape. """ # Example: see GEOM_TestHealing.py - anObj = self.HealOp.RemoveInternalFaces(theCompound) + anObj = self.HealOp.RemoveInternalFaces(ToList(theSolids)) RaiseIfFailed("RemoveInternalFaces", self.HealOp) self._autoPublish(anObj, theName, "removeWebs") return anObj diff --git a/src/RepairGUI/RepairGUI_RemoveWebsDlg.cxx b/src/RepairGUI/RepairGUI_RemoveWebsDlg.cxx index a0e186719..0d0158646 100755 --- a/src/RepairGUI/RepairGUI_RemoveWebsDlg.cxx +++ b/src/RepairGUI/RepairGUI_RemoveWebsDlg.cxx @@ -63,7 +63,7 @@ RepairGUI_RemoveWebsDlg::RepairGUI_RemoveWebsDlg (GeometryGUI* theGeometryGUI, Q GroupPoints = new DlgRef_1Sel( centralWidget() ); GroupPoints->GroupBox1->setTitle( tr( "GEOM_REMOVE_WEBS" ) ); - GroupPoints->TextLabel1->setText( tr( "GEOM_SELECTED_SHAPE" ) ); + GroupPoints->TextLabel1->setText( tr( "GEOM_SELECTED_SHAPES" ) ); GroupPoints->PushButton1->setIcon( image1 ); GroupPoints->LineEdit1->setReadOnly( true ); @@ -141,7 +141,7 @@ bool RepairGUI_RemoveWebsDlg::ClickOnApply() initName(); myEditCurrentArgument->setText(""); - myObject = GEOM::GEOM_Object::_nil(); + myObjects.clear(); myOkObject = false; @@ -158,33 +158,16 @@ bool RepairGUI_RemoveWebsDlg::ClickOnApply() void RepairGUI_RemoveWebsDlg::SelectionIntoArgument() { myEditCurrentArgument->setText( "" ); - QString aName; - - LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); - SALOME_ListIO aSelList; - aSelMgr->selectedObjects(aSelList); - - if (myEditCurrentArgument == GroupPoints->LineEdit1) { - if (aSelList.Extent() != 1) { - if (myEditCurrentArgument == GroupPoints->LineEdit1) - myOkObject = false; - return; - } - } - - // nbSel == 1 - GEOM::GEOM_Object_ptr aSelectedObject = - GEOMBase::ConvertIOinGEOMObject(aSelList.First()); + myObjects.clear(); + myOkObject = false; - if (CORBA::is_nil(aSelectedObject)) - return; + myObjects = getSelected( TopAbs_SHAPE, -1 ); - if (myEditCurrentArgument == GroupPoints->LineEdit1) { - myObject = aSelectedObject; + if ( !myObjects.isEmpty() ) { + QString aName = myObjects.count() > 1 ? QString( "%1_objects").arg( myObjects.count() ) : GEOMBase::GetName( myObjects[0].get() ); myOkObject = true; + myEditCurrentArgument->setText( aName ); } - - myEditCurrentArgument->setText(GEOMBase::GetName(aSelectedObject)); } //================================================================================= @@ -242,7 +225,7 @@ void RepairGUI_RemoveWebsDlg::enterEvent (QEvent* e) void RepairGUI_RemoveWebsDlg::activateSelection() { TColStd_MapOfInteger aTypes; - //aTypes.Add( GEOM_SOLID ); + aTypes.Add( GEOM_SOLID ); aTypes.Add( GEOM_COMPOUND ); globalSelection( aTypes ); } @@ -271,8 +254,13 @@ bool RepairGUI_RemoveWebsDlg::isValid (QString& msg) //================================================================================= bool RepairGUI_RemoveWebsDlg::execute (ObjectList& objects) { + GEOM::ListOfGO_var objList = new GEOM::ListOfGO; + objList->length( myObjects.count() ); + for ( int i = 0; i < myObjects.count(); ++i ) + objList[i] = myObjects[i].copy(); + GEOM::GEOM_IHealingOperations_var anOper = GEOM::GEOM_IHealingOperations::_narrow(getOperation()); - GEOM::GEOM_Object_var anObj = anOper->RemoveInternalFaces(myObject); + GEOM::GEOM_Object_var anObj = anOper->RemoveInternalFaces(objList); if (!anObj->_is_nil()) objects.push_back(anObj._retn()); diff --git a/src/RepairGUI/RepairGUI_RemoveWebsDlg.h b/src/RepairGUI/RepairGUI_RemoveWebsDlg.h index 72fd49937..7f04037e5 100755 --- a/src/RepairGUI/RepairGUI_RemoveWebsDlg.h +++ b/src/RepairGUI/RepairGUI_RemoveWebsDlg.h @@ -52,7 +52,7 @@ private: void activateSelection(); private: - GEOM::GEOM_Object_var myObject; + QList myObjects; bool myOkObject; DlgRef_1Sel* GroupPoints; -- 2.39.2