#include "RepairGUI_DivideEdgeDlg.h"
-#include <GEOM_DlgRef.h>
+#include <DlgRef.h>
#include <GeometryGUI.h>
#include <GEOMBase.h>
#include <GEOMImpl_Types.hxx>
#include <TopAbs.hxx>
+#include <Geom_Curve.hxx>
+#include <gp_Pnt.hxx>
+#include <TopoDS.hxx>
+#include <TopoDS_Edge.hxx>
+#include <BRep_Tool.hxx>
+#include <BRepBuilderAPI_MakeVertex.hxx>
#include <TColStd_IndexedMapOfInteger.hxx>
//=================================================================================
/***************************************************************/
- setHelpFileName( "add_point_on_edge.htm" );
+ setHelpFileName( "add_point_on_edge_operation_page.html" );
Init();
}
myEditCurrentArgument = GroupPoints->LineEdit1;
myObject = GEOM::GEOM_Object::_nil();
- myIndex = -1;
//myGeomGUI->SetState( 0 );
initSelection();
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() ) );
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()
myEditCurrentArgument->setText( "" );
myObject = GEOM::GEOM_Object::_nil();
- myIndex = -1;
initSelection();
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();
}
//=================================================================================
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();
ActivateThisDialog();
}
-//=================================================================================
-// function : closeEvent()
-// purpose :
-//=================================================================================
-void RepairGUI_DivideEdgeDlg::closeEvent( QCloseEvent* e )
-{
- //myGeomGUI->SetState( -1 );
- GEOMBase_Skeleton::closeEvent( e );
-}
-
//=================================================================================
// function : createOperation
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() );
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<QString, GEOM::GEOM_Object_var> objMap;
+ objMap[GroupPoints->LineEdit1->text()] = myObject;
+
+ addSubshapesToFather( objMap );
+}