From: dmv Date: Fri, 5 Jun 2009 11:42:22 +0000 (+0000) Subject: IPAL21136 Repair add point regression - wrong resulting shape X-Git-Tag: V5_1_2rc2~1 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=e88595c992452dbc70ec336649bf8cf963a45760;p=modules%2Fgeom.git IPAL21136 Repair add point regression - wrong resulting shape --- diff --git a/src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx b/src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx index e70168621..fa5bfd0a1 100644 --- a/src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx +++ b/src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx @@ -41,8 +41,10 @@ #include #include #include +#include #include #include +#include #include #include @@ -124,6 +126,7 @@ void RepairGUI_DivideEdgeDlg::Init() myEditCurrentArgument = GroupPoints->LineEdit1; myObject = GEOM::GEOM_Object::_nil(); + myIndex = -1; //myGeomGUI->SetState( 0 ); initSelection(); @@ -163,20 +166,26 @@ void RepairGUI_DivideEdgeDlg::displayPreview() 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 ); - } + GEOMBase::GetShape( myObject, aShape, TopAbs_SHAPE ); + + if ( myIndex != -1) { + TopTools_IndexedMapOfShape aShapes; + TopExp::MapShapes(aShape, aShapes); + aShape = aShapes.FindKey(myIndex); } + + 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 ); + } } //================================================================================= @@ -203,6 +212,7 @@ bool RepairGUI_DivideEdgeDlg::ClickOnApply() myEditCurrentArgument->setText( "" ); myObject = GEOM::GEOM_Object::_nil(); + myIndex = -1; initSelection(); @@ -220,6 +230,7 @@ void RepairGUI_DivideEdgeDlg::SelectionIntoArgument() myEditCurrentArgument->setText( "" ); myObject = GEOM::GEOM_Object::_nil(); + myIndex = -1; LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); SALOME_ListIO aSelList; @@ -228,46 +239,45 @@ void RepairGUI_DivideEdgeDlg::SelectionIntoArgument() if ( aSelList.Extent() == 1 ) { Handle(SALOME_InteractiveObject) anIO = aSelList.First(); Standard_Boolean aRes; - GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject( anIO, aRes ); - if ( !CORBA::is_nil( aSelectedObject ) && aRes ) { - QString aName = GEOMBase::GetName( aSelectedObject ); + GEOM::GEOM_Object_var aSelectedObj = GEOMBase::ConvertIOinGEOMObject( anIO, aRes ); + if ( !CORBA::is_nil( aSelectedObj ) && aRes ) + { TopoDS_Shape aShape; - if ( GEOMBase::GetShape( aSelectedObject, aShape, TopAbs_SHAPE ) ) { + QString aName = GEOMBase::GetName( aSelectedObj ); + if ( GEOMBase::GetShape( aSelectedObj, aShape, TopAbs_SHAPE ) ) + { const int aType = aShape.ShapeType(); - if ( aType <= TopAbs_EDGE ) { - // edge, wire, face, shell, solid, compound + if ( aType <= TopAbs_EDGE ) // edge, wire, face, shell, solid, compound + { GEOM::short_array anIndexes; TColStd_IndexedMapOfInteger aMap; - 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 - } + 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( aName += QString( ":edge_%1" ).arg( myIndex ) ); } - else if ( aType == TopAbs_EDGE ) { - // single shape selection - myObject = aSelectedObject; + else if ( aType == TopAbs_EDGE ) // single shape selection + { + myIndex = -1; + myObject = aSelectedObj; myEditCurrentArgument->setText( GEOMBase::GetName( myObject ) ); } - else { - // face, shell, solid or compound was selected, and NOT its subshape. + else // face, shell, solid or compound was selected, and NOT its subshape. + { + myIndex = -1; myObject = GEOM::GEOM_Object::_nil(); } } } } } + displayPreview(); } @@ -309,6 +319,7 @@ void RepairGUI_DivideEdgeDlg::ActivateThisDialog() SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); // myObject = GEOM::GEOM_Object::_nil(); + myIndex = -1; //myGeomGUI->SetState( 0 ); initSelection(); @@ -351,7 +362,7 @@ bool RepairGUI_DivideEdgeDlg::isValid( QString& msg ) bool RepairGUI_DivideEdgeDlg::execute( ObjectList& objects ) { GEOM::GEOM_Object_var anObj = GEOM::GEOM_IHealingOperations::_narrow( getOperation() )->DivideEdge - ( myObject, -1, myValEdt->value(), getIsByParameter() ); + ( myObject, myIndex, myValEdt->value(), getIsByParameter() ); bool aResult = !anObj->_is_nil(); if ( aResult ) { @@ -387,15 +398,3 @@ 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 ); -} diff --git a/src/RepairGUI/RepairGUI_DivideEdgeDlg.h b/src/RepairGUI/RepairGUI_DivideEdgeDlg.h index d7ceed40e..d2a71bf35 100644 --- a/src/RepairGUI/RepairGUI_DivideEdgeDlg.h +++ b/src/RepairGUI/RepairGUI_DivideEdgeDlg.h @@ -49,7 +49,6 @@ protected: virtual GEOM::GEOM_IOperations_ptr createOperation(); virtual bool isValid( QString& ); virtual bool execute( ObjectList& ); - virtual void addSubshapesToStudy(); private: void Init(); @@ -57,6 +56,7 @@ private: void initSelection(); bool getIsByParameter() const; + int myIndex; private: GEOM::GEOM_Object_var myObject;