X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FRepairGUI%2FRepairGUI_DivideEdgeDlg.cxx;h=7cea1fd993597e5fb4f4f6a0d2fb9c7dc7ebae01;hb=7989a2ef27ffbfb20a244f45c8486054344da73c;hp=cadefedd49c11b6709b16f78da0fb0416a90adad;hpb=5e1fa70bbf7aae361dab95e2d00796b267fc3ea5;p=modules%2Fgeom.git diff --git a/src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx b/src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx index cadefedd4..7cea1fd99 100644 --- a/src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx +++ b/src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx @@ -25,7 +25,7 @@ #include "RepairGUI_DivideEdgeDlg.h" -#include +#include #include #include @@ -37,6 +37,12 @@ #include #include +#include +#include +#include +#include +#include +#include #include //================================================================================= @@ -95,7 +101,7 @@ RepairGUI_DivideEdgeDlg::RepairGUI_DivideEdgeDlg( GeometryGUI* theGeometryGUI, Q /***************************************************************/ - setHelpFileName( "add_point_on_edge.htm" ); + setHelpFileName( "add_point_on_edge_operation_page.html" ); Init(); } @@ -118,7 +124,6 @@ void RepairGUI_DivideEdgeDlg::Init() myEditCurrentArgument = GroupPoints->LineEdit1; myObject = GEOM::GEOM_Object::_nil(); - myIndex = -1; //myGeomGUI->SetState( 0 ); initSelection(); @@ -127,6 +132,8 @@ void RepairGUI_DivideEdgeDlg::Init() connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); + connect( myValEdt, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox() ) ); + connect( GroupPoints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); connect( GroupPoints->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) ); @@ -136,6 +143,41 @@ void RepairGUI_DivideEdgeDlg::Init() initName( tr( "DEVIDE_EDGE_NEW_OBJECT_NAME" ) ); } +//================================================================================= +// function : ValueChangedInSpinBox() +// purpose : On change value in spin box +//================================================================================= +void RepairGUI_DivideEdgeDlg::ValueChangedInSpinBox() +{ + displayPreview(); +} + +//================================================================================= +// function : displayPreview() +// purpose : On display Preview +//================================================================================= +void RepairGUI_DivideEdgeDlg::displayPreview() +{ + if ( myObject->_is_nil() ) + return; + + TopoDS_Shape aShape; + gp_Pnt aPnt; + if ( GEOMBase::GetShape( myObject, aShape, TopAbs_SHAPE ) ) { + if (aShape.ShapeType() == TopAbs_EDGE) { + Standard_Real aFP, aLP, aP; + Handle(Geom_Curve) aCurve = BRep_Tool::Curve(TopoDS::Edge(aShape), aFP, aLP); + aP = aFP + (aLP - aFP) * myValEdt->value(); + aPnt = aCurve->Value(aP); + BRepBuilderAPI_MakeVertex mkVertex (aPnt); + aShape = mkVertex.Shape(); + // Build prs + SALOME_Prs* aPrs = getDisplayer()->BuildPrs( aShape ); + if ( aPrs != 0 && !aPrs->IsNull() ) + GEOMBase_Helper::displayPreview( aPrs, false, true ); + } + } +} //================================================================================= // function : ClickOnOk() @@ -161,7 +203,6 @@ bool RepairGUI_DivideEdgeDlg::ClickOnApply() myEditCurrentArgument->setText( "" ); myObject = GEOM::GEOM_Object::_nil(); - myIndex = -1; initSelection(); @@ -179,46 +220,55 @@ void RepairGUI_DivideEdgeDlg::SelectionIntoArgument() myEditCurrentArgument->setText( "" ); myObject = GEOM::GEOM_Object::_nil(); - myIndex = -1; - if ( IObjectCount() == 1 ) { - Handle(SALOME_InteractiveObject) anIO = firstIObject(); + LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); + SALOME_ListIO aSelList; + aSelMgr->selectedObjects(aSelList); + + if ( aSelList.Extent() == 1 ) { + Handle(SALOME_InteractiveObject) anIO = aSelList.First(); Standard_Boolean aRes; - GEOM::GEOM_Object_var aSelectedObj = GEOMBase::ConvertIOinGEOMObject( anIO, aRes ); - if ( !CORBA::is_nil( aSelectedObj ) && aRes ) { + GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject( anIO, aRes ); + if ( !CORBA::is_nil( aSelectedObject ) && aRes ) { + QString aName = GEOMBase::GetName( aSelectedObject ); TopoDS_Shape aShape; - if ( GEOMBase::GetShape( aSelectedObj, aShape, TopAbs_SHAPE ) ) { + if ( GEOMBase::GetShape( aSelectedObject, aShape, TopAbs_SHAPE ) ) { const int aType = aShape.ShapeType(); if ( aType <= TopAbs_EDGE ) { // edge, wire, face, shell, solid, compound GEOM::short_array anIndexes; TColStd_IndexedMapOfInteger aMap; - SalomeApp_Application* anApp = - (SalomeApp_Application*)(SUIT_Session::session()->activeApplication()); - anApp->selectionMgr()->GetIndexes( anIO, aMap ); - - if ( !aMap.IsEmpty() ) { - // subshape selection - myIndex = aMap( 1 ); - myObject = aSelectedObj; - myEditCurrentArgument->setText( tr( "GEOM_EDGE" ) + "_1" ); + aSelMgr->GetIndexes( anIO, aMap ); + + if ( aMap.Extent() == 1 ) { // local selection + int anIndex = aMap( 1 ); + myEditCurrentArgument->setText( aName += QString( ":edge_%1" ).arg( anIndex ) ); + + //Find SubShape Object in Father + GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather( aSelectedObject, aName ); + if ( aFindedObject == GEOM::GEOM_Object::_nil() ) { // Object not found in study + GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations( getStudyId() ); + myObject = aShapesOp->GetSubShape( aSelectedObject, anIndex ); + } + else { + myObject = aFindedObject; // get Object from study + } } else if ( aType == TopAbs_EDGE ) { // single shape selection - myIndex = -1; - myObject = aSelectedObj; + myObject = aSelectedObject; myEditCurrentArgument->setText( GEOMBase::GetName( myObject ) ); } else { // face, shell, solid or compound was selected, and NOT its subshape. - myIndex = -1; myObject = GEOM::GEOM_Object::_nil(); } } } } } + displayPreview(); } //================================================================================= @@ -258,8 +308,7 @@ void RepairGUI_DivideEdgeDlg::ActivateThisDialog() connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); - myObject = GEOM::GEOM_Object::_nil(); - myIndex = -1; +// myObject = GEOM::GEOM_Object::_nil(); //myGeomGUI->SetState( 0 ); initSelection(); @@ -275,16 +324,6 @@ void RepairGUI_DivideEdgeDlg::enterEvent( QEvent* ) ActivateThisDialog(); } -//================================================================================= -// function : closeEvent() -// purpose : -//================================================================================= -void RepairGUI_DivideEdgeDlg::closeEvent( QCloseEvent* e ) -{ - //myGeomGUI->SetState( -1 ); - GEOMBase_Skeleton::closeEvent( e ); -} - //================================================================================= // function : createOperation @@ -311,7 +350,7 @@ bool RepairGUI_DivideEdgeDlg::isValid( QString& ) bool RepairGUI_DivideEdgeDlg::execute( ObjectList& objects ) { GEOM::GEOM_Object_var anObj = GEOM::GEOM_IHealingOperations::_narrow( getOperation() )->DivideEdge - ( myObject, myIndex, myValEdt->value(), getIsByParameter() ); + ( myObject, -1, myValEdt->value(), getIsByParameter() ); bool aResult = !anObj->_is_nil(); if ( aResult ) objects.push_back( anObj._retn() ); @@ -337,3 +376,15 @@ void RepairGUI_DivideEdgeDlg::initSelection() GEOM::GEOM_Object_var aNullGeomObject; localSelection( aNullGeomObject, TopAbs_EDGE ); // load local selection on ALL objects } + +//================================================================================= +// function : addSubshapeToStudy +// purpose : virtual method to add new SubObjects if local selection +//================================================================================= +void RepairGUI_DivideEdgeDlg::addSubshapesToStudy() +{ + QMap objMap; + objMap[GroupPoints->LineEdit1->text()] = myObject; + + addSubshapesToFather( objMap ); +}