X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_PolylineOp.cxx;h=33986c67d9be5c6bb94f16e4e363aa412c456f33;hb=de7cf9bb0a7a41d6487013c87f4a54d0664cd303;hp=636b624965117524174933d866a63df507269fa9;hpb=061386caa71490489a0475540932d9f2e48d77dc;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_PolylineOp.cxx b/src/HYDROGUI/HYDROGUI_PolylineOp.cxx index 636b6249..33986c67 100755 --- a/src/HYDROGUI/HYDROGUI_PolylineOp.cxx +++ b/src/HYDROGUI/HYDROGUI_PolylineOp.cxx @@ -23,6 +23,10 @@ #include "HYDROGUI_PolylineOp.h" #include "HYDROGUI_PolylineDlg.h" #include "HYDROGUI_Tool.h" +#include "CurveCreator.hxx" +#include "CurveCreator_Curve.hxx" +#include "CurveCreator_CurveEditor.hxx" +#include "HYDROGUI_AISCurve.h" #include #include @@ -30,22 +34,106 @@ #include #include +#include #include +#include +#include +#include + +#include + +#include + +//static int ZValueIncrement = 0; HYDROGUI_PolylineOp::HYDROGUI_PolylineOp( HYDROGUI_Module* theModule, bool theIsEdit ) -: HYDROGUI_Operation( theModule ), myIsEdit(theIsEdit), myCurve(NULL) +: HYDROGUI_Operation( theModule ), myIsEdit(theIsEdit), myCurve(NULL), + myViewManager(NULL), myAISCurve(NULL) { setName( theIsEdit ? tr( "EDIT_POLYLINE" ) : tr( "CREATE_POLYLINE" ) ); } HYDROGUI_PolylineOp::~HYDROGUI_PolylineOp() { + erasePreview(); +} + +void HYDROGUI_PolylineOp::startOperation() +{ + if( myCurve ) + { + delete myCurve; + myCurve = 0; + } + + HYDROGUI_Operation::startOperation(); + + HYDROGUI_PolylineDlg* aPanel = (HYDROGUI_PolylineDlg*)inputPanel(); + aPanel->reset(); + + if( myIsEdit ) + myEditedObject = Handle(HYDROData_Polyline)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) ); + if( !myEditedObject.IsNull() ) + { + int anIntDim = myEditedObject->GetDimension(); + CurveCreator::Dimension aDim = CurveCreator::Dim3d; + if( anIntDim == 2 ) + aDim = CurveCreator::Dim2d; + myCurve = new CurveCreator_Curve(aDim); + QList aPolylineData = myEditedObject->GetPolylineData(); + + CurveCreator_CurveEditor* anEdit = new CurveCreator_CurveEditor(myCurve); + for( int i = 0 ; i < aPolylineData.size() ; i++ ){ + std::string aName = HYDROGUI_Tool::ToQString(aPolylineData[i].mySectionName).toStdString(); + bool isClosed = aPolylineData[i].myIsClosed; + CurveCreator::Type aType = CurveCreator::Polyline; + if( aPolylineData[i].myType == PolylineSection::SECTION_SPLINE ){ + aType = CurveCreator::BSpline; + } + CurveCreator::Coordinates aCoords; + for( int j = 0 ; j < aPolylineData[i].myCoords.size() ; j++ ){ + aCoords.push_back(aPolylineData[i].myCoords[j]); + } + anEdit->addSection( aName, aType, isClosed, aCoords ); + } + delete anEdit; + aPanel->setPolylineName( myEditedObject->GetName() ); + + } + else{ + myCurve = new CurveCreator_Curve(CurveCreator::Dim2d); + aPanel->setCurve(myCurve); + QString aNewName = HYDROGUI_Tool::GenerateObjectName( module(), tr( "DEFAULT_POLYLINE_NAME" ) ); + aPanel->setPolylineName(aNewName); + } + aPanel->setCurve(myCurve); + + if( myAISCurve ) + myAISCurve->setCurve(myCurve); + + displayPreview(); +} + +void HYDROGUI_PolylineOp::abortOperation() +{ + erasePreview(); + + HYDROGUI_Operation::abortOperation(); +} + +void HYDROGUI_PolylineOp::commitOperation() +{ + erasePreview(); + + HYDROGUI_Operation::commitOperation(); } HYDROGUI_InputPanel* HYDROGUI_PolylineOp::createInputPanel() const { - return new HYDROGUI_PolylineDlg( module(), getName() ); + HYDROGUI_PolylineDlg* aDlg = new HYDROGUI_PolylineDlg( module(), getName() ); + connect( aDlg, SIGNAL( selectionChanged() ), this, SLOT( onEditorSelectionChanged() ) ); + return aDlg; } bool HYDROGUI_PolylineOp::processApply( int& theUpdateFlags, @@ -65,6 +153,9 @@ bool HYDROGUI_PolylineOp::processApply( int& theUpdateFlags, } else{ aPolylineObj = Handle(HYDROData_Polyline)::DownCast( aDocument->CreateObject( KIND_POLYLINE ) ); + + //double aZValue = double( ++ZValueIncrement ) * 1e-2; // empiric value, to be revised + //aPolylineObj->SetZValue( aZValue ); } if( aPolylineObj.IsNull() ) @@ -75,7 +166,7 @@ bool HYDROGUI_PolylineOp::processApply( int& theUpdateFlags, int aDimInt = 3; if( myCurve->getDimension() == CurveCreator::Dim2d ) aDimInt = 2; - aPolylineObj->setDimension(aDimInt); + aPolylineObj->SetDimension(aDimInt); QList aPolylineData; for( int i=0 ; i < myCurve->getNbSections() ; i++ ){ PolylineSection aSect; @@ -91,57 +182,64 @@ bool HYDROGUI_PolylineOp::processApply( int& theUpdateFlags, } aPolylineData << aSect; } - aPolylineObj->setPolylineData(aPolylineData); + aPolylineObj->SetPolylineData(aPolylineData); theUpdateFlags = UF_Model; - aPolylineObj->SetVisible( HYDROGUI_Tool::GetActiveGraphicsViewId( module() ), true ); + module()->setObjectVisible( HYDROGUI_Tool::GetActiveGraphicsViewId( module() ), aPolylineObj, true ); return true; } -void HYDROGUI_PolylineOp::startOperation() +void HYDROGUI_PolylineOp::onEditorSelectionChanged() { - CurveCreator_Curve* anOldCurve = myCurve; - - HYDROGUI_Operation::startOperation(); - HYDROGUI_PolylineDlg* aPanel = (HYDROGUI_PolylineDlg*)inputPanel(); - aPanel->reset(); + if( !aPanel ) + return; + if( !myCurve ) + return; + if( !myAISCurve ) + return; + QList aSelSections = aPanel->getSelectedSections(); + for( int i = 0 ; i < myCurve->getNbSections() ; i++ ){ + bool aIsHl = false; + if( aSelSections.contains(i) ){ + myAISCurve->highlightSection(i, aIsHl); + } + } +} - myEditedObject = Handle(HYDROData_Polyline)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) ); - if( !myEditedObject.IsNull() ) - { - int anIntDim = myEditedObject->getDimension(); - CurveCreator::Dimension aDim = CurveCreator::Dim3d; - if( anIntDim == 2 ) - aDim = CurveCreator::Dim2d; - myCurve = new CurveCreator_Curve(aDim); - QList aPolylineData = myEditedObject->getPolylineData(); +void HYDROGUI_PolylineOp::displayPreview() +{ + LightApp_Application* anApp = module()->getApp(); - CurveCreator_CurveEditor* anEdit = new CurveCreator_CurveEditor(myCurve); - for( int i = 0 ; i < aPolylineData.size() ; i++ ){ - std::string aName = HYDROGUI_Tool::ToQString(aPolylineData[i].mySectionName).toStdString(); - bool isClosed = aPolylineData[i].myIsClosed; - CurveCreator::Type aType = CurveCreator::Polyline; - if( aPolylineData[i].myType == PolylineSection::SECTION_SPLINE ){ - aType = CurveCreator::BSpline; - } - CurveCreator::Coordinates aCoords; - for( int j = 0 ; j < aPolylineData[i].myCoords.size() ; j++ ){ - aCoords.push_back(aPolylineData[i].myCoords[j]); + myViewManager = + dynamic_cast( anApp->getViewManager( OCCViewer_Viewer::Type(), true ) ); + if( myViewManager ) + { + if( OCCViewer_Viewer* aViewer = myViewManager->getOCCViewer() ) + { + Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext(); + if( !aCtx.IsNull() ) + { + myAISCurve = new HYDROGUI_AISCurve( myCurve, aCtx ); + myAISCurve->Display(); } - anEdit->addSection( aName, aType, isClosed, aCoords ); } - delete anEdit; - aPanel->setPolylineName( myEditedObject->GetName() ); - } - else{ - myCurve = new CurveCreator_Curve(CurveCreator::Dim3d); - aPanel->setCurve(myCurve); - QString aNewName = HYDROGUI_Tool::GenerateObjectName( module(), tr("POLYLINE_PREFIX") ); - aPanel->setPolylineName(aNewName); +} + +void HYDROGUI_PolylineOp::erasePreview() +{ + if( myViewManager ) + { + if( OCCViewer_Viewer* aViewer = myViewManager->getOCCViewer() ) + { + Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext(); + if( !aCtx.IsNull() && myAISCurve ) + { + myAISCurve->Erase(); + delete myAISCurve; + myAISCurve = 0; + } + } } - aPanel->setCurve(myCurve); - if( anOldCurve ) - delete anOldCurve; }