From d632c33a6e5d63d324c5e4ed09c27741c28cd2e2 Mon Sep 17 00:00:00 2001 From: skv Date: Thu, 16 Oct 2014 18:31:50 +0400 Subject: [PATCH] 0022758: [EDF] Creation of a face from a surface and limiting edges --- .../examples/topological_geom_objs_ex03.py | 5 + doc/salome/gui/GEOM/images/neo-obj4.png | Bin 15528 -> 18429 bytes doc/salome/gui/GEOM/images/neo-obj4_2.png | Bin 0 -> 18206 bytes doc/salome/gui/GEOM/input/creating_face.doc | 14 +- idl/GEOM_Gen.idl | 9 + resources/CMakeLists.txt | 1 + resources/build_face_surface.png | Bin 0 -> 818 bytes src/BuildGUI/BuildGUI_FaceDlg.cxx | 225 ++++++++++++++---- src/BuildGUI/BuildGUI_FaceDlg.h | 6 +- src/GEOMGUI/GEOM_images.ts | 4 + src/GEOMGUI/GEOM_msg_en.ts | 4 + src/GEOMImpl/GEOMImpl_IShapesOperations.cxx | 71 ++++++ src/GEOMImpl/GEOMImpl_IShapesOperations.hxx | 4 + src/GEOMImpl/GEOMImpl_ShapeDriver.cxx | 58 +++++ src/GEOMImpl/GEOMImpl_Types.hxx | 1 + src/GEOM_I/GEOM_IShapesOperations_i.cc | 33 +++ src/GEOM_I/GEOM_IShapesOperations_i.hh | 3 + src/GEOM_SWIG/GEOM_TestAll.py | 2 + src/GEOM_SWIG/geomBuilder.py | 33 +++ 19 files changed, 427 insertions(+), 46 deletions(-) create mode 100644 doc/salome/gui/GEOM/images/neo-obj4_2.png create mode 100644 resources/build_face_surface.png diff --git a/doc/salome/examples/topological_geom_objs_ex03.py b/doc/salome/examples/topological_geom_objs_ex03.py index db2f060a9..972d81a6f 100644 --- a/doc/salome/examples/topological_geom_objs_ex03.py +++ b/doc/salome/examples/topological_geom_objs_ex03.py @@ -36,11 +36,13 @@ face1 = geompy.MakeFace(wire, isPlanarFace) # create faces from two wires face2 = geompy.MakeFaceWires([wire, sketcher1],isPlanarFace) face3 = geompy.MakeFaces([sketcher2, sketcher3],isPlanarFace) +face4 = geompy.MakeFaceFromSurface(face1, sketcher1) # add objects in the study id_face1 = geompy.addToStudy(face1,"Face1") id_face2 = geompy.addToStudy(face2,"Face2") id_face3 = geompy.addToStudy(face3,"Face3") +id_face4 = geompy.addToStudy(face4,"Face4") # display the faces gg.createAndDisplayGO(id_face1) @@ -52,3 +54,6 @@ gg.setTransparency(id_face2,0.2) gg.createAndDisplayGO(id_face3) gg.setDisplayMode(id_face3,1) gg.setTransparency(id_face3,0.2) +gg.createAndDisplayGO(id_face4) +gg.setDisplayMode(id_face4,1) +gg.setTransparency(id_face4,0.2) diff --git a/doc/salome/gui/GEOM/images/neo-obj4.png b/doc/salome/gui/GEOM/images/neo-obj4.png index 283601c26391ac4979958f6ecd55682ea60353a9..9b0f84c130b2442c7db86eb425ac145f39e7a9ca 100755 GIT binary patch literal 18429 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 VNnW*qU&I5E5S4jfD6ISCe*wnc1Y7_B literal 15528 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 a8S&)zkz_VJ0pCD|$i7gLDt`Xv-Twpq($mEN diff --git a/doc/salome/gui/GEOM/images/neo-obj4_2.png b/doc/salome/gui/GEOM/images/neo-obj4_2.png new file mode 100644 index 0000000000000000000000000000000000000000..233aa6fb4eaf72b57c8649949f4836bf5373888d GIT binary patch literal 18206 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/input/creating_face.doc b/doc/salome/gui/GEOM/input/creating_face.doc index 52f2cfed1..9f31c4d04 100644 --- a/doc/salome/gui/GEOM/input/creating_face.doc +++ b/doc/salome/gui/GEOM/input/creating_face.doc @@ -5,7 +5,10 @@ To create a \b Face in the Main Menu select New Entity - > Build - > Face -\n To create a \b Face you need to select input shape(s). The list of +There are two algorithms to create a \b Face. In both cases the \b Result +of the operation will be a GEOM_Object (FACE). + +\n Firstly, to create a \b Face you need to select input shape(s). The list of input shapes can include shapes of any type except vertices; if the shapes are neither wires nor edges, the algorithm extracts all edges from the input shapes and works on the obtaineed edges. @@ -26,6 +29,15 @@ face or nothing if it is impossible. \image html neo-obj4.png +\n Secondly, it is possible to create a face based on another face's surface and bounded by a wire. + +\n The \b Result will be a \b GEOM_Object (FACE). + +\n TUI Command: geompy.MakeFaceFromSurface(theFace, theWire) +\n Arguments: Name + 1 face + 1 wire. + +\image html neo-obj4_2.png + \n Example: \image html facesn1.png diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 354aa3a7a..9004a8981 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -1926,6 +1926,15 @@ module GEOM */ GEOM_Object MakeFaceWires (in ListOfGO theWires, in boolean isPlanarWanted); + /** + * \brief Create a face based on surface of theFace limited by theWire. + * \param theFace the face whose surface is used to create a new face. + * \param theWire closed Wire build the face. + * \return New GEOM_Object, containing the created face. + */ + GEOM_Object MakeFaceFromSurface(in GEOM_Object theFace, + in GEOM_Object theWire); + /*! * \brief Create a shell from the set of faces and shells. * \param theFacesAndShells List of faces and/or shells. diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt index 1fa4e9d9d..e3afdf6cb 100755 --- a/resources/CMakeLists.txt +++ b/resources/CMakeLists.txt @@ -54,6 +54,7 @@ SET( _res_files build_edge_wire.png build_edge_curve.png build_face.png + build_face_surface.png build_shell.png build_solid.png build_wire.png diff --git a/resources/build_face_surface.png b/resources/build_face_surface.png new file mode 100644 index 0000000000000000000000000000000000000000..f77b0f5a80ab5a8ba8430e925bdb94d720165d5b GIT binary patch literal 818 zcmV-21I_%2P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2i^)4 z3=tt`fyKN400Oc}L_t(I%dM14Xj4HHhQFkdO6$&rb}ufp#a65aEU5*pE$TukZ77JK zSV7Q=xX_KS7!;Li!FLzxLKLZrFHkH}A6UUnRdl7$r3hluu4?*dKQzk>V1V|8#jJ*S5Ac`)>+EqqDQqHgp{X_FB*L7#kalR19i5 zb>WTn_IBIYlfoE_)E1#M&(8HxC={5On3%$d{!LkHYpY$@br`8FC$`4%rN;F&^OJ)# zZXTkhrp8uPRoQ8QT zE(EHr5|84IF^sv z3NV0ZG>S2Bd3P(_=@DkmsN#DjixzG%x4wh&ozn3`tCHYUkp)b!`E*a zj8?ojvyrBr6iA=9HxHE5eF0tqW~-A4~$!)RRIB52Ga??j0|w`veRJ`TGf+19Sv42@u~lgpoc*3AFUl z(!(f$(UOn%PnKZ$05lAI4mXEdpb=;R<^gkowE&GhDYW!?fBQ)I5k|vh60A;nx2X+4 w^8)x3aHw$k6RcAEnhs3xiurKOmBRpj09I{Vdx__ZK>z>%07*qoM6N<$g6|e`-2eap literal 0 HcmV?d00001 diff --git a/src/BuildGUI/BuildGUI_FaceDlg.cxx b/src/BuildGUI/BuildGUI_FaceDlg.cxx index 3a5884fee..c1a1ade02 100644 --- a/src/BuildGUI/BuildGUI_FaceDlg.cxx +++ b/src/BuildGUI/BuildGUI_FaceDlg.cxx @@ -49,18 +49,20 @@ // TRUE to construct a modal dialog. //================================================================================= BuildGUI_FaceDlg::BuildGUI_FaceDlg( GeometryGUI* theGeometryGUI, QWidget* parent ) - : GEOMBase_Skeleton( theGeometryGUI, parent ) + : GEOMBase_Skeleton( theGeometryGUI, parent ), + GroupWire (0), + myGroupSurf (0) { - QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_BUILD_FACE" ) ) ); - QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) ); + QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) ); + QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_BUILD_FACE" ) ) ); + QPixmap image2( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_BUILD_FACE_SURFACE" ) ) ); setWindowTitle( tr( "GEOM_FACE_TITLE" ) ); /***************************************************************/ mainFrame()->GroupConstructors->setTitle( tr( "GEOM_FACE" ) ); - mainFrame()->RadioButton1->setIcon( image0 ); - mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose ); - mainFrame()->RadioButton2->close(); + mainFrame()->RadioButton1->setIcon( image1 ); + mainFrame()->RadioButton2->setIcon( image2 ); mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose ); mainFrame()->RadioButton3->close(); @@ -69,11 +71,20 @@ BuildGUI_FaceDlg::BuildGUI_FaceDlg( GeometryGUI* theGeometryGUI, QWidget* parent GroupWire->GroupBox1->setTitle( tr( "GEOM_FACE_FFW" ) ); GroupWire->TextLabel1->setText( tr( "GEOM_OBJECTS" ) ); GroupWire->CheckButton1->setText( tr( "GEOM_FACE_OPT" ) ); - GroupWire->PushButton1->setIcon( image1 ); + GroupWire->PushButton1->setIcon( image0 ); + + myGroupSurf = new DlgRef_2Sel(centralWidget()); + + myGroupSurf->GroupBox1->setTitle(tr("GEOM_FACE_FROM_SURFACE" ) ); + myGroupSurf->TextLabel1->setText(tr("GEOM_FACE")); + myGroupSurf->TextLabel2->setText(tr("GEOM_WIRE")); + myGroupSurf->PushButton1->setIcon(image0); + myGroupSurf->PushButton2->setIcon(image0); QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); layout->setMargin( 0 ); layout->setSpacing( 6 ); layout->addWidget( GroupWire ); + layout->addWidget(myGroupSurf); /***************************************************************/ setHelpFileName("create_face_page.html"); @@ -102,40 +113,82 @@ void BuildGUI_FaceDlg::Init() /* init variables */ myEditCurrentArgument = GroupWire->LineEdit1; GroupWire->LineEdit1->setReadOnly( true ); + myGroupSurf->LineEdit1->setReadOnly( true ); + myGroupSurf->LineEdit2->setReadOnly( true ); GroupWire->CheckButton1->setChecked( true ); myWires.clear(); - - setGlobalSelection(); + myFace.nullify(); + myWire.nullify(); /* signals and slots connections */ + connect(myGeomGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); + connect(myGeomGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); + + connect(this, SIGNAL(constructorsClicked(int)), this, SLOT(ConstructorsClicked(int))); + connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); connect( GroupWire->LineEdit1, SIGNAL( returnPressed()), this, SLOT( LineEditReturnPressed() ) ); connect( GroupWire->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); + connect( myGroupSurf->LineEdit1, SIGNAL( returnPressed()), this, SLOT( LineEditReturnPressed() ) ); + connect( myGroupSurf->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); + connect( myGroupSurf->LineEdit2, SIGNAL( returnPressed()), this, SLOT( LineEditReturnPressed() ) ); + connect( myGroupSurf->PushButton2, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); initName( tr( "GEOM_FACE" ) ); - SelectionIntoArgument(); + + ConstructorsClicked(0); } //================================================================================= -// function : setGlobalSelection -// purpose : +// function : ConstructorsClicked() +// purpose : Radio button management //================================================================================= -void BuildGUI_FaceDlg::setGlobalSelection() +void BuildGUI_FaceDlg::ConstructorsClicked(int constructorId) { - TColStd_MapOfInteger aMap; - - aMap.Add(GEOM_EDGE); - aMap.Add(GEOM_WIRE); - aMap.Add(GEOM_FACE); - aMap.Add(GEOM_SHELL); - aMap.Add(GEOM_SOLID); - aMap.Add(GEOM_COMPOUND); + switch (constructorId) { + case 0: + { + TColStd_MapOfInteger aMap; + + aMap.Add(GEOM_EDGE); + aMap.Add(GEOM_WIRE); + aMap.Add(GEOM_FACE); + aMap.Add(GEOM_SHELL); + aMap.Add(GEOM_SOLID); + aMap.Add(GEOM_COMPOUND); + globalSelection(aMap); + + myEditCurrentArgument = GroupWire->LineEdit1; + GroupWire->LineEdit1->setText(""); + GroupWire->show(); + myGroupSurf->hide(); + break; + } + case 1: + { + globalSelection(GEOM_FACE); // For the first element. + + myEditCurrentArgument = myGroupSurf->LineEdit1; + myGroupSurf->LineEdit1->setText(""); + myGroupSurf->PushButton1->setDown(true); + myGroupSurf->PushButton2->setDown(false); + GroupWire->hide(); + myGroupSurf->show(); + break; + } + } - globalSelection(aMap); + myWires.clear(); + myFace.nullify(); + myWire.nullify(); + qApp->processEvents(); + updateGeometry(); + resize(minimumSizeHint()); + SelectionIntoArgument(); } //================================================================================= @@ -170,17 +223,45 @@ bool BuildGUI_FaceDlg::ClickOnApply() //================================================================================= void BuildGUI_FaceDlg::SelectionIntoArgument() { - myEditCurrentArgument->setText( "" ); + if (myEditCurrentArgument == GroupWire->LineEdit1) { + myEditCurrentArgument->setText( "" ); - QList types; - types << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE - << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPOUND; - myWires = getSelected( types, -1 ); + QList types; + types << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE + << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPOUND; + myWires = getSelected( types, -1 ); + + if ( !myWires.isEmpty() ) { + QString aName = myWires.count() > 1 ? QString( "%1_objects").arg( myWires.count() ) : GEOMBase::GetName( myWires[0].get() ); + myEditCurrentArgument->setText( aName ); + } + } else if (myEditCurrentArgument == myGroupSurf->LineEdit1 || + myEditCurrentArgument == myGroupSurf->LineEdit2) { + const bool isEditFace = myEditCurrentArgument == myGroupSurf->LineEdit1; + const TopAbs_ShapeEnum aType = isEditFace ? TopAbs_FACE : TopAbs_WIRE; + GEOM::GeomObjPtr aSelectedObject = getSelected(aType); + GEOM::GeomObjPtr &anObj = isEditFace ? myFace : myWire; + + if (aSelectedObject) { + myEditCurrentArgument->setText(GEOMBase::GetName(aSelectedObject.get())); + anObj = aSelectedObject; + } else { + myEditCurrentArgument->setText(""); + anObj.nullify(); + } - if ( !myWires.isEmpty() ) { - QString aName = myWires.count() > 1 ? QString( "%1_objects").arg( myWires.count() ) : GEOMBase::GetName( myWires[0].get() ); - myEditCurrentArgument->setText( aName ); + if (isEditFace) { + if (myFace && !myWire) { + myGroupSurf->PushButton2->click(); + } + } else { + if (!myFace && myWire) { + myGroupSurf->PushButton1->click(); + } + } } + + displayPreview(true); } @@ -191,14 +272,36 @@ void BuildGUI_FaceDlg::SelectionIntoArgument() void BuildGUI_FaceDlg::SetEditCurrentArgument() { QPushButton* send = (QPushButton*)sender(); - if ( send != GroupWire->PushButton1 ) - return; - - setGlobalSelection(); - myEditCurrentArgument = GroupWire->LineEdit1; + if (send == GroupWire->PushButton1) { + TColStd_MapOfInteger aMap; + + aMap.Add(GEOM_EDGE); + aMap.Add(GEOM_WIRE); + aMap.Add(GEOM_FACE); + aMap.Add(GEOM_SHELL); + aMap.Add(GEOM_SOLID); + aMap.Add(GEOM_COMPOUND); + globalSelection(aMap); + myEditCurrentArgument = GroupWire->LineEdit1; + } + else if (send == myGroupSurf->PushButton1) { + globalSelection(GEOM_FACE); + myEditCurrentArgument = myGroupSurf->LineEdit1; + myGroupSurf->PushButton2->setDown(false); + myGroupSurf->LineEdit2->setEnabled(false); + } + else if (send == myGroupSurf->PushButton2) { + globalSelection(GEOM_WIRE); + myEditCurrentArgument = myGroupSurf->LineEdit2; + myGroupSurf->PushButton1->setDown(false); + myGroupSurf->LineEdit1->setEnabled(false); + } + // enable line edit + myEditCurrentArgument->setEnabled(true); myEditCurrentArgument->setFocus(); - SelectionIntoArgument(); + send->setDown(true); + displayPreview(true); } @@ -211,7 +314,10 @@ void BuildGUI_FaceDlg::ActivateThisDialog() GEOMBase_Skeleton::ActivateThisDialog(); connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); - setGlobalSelection(); + connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); + + ConstructorsClicked(getConstructorId()); } @@ -240,7 +346,20 @@ GEOM::GEOM_IOperations_ptr BuildGUI_FaceDlg::createOperation() //================================================================================= bool BuildGUI_FaceDlg::isValid( QString& ) { - return !myWires.isEmpty(); + bool ok = false; + + switch (getConstructorId()) { + case 0: + ok = !myWires.isEmpty(); + break; + case 1: + ok = myFace && myWire; + break; + default: + break; + } + + return ok; } //================================================================================= @@ -249,14 +368,32 @@ bool BuildGUI_FaceDlg::isValid( QString& ) //================================================================================= bool BuildGUI_FaceDlg::execute( ObjectList& objects ) { + bool res = false; GEOM::GEOM_IShapesOperations_var anOper = GEOM::GEOM_IShapesOperations::_narrow( getOperation() ); + GEOM::GEOM_Object_var anObj; - GEOM::ListOfGO_var objlist = new GEOM::ListOfGO(); - objlist->length( myWires.count() ); - for ( int i = 0; i < myWires.count(); i++ ) - objlist[i] = myWires[i].copy(); + switch (getConstructorId()) { + case 0: + { + GEOM::ListOfGO_var objlist = new GEOM::ListOfGO(); + + objlist->length( myWires.count() ); - GEOM::GEOM_Object_var anObj = anOper->MakeFaceWires( objlist.in(), GroupWire->CheckButton1->isChecked() ); + for ( int i = 0; i < myWires.count(); i++ ) { + objlist[i] = myWires[i].copy(); + } + + anObj = anOper->MakeFaceWires( objlist.in(), GroupWire->CheckButton1->isChecked() ); + res = true; + } + break; + case 1: + anObj = anOper->MakeFaceFromSurface(myFace.get(), myWire.get()); + res = true; + break; + default: + break; + } if (!anObj->_is_nil()) { objects.push_back(anObj._retn()); @@ -270,5 +407,5 @@ bool BuildGUI_FaceDlg::execute( ObjectList& objects ) } } - return true; + return res; } diff --git a/src/BuildGUI/BuildGUI_FaceDlg.h b/src/BuildGUI/BuildGUI_FaceDlg.h index 9a2f89c32..29e152781 100644 --- a/src/BuildGUI/BuildGUI_FaceDlg.h +++ b/src/BuildGUI/BuildGUI_FaceDlg.h @@ -31,6 +31,7 @@ #include "GEOM_GenericObjPtr.h" class DlgRef_1Sel1Check; +class DlgRef_2Sel; //================================================================================= // class : BuildGUI_FaceDlg @@ -53,14 +54,17 @@ protected: private: void Init(); void enterEvent( QEvent* ); - void setGlobalSelection(); private: QList myWires; + GEOM::GeomObjPtr myFace; + GEOM::GeomObjPtr myWire; DlgRef_1Sel1Check* GroupWire; + DlgRef_2Sel* myGroupSurf; private slots: + void ConstructorsClicked (int); void ClickOnOk(); bool ClickOnApply(); void ActivateThisDialog(); diff --git a/src/GEOMGUI/GEOM_images.ts b/src/GEOMGUI/GEOM_images.ts index 40c06a632..a125bcec8 100644 --- a/src/GEOMGUI/GEOM_images.ts +++ b/src/GEOMGUI/GEOM_images.ts @@ -159,6 +159,10 @@ ICON_DLG_BUILD_FACE build_face.png + + ICON_DLG_BUILD_FACE_SURFACE + build_face_surface.png + ICON_DLG_FACE_HW face_hw.png diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index b710fb019..0cba96179 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -691,6 +691,10 @@ Please, select face, shell or solid and try again GEOM_FACE_FFW Face creation from wires and/or edges + + GEOM_FACE_FROM_SURFACE + Face creation from surface bounded by wire + GEOM_FACE_OPT Try to create a planar face diff --git a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx index eb22375c4..70c87a35d 100644 --- a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx @@ -548,6 +548,77 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeFaceWires return aShape; } +//============================================================================= +/*! + * MakeFaceFromSurface + */ +//============================================================================= +Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeFaceFromSurface + (Handle(GEOM_Object) theFace, + Handle(GEOM_Object) theWire) +{ + SetErrorCode(KO); + + //Add a new object + Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), GEOM_FACE); + + //Add a new function + Handle(GEOM_Function) aFunction = + aShape->AddFunction(GEOMImpl_ShapeDriver::GetID(), FACE_FROM_SURFACE); + + if (aFunction.IsNull()) { + return NULL; + } + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != GEOMImpl_ShapeDriver::GetID()) { + return NULL; + } + + GEOMImpl_IShapes aCI (aFunction); + Handle(TColStd_HSequenceOfTransient) aShapesSeq = + new TColStd_HSequenceOfTransient; + Handle(GEOM_Function) aRefFace = theFace->GetLastFunction(); + Handle(GEOM_Function) aRefWire = theWire->GetLastFunction(); + + if (aRefFace.IsNull()) { + SetErrorCode("NULL argument face for the face construction"); + return NULL; + } + + if (aRefWire.IsNull()) { + SetErrorCode("NULL argument wire for the face construction"); + return NULL; + } + + aShapesSeq->Append(aRefFace); + aShapesSeq->Append(aRefWire); + + aCI.SetShapes(aShapesSeq); + + //Compute the face + try { + OCC_CATCH_SIGNALS; + if (!GetSolver()->ComputeFunction(aFunction)) { + SetErrorCode("Shape driver failed"); + return NULL; + } + } + catch (Standard_Failure) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode(aFail->GetMessageString()); + return NULL; + } + + //Make a Python command + GEOM::TPythonDump (aFunction) << aShape + << " = geompy.MakeFaceFromSurface(" << theFace << ", " << theWire << ")"; + + SetErrorCode(OK); + + return aShape; +} + //============================================================================= /*! * MakeShell diff --git a/src/GEOMImpl/GEOMImpl_IShapesOperations.hxx b/src/GEOMImpl/GEOMImpl_IShapesOperations.hxx index a5b6bc396..8c15f7190 100644 --- a/src/GEOMImpl/GEOMImpl_IShapesOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_IShapesOperations.hxx @@ -85,6 +85,10 @@ class GEOMImpl_IShapesOperations : public GEOM_IOperations Standard_EXPORT Handle(GEOM_Object) MakeFaceWires (std::list theWires, const bool isPlanarWanted); + Standard_EXPORT Handle(GEOM_Object) MakeFaceFromSurface + (Handle(GEOM_Object) theFace, + Handle(GEOM_Object) theWire); + Standard_EXPORT Handle(GEOM_Object) MakeShell (std::list theShapes); Standard_EXPORT Handle(GEOM_Object) MakeSolidShells (std::list theShells); diff --git a/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx b/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx index a54d8e0be..39c40d119 100644 --- a/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx @@ -42,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -306,6 +307,44 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const aShape = C; } } + else if (aType == FACE_FROM_SURFACE) { +#ifdef RESULT_TYPE_CHECK + anExpectedType = TopAbs_FACE; +#endif + + Handle(TColStd_HSequenceOfTransient) aShapes = aCI.GetShapes(); + + if (aShapes.IsNull() == Standard_False) { + Standard_Integer aNbShapes = aShapes->Length(); + + if (aNbShapes == 2) { + Handle(GEOM_Function) aRefFace = + Handle(GEOM_Function)::DownCast(aShapes->Value(1)); + Handle(GEOM_Function) aRefWire = + Handle(GEOM_Function)::DownCast(aShapes->Value(2)); + + if (aRefFace.IsNull() == Standard_False && + aRefWire.IsNull() == Standard_False) { + TopoDS_Shape aShFace = aRefFace->GetValue(); + TopoDS_Shape aShWire = aRefWire->GetValue(); + + if (aShFace.IsNull() == Standard_False && + aShFace.ShapeType() == TopAbs_FACE && + aShWire.IsNull() == Standard_False && + aShWire.ShapeType() == TopAbs_WIRE) { + TopoDS_Face aFace = TopoDS::Face(aShFace); + TopoDS_Wire aWire = TopoDS::Wire(aShWire); + Handle(Geom_Surface) aSurf = BRep_Tool::Surface(aFace); + BRepBuilderAPI_MakeFace aMkFace(aSurf, aWire); + + if (aMkFace.IsDone()) { + aShape = aMkFace.Shape(); + } + } + } + } + } + } else if (aType == SHELL_FACES) { anExpectedType = TopAbs_SHELL; @@ -1234,6 +1273,25 @@ GetCreationInformation(std::string& theOperationName, AddParam( theParams, "Wires/edges", aCI.GetShapes() ); AddParam( theParams, "Is planar wanted", aCI.GetIsPlanar() ); break; + case FACE_FROM_SURFACE: + { + theOperationName = "FACE"; + + Handle(TColStd_HSequenceOfTransient) shapes = aCI.GetShapes(); + + if (shapes.IsNull() == Standard_False) { + Standard_Integer aNbShapes = shapes->Length(); + + if (aNbShapes > 0) { + AddParam(theParams, "Face", shapes->Value(1)); + + if (aNbShapes > 1) { + AddParam(theParams, "Wire", shapes->Value(2)); + } + } + } + break; + } case SHELL_FACES: theOperationName = "SHELL"; AddParam( theParams, "Objects", aCI.GetShapes() ); diff --git a/src/GEOMImpl/GEOMImpl_Types.hxx b/src/GEOMImpl/GEOMImpl_Types.hxx index fcfb87f64..5a4be204c 100644 --- a/src/GEOMImpl/GEOMImpl_Types.hxx +++ b/src/GEOMImpl/GEOMImpl_Types.hxx @@ -303,6 +303,7 @@ #define EDGE_CURVE_LENGTH 12 #define SHAPES_ON_SHAPE 13 #define SHAPE_ISOLINE 14 +#define FACE_FROM_SURFACE 15 #define ARCHIMEDE_TYPE 1 diff --git a/src/GEOM_I/GEOM_IShapesOperations_i.cc b/src/GEOM_I/GEOM_IShapesOperations_i.cc index 1e965a798..a03d84e47 100644 --- a/src/GEOM_I/GEOM_IShapesOperations_i.cc +++ b/src/GEOM_I/GEOM_IShapesOperations_i.cc @@ -246,6 +246,39 @@ GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeFaceWires return GetObject(anObject); } +//============================================================================= +/*! + * MakeFaceFromSurface + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeFaceFromSurface + (GEOM::GEOM_Object_ptr theFace, + GEOM::GEOM_Object_ptr theWire) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Get the reference face and wire + Handle(GEOM_Object) aFace = GetObjectImpl(theFace); + Handle(GEOM_Object) aWire = GetObjectImpl(theWire); + + if (aFace.IsNull() || aWire.IsNull()) { + return aGEOMObject._retn(); + } + + //Create the Face + Handle(GEOM_Object) anObject = + GetOperations()->MakeFaceFromSurface(aFace, aWire); + + if (anObject.IsNull()) { + return aGEOMObject._retn(); + } + + return GetObject(anObject); +} + //============================================================================= /*! * MakeShell diff --git a/src/GEOM_I/GEOM_IShapesOperations_i.hh b/src/GEOM_I/GEOM_IShapesOperations_i.hh index 8b18fe9f2..be9d5584c 100644 --- a/src/GEOM_I/GEOM_IShapesOperations_i.hh +++ b/src/GEOM_I/GEOM_IShapesOperations_i.hh @@ -64,6 +64,9 @@ class GEOM_I_EXPORT GEOM_IShapesOperations_i : GEOM::GEOM_Object_ptr MakeFaceWires (const GEOM::ListOfGO& theWires, CORBA::Boolean isPlanarWanted); + GEOM::GEOM_Object_ptr MakeFaceFromSurface(GEOM::GEOM_Object_ptr theFace, + GEOM::GEOM_Object_ptr theWire); + GEOM::GEOM_Object_ptr MakeShell (const GEOM::ListOfGO& theFacesAndShells); GEOM::GEOM_Object_ptr MakeSolidShell (GEOM::GEOM_Object_ptr theShell); diff --git a/src/GEOM_SWIG/GEOM_TestAll.py b/src/GEOM_SWIG/GEOM_TestAll.py index b644c196b..a63590d52 100644 --- a/src/GEOM_SWIG/GEOM_TestAll.py +++ b/src/GEOM_SWIG/GEOM_TestAll.py @@ -178,6 +178,7 @@ def TestAll (geompy, math): Face2 = geompy.MakeFace(Sketcher, WantPlanarFace) Face3 = geompy.MakeFaceHW (100., 200., 1) #(2 Doubles, 1 Int)->GEOM_Object Face4 = geompy.MakeFaceObjHW (vz, 200., 100.) #(1 GEOM_Object, 2 Doubles)->GEOM_Object + Face5 = geompy.MakeFaceFromSurface(Face, Sketcher) #(2 GEOM_Objects)->GEOM_Object Disk = geompy.MakeDiskPntVecR (p0, vz, radius) #(2 GEOM_Object, 1 Double)->GEOM_Object Disk2 = geompy.MakeDiskThreePnt(p0, p200, pz) #(3 GEOM_Object)->GEOM_Object Disk3 = geompy.MakeDiskR(100., 1) #(1 Doubles, 1 Int)->GEOM_Object @@ -397,6 +398,7 @@ def TestAll (geompy, math): id_Face2 = geompy.addToStudy(Face2, "Face from Sketcher") id_Face3 = geompy.addToStudy(Face3, "Face Height Width") id_Face4 = geompy.addToStudy(Face4, "Face Plane_HW") + id_Face5 = geompy.addToStudy(Face5, "Face from surface and wire") id_Disk = geompy.addToStudy(Disk, "Disk PntVecR") id_Disk2 = geompy.addToStudy(Disk2, "Disk Three Points") id_Disk3 = geompy.addToStudy(Disk3, "Disk OXY Radius") diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index 8890b42ca..7ba751d53 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -4523,6 +4523,39 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): anObj = self.MakeFaceWires(theWires, isPlanarWanted, theName) return anObj + ## Create a face based on a surface from given face bounded + # by given wire. + # @param theFace the face whose surface is used to create a new face. + # @param theWire the wire that will bound a new face. + # @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 face. + # + # @ref tui_creation_face "Example" + @ManageTransactions("ShapesOp") + def MakeFaceFromSurface(self, theFace, theWire, theName=None): + """ + Create a face based on a surface from given face bounded + by given wire. + + Parameters: + theFace the face whose surface is used to create a new face. + theWire the wire that will bound a new face. + 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 face. + """ + # Example: see GEOM_TestAll.py + anObj = self.ShapesOp.MakeFaceFromSurface(theFace, theWire) + RaiseIfFailed("MakeFaceFromSurface", self.ShapesOp) + self._autoPublish(anObj, theName, "face") + return anObj + ## Create a shell from the set of faces and shells. # @param theFacesAndShells List of faces and/or shells. # @param theName Object name; when specified, this parameter is used -- 2.39.2