From 72073a0f5270f1ef60c09a0d97b2c21e0f91c439 Mon Sep 17 00:00:00 2001 From: skv Date: Tue, 28 Oct 2014 13:19:15 +0300 Subject: [PATCH] 0022754: [EDF] Surface of a face --- doc/salome/examples/CMakeLists.txt | 1 + doc/salome/examples/basic_geom_objs_ex10.py | 37 +++ .../gui/GEOM/images/surface_from_face1.png | Bin 0 -> 19836 bytes .../GEOM/images/surface_from_face_example.png | Bin 0 -> 1300 bytes .../gui/GEOM/input/creating_basic_go.doc | 1 + .../GEOM/input/creating_surface_from_face.doc | 27 +++ .../gui/GEOM/input/tui_basic_geom_objs.doc | 4 + idl/GEOM_Gen.idl | 11 + resources/CMakeLists.txt | 1 + resources/facetosurface.png | Bin 0 -> 643 bytes src/EntityGUI/CMakeLists.txt | 3 + src/EntityGUI/EntityGUI.cxx | 4 + src/EntityGUI/EntityGUI_SurfFromFaceDlg.cxx | 225 ++++++++++++++++++ src/EntityGUI/EntityGUI_SurfFromFaceDlg.h | 75 ++++++ src/GEOMGUI/GEOM_images.ts | 8 + src/GEOMGUI/GEOM_msg_en.ts | 27 +++ src/GEOMGUI/GeometryGUI.cxx | 5 +- src/GEOMGUI/GeometryGUI_Operations.h | 1 + src/GEOMImpl/GEOMImpl_IShapesOperations.cxx | 61 +++++ src/GEOMImpl/GEOMImpl_IShapesOperations.hxx | 3 + src/GEOMImpl/GEOMImpl_ShapeDriver.cxx | 49 ++++ src/GEOMImpl/GEOMImpl_Types.hxx | 1 + src/GEOM_I/GEOM_IShapesOperations_i.cc | 30 +++ src/GEOM_I/GEOM_IShapesOperations_i.hh | 2 + src/GEOM_SWIG/GEOM_TestAll.py | 2 + src/GEOM_SWIG/geomBuilder.py | 33 +++ 26 files changed, 610 insertions(+), 1 deletion(-) create mode 100644 doc/salome/examples/basic_geom_objs_ex10.py create mode 100644 doc/salome/gui/GEOM/images/surface_from_face1.png create mode 100644 doc/salome/gui/GEOM/images/surface_from_face_example.png create mode 100644 doc/salome/gui/GEOM/input/creating_surface_from_face.doc create mode 100644 resources/facetosurface.png create mode 100644 src/EntityGUI/EntityGUI_SurfFromFaceDlg.cxx create mode 100644 src/EntityGUI/EntityGUI_SurfFromFaceDlg.h diff --git a/doc/salome/examples/CMakeLists.txt b/doc/salome/examples/CMakeLists.txt index 67721de68..76c3883e1 100644 --- a/doc/salome/examples/CMakeLists.txt +++ b/doc/salome/examples/CMakeLists.txt @@ -37,6 +37,7 @@ SET(GOOD_TESTS basic_geom_objs_ex07.py basic_geom_objs_ex08.py basic_geom_objs_ex09.py + basic_geom_objs_ex10.py basic_operations_ex01.py basic_operations_ex02.py basic_operations_ex03.py diff --git a/doc/salome/examples/basic_geom_objs_ex10.py b/doc/salome/examples/basic_geom_objs_ex10.py new file mode 100644 index 000000000..f9f7f0165 --- /dev/null +++ b/doc/salome/examples/basic_geom_objs_ex10.py @@ -0,0 +1,37 @@ +# Creation of a Surface From Face + +import salome +salome.salome_init() +import GEOM +from salome.geom import geomBuilder +geompy = geomBuilder.New(salome.myStudy) +import math +import SALOMEDS + +# Create Vertices, Edges, Wire, Face and Disk +Vertex_1 = geompy.MakeVertex(0, 0, 0) +Vertex_2 = geompy.MakeVertex(100, 0, 0) +Vertex_3 = geompy.MakeVertex(50, 100, 0) +Edge_1 = geompy.MakeEdge(Vertex_1, Vertex_2) +Edge_2 = geompy.MakeEdge(Vertex_2, Vertex_3) +Edge_3 = geompy.MakeEdge(Vertex_3, Vertex_1) +Wire_1 = geompy.MakeWire([Edge_1, Edge_2, Edge_3]) +Face_1 = geompy.MakeFace(Wire_1, True) +Disk_1 = geompy.MakeDiskR(100, 1) + +# Create Surfaces From Faces. +SurfaceFromFace_1 = geompy.MakeSurfaceFromFace(Face_1) +SurfaceFromFace_2 = geompy.MakeSurfaceFromFace(Disk_1) + +#Add created object to study +geompy.addToStudy( Vertex_1, "Vertex_1" ) +geompy.addToStudy( Vertex_2, "Vertex_2" ) +geompy.addToStudy( Vertex_3, "Vertex_3" ) +geompy.addToStudy( Edge_1, "Edge_1" ) +geompy.addToStudy( Edge_2, "Edge_2" ) +geompy.addToStudy( Edge_3, "Edge_3" ) +geompy.addToStudy( Wire_1, "Wire_1" ) +geompy.addToStudy( Face_1, "Face_1" ) +geompy.addToStudy( Disk_1, "Disk_1" ) +geompy.addToStudy( SurfaceFromFace_1, "SurfaceFromFace_1" ) +geompy.addToStudy( SurfaceFromFace_2, "SurfaceFromFace_2" ) diff --git a/doc/salome/gui/GEOM/images/surface_from_face1.png b/doc/salome/gui/GEOM/images/surface_from_face1.png new file mode 100644 index 0000000000000000000000000000000000000000..ba039fd9181f76fd8bea881c8ea2c081033b695b GIT binary patch literal 19836 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/input/creating_basic_go.doc b/doc/salome/gui/GEOM/input/creating_basic_go.doc index 6693b469d..19758a3d6 100644 --- a/doc/salome/gui/GEOM/input/creating_basic_go.doc +++ b/doc/salome/gui/GEOM/input/creating_basic_go.doc @@ -15,6 +15,7 @@ geometrical objects as:
  • \subpage create_isoline_page
  • \subpage create_sketcher_page
  • \subpage create_3dsketcher_page
  • +
  • \subpage create_surface_from_face_page
  • \subpage create_vector_page
  • \subpage create_plane_page
  • \subpage create_lcs_page
  • diff --git a/doc/salome/gui/GEOM/input/creating_surface_from_face.doc b/doc/salome/gui/GEOM/input/creating_surface_from_face.doc new file mode 100644 index 000000000..6034ed5e3 --- /dev/null +++ b/doc/salome/gui/GEOM/input/creating_surface_from_face.doc @@ -0,0 +1,27 @@ +/*! + +\page create_surface_from_face_page Surface From Face + +To create a Surface From Face in the Main Menu select New Entity - > Basic - > Surface From Face + +\n This function takes some face as input parameter and creates new +GEOM_Object, i.e. topological shape by extracting underlying surface +of the source face and limiting it by the Umin, Umax, Vmin, Vmax +parameters of the source face (in the parametrical space). +\n +\ref restore_presentation_parameters_page "Advanced options". + +\n TUI Command: geompy.MakeSurfaceFromFace(theFace), +where \em theFace the input face. +\n Arguments: Name + Object (Face). + +\image html surface_from_face1.png "Surface From Face" + +\n Example: + +\image html surface_from_face_example.png "Original Face (white) and Created Surface" + +Our TUI Scripts provide you with useful examples of the use of +\ref tui_creation_surface "Surface From Face" creation. + +*/ diff --git a/doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc b/doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc index 89be6f64b..2083bcc46 100644 --- a/doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc +++ b/doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc @@ -38,4 +38,8 @@

    Creation of a Local Coordinate System

    \tui_script{basic_geom_objs_ex09.py} +\anchor tui_creation_surface +

    Creation of a Surface From Face

    +\tui_script{basic_geom_objs_ex10.py} + */ diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 2cfbe5a22..924550b10 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -2573,6 +2573,17 @@ module GEOM in double theVMin, in double theVMax); + /*! + * \brief Make a surface from a face. This function takes some face as + * input parameter and creates new GEOM_Object, i.e. topological shape + * by extracting underlying surface of the source face and limiting it + * by the Umin, Umax, Vmin, Vmax parameters of the source face (in the + * parametrical space). + * \param theFace the input face. + * \return a newly created face. + */ + GEOM_Object MakeSurfaceFromFace(in GEOM_Object theFace); + }; // # GEOM_IBlocksOperations: diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt index f2e64385a..7a6644562 100755 --- a/resources/CMakeLists.txt +++ b/resources/CMakeLists.txt @@ -94,6 +94,7 @@ SET( _res_files eraseall.png extruded_boss.png extruded_cut.png + facetosurface.png faceextension.png face_hw.png face_vechw.png diff --git a/resources/facetosurface.png b/resources/facetosurface.png new file mode 100644 index 0000000000000000000000000000000000000000..ecd57cfba0a95b7a52519516c34e0d71bad9fc0a GIT binary patch literal 643 zcmV-}0(||6P)Px#24YJ`L;&0X8vq+GP^?-2000SaNLh0L01FZT01FZU(%pXi00007bV*G`2i^)B z4-OkP^1Pn_00IL^L_t(I%dJ$eZ&P6uJs+u=Mv%~D6UAbN+0s@as9* zpj=&D3To%_(zTp(n6=yJbi3(b)H{Ss5CxHt2_#|iZ;7CUlZ$ccDW_97=WyfSTVD19 zm|`QLI+zKRKY!fWUSQb(9Q6)y{P{H`LGuhC$pb4hm4u?4V7NZ`Kj0`Zd$IWxufDzk z%>#&;WqOk+W)lq81|W%tx9>MY0T7zKoM-o*;OEEVR8&>fg0x}xAV~K=0I&ui=|c$2 z0N_^tIYi-R2toACi6au}pPt0}Tj-|#RVN(M@(sw#yb z5v0G&#B7mr`Ux;jbQ}eeFtWzl%QeP8B76UTyf6W}2pH0f08w&II(q1v;|2BlM#@(A zFt9MGmL!}0TJ}5EH^+tsi?bJ+#z%YC?roHBriSE}?e3zSPC=Weu_($3hTQ{fZ|$d~ zlb=EMr(fUDTiHm;vWKUq0DzN=w~&aUoM30|K{DOK+W7#o%>K#-zWn|Uk~sTwz9<<0 zit;^n)(6RK3m|nXeBvH>vvn6|^YiOJ4gm1($A^@h(kLnIaNKE93t(|uFl)D$@`1f` db>*<^=PzVHUifH!2#Npz002ovPDHLkV1htj9PR)B literal 0 HcmV?d00001 diff --git a/src/EntityGUI/CMakeLists.txt b/src/EntityGUI/CMakeLists.txt index 865678ad3..a30e1e738 100755 --- a/src/EntityGUI/CMakeLists.txt +++ b/src/EntityGUI/CMakeLists.txt @@ -105,6 +105,7 @@ SET(EntityGUI_HEADERS EntityGUI_SketcherDlg.h EntityGUI_3DSketcherDlg.h EntityGUI_IsolineDlg.h + EntityGUI_SurfFromFaceDlg.h EntityGUI_SubShapeDlg.h EntityGUI_FeatureDetectorDlg.h EntityGUI_PictureImportDlg.h @@ -117,6 +118,7 @@ SET(_moc_HEADERS EntityGUI_SketcherDlg.h EntityGUI_3DSketcherDlg.h EntityGUI_IsolineDlg.h + EntityGUI_SurfFromFaceDlg.h EntityGUI_SubShapeDlg.h EntityGUI_PictureImportDlg.h ${FeatureDetectorDlg_moc_h} @@ -137,6 +139,7 @@ SET(EntityGUI_SOURCES EntityGUI_SketcherDlg.cxx EntityGUI_3DSketcherDlg.cxx EntityGUI_IsolineDlg.cxx + EntityGUI_SurfFromFaceDlg.cxx EntityGUI_SubShapeDlg.cxx EntityGUI_PictureImportDlg.cxx ${FeatureDetectorDlg_Sources} diff --git a/src/EntityGUI/EntityGUI.cxx b/src/EntityGUI/EntityGUI.cxx index b6f36c8ad..5c0d3e91e 100644 --- a/src/EntityGUI/EntityGUI.cxx +++ b/src/EntityGUI/EntityGUI.cxx @@ -55,6 +55,7 @@ #include "EntityGUI_SketcherDlg.h" // Sketcher #include "EntityGUI_3DSketcherDlg.h" // Sketcher #include "EntityGUI_IsolineDlg.h" // Isoline +#include "EntityGUI_SurfFromFaceDlg.h" // Surface From Face #include "EntityGUI_SubShapeDlg.h" // Method SUBSHAPE #include "EntityGUI_FeatureDetectorDlg.h" // Feature Detection #include "EntityGUI_PictureImportDlg.h" // Import Picture in viewer @@ -105,6 +106,9 @@ bool EntityGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) case GEOMOp::OpIsoline: // ISOLINE aDlg = new EntityGUI_IsolineDlg( getGeometryGUI(), parent ); break; + case GEOMOp::OpSurfaceFromFace: // SURFACE FROM FACE + aDlg = new EntityGUI_SurfFromFaceDlg( getGeometryGUI(), parent ); + break; case GEOMOp::OpExplode: // EXPLODE aDlg = new EntityGUI_SubShapeDlg( getGeometryGUI(), parent ); break; diff --git a/src/EntityGUI/EntityGUI_SurfFromFaceDlg.cxx b/src/EntityGUI/EntityGUI_SurfFromFaceDlg.cxx new file mode 100644 index 000000000..3d217e4dd --- /dev/null +++ b/src/EntityGUI/EntityGUI_SurfFromFaceDlg.cxx @@ -0,0 +1,225 @@ +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// GEOM GEOMGUI : GUI for Geometry component +// File : EntityGUI_SurfFromFaceDlg.cxx + +#include "EntityGUI_SurfFromFaceDlg.h" +#include +#include +#include + +#include +#include +#include +#include + + +//================================================================================= +// class : EntityGUI_SurfFromFaceDlg +// purpose : +//================================================================================= +EntityGUI_SurfFromFaceDlg::EntityGUI_SurfFromFaceDlg + (GeometryGUI *theGeometryGUI, + QWidget *parent, + bool modal, + Qt::WindowFlags fl) + : GEOMBase_Skeleton (theGeometryGUI, parent, modal, fl), + myGroup (0) +{ + QPixmap image0(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SURFACE_FROM_FACE"))); + QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT"))); + + setWindowTitle(tr("GEOM_SURF_FROM_FACE_TITLE")); + + /***************************************************************/ + + mainFrame()->GroupConstructors->setTitle(tr("GEOM_SURF_FROM_FACE")); + mainFrame()->RadioButton1->setIcon(image0); + mainFrame()->RadioButton2->close(); + mainFrame()->RadioButton3->close(); + + // Construct a group. + myGroup = new DlgRef_1Sel(centralWidget()); + myGroup->GroupBox1->setTitle(tr("GEOM_ARGUMENTS")); + myGroup->TextLabel1->setText(tr("GEOM_FACE")); + myGroup->PushButton1->setIcon(image1); + myGroup->LineEdit1->setReadOnly(true); + + QVBoxLayout* layout = new QVBoxLayout(centralWidget()); + layout->setMargin(0); layout->setSpacing(6); + layout->addWidget(myGroup); + + setHelpFileName("create_surface_from_face_page.html"); + + Init(); +} + +//================================================================================= +// function : ~EntityGUI_SurfFromFaceDlg() +// purpose : +//================================================================================= +EntityGUI_SurfFromFaceDlg::~EntityGUI_SurfFromFaceDlg() +{ +} + +//================================================================================= +// function : Init() +// purpose : +//================================================================================= +void EntityGUI_SurfFromFaceDlg::Init() +{ + initName(tr("GEOM_SURF_FROM_FACE_NAME")); + showOnlyPreviewControl(); + + /* signals and slots connections */ + connect(myGroup->PushButton1, SIGNAL(clicked()), + this, SLOT(SetEditCurrentArgument())); + connect(myGeomGUI->getApp()->selectionMgr(), + SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); + connect(myGeomGUI, SIGNAL(SignalDeactivateActiveDialog()), + this, SLOT(DeactivateActiveDialog())); + connect(myGeomGUI, SIGNAL(SignalCloseAllDialogs()), + this, SLOT(ClickOnCancel())); + connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk())); + connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply())); + + myEditCurrentArgument = myGroup->LineEdit1; + myGroup->LineEdit1->setReadOnly(true); + SelectionIntoArgument(); +} + +//================================================================================= +// function : SelectionIntoArgument +// purpose : Called when selection is changed +//================================================================================= +void EntityGUI_SurfFromFaceDlg::SelectionIntoArgument() +{ + erasePreview(); + myEditCurrentArgument->setText(""); + myFace.nullify(); + + GEOM::GeomObjPtr aSelectedObject = getSelected(TopAbs_FACE); + + if (aSelectedObject) { + myEditCurrentArgument->setText(GEOMBase::GetName(aSelectedObject.get())); + myFace = aSelectedObject; + } + + processPreview(); +} + +//================================================================================= +// function : SetEditCurrentArgument() +// purpose : +//================================================================================= +void EntityGUI_SurfFromFaceDlg::SetEditCurrentArgument() +{ + QPushButton* send = (QPushButton*)sender(); + + if (send == myGroup->PushButton1) { + myEditCurrentArgument->setFocus(); + SelectionIntoArgument(); + } +} + +//================================================================================= +// function : ActivateThisDialog +// purpose : +//================================================================================= +void EntityGUI_SurfFromFaceDlg::ActivateThisDialog() +{ + GEOMBase_Skeleton::ActivateThisDialog(); + connect(myGeomGUI->getApp()->selectionMgr(), + SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); + SelectionIntoArgument(); +} + +//================================================================================= +// function : enterEvent() +// purpose : +//================================================================================= +void EntityGUI_SurfFromFaceDlg::enterEvent (QEvent*) +{ + if (!mainFrame()->GroupConstructors->isEnabled()) + ActivateThisDialog(); +} + +//================================================================================= +// function : createOperation +// purpose : +//================================================================================= +GEOM::GEOM_IOperations_ptr EntityGUI_SurfFromFaceDlg::createOperation() +{ + return myGeomGUI->GetGeomGen()->GetIShapesOperations(getStudyId()); +} + +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool EntityGUI_SurfFromFaceDlg::isValid (QString& msg) +{ + return myFace; +} + +//================================================================================= +// function : execute +// purpose : +//================================================================================= +bool EntityGUI_SurfFromFaceDlg::execute (ObjectList& objects) +{ + GEOM::GEOM_IShapesOperations_var anOper = + GEOM::GEOM_IShapesOperations::_narrow(getOperation()); + GEOM::GEOM_Object_var anObj = anOper->MakeSurfaceFromFace(myFace.get()); + + if (!anObj->_is_nil()) { + objects.push_back(anObj._retn()); + } + + return true; +} + +//================================================================================= +// function : ClickOnOk() +// purpose : +//================================================================================= +void EntityGUI_SurfFromFaceDlg::ClickOnOk() +{ + setIsApplyAndClose(true); + + if (ClickOnApply()) + ClickOnCancel(); +} + +//================================================================================= +// function : ClickOnApply() +// purpose : +//================================================================================= +bool EntityGUI_SurfFromFaceDlg::ClickOnApply() +{ + if (!onAccept()) + return false; + + initName(); + + return true; +} diff --git a/src/EntityGUI/EntityGUI_SurfFromFaceDlg.h b/src/EntityGUI/EntityGUI_SurfFromFaceDlg.h new file mode 100644 index 000000000..130a4d284 --- /dev/null +++ b/src/EntityGUI/EntityGUI_SurfFromFaceDlg.h @@ -0,0 +1,75 @@ +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// GEOM GEOMGUI : GUI for Geometry component +// File : EntityGUI_SurfFromFaceDlg.h + +#ifndef ENTITYGUI_SURFFROMFACEDLG_H +#define ENTITYGUI_SURFFROMFACEDLG_H + + +#include + +class DlgRef_1Sel; + +//================================================================================= +// class : EntityGUI_SurfFromFaceDlg +// purpose : +//================================================================================= +class EntityGUI_SurfFromFaceDlg : public GEOMBase_Skeleton +{ + Q_OBJECT + +public: + + EntityGUI_SurfFromFaceDlg (GeometryGUI *theGeometryGUI, + QWidget *parent = 0, + bool modal = false, + Qt::WindowFlags fl = 0); + + ~EntityGUI_SurfFromFaceDlg(); + +protected: + + // redefined from GEOMBase_Helper + virtual GEOM::GEOM_IOperations_ptr createOperation(); + virtual bool isValid( QString& ); + virtual bool execute( ObjectList& ); + +private: + + void Init(); + void enterEvent( QEvent* ); + +private: + + DlgRef_1Sel *myGroup; + GEOM::GeomObjPtr myFace; + +private slots: + + void ClickOnOk(); + bool ClickOnApply(); + void SelectionIntoArgument(); + void SetEditCurrentArgument(); + void ActivateThisDialog(); + +}; + +#endif // ENTITYGUI_SURFFROMFACEDLG_H diff --git a/src/GEOMGUI/GEOM_images.ts b/src/GEOMGUI/GEOM_images.ts index 7cf2826df..e0a9185eb 100644 --- a/src/GEOMGUI/GEOM_images.ts +++ b/src/GEOMGUI/GEOM_images.ts @@ -819,6 +819,10 @@ ICON_VERTEX_MARKER_13 marker_13.png + + ICON_SURFACE_FROM_FACE + facetosurface.png + ICO_ARC arc.png @@ -1251,6 +1255,10 @@ ICO_ISOLINE_V isoline_v.png + + ICO_SURFACE_FROM_FACE + facetosurface.png + ICO_SOLID build_solid.png diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 6b06a14d6..52e6b7809 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -2996,6 +2996,10 @@ Please, select face, shell or solid and try again MEN_ISOLINE Isoline + + MEN_SURFACE_FROM_FACE + Surface From Face + MEN_SOLID Solid @@ -3880,6 +3884,10 @@ Please, select face, shell or solid and try again STB_ISOLINE Create U- or V-Isoline + + STB_SURFACE_FROM_FACE + Create a Surface From Face + STB_SOLID Build a solid @@ -4444,6 +4452,10 @@ Please, select face, shell or solid and try again TOP_ISOLINE Isoline + + TOP_SURFACE_FROM_FACE + Surface From Face + TOP_SOLID Build solid @@ -7093,4 +7105,19 @@ Do you want to create new material? ExtendedFace + + EntityGUI_SurfFromFaceDlg + + GEOM_SURF_FROM_FACE_TITLE + Surface From Face Construction + + + GEOM_SURF_FROM_FACE + Surface From Face + + + GEOM_SURF_FROM_FACE_NAME + SurfaceFromFace + + diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 55c2d9681..44e7de635 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -554,6 +554,7 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE + case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE #ifdef WITH_OPENCV case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION #endif @@ -905,6 +906,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpPlane, "PLANE" ); createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" ); createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" ); + createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" ); createGeomAction( GEOMOp::OpBox, "BOX" ); createGeomAction( GEOMOp::OpCylinder, "CYLINDER" ); @@ -936,7 +938,6 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" ); createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" ); - createGeomAction( GEOMOp::OpIsoline, "ISOLINE" ); createGeomAction( GEOMOp::OpExplode, "EXPLODE" ); #ifdef WITH_OPENCV createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" ); @@ -1117,6 +1118,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createMenu( GEOMOp::Op2dSketcher, basicId, -1 ); createMenu( GEOMOp::Op3dSketcher, basicId, -1 ); createMenu( GEOMOp::OpIsoline, basicId, -1 ); + createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 ); createMenu( separator(), basicId, -1 ); createMenu( GEOMOp::OpVector, basicId, -1 ); createMenu( GEOMOp::OpPlane, basicId, -1 ); @@ -1332,6 +1334,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc createTool( GEOMOp::OpIsoline, basicTbId ); + createTool( GEOMOp::OpSurfaceFromFace, basicTbId ); createTool( GEOMOp::OpPlane, basicTbId ); createTool( GEOMOp::OpLCS, basicTbId ); createTool( GEOMOp::OpOriginAndVectors, basicTbId ); diff --git a/src/GEOMGUI/GeometryGUI_Operations.h b/src/GEOMGUI/GeometryGUI_Operations.h index ca604b2e7..f061eb812 100644 --- a/src/GEOMGUI/GeometryGUI_Operations.h +++ b/src/GEOMGUI/GeometryGUI_Operations.h @@ -94,6 +94,7 @@ namespace GEOMOp { OpLCS = 3008, // MENU NEW ENTITY - BASIC - LOCAL COORDINATE SYSTEM OpOriginAndVectors = 3009, // MENU NEW ENTITY - BASIC - ORIGIN AND BASE VECTORS OpIsoline = 3010, // MENU NEW ENTITY - BASIC - ISOLINE + OpSurfaceFromFace = 3011, // MENU NEW ENTITY - BASIC - SURFACE FROM FACE // PrimitiveGUI ----------------//-------------------------------- OpBox = 3100, // MENU NEW ENTITY - PRIMITIVES - BOX OpCylinder = 3101, // MENU NEW ENTITY - PRIMITIVES - CYLINDER diff --git a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx index 637eac7d9..732d938e8 100644 --- a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx @@ -4968,3 +4968,64 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::ExtendFace return aResFace; } + +//======================================================================= +//function : MakeSurfaceFromFace +//purpose : +//======================================================================= +Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeSurfaceFromFace + (const Handle(GEOM_Object) &theFace) +{ + SetErrorCode(KO); + + if (theFace.IsNull()) { + return NULL; + } + + //Add a new Face object + Handle(GEOM_Object) aResFace = GetEngine()->AddObject(GetDocID(), GEOM_FACE); + + //Add a new Vector function + Handle(GEOM_Function) aFunction = + aResFace->AddFunction(GEOMImpl_ShapeDriver::GetID(), SURFACE_FROM_FACE); + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != GEOMImpl_ShapeDriver::GetID()) { + return NULL; + } + + GEOMImpl_IShapeExtend aCI (aFunction); + + Handle(GEOM_Function) aFace = theFace->GetLastFunction(); + + if (aFace.IsNull()) { + return NULL; + } + + aCI.SetShape(aFace); + + //Compute the Face value + 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) + << aResFace << " = geompy.MakeSurfaceFromFace(" + << theFace << ")"; + + SetErrorCode(OK); + + return aResFace; +} diff --git a/src/GEOMImpl/GEOMImpl_IShapesOperations.hxx b/src/GEOMImpl/GEOMImpl_IShapesOperations.hxx index 22b3211ec..025646331 100644 --- a/src/GEOMImpl/GEOMImpl_IShapesOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_IShapesOperations.hxx @@ -396,6 +396,9 @@ class GEOMImpl_IShapesOperations : public GEOM_IOperations const Standard_Real theVMin, const Standard_Real theVMax); + Standard_EXPORT Handle(GEOM_Object) + MakeSurfaceFromFace(const Handle(GEOM_Object) &theFace); + private: Handle(GEOM_Object) MakeShape (std::list theShapes, const Standard_Integer theObjectType, diff --git a/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx b/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx index 01c676407..a9baa2ee0 100644 --- a/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx @@ -681,6 +681,47 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const aShape = ExtendFace(aFace, aSE.GetUMin(), aSE.GetUMax(), aSE.GetVMin(), aSE.GetVMax()); } + } else if (aType == SURFACE_FROM_FACE) { +#ifdef RESULT_TYPE_CHECK + anExpectedType = TopAbs_FACE; +#endif + + GEOMImpl_IShapeExtend aSE (aFunction); + Handle(GEOM_Function) aRefFace = aSE.GetShape(); + TopoDS_Shape aShapeFace = aRefFace->GetValue(); + + if (aShapeFace.ShapeType() == TopAbs_FACE) { + TopoDS_Face aFace = TopoDS::Face(aShapeFace); + Handle(Geom_Surface) aSurface = BRep_Tool::Surface(aFace); + + if (aSurface.IsNull() == Standard_False) { + Handle(Standard_Type) aType = aSurface->DynamicType(); + Standard_Real aU1; + Standard_Real aU2; + Standard_Real aV1; + Standard_Real aV2; + + // Get U, V bounds of the face. + aFace.Orientation(TopAbs_FORWARD); + ShapeAnalysis::GetFaceUVBounds(aFace, aU1, aU2, aV1, aV2); + + // Get the surface of original type + while (aType == STANDARD_TYPE(Geom_RectangularTrimmedSurface)) { + Handle(Geom_RectangularTrimmedSurface) aTrSurface = + Handle(Geom_RectangularTrimmedSurface)::DownCast(aSurface); + + aSurface = aTrSurface->BasisSurface(); + aType = aSurface->DynamicType(); + } + + const Standard_Real aTol = BRep_Tool::Tolerance(aFace); + BRepBuilderAPI_MakeFace aMF(aSurface, aU1, aU2, aV1, aV2, aTol); + + if (aMF.IsDone()) { + aShape = aMF.Shape(); + } + } + } } else { } @@ -1573,6 +1614,14 @@ GetCreationInformation(std::string& theOperationName, AddParam(theParams, "VMax", aSE.GetVMax()); break; } + case SURFACE_FROM_FACE: + { + GEOMImpl_IShapeExtend aSE (function); + + theOperationName = "SURFACE_FROM_FACE"; + AddParam(theParams, "Face", aSE.GetShape()); + break; + } default: return false; } diff --git a/src/GEOMImpl/GEOMImpl_Types.hxx b/src/GEOMImpl/GEOMImpl_Types.hxx index 86e186981..273ac2193 100644 --- a/src/GEOMImpl/GEOMImpl_Types.hxx +++ b/src/GEOMImpl/GEOMImpl_Types.hxx @@ -302,6 +302,7 @@ #define FACE_FROM_SURFACE 15 #define EDGE_UV 16 #define FACE_UV 17 +#define SURFACE_FROM_FACE 18 #define ARCHIMEDE_TYPE 1 diff --git a/src/GEOM_I/GEOM_IShapesOperations_i.cc b/src/GEOM_I/GEOM_IShapesOperations_i.cc index b2fae9ae4..4e619573c 100644 --- a/src/GEOM_I/GEOM_IShapesOperations_i.cc +++ b/src/GEOM_I/GEOM_IShapesOperations_i.cc @@ -2000,3 +2000,33 @@ GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::ExtendFace return GetObject(aNewFace); } + +//============================================================================= +/*! + * MakeSurfaceFromFace + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeSurfaceFromFace + (GEOM::GEOM_Object_ptr theFace) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Get the reference object + Handle(GEOM_Object) aFace = GetObjectImpl(theFace); + + if (aFace.IsNull()) { + return aGEOMObject._retn(); + } + + //Get Shapes in place of aShapeWhat + Handle(GEOM_Object) aNewFace = GetOperations()->MakeSurfaceFromFace(aFace); + + if (!GetOperations()->IsDone() || aNewFace.IsNull()) { + return aGEOMObject._retn(); + } + + return GetObject(aNewFace); +} diff --git a/src/GEOM_I/GEOM_IShapesOperations_i.hh b/src/GEOM_I/GEOM_IShapesOperations_i.hh index 72ac7b074..7587a6a2d 100644 --- a/src/GEOM_I/GEOM_IShapesOperations_i.hh +++ b/src/GEOM_I/GEOM_IShapesOperations_i.hh @@ -284,6 +284,8 @@ class GEOM_I_EXPORT GEOM_IShapesOperations_i : CORBA::Double theVMin, CORBA::Double theVMax); + GEOM::GEOM_Object_ptr MakeSurfaceFromFace(GEOM::GEOM_Object_ptr theFace); + ::GEOMImpl_IShapesOperations* GetOperations() { return (::GEOMImpl_IShapesOperations*)GetImpl(); } }; diff --git a/src/GEOM_SWIG/GEOM_TestAll.py b/src/GEOM_SWIG/GEOM_TestAll.py index 9766171a1..cb9a9720a 100644 --- a/src/GEOM_SWIG/GEOM_TestAll.py +++ b/src/GEOM_SWIG/GEOM_TestAll.py @@ -257,6 +257,7 @@ def TestAll (geompy, math): ProjOnWire = geompy.MakeProjectionOnWire(p0, Wire) ExtEdge = geompy.ExtendEdge(Edge1, -0.3, 1.3) ExtFace = geompy.ExtendFace(Face5, -0.3, 1.3, -0.1, 1.1) + Surface = geompy.MakeSurfaceFromFace(Face5) #IDList for Fillet/Chamfer prism_edges = geompy.ExtractShapes(Prism, geompy.ShapeType["EDGE"], True) @@ -473,6 +474,7 @@ def TestAll (geompy, math): id_ProjOnWire = geompy.addToStudy(ProjOnWire[1], "ProjOnWire") id_ExtEdge = geompy.addToStudy(ExtEdge, "ExtendedEdge") id_ExtFace = geompy.addToStudy(ExtFace, "ExtendedFace") + id_Surface = geompy.addToStudy(Surface, "Surface From Face") id_Fillet = geompy.addToStudy(Fillet, "Fillet") id_Fillet2 = geompy.addToStudy(Fillet2, "Fillet2") diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index 3e9b78b94..f1968ee10 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -5755,6 +5755,39 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): self._autoPublish(anObj, theName, "face") return anObj + ## This function takes some face as input parameter and creates new + # GEOM_Object, i.e. topological shape by extracting underlying surface + # of the source face and limiting it by the Umin, Umax, Vmin, Vmax + # parameters of the source face (in the parametrical space). + # @param theFace the input 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_surface "Example" + @ManageTransactions("ShapesOp") + def MakeSurfaceFromFace(self, theFace, theName=None): + """ + This function takes some face as input parameter and creates new + GEOM_Object, i.e. topological shape by extracting underlying surface + of the source face and limiting it by the Umin, Umax, Vmin, Vmax + parameters of the source face (in the parametrical space). + + Parameters: + theFace the input 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. + """ + anObj = self.ShapesOp.MakeSurfaceFromFace(theFace) + RaiseIfFailed("MakeSurfaceFromFace", self.ShapesOp) + self._autoPublish(anObj, theName, "surface") + return anObj + # end of l4_obtain ## @} -- 2.39.2