X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FEntityGUI%2FEntityGUI.cxx;h=672298e41e524f65f61264a62443c327d36824ed;hb=001d93f1ef3a53aa9df53b3589a0c72849b22a4e;hp=705138e361dcc2ca5c3fdfc84e9662c192c9b32f;hpb=5b3622aa2363853841fd5b4205c78a715bfee4a4;p=modules%2Fgeom.git diff --git a/src/EntityGUI/EntityGUI.cxx b/src/EntityGUI/EntityGUI.cxx index 705138e36..672298e41 100644 --- a/src/EntityGUI/EntityGUI.cxx +++ b/src/EntityGUI/EntityGUI.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // 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. +// 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 @@ -26,18 +26,23 @@ // #include "EntityGUI.h" -#include +#include "GeometryGUI.h" #include "GeometryGUI_Operations.h" +#include "GEOMUtils.hxx" -#include -#include -#include -#include +#include #include -#include +#include #include -#include +#include +#include +#include +#include +#include +#include #include +#include +#include "utilities.h" #include #include @@ -50,9 +55,16 @@ #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 +#include "EntityGUI_FieldDlg.h" // Create/Edit Field +#include "EntityGUI_PolylineDlg.h" // Create/Edit 2d polyline + +#include "GEOMImpl_Types.hxx" + //======================================================================= // function : EntityGUI() @@ -93,6 +105,12 @@ bool EntityGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) case GEOMOp::Op3dSketcher: // 3D SKETCHER aDlg = new EntityGUI_3DSketcherDlg( getGeometryGUI(), parent ); break; + 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; @@ -104,13 +122,89 @@ bool EntityGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) case GEOMOp::OpPictureImport: // IMPORT PICTURE IN VIEWER aDlg = new EntityGUI_PictureImportDlg( getGeometryGUI(), parent ); break; + case GEOMOp::OpCreateField: // CREATE FIELD + aDlg = new EntityGUI_FieldDlg (getGeometryGUI(), GEOM::GEOM_Field::_nil(), 0, + parent); + break; + case GEOMOp::OpEditField: // EDIT FIELD + case GEOMOp::OpEditFieldPopup: + { + SALOME_ListIO aList; + aList.Clear(); + + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); + if (aSelMgr) + aSelMgr->selectedObjects(aList); + SALOME_ListIteratorOfListIO anIter (aList); + + GEOM::GEOM_Field_var field; + GEOM::GEOM_FieldStep_var step; + + SalomeApp_Study* study = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); + if ( aList.Extent() > 0 && study ) { + for ( ; anIter.More(); anIter.Next() ) + { + Handle(SALOME_InteractiveObject) anIObj = anIter.Value(); + if ( !anIObj.IsNull() && anIObj->hasEntry() ) + if ( _PTR(SObject) obj = study->studyDS()->FindObjectID( anIObj->getEntry() )) + { + CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject( obj ); + GEOM::GEOM_BaseObject_var bo = GEOM::GEOM_BaseObject::_narrow( corbaObj ); + GEOM::GEOM_Field_var f; + GEOM::GEOM_FieldStep_var s; + switch ( bo->GetType() ) { + case GEOM_FIELD: + f = GEOM::GEOM_Field::_narrow( corbaObj ); break; + case GEOM_FIELD_STEP: + step = GEOM::GEOM_FieldStep::_narrow( corbaObj ); + if ( !step->_is_nil() ) + f = step->GetField(); + break; + default: + continue; + } + if ( !f->_is_nil() ) + { + if ( !field->_is_nil() && !f->_is_equivalent( field )) + { + field = GEOM::GEOM_Field::_nil(); // several field selected + break; + } + field = f; + } + } + } + } + + if ( !field->_is_nil()) { + int stepID; + if ( !step->_is_nil() ) { + stepID = step->GetID(); + } + else { + GEOM::ListOfLong_var stepIDs = field->GetSteps(); + if ( stepIDs->length() > 0 ) + stepID = stepIDs[0]; + else + stepID = 0; + } + aDlg = new EntityGUI_FieldDlg (getGeometryGUI(), field, stepID, parent); + break; + } + SUIT_MessageBox::warning(parent, tr("WRN_WARNING"), tr("NO_FIELD")); + break; + } + case GEOMOp::Op2dPolylineEditor: // POLYLINE EDITOR + getGeometryGUI()->ActiveWorkingPlane(); + aDlg = new EntityGUI_PolylineDlg( getGeometryGUI(), parent ); + break; default: app->putInfo( tr( "GEOM_PRP_COMMAND" ).arg( theCommandID ) ); break; } if ( aDlg ) aDlg->show(); - + return true; } @@ -140,9 +234,9 @@ bool EntityGUI::OnMousePress( QMouseEvent* pe, SUIT_Desktop* parent, SUIT_ViewWi ic->InitSelected(); if ( pe->modifiers() == Qt::ShiftModifier ) - ic->ShiftSelect(); // Append selection + ic->ShiftSelect( Standard_True ); // Append selection else - ic->Select(); // New selection + ic->Select( Standard_True ); // New selection ic->InitSelected(); if ( ic->MoreSelected() ) { @@ -152,7 +246,7 @@ bool EntityGUI::OnMousePress( QMouseEvent* pe, SUIT_Desktop* parent, SUIT_ViewWi } else { OCCViewer_ViewPort3d* vp = ((OCCViewer_ViewWindow*)theViewWindow)->getViewPort(); - aPnt = ConvertClickToPoint( pe->x(), pe->y(), vp->getView() ); + aPnt = GEOMUtils::ConvertClickToPoint( pe->x(), pe->y(), vp->getView() ); } Qt::KeyboardModifiers modifiers = pe->modifiers(); @@ -169,7 +263,7 @@ bool EntityGUI::OnMousePress( QMouseEvent* pe, SUIT_Desktop* parent, SUIT_ViewWi Handle(AIS_InteractiveContext) ic = anOCCViewer->getAISContext(); ic->InitSelected(); - ic->Select(); // New selection + ic->Select( Standard_True ); // New selection ic->InitSelected(); TopoDS_Shape aShape; @@ -180,7 +274,7 @@ bool EntityGUI::OnMousePress( QMouseEvent* pe, SUIT_Desktop* parent, SUIT_ViewWi else { OCCViewer_ViewPort3d* vp = ((OCCViewer_ViewWindow*)theViewWindow)->getViewPort(); - aPnt = ConvertClickToPoint( pe->x(), pe->y(), vp->getView() ); + aPnt = GEOMUtils::ConvertClickToPoint( pe->x(), pe->y(), vp->getView() ); } // aCornerDlg->OnPointSelected( aPnt ); // "feed" the point to corner detection dialog @@ -203,8 +297,8 @@ bool EntityGUI::OnMousePress( QMouseEvent* pe, SUIT_Desktop* parent, SUIT_ViewWi bool EntityGUI::OnMouseRelease( QMouseEvent* pe, SUIT_Desktop* parent, SUIT_ViewWindow* theViewWindow ) { ((OCCViewer_ViewWindow*)theViewWindow)->setSketcherStyle(false); - QDialog* aDlg = getGeometryGUI()->GetActiveDialogBox(); #ifdef WITH_OPENCV + QDialog* aDlg = getGeometryGUI()->GetActiveDialogBox(); if ( aDlg && ( QString( aDlg->metaObject()->className() ).compare( "EntityGUI_FeatureDetectorDlg" ) == 0 ) && theViewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() && pe->modifiers() != Qt::ControlModifier ) @@ -217,7 +311,7 @@ bool EntityGUI::OnMouseRelease( QMouseEvent* pe, SUIT_Desktop* parent, SUIT_View { // QPoint end = QPoint(pe->x(),pe->y()); OCCViewer_ViewPort3d* vp = ((OCCViewer_ViewWindow*)theViewWindow)->getViewPort(); - aPnt = ConvertClickToPoint( pe->x(), pe->y(), vp->getView() ); + aPnt = GEOMUtils::ConvertClickToPoint( pe->x(), pe->y(), vp->getView() ); aCornerDlg->setEndPnt( aPnt ); } } @@ -240,7 +334,7 @@ bool EntityGUI::OnMouseMove( QMouseEvent* pe, SUIT_Desktop* parent, SUIT_ViewWin if ( aSketcherDlg->acceptMouseEvent() ) { OCCViewer_ViewPort3d* vp = ((OCCViewer_ViewWindow*)theViewWindow)->getViewPort(); - gp_Pnt aPnt = ConvertClickToPoint( pe->x(), pe->y(), vp->getView() ); + gp_Pnt aPnt = GEOMUtils::ConvertClickToPoint( pe->x(), pe->y(), vp->getView() ); Qt::KeyboardModifiers modifiers = pe->modifiers(); if (QApplication::mouseButtons() == Qt::LeftButton ) @@ -251,32 +345,6 @@ bool EntityGUI::OnMouseMove( QMouseEvent* pe, SUIT_Desktop* parent, SUIT_ViewWin return false; } -//======================================================================= -// function : ConvertClickToPoint() -// purpose : Returns the point clicked in 3D view -//======================================================================= -gp_Pnt EntityGUI::ConvertClickToPoint( int x, int y, Handle(V3d_View) aView ) -{ - V3d_Coordinate XEye, YEye, ZEye, XAt, YAt, ZAt; - aView->Eye( XEye, YEye, ZEye ); - - aView->At( XAt, YAt, ZAt ); - gp_Pnt EyePoint( XEye, YEye, ZEye ); - gp_Pnt AtPoint( XAt, YAt, ZAt ); - - gp_Vec EyeVector( EyePoint, AtPoint ); - gp_Dir EyeDir( EyeVector ); - - gp_Pln PlaneOfTheView = gp_Pln( AtPoint, EyeDir ); - Standard_Real X, Y, Z; - aView->Convert( x, y, X, Y, Z ); - gp_Pnt ConvertedPoint( X, Y, Z ); - - gp_Pnt2d ConvertedPointOnPlane = ProjLib::Project( PlaneOfTheView, ConvertedPoint ); - gp_Pnt ResultPoint = ElSLib::Value( ConvertedPointOnPlane.X(), ConvertedPointOnPlane.Y(), PlaneOfTheView ); - return ResultPoint; -} - //===================================================================================== // function : DisplaySimulationShape() // purpose : Displays 'this->mySimulationShape' a pure graphical shape from a TopoDS_Shape @@ -296,8 +364,8 @@ void EntityGUI::DisplaySimulationShape( const TopoDS_Shape& S1, const TopoDS_Sha try { if ( !S1.IsNull() ) { /* erase any previous */ - ic->Erase( mySimulationShape1, Standard_True, Standard_False ); - ic->ClearPrs( mySimulationShape1 ); + ic->Erase( mySimulationShape1, Standard_True ); + ic->ClearPrs( mySimulationShape1, 0, Standard_True ); mySimulationShape1 = new AIS_Shape( TopoDS_Shape() ); mySimulationShape1->Set( S1 ); @@ -308,8 +376,8 @@ void EntityGUI::DisplaySimulationShape( const TopoDS_Shape& S1, const TopoDS_Sha mySimulationShape1->UnsetColor(); } if ( !S2.IsNull() ) { - ic->Erase( mySimulationShape2, Standard_True, Standard_False ); - ic->ClearPrs( mySimulationShape2 ); + ic->Erase( mySimulationShape2, Standard_True ); + ic->ClearPrs( mySimulationShape2, 0, Standard_True ); mySimulationShape2 = new AIS_Shape( TopoDS_Shape() ); mySimulationShape2->Set( S2 ); @@ -322,7 +390,7 @@ void EntityGUI::DisplaySimulationShape( const TopoDS_Shape& S1, const TopoDS_Sha ic->UpdateCurrentViewer(); } catch( Standard_Failure ) { - MESSAGE( "Exception catched in EntityGUI::DisplaySimulationShape" ); + MESSAGE( "Exception caught in EntityGUI::DisplaySimulationShape" ); } } @@ -352,10 +420,10 @@ void EntityGUI::EraseSimulationShape() if ( vw->getViewManager()->getType() == OCCViewer_Viewer::Type() ) { OCCViewer_Viewer* v3d = ( (OCCViewer_ViewManager*)( vw->getViewManager() ) )->getOCCViewer(); Handle(AIS_InteractiveContext) ic = v3d->getAISContext(); - ic->Erase( mySimulationShape1, Standard_True, Standard_False ); - ic->ClearPrs( mySimulationShape1 ); - ic->Erase( mySimulationShape2, Standard_True, Standard_False ); - ic->ClearPrs( mySimulationShape2 ); + ic->Erase( mySimulationShape1, Standard_True ); + ic->Erase( mySimulationShape2, Standard_True ); + ic->ClearPrs( mySimulationShape1, 0, Standard_True ); + ic->ClearPrs( mySimulationShape2, 0, Standard_True ); ic->UpdateCurrentViewer(); } }