From 33eddb946d773271e86d77267212c204fd32af4a Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 21 Nov 2014 20:25:48 +0300 Subject: [PATCH] 22755: [EDF] Improvement of Projection operation --- .../transformation_operations_ex07.py | 14 +- doc/salome/gui/GEOM/images/projection_dlg.png | Bin 20761 -> 21938 bytes .../gui/GEOM/images/projection_dlg1.png | Bin 0 -> 22338 bytes .../gui/GEOM/images/projection_dlg2.png | Bin 0 -> 22026 bytes .../gui/GEOM/input/extension_operation.doc | 2 +- .../gui/GEOM/input/projection_operation.doc | 21 ++- idl/GEOM_Gen.idl | 8 +- resources/CMakeLists.txt | 2 + resources/projection_on_edge.png | Bin 0 -> 727 bytes resources/projection_on_wire.png | Bin 0 -> 729 bytes src/GEOM/GEOM_PythonDump.cxx | 6 +- src/GEOMBase/GEOMBase_Helper.cxx | 48 +++--- src/GEOMGUI/GEOM_images.ts | 10 +- src/GEOMGUI/GEOM_msg_en.ts | 44 ++++-- .../GEOMImpl_ITransformOperations.cxx | 64 +++++--- src/GEOM_SWIG/geomBuilder.py | 10 +- .../TransformationGUI_ProjectionDlg.cxx | 140 ++++++++++++++---- .../TransformationGUI_ProjectionDlg.h | 2 + 18 files changed, 257 insertions(+), 114 deletions(-) create mode 100644 doc/salome/gui/GEOM/images/projection_dlg1.png create mode 100644 doc/salome/gui/GEOM/images/projection_dlg2.png create mode 100644 resources/projection_on_edge.png create mode 100644 resources/projection_on_wire.png diff --git a/doc/salome/examples/transformation_operations_ex07.py b/doc/salome/examples/transformation_operations_ex07.py index 0b324a101..f76bd9036 100644 --- a/doc/salome/examples/transformation_operations_ex07.py +++ b/doc/salome/examples/transformation_operations_ex07.py @@ -2,7 +2,6 @@ import salome salome.salome_init() -import GEOM from salome.geom import geomBuilder geompy = geomBuilder.New(salome.myStudy) @@ -25,24 +24,17 @@ projection = geompy.MakeProjection(curve, face_cyl) # add objects in the study geompy.addToStudy(cylinder, "cylinder") geompy.addToStudyInFather(cylinder, face_cyl, "face_cyl") -geompy.addToStudy(p1, "p1") -geompy.addToStudy(p2, "p2") -geompy.addToStudy(p3, "p3") -geompy.addToStudy(p4, "p4") -geompy.addToStudy(p5, "p5") geompy.addToStudy(curve, "curve") geompy.addToStudy(projection, "projection") -#projection of point on wire. +#projection of point on wire e1 = geompy.MakeLineTwoPnt(p1, p2) e2 = geompy.MakeLineTwoPnt(p2, p3) w1 = geompy.MakeWire([e1, e2], 1.e-7) v1 = geompy.MakeVertex(300, 40, 100) -prj = geompy.MakeProjectionOnWire(v1, w1) -geompy.addToStudy(e1, "e1") -geompy.addToStudy(e2, "e2") +prj = geompy.MakeProjection(v1, w1) geompy.addToStudy(w1, "w1") geompy.addToStudy(v1, "v1") -geompy.addToStudy(prj[1], "projOnWire") +geompy.addToStudy(prj, "projOnWire") diff --git a/doc/salome/gui/GEOM/images/projection_dlg.png b/doc/salome/gui/GEOM/images/projection_dlg.png index ac912b9a8ec362dbbe2842fd2e0801f4baff2790..561ca30f3a32b853052f4522e3c157891b9e477c 100644 GIT binary patch literal 21938 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/projection_dlg2.png b/doc/salome/gui/GEOM/images/projection_dlg2.png new file mode 100644 index 0000000000000000000000000000000000000000..1c0ab27801460bc92b50eb7bf8e44e361f86e1c1 GIT binary patch literal 22026 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 S0|Q+V2pda#i*n5ApMM81A<>Bd literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/input/extension_operation.doc b/doc/salome/gui/GEOM/input/extension_operation.doc index 417577adb..605ff176f 100644 --- a/doc/salome/gui/GEOM/input/extension_operation.doc +++ b/doc/salome/gui/GEOM/input/extension_operation.doc @@ -27,7 +27,7 @@ parameter value, \em theMax the maximal parameter value. \note The input Edge parameters range is [0, 1]. If \b theMin parameter is negative, the input Edge is extended, otherwise it is shrinked by \b theMin parameter. If \b theMax is greater than 1, the Edge is - extended, otherwise it is shrinked by \btheMax parameter. + extended, otherwise it is shrinked by \b theMax parameter. Secondly it is possible to resize a \b Face. \n TUI Command: geompy.ExtendFace(theFace, theUMin, theUMax, diff --git a/doc/salome/gui/GEOM/input/projection_operation.doc b/doc/salome/gui/GEOM/input/projection_operation.doc index 6f7e8b4eb..b90373be8 100644 --- a/doc/salome/gui/GEOM/input/projection_operation.doc +++ b/doc/salome/gui/GEOM/input/projection_operation.doc @@ -1,23 +1,34 @@ /*! -\page projection_operation_page Projection on a Face +\page projection_operation_page Projection \n To produce a Projection in the Main Menu select Operations - > Transformation - > Projection -\n This operation makes normal projection of a Source vertex, edge - or wire on a given Target face. -\ref restore_presentation_parameters_page "Advanced options". +\n This operation makes normal projection of one shape to another. +\n There are 3 types of projection different by types of operands. + +Firstly, you can project Source vertex, edge or wire on a given Target face. \image html projection_dlg.png +Secondly, you can project Source vertex on a given Target wire. + +\image html projection_dlg1.png + +Thirdly, you can project Source vertex on a given Target edge. + +\image html projection_dlg2.png + +\ref restore_presentation_parameters_page "Advanced options". + \n Example: \image html projection_preview.png "The curve (in red) and its projection on the cylindric surface" \n TUI Command: geompy.MakeProjection(Source, Target), where \em Source is a shape which has to be projected, \em Target - is a face, on which the \em Source shape will be projected. The \em + is a shape, on which the \em Source shape will be projected. The \em Result will be a \em GEOM_Object. Our TUI Scripts provide you with useful examples of the use of diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 0b24f8c7d..83faa46bb 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -3860,8 +3860,8 @@ module GEOM GEOM_Object MakeCopy (in GEOM_Object theOriginal); /*! - * \brief Deprecated method. Use Export (from the - * corresponding plugin) instead; here is a name of format. + * \brief Deprecated method. Use Export\ (from the + * corresponding plugin) instead; here \ is a name of format. * * \brief Export the given shape into a file with given name. * \param theObject Shape to be stored in the file. @@ -3871,8 +3871,8 @@ module GEOM void Export (in GEOM_Object theObject, in string theFileName, in string theFormatName); /*! - * \brief Deprecated method. Use Import (from the - * corresponding plugin) instead; here is a name of format. + * \brief Deprecated method. Use Import\ (from the + * corresponding plugin) instead; here \ is a name of format. * * \brief Import a shape from the STL, BREP, IGES or STEP file * (depends on given format) with given name. diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt index d841d3612..49a7e5362 100755 --- a/resources/CMakeLists.txt +++ b/resources/CMakeLists.txt @@ -131,6 +131,8 @@ SET( _res_files normale.png offset.png projection.png + projection_on_edge.png + projection_on_wire.png origin_and_vectors.png partition.png partitionkeep.png diff --git a/resources/projection_on_edge.png b/resources/projection_on_edge.png new file mode 100644 index 0000000000000000000000000000000000000000..b1f65ad5cd4a9b394928347056cdf5bb90b9411e GIT binary patch literal 727 zcmV;|0x127P)Px#24YJ`L;(K){{T3pz3_kl000SaNLh0L01FZT01FZU(%pXi00007bV*G`2i^-6 z4Iw!%wNLv100LJ@L_t(I%e|C8XcR#d#(#5(?k0tzg}B-p7IUktERkc!k3vo_tGfvk{py*eivz-EYz&VE6l+S<09ZEhsq)6>J)rH2At`HYM-H>O^R1HJ-ab^1I~O0?Dh zh^*|Y$?ooMj$M9?F_tJclq1c{+eH9QjlV-j3KK_sdN$BF!_Ll5jto6QMTSUgR>uo= zDRjh{yYG=wp@R}yl`$sHzOv0oIgpjjQt1sY418i4pj8nmC-67 zmOiocx0ER-04H3rfR?W30rd9va{S5@v@yK6RkTVQ=EqJ}vRz+8me%+-H)_AXzQ0v4 zS%nj>0Q{1!$Dx5Kq|%g?=ECF$@%CPy1z5W_CjgcgChXC{Ns-mav?&6xPPh_F*K7Ul zt3XB?Ka2@vj0GXUGIJe(!~GLtd0`@ZG(68^@WIE_-43)%*R!<-*p7}C3)rl9`pyM_ z<2Y!oiQ{-Dus^XBO+YK~rivQ^e8ALBSu=o?G9~r`?La>9_W(bEY2Z%6wE(jTSNrV4 z+QRMvb^|*S{~$0A6st!R_yH^er~mdZb`$6W_SNtgfqwo6{s0Dkg~#!UPssoP002ov JPDHLkV1gaVK8OGS literal 0 HcmV?d00001 diff --git a/resources/projection_on_wire.png b/resources/projection_on_wire.png new file mode 100644 index 0000000000000000000000000000000000000000..a182d8f46ccb550cb0523a93008ce0fe5ef753f6 GIT binary patch literal 729 zcmV;~0w(>5P)Px#24YJ`L;&~z5CA3CCD+sd000SaNLh0L01FZT01FZU(%pXi00007bV*G`2i^-6 z4igs~Rj3>Q00LP_L_t(I%e|CANK{c2hQB)+a}5b?5xiC|G*Y4@8W?k-Lt!lp2|>w% zgn}T5AS5!fMIu-&a+jMRA|k;SAraKhMGPZ_7@3_*0@ zF7AKM`QAC_9v;p)Y8@>-SM6SYs>1+B$u=R?V9squCs>k8ORq{s4RZ;wn@>KWrRTc3 zy8aEUUut)K_9I$)uA`%amX?-3a_eisdwP1fb^gAg zf=Y|iciy6PfGuobgCbEBCb#SoN-pS9unz2&rV2ixE?|Qq)+m;qUf=Si;-S}9!m`;c z$1XnFf+=HJP-)S7V;-Y^VblgjZES-9q#WR6qY0!}x6P4C5k;lN4{e0pRmT~roehfE zpg^d7LhbK7FV)oMwDdfHTrS78#~-*nvk2e@?!ChS{ZhNk=nS31lRNExsb!!|uCEFw z8^3AkacF1?9axHi_Vxx=R*GopCBo7w zF9bk3oknZj3Y-AG0=6u!4%iL6D$_;)ABZZqtb7iwadHl5jGetDescription(); - if ( !aDescr.IsEmpty() ) aDescr += "\n\t"; - } std::string aString = myStream.str(); + if ( !aDescr.IsEmpty() && !aString.empty()) + aDescr += "\n\t"; aDescr += (char *)aString.c_str(); myFunction->SetDescription( aDescr ); } diff --git a/src/GEOMBase/GEOMBase_Helper.cxx b/src/GEOMBase/GEOMBase_Helper.cxx index 93c4c2da6..42ab59c1b 100755 --- a/src/GEOMBase/GEOMBase_Helper.cxx +++ b/src/GEOMBase/GEOMBase_Helper.cxx @@ -407,12 +407,12 @@ void GEOMBase_Helper::erasePreview( const bool update ) { SUIT_ViewManager* aViewManager = myViewWindow->getViewManager(); if ( aViewManager->getType() == OCCViewer_Viewer::Type() || - aViewManager->getType() == SVTK_Viewer::Type() ) + aViewManager->getType() == SVTK_Viewer::Type() ) { - SUIT_ViewModel* aViewModel = aViewManager->getViewModel(); - SALOME_View* aView = dynamic_cast(aViewModel); - if (aView) - aView->Erase( getDisplayer(), *anIter, true ); + SUIT_ViewModel* aViewModel = aViewManager->getViewModel(); + SALOME_View* aView = dynamic_cast(aViewModel); + if (aView) + aView->Erase( getDisplayer(), *anIter, true ); } } delete *anIter; @@ -843,21 +843,21 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction, b QString aName = getObjectName(obj); if (aName.isEmpty()) { aName = getNewObjectName(currObj); - if ( nbObjs > 1 ) { - if (aName.isEmpty()) - aName = getPrefix(obj); - if (nbObjs <= 30) { - // Try to find a unique name - aName = GEOMBase::GetDefaultName(aName, extractPrefix()); - } else { - // Don't check name uniqueness in case of numerous objects - aName = aName + "_" + QString::number(aNumber++); - } - } else { - // PAL6521: use a prefix, if some dialog box doesn't reimplement getNewObjectName() - if ( aName.isEmpty() ) - aName = GEOMBase::GetDefaultName( getPrefix( obj ) ); - } + if ( nbObjs > 1 ) { + if (aName.isEmpty()) + aName = getPrefix(obj); + if (nbObjs <= 30) { + // Try to find a unique name + aName = GEOMBase::GetDefaultName(aName, extractPrefix()); + } else { + // Don't check name uniqueness in case of numerous objects + aName = aName + "_" + QString::number(aNumber++); + } + } else { + // PAL6521: use a prefix, if some dialog box doesn't reimplement getNewObjectName() + if ( aName.isEmpty() ) + aName = GEOMBase::GetDefaultName( getPrefix( obj ) ); + } } anEntryList << addInStudy( obj, aName.toLatin1().constData() ); // updateView=false @@ -1137,10 +1137,10 @@ GEOM::GEOM_Object_ptr GEOMBase_Helper::findObjectInFather( GEOM::GEOM_Object_ptr if ( !CORBA::is_nil( cobject ) ) { GEOM::ListOfLong_var indices = cobject->GetSubShapeIndices(); int length = indices->length(); - // VSR 18/03/2014: we need only sub-shapes with single sub-shape index (to exclude groups, etc) - if ( length == 1 && indices[0] == theIndex ) { - object = cobject; - break; + // VSR 18/03/2014: we need only sub-shapes with single sub-shape index (to exclude groups, etc) + if ( length == 1 && indices[0] == theIndex ) { + object = cobject; + break; } } } diff --git a/src/GEOMGUI/GEOM_images.ts b/src/GEOMGUI/GEOM_images.ts index c8c70c163..14cf841bc 100644 --- a/src/GEOMGUI/GEOM_images.ts +++ b/src/GEOMGUI/GEOM_images.ts @@ -432,9 +432,17 @@ offset.png - ICON_DLG_PROJECTION + ICON_DLG_PROJECTION_ON_FACE projection.png + + ICON_DLG_PROJECTION_ON_WIRE + projection_on_wire.png + + + ICON_DLG_PROJECTION_ON_EDGE + projection_on_edge.png + ICON_DLG_EXTEND_EDGE edgeextension.png diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 27690e1f5..1630caf5a 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -1213,17 +1213,45 @@ Please, select face, shell or solid and try again Division pattern - GEOM_PROJECTION - Projection - - - GEOM_PROJECTION_TITLE + GEOM_PROJECTION_ON_FACE Projection on Face - GEOM_SOURCE_OBJECT + GEOM_PROJECTION_ON_WIRE + Projection on Wire + + + GEOM_PROJECTION_ON_EDGE + Projection on Edge + + + GEOM_PROJECTION_TITLE + Projection + + + GEOM_PROJ_ON_FACE_SOURCE Source vertex, edge or wire + + GEOM_PROJ_ON_FACE_TARGET + Target face + + + GEOM_PROJ_ON_WIRE_SOURCE + Source vertex + + + GEOM_PROJ_ON_WIRE_TARGET + Target wire + + + GEOM_PROJ_ON_EDGE_SOURCE + Source vertex + + + GEOM_PROJ_ON_EDGE_TARGET + Target edge + GEOM_SOLUTION Solution : @@ -1232,10 +1260,6 @@ Please, select face, shell or solid and try again GEOM_SOLUTION_I Solution %1 - - GEOM_TARGET_OBJECT - Target face - GEOM_WITH_CONTACT With contact diff --git a/src/GEOMImpl/GEOMImpl_ITransformOperations.cxx b/src/GEOMImpl/GEOMImpl_ITransformOperations.cxx index 8e04e15ec..012d9982d 100644 --- a/src/GEOMImpl/GEOMImpl_ITransformOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_ITransformOperations.cxx @@ -1155,8 +1155,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::OffsetShapeCopy * ProjectShapeCopy */ //============================================================================= -Handle(GEOM_Object) GEOMImpl_ITransformOperations::ProjectShapeCopy - (Handle(GEOM_Object) theSource, Handle(GEOM_Object) theTarget) +Handle(GEOM_Object) +GEOMImpl_ITransformOperations::ProjectShapeCopy (Handle(GEOM_Object) theSource, + Handle(GEOM_Object) theTarget) { SetErrorCode(KO); @@ -1165,35 +1166,54 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::ProjectShapeCopy Handle(GEOM_Function) aLastFunction = theSource->GetLastFunction(); if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be projected - //Add a new Projection object - Handle(GEOM_Object) aCopy = GetEngine()->AddObject(GetDocID(), GEOM_PROJECTION); + Handle(GEOM_Object) aCopy; - //Add a Projection function - Handle(GEOM_Function) aFunction = - aCopy->AddFunction(GEOMImpl_ProjectionDriver::GetID(), PROJECTION_COPY); + TopoDS_Shape aTarget = theTarget->GetValue(); + if ( aTarget.IsNull() ) return NULL; + if ( aTarget.ShapeType() == TopAbs_EDGE || + aTarget.ShapeType() == TopAbs_WIRE ) + { + // a TPythonDump prevents dumping ProjectPointOnWire(), + // dump of MakeProjection() is done at the end of this function + GEOM::TPythonDump preventDump(aLastFunction, /*append=*/true); + Standard_Integer dummy; + ProjectPointOnWire( theSource, theTarget, aCopy, dummy ); + if ( aCopy.IsNull() || !IsDone() ) + return NULL; + } + else + { + //Add a new Projection object + aCopy = GetEngine()->AddObject(GetDocID(), GEOM_PROJECTION); - //Check if the function is set correctly - if (aFunction->GetDriverGUID() != GEOMImpl_ProjectionDriver::GetID()) return NULL; + //Add a Projection function + Handle(GEOM_Function) aFunction = + aCopy->AddFunction(GEOMImpl_ProjectionDriver::GetID(), PROJECTION_COPY); - GEOMImpl_IMirror aTI (aFunction); - aTI.SetPlane(theTarget->GetLastFunction()); - aTI.SetOriginal(aLastFunction); + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != GEOMImpl_ProjectionDriver::GetID()) return NULL; - //Compute the Projection - try { - OCC_CATCH_SIGNALS; - if (!GetSolver()->ComputeFunction(aFunction)) { - SetErrorCode("Projection driver failed"); + GEOMImpl_IMirror aTI (aFunction); + aTI.SetPlane(theTarget->GetLastFunction()); + aTI.SetOriginal(aLastFunction); + + //Compute the Projection + try { + OCC_CATCH_SIGNALS; + if (!GetSolver()->ComputeFunction(aFunction)) { + SetErrorCode("Projection driver failed"); + return NULL; + } + } + catch (Standard_Failure) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode(aFail->GetMessageString()); return NULL; } } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); - return NULL; - } //Make a Python command + Handle(GEOM_Function) aFunction = aCopy->GetLastFunction(); GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MakeProjection(" << theSource << ", " << theTarget << ")"; diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index c3eead5dd..83c2e34b0 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -8785,9 +8785,10 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): self._autoPublish(anObj, theName, "offset") return anObj - ## Create new object as projection of the given one on a 2D surface. + ## Create new object as projection of the given one on another. # @param theSource The source object for the projection. It can be a point, edge or wire. - # @param theTarget The target object. It can be planar or cylindrical face. + # Edge and wire are acceptable if @a theTarget is a face. + # @param theTarget The target object. It can be planar or cylindrical face, edge or wire. # @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. @@ -8798,11 +8799,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): @ManageTransactions("TrsfOp") def MakeProjection(self, theSource, theTarget, theName=None): """ - Create new object as projection of the given one on a 2D surface. + Create new object as projection of the given one on another. Parameters: theSource The source object for the projection. It can be a point, edge or wire. - theTarget The target object. It can be planar or cylindrical face. + Edge and wire are acceptable if theTarget is a face. + theTarget The target object. It can be planar or cylindrical face, edge or wire. 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. diff --git a/src/TransformationGUI/TransformationGUI_ProjectionDlg.cxx b/src/TransformationGUI/TransformationGUI_ProjectionDlg.cxx index be7d741bf..73b2c528b 100644 --- a/src/TransformationGUI/TransformationGUI_ProjectionDlg.cxx +++ b/src/TransformationGUI/TransformationGUI_ProjectionDlg.cxx @@ -38,6 +38,11 @@ #include +namespace +{ + enum EOperationType { PROJ_ON_FACE = 0, PROJ_ON_WIRE, PROJ_ON_EDGE }; +} + //================================================================================= // class : TransformationGUI_ProjectionDlg() // purpose : Constructs a TransformationGUI_ProjectionDlg which is a child of 'parent', with the @@ -49,23 +54,20 @@ TransformationGUI_ProjectionDlg::TransformationGUI_ProjectionDlg (GeometryGUI* t QWidget* parent, bool modal, Qt::WindowFlags fl) : GEOMBase_Skeleton(theGeometryGUI, parent, modal, fl) { - QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_PROJECTION"))); QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT"))); + QPixmap image2 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_PROJECTION_ON_FACE"))); + QPixmap image3 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_PROJECTION_ON_WIRE"))); + QPixmap image4 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_PROJECTION_ON_EDGE"))); setWindowTitle(tr("GEOM_PROJECTION_TITLE")); - mainFrame()->GroupConstructors->setTitle(tr("GEOM_PROJECTION")); - mainFrame()->RadioButton1->setIcon(image0); - mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose); - mainFrame()->RadioButton2->close(); - mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose); - mainFrame()->RadioButton3->close(); + mainFrame()->RadioButton1->setIcon(image2); + mainFrame()->RadioButton2->setIcon(image3); + mainFrame()->RadioButton3->setIcon(image4); myGroup = new DlgRef_2Sel (centralWidget()); myGroup->GroupBox1->setTitle(tr("GEOM_ARGUMENTS")); - myGroup->TextLabel1->setText(tr("GEOM_SOURCE_OBJECT")); - myGroup->TextLabel2->setText(tr("GEOM_TARGET_OBJECT")); myGroup->PushButton1->setIcon(image1); myGroup->PushButton2->setIcon(image1); myGroup->LineEdit1->setReadOnly(true); @@ -108,6 +110,8 @@ void TransformationGUI_ProjectionDlg::Init() showOnlyPreviewControl(); // signals and slots connections + connect(this, SIGNAL( constructorsClicked( int )), + this, SLOT ( ConstructorsClicked( int ))); connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk())); connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply())); @@ -115,20 +119,17 @@ void TransformationGUI_ProjectionDlg::Init() connect(myGroup->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(), - SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); + SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - initName(mainFrame()->GroupConstructors->title()); + initName( windowTitle() ); setTabOrder(mainFrame()->GroupConstructors, mainFrame()->GroupBoxName); setTabOrder(mainFrame()->GroupBoxName, mainFrame()->GroupMedium); setTabOrder(mainFrame()->GroupMedium, mainFrame()->GroupButtons); - mainFrame()->RadioButton1->setFocus(); + //mainFrame()->RadioButton1->setFocus(); + ConstructorsClicked( 0 ); - globalSelection(GEOM_ALLSHAPES); - - myGroup->PushButton1->click(); - SelectionIntoArgument(); resize(100,100); } @@ -153,8 +154,8 @@ bool TransformationGUI_ProjectionDlg::ClickOnApply() return false; initName(); - // activate selection and connect selection manager - myGroup->PushButton1->click(); + ConstructorsClicked( getConstructorId() ); + return true; } @@ -166,9 +167,25 @@ void TransformationGUI_ProjectionDlg::SelectionIntoArgument() { myEditCurrentArgument->setText(""); - GEOM::GeomObjPtr aSelectedObject = getSelected(TopAbs_SHAPE); + GEOM::GeomObjPtr aSelectedObject; + if ( myEditCurrentArgument == myGroup->LineEdit1 ) // what to project + switch( getConstructorId() ) { + case PROJ_ON_FACE: aSelectedObject = getSelected(TopAbs_SHAPE); break; + case PROJ_ON_WIRE: + case PROJ_ON_EDGE: aSelectedObject = getSelected(TopAbs_VERTEX); break; + default:; + } + else + switch( getConstructorId() ) { // where to project + case PROJ_ON_FACE: aSelectedObject = getSelected(TopAbs_FACE); break; + case PROJ_ON_WIRE: aSelectedObject = getSelected(TopAbs_WIRE); break; + case PROJ_ON_EDGE: aSelectedObject = getSelected(TopAbs_EDGE); break; + default:; + } + TopoDS_Shape aShape; - if (aSelectedObject && GEOMBase::GetShape(aSelectedObject.get(), aShape) && !aShape.IsNull()) { + if (aSelectedObject && GEOMBase::GetShape(aSelectedObject.get(), aShape) && !aShape.IsNull()) + { QString aName = GEOMBase::GetName(aSelectedObject.get()); myEditCurrentArgument->setText(aName); @@ -193,6 +210,7 @@ void TransformationGUI_ProjectionDlg::SelectionIntoArgument() if (myEditCurrentArgument == myGroup->LineEdit1) myObject1.nullify(); else if (myEditCurrentArgument == myGroup->LineEdit2) myObject2.nullify(); } + processPreview(); } //================================================================================= @@ -203,25 +221,45 @@ void TransformationGUI_ProjectionDlg::SetEditCurrentArgument() { QPushButton* send = (QPushButton*)sender(); - if (send == myGroup->PushButton1) { + globalSelection(); // close local contexts, if any + + if (send == myGroup->PushButton1) // what to project + { myEditCurrentArgument = myGroup->LineEdit1; myGroup->PushButton2->setDown(false); myGroup->LineEdit2->setEnabled(false); - TColStd_MapOfInteger aMap; - aMap.Add( GEOM_POINT ); - aMap.Add( GEOM_EDGE ); - aMap.Add( GEOM_WIRE ); - globalSelection( aMap ); + switch ( getConstructorId() ) { + case PROJ_ON_FACE: { + TColStd_MapOfInteger aMap; + aMap.Add( GEOM_POINT ); + aMap.Add( GEOM_EDGE ); + aMap.Add( GEOM_WIRE ); + globalSelection( aMap ); + break; + } + case PROJ_ON_WIRE: + case PROJ_ON_EDGE: { + localSelection(GEOM::GEOM_Object::_nil(), TopAbs_VERTEX); + break; + } + default:; + } } - else if (send == myGroup->PushButton2) { + else if (send == myGroup->PushButton2) // where to project + { myEditCurrentArgument = myGroup->LineEdit2; myGroup->PushButton1->setDown(false); myGroup->LineEdit1->setEnabled(false); - globalSelection( GEOM_FACE ); + switch ( getConstructorId() ) { + case PROJ_ON_FACE: localSelection(GEOM::GEOM_Object::_nil(), TopAbs_FACE); break; + case PROJ_ON_WIRE: localSelection(GEOM::GEOM_Object::_nil(), TopAbs_WIRE); break; + case PROJ_ON_EDGE: localSelection(GEOM::GEOM_Object::_nil(), TopAbs_EDGE); break; + default:; + } } // enable line edit @@ -229,6 +267,8 @@ void TransformationGUI_ProjectionDlg::SetEditCurrentArgument() myEditCurrentArgument->setFocus(); // after setFocus(), because it will be setDown(false) when loses focus send->setDown(true); + + SelectionIntoArgument(); } //================================================================================= @@ -281,9 +321,51 @@ bool TransformationGUI_ProjectionDlg::execute (ObjectList& objects) GEOM::GEOM_Object_var anObj; GEOM::GEOM_ITransformOperations_var anOper = GEOM::GEOM_ITransformOperations::_narrow(getOperation()); - anObj = anOper->ProjectShapeCopy(myObject1.get(), myObject2.get()); + anObj = anOper->ProjectShapeCopy( myObject1.get(), myObject2.get() ); if (!anObj->_is_nil()) objects.push_back(anObj._retn()); return true; } + +//================================================================================= +// function : ConstructorsClicked() +// purpose : Radio button management +//================================================================================= +void TransformationGUI_ProjectionDlg::ConstructorsClicked( int constructorId ) +{ + myObject1.nullify(); + myObject2.nullify(); + myGroup->LineEdit1->setText( "" ); + myGroup->LineEdit2->setText( "" ); + + switch ( constructorId ) { + case PROJ_ON_FACE: + mainFrame()->GroupConstructors->setTitle(tr("GEOM_PROJECTION_ON_FACE")); + myGroup->TextLabel1->setText(tr("GEOM_PROJ_ON_FACE_SOURCE")); + myGroup->TextLabel2->setText(tr("GEOM_PROJ_ON_FACE_TARGET")); + break; + case PROJ_ON_EDGE: + mainFrame()->GroupConstructors->setTitle(tr("GEOM_PROJECTION_ON_EDGE")); + myGroup->TextLabel1->setText(tr("GEOM_PROJ_ON_EDGE_SOURCE")); + myGroup->TextLabel2->setText(tr("GEOM_PROJ_ON_EDGE_TARGET")); + break; + case PROJ_ON_WIRE: + mainFrame()->GroupConstructors->setTitle(tr("GEOM_PROJECTION_ON_WIRE")); + myGroup->TextLabel1->setText(tr("GEOM_PROJ_ON_WIRE_SOURCE")); + myGroup->TextLabel2->setText(tr("GEOM_PROJ_ON_WIRE_TARGET")); + break; + default:; + } + myGroup->PushButton1->click(); +} + +//================================================================================= +// function : addSubshapeToStudy +// purpose : virtual method to add new SubObjects if local selection +//================================================================================= +void TransformationGUI_ProjectionDlg::addSubshapesToStudy() +{ + GEOMBase::PublishSubObject( myObject1.get() ); + GEOMBase::PublishSubObject( myObject2.get() ); +} diff --git a/src/TransformationGUI/TransformationGUI_ProjectionDlg.h b/src/TransformationGUI/TransformationGUI_ProjectionDlg.h index b20e110c8..3b09bba84 100644 --- a/src/TransformationGUI/TransformationGUI_ProjectionDlg.h +++ b/src/TransformationGUI/TransformationGUI_ProjectionDlg.h @@ -49,6 +49,7 @@ protected: virtual GEOM::GEOM_IOperations_ptr createOperation(); virtual bool isValid (QString&); virtual bool execute (ObjectList&); + virtual void addSubshapesToStudy(); private: void Init(); @@ -66,6 +67,7 @@ private slots: void SetEditCurrentArgument(); void SelectionIntoArgument(); void ActivateThisDialog(); + void ConstructorsClicked( int constructorId ); }; #endif // TRANSFORMATIONGUI_PROJECTIONDLG_H