X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_PolylineOp.cxx;h=33986c67d9be5c6bb94f16e4e363aa412c456f33;hb=de7cf9bb0a7a41d6487013c87f4a54d0664cd303;hp=b8b19f763778e2b1a2cbb63b3c2aef813004fc0a;hpb=7ba9e0e34e3d326077ecb01fb6ce837cde1627bc;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_PolylineOp.cxx b/src/HYDROGUI/HYDROGUI_PolylineOp.cxx index b8b19f76..33986c67 100755 --- a/src/HYDROGUI/HYDROGUI_PolylineOp.cxx +++ b/src/HYDROGUI/HYDROGUI_PolylineOp.cxx @@ -43,122 +43,45 @@ #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() { - closePreview(); -} - -HYDROGUI_InputPanel* HYDROGUI_PolylineOp::createInputPanel() const -{ - HYDROGUI_PolylineDlg* aDlg = new HYDROGUI_PolylineDlg( module(), getName() ); - connect( aDlg ,SIGNAL( selectionChanged() ), this, SLOT( onEditorSelectionChanged() ) ); - return aDlg; -} - -bool HYDROGUI_PolylineOp::processApply( int& theUpdateFlags, - QString& theErrorMsg ) -{ - HYDROGUI_PolylineDlg* aPanel = (HYDROGUI_PolylineDlg*)inputPanel(); - - int aStudyId = module()->getStudyId(); - bool aHasDoc = HYDROData_Document::HasDocument(aStudyId); - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( aStudyId ); - if( aDocument.IsNull() ) - return false; - - Handle(HYDROData_Polyline) aPolylineObj; - if( myIsEdit ){ - aPolylineObj = myEditedObject; - } - else{ - aPolylineObj = Handle(HYDROData_Polyline)::DownCast( aDocument->CreateObject( KIND_POLYLINE ) ); - } - - if( aPolylineObj.IsNull() ) - return false; - - QString aPolylineName = aPanel->getPolylineName(); - aPolylineObj->SetName(aPolylineName); - int aDimInt = 3; - if( myCurve->getDimension() == CurveCreator::Dim2d ) - aDimInt = 2; - aPolylineObj->setDimension(aDimInt); - QList aPolylineData; - for( int i=0 ; i < myCurve->getNbSections() ; i++ ){ - PolylineSection aSect; - aSect.mySectionName = HYDROGUI_Tool::ToExtString( QString::fromLocal8Bit(myCurve->getSectionName(i).c_str())); - aSect.myIsClosed = myCurve->isClosed(i); - aSect.myType = PolylineSection::SECTION_POLYLINE; - if( myCurve->getType(i) == CurveCreator::BSpline ){ - aSect.myType = PolylineSection::SECTION_SPLINE; - } - CurveCreator::Coordinates aCoords = myCurve->getPoints(i); - for( int j = 0 ; j < aCoords.size() ; j++ ){ - aSect.myCoords << aCoords.at(j); - } - aPolylineData << aSect; - } - aPolylineObj->setPolylineData(aPolylineData); - - theUpdateFlags = UF_Model; - module()->setObjectVisible( HYDROGUI_Tool::GetActiveGraphicsViewId( module() ), aPolylineObj, true ); - return true; + erasePreview(); } -void HYDROGUI_PolylineOp::onCreatePreview() +void HYDROGUI_PolylineOp::startOperation() { - LightApp_Application* anApp = module()->getApp(); - - myActiveViewManager = anApp->activeViewManager(); - - myPreviewViewManager = - dynamic_cast( anApp->createViewManager( OCCViewer_Viewer::Type() ) ); - if( myPreviewViewManager ) + if( myCurve ) { - connect( myPreviewViewManager, SIGNAL( lastViewClosed( SUIT_ViewManager* ) ), - this, SLOT( onLastViewClosed( SUIT_ViewManager* ) ) ); - - //anApp->selectionMgr()->setEnabled(false); // what the hell?! - myPreviewViewManager->setTitle( tr( "CREATE_POLYLINE" ) ); - OCCViewer_Viewer* aViewer = myPreviewViewManager->getOCCViewer(); - aViewer->enableSelection(true); - aViewer->enableMultiselection(true); - Handle_AIS_InteractiveContext aCtx = aViewer->getAISContext(); - - OCCViewer_ViewWindow* vw = (OCCViewer_ViewWindow*)myPreviewViewManager->getActiveView(); - vw->onTopView(); - - myAISCurve = new HYDROGUI_AISCurve(myCurve, aCtx); - - myAISCurve->Display(); + delete myCurve; + myCurve = 0; } -} - -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( myIsEdit ) + myEditedObject = Handle(HYDROData_Polyline)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) ); if( !myEditedObject.IsNull() ) { - int anIntDim = myEditedObject->getDimension(); + int anIntDim = myEditedObject->GetDimension(); CurveCreator::Dimension aDim = CurveCreator::Dim3d; if( anIntDim == 2 ) aDim = CurveCreator::Dim2d; myCurve = new CurveCreator_Curve(aDim); - QList aPolylineData = myEditedObject->getPolylineData(); + QList aPolylineData = myEditedObject->GetPolylineData(); CurveCreator_CurveEditor* anEdit = new CurveCreator_CurveEditor(myCurve); for( int i = 0 ; i < aPolylineData.size() ; i++ ){ @@ -181,31 +104,91 @@ void HYDROGUI_PolylineOp::startOperation() else{ myCurve = new CurveCreator_Curve(CurveCreator::Dim2d); aPanel->setCurve(myCurve); - QString aNewName = HYDROGUI_Tool::GenerateObjectName( module(), "Polyline" ); + QString aNewName = HYDROGUI_Tool::GenerateObjectName( module(), tr( "DEFAULT_POLYLINE_NAME" ) ); aPanel->setPolylineName(aNewName); } aPanel->setCurve(myCurve); + if( myAISCurve ) myAISCurve->setCurve(myCurve); - if( anOldCurve ) - delete anOldCurve; - onCreatePreview(); + + displayPreview(); } void HYDROGUI_PolylineOp::abortOperation() { - closePreview(); + erasePreview(); HYDROGUI_Operation::abortOperation(); } void HYDROGUI_PolylineOp::commitOperation() { - closePreview(); + 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() ) ); + return aDlg; +} + +bool HYDROGUI_PolylineOp::processApply( int& theUpdateFlags, + QString& theErrorMsg ) +{ + HYDROGUI_PolylineDlg* aPanel = (HYDROGUI_PolylineDlg*)inputPanel(); + + int aStudyId = module()->getStudyId(); + bool aHasDoc = HYDROData_Document::HasDocument(aStudyId); + Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( aStudyId ); + if( aDocument.IsNull() ) + return false; + + Handle(HYDROData_Polyline) aPolylineObj; + if( myIsEdit ){ + aPolylineObj = myEditedObject; + } + 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() ) + return false; + + QString aPolylineName = aPanel->getPolylineName(); + aPolylineObj->SetName(aPolylineName); + int aDimInt = 3; + if( myCurve->getDimension() == CurveCreator::Dim2d ) + aDimInt = 2; + aPolylineObj->SetDimension(aDimInt); + QList aPolylineData; + for( int i=0 ; i < myCurve->getNbSections() ; i++ ){ + PolylineSection aSect; + aSect.mySectionName = HYDROGUI_Tool::ToExtString( QString::fromLocal8Bit(myCurve->getSectionName(i).c_str())); + aSect.myIsClosed = myCurve->isClosed(i); + aSect.myType = PolylineSection::SECTION_POLYLINE; + if( myCurve->getType(i) == CurveCreator::BSpline ){ + aSect.myType = PolylineSection::SECTION_SPLINE; + } + CurveCreator::Coordinates aCoords = myCurve->getPoints(i); + for( int j = 0 ; j < aCoords.size() ; j++ ){ + aSect.myCoords << aCoords.at(j); + } + aPolylineData << aSect; + } + aPolylineObj->SetPolylineData(aPolylineData); + + theUpdateFlags = UF_Model; + module()->setObjectVisible( HYDROGUI_Tool::GetActiveGraphicsViewId( module() ), aPolylineObj, true ); + return true; +} + void HYDROGUI_PolylineOp::onEditorSelectionChanged() { HYDROGUI_PolylineDlg* aPanel = (HYDROGUI_PolylineDlg*)inputPanel(); @@ -224,25 +207,39 @@ void HYDROGUI_PolylineOp::onEditorSelectionChanged() } } -void HYDROGUI_PolylineOp::onLastViewClosed( SUIT_ViewManager* theViewManager ) +void HYDROGUI_PolylineOp::displayPreview() { - closePreview(); -} + LightApp_Application* anApp = module()->getApp(); -void HYDROGUI_PolylineOp::closePreview() -{ - if( myPreviewViewManager ) + myViewManager = + dynamic_cast( anApp->getViewManager( OCCViewer_Viewer::Type(), true ) ); + if( myViewManager ) { - disconnect( myPreviewViewManager, SIGNAL( lastViewClosed( SUIT_ViewManager* ) ), - this, SLOT( onLastViewClosed( SUIT_ViewManager* ) ) ); - - module()->getApp()->removeViewManager( myPreviewViewManager ); // myPreviewViewManager is deleted here - myPreviewViewManager = 0; + if( OCCViewer_Viewer* aViewer = myViewManager->getOCCViewer() ) + { + Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext(); + if( !aCtx.IsNull() ) + { + myAISCurve = new HYDROGUI_AISCurve( myCurve, aCtx ); + myAISCurve->Display(); + } + } } +} - if( myActiveViewManager ) +void HYDROGUI_PolylineOp::erasePreview() +{ + if( myViewManager ) { - HYDROGUI_Tool::SetActiveViewManager( module(), myActiveViewManager ); - myActiveViewManager = 0; + if( OCCViewer_Viewer* aViewer = myViewManager->getOCCViewer() ) + { + Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext(); + if( !aCtx.IsNull() && myAISCurve ) + { + myAISCurve->Erase(); + delete myAISCurve; + myAISCurve = 0; + } + } } }