X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_PolylineOp.cxx;h=33986c67d9be5c6bb94f16e4e363aa412c456f33;hb=de7cf9bb0a7a41d6487013c87f4a54d0664cd303;hp=52c1509b4a3b757a3eb72cde43d92be385a4464a;hpb=ac0a710b8a716d0734c7824e5a15aed5f9965d98;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_PolylineOp.cxx b/src/HYDROGUI/HYDROGUI_PolylineOp.cxx index 52c1509b..33986c67 100755 --- a/src/HYDROGUI/HYDROGUI_PolylineOp.cxx +++ b/src/HYDROGUI/HYDROGUI_PolylineOp.cxx @@ -39,24 +39,100 @@ #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), - myActiveViewManager(NULL), myPreviewViewManager(NULL), myAISCurve(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 { HYDROGUI_PolylineDlg* aDlg = new HYDROGUI_PolylineDlg( module(), getName() ); - connect( aDlg ,SIGNAL( selectionChanged() ), this, SLOT( onEditorSelectionChanged() ) ); + connect( aDlg, SIGNAL( selectionChanged() ), this, SLOT( onEditorSelectionChanged() ) ); return aDlg; } @@ -77,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() ) @@ -87,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; @@ -103,87 +182,13 @@ 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::onCreatePreview() -{ - LightApp_Application* anApp = module()->getApp(); - - myActiveViewManager = anApp->activeViewManager(); - - myPreviewViewManager = - dynamic_cast( anApp->createViewManager( OCCViewer_Viewer::Type() ) ); - if( myPreviewViewManager ) - { - anApp->selectionMgr()->setEnabled(false); - myPreviewViewManager->setTitle( tr( "CREATE_CURVE" ) ); - OCCViewer_Viewer* aViewer = myPreviewViewManager->getOCCViewer(); - aViewer->enableSelection(true); - aViewer->enableMultiselection(true); - Handle_AIS_InteractiveContext aCtx = aViewer->getAISContext(); - - myAISCurve = new HYDROGUI_AISCurve(myCurve, aCtx); - - myAISCurve->Display(); - } -} - -void HYDROGUI_PolylineOp::startOperation() -{ - CurveCreator_Curve* anOldCurve = myCurve; - - HYDROGUI_Operation::startOperation(); - - HYDROGUI_PolylineDlg* aPanel = (HYDROGUI_PolylineDlg*)inputPanel(); - aPanel->reset(); - - 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::Dim3d); - aPanel->setCurve(myCurve); - QString aNewName = HYDROGUI_Tool::GenerateObjectName( module(), tr("POLYLINE_PREFIX") ); - aPanel->setPolylineName(aNewName); - } - aPanel->setCurve(myCurve); - if( myAISCurve ) - myAISCurve->setCurve(myCurve); - if( anOldCurve ) - delete anOldCurve; - onCreatePreview(); -} - void HYDROGUI_PolylineOp::onEditorSelectionChanged() { HYDROGUI_PolylineDlg* aPanel = (HYDROGUI_PolylineDlg*)inputPanel(); @@ -201,3 +206,40 @@ void HYDROGUI_PolylineOp::onEditorSelectionChanged() } } } + +void HYDROGUI_PolylineOp::displayPreview() +{ + LightApp_Application* anApp = module()->getApp(); + + 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(); + } + } + } +} + +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; + } + } + } +}