X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ImmersibleZoneOp.cxx;h=678d8059680af73ba72bbc589df2d754c376232b;hb=d6e19029f8b41f295db878e9aecf451c2edda4af;hp=56ef1cd39b83f9671091b1496d4c4aaff64850a9;hpb=84f8b4a57d3cdad820bc1333a5066699cd1c8ae3;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ImmersibleZoneOp.cxx b/src/HYDROGUI/HYDROGUI_ImmersibleZoneOp.cxx index 56ef1cd3..678d8059 100644 --- a/src/HYDROGUI/HYDROGUI_ImmersibleZoneOp.cxx +++ b/src/HYDROGUI/HYDROGUI_ImmersibleZoneOp.cxx @@ -1,12 +1,8 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// +// Copyright (C) 2014-2015 EDF-R&D // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -28,10 +24,11 @@ #include "HYDROGUI_Shape.h" #include "HYDROGUI_Tool.h" #include "HYDROGUI_UpdateFlags.h" +#include "HYDROGUI_DataObject.h" #include #include -#include +#include #include #include @@ -39,14 +36,19 @@ #include #include +#include +#include + #include +#include #include +#include + HYDROGUI_ImmersibleZoneOp::HYDROGUI_ImmersibleZoneOp( HYDROGUI_Module* theModule, const bool theIsEdit ) : HYDROGUI_Operation( theModule ), myIsEdit( theIsEdit ), - myViewManager( 0 ), myPreviewPrs( 0 ) { setName( theIsEdit ? tr( "EDIT_IMMERSIBLE_ZONE" ) : tr( "CREATE_IMMERSIBLE_ZONE" ) ); @@ -69,81 +71,37 @@ void HYDROGUI_ImmersibleZoneOp::startOperation() aPanel->reset(); - QString anObjectName = HYDROGUI_Tool::GenerateObjectName( module(), "Zone" ); + QString anObjectName = HYDROGUI_Tool::GenerateObjectName( module(), tr( "DEFAULT_IMMERSIBLE_ZONE_NAME" ) ); - QColor aFillingColor( HYDROData_ImmersibleZone::DefaultFillingColor() ); - QColor aBorderColor( HYDROData_ImmersibleZone::DefaultBorderColor() ); QString aSelectedPolyline, aSelectedBathymetry; QStringList aSelectedBathymetries; if ( myIsEdit ) { - myEditedObject = Handle(HYDROData_ImmersibleZone)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) ); + if ( isApplyAndClose() ) + myEditedObject = Handle(HYDROData_ImmersibleZone)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) ); if( !myEditedObject.IsNull() ) { anObjectName = myEditedObject->GetName(); - aFillingColor = myEditedObject->GetFillingColor(); - aBorderColor = myEditedObject->GetBorderColor(); - - Handle(HYDROData_Polyline) aRefPolyline = myEditedObject->GetPolyline(); + Handle(HYDROData_PolylineXY) aRefPolyline = myEditedObject->GetPolyline(); if ( !aRefPolyline.IsNull() ) aSelectedPolyline = aRefPolyline->GetName(); - Handle(HYDROData_Bathymetry) aRefBathymetry = myEditedObject->GetBathymetry(); - if ( !aRefBathymetry.IsNull() ) - aSelectedBathymetry = aRefBathymetry->GetName(); + Handle(HYDROData_IAltitudeObject) aRefAltitude = myEditedObject->GetAltitudeObject(); + if ( !aRefAltitude.IsNull() ) + aSelectedBathymetry = aRefAltitude->GetName(); } } - // collect information about existing closed polylines - QStringList aPolylines; - - HYDROData_Iterator anIter( doc(), KIND_POLYLINE ); - for ( ; anIter.More(); anIter.Next() ) - { - Handle(HYDROData_Polyline) aPolylineObj = - Handle(HYDROData_Polyline)::DownCast( anIter.Current() ); - if ( aPolylineObj.IsNull() || !aPolylineObj->IsClosed() ) - continue; - - QString aPolylineName = aPolylineObj->GetName(); - if ( aPolylineName.isEmpty() ) - continue; - - aPolylines.append( aPolylineName ); - } - - // collect information about existing bathymetries - QStringList aBathymetries; - - anIter = HYDROData_Iterator( doc(), KIND_BATHYMETRY ); - for ( ; anIter.More(); anIter.Next() ) - { - Handle(HYDROData_Bathymetry) aBathymetryObj = - Handle(HYDROData_Bathymetry)::DownCast( anIter.Current() ); - if ( aBathymetryObj.IsNull() ) - continue; - - QString aBathymetryName = aBathymetryObj->GetName(); - if ( aBathymetryName.isEmpty() ) - continue; - - aBathymetries.append( aBathymetryName ); - } - aPanel->setObjectName( anObjectName ); - - aPanel->setFillingColor( aFillingColor ); - aPanel->setBorderColor( aBorderColor ); - - aPanel->setPolylineNames( aPolylines ); - aPanel->setBathymetryNames( aBathymetries ); + aPanel->setPolylineNames( HYDROGUI_Tool::FindExistingObjectsNames( doc(), KIND_POLYLINEXY ) ); + aPanel->setAdditionalParams( HYDROGUI_Tool::FindExistingObjectsNames( doc(), KIND_BATHYMETRY ) ); aPanel->blockSignals( false ); aPanel->setPolylineName( aSelectedPolyline ); - aPanel->setBathymetryName( aSelectedBathymetry ); + aPanel->setSelectedAdditionalParamName( aSelectedBathymetry ); } void HYDROGUI_ImmersibleZoneOp::abortOperation() @@ -169,7 +127,8 @@ HYDROGUI_InputPanel* HYDROGUI_ImmersibleZoneOp::createInputPanel() const } bool HYDROGUI_ImmersibleZoneOp::processApply( int& theUpdateFlags, - QString& theErrorMsg ) + QString& theErrorMsg, + QStringList& theBrowseObjectsEntries ) { HYDROGUI_ImmersibleZoneDlg* aPanel = ::qobject_cast( inputPanel() ); if ( !aPanel ) @@ -193,42 +152,57 @@ bool HYDROGUI_ImmersibleZoneOp::processApply( int& theUpdateFlags, } } - Handle(HYDROData_ImmersibleZone) aZoneObj = myIsEdit ? myEditedObject : - Handle(HYDROData_ImmersibleZone)::DownCast( doc()->CreateObject( KIND_IMMERSIBLE_ZONE ) ); - if ( aZoneObj.IsNull() ) - return false; - - Handle(HYDROData_Polyline) aZonePolyline; + Handle(HYDROData_PolylineXY) aZonePolyline; Handle(HYDROData_Bathymetry) aZoneBathymetry; QString aPolylineName = aPanel->getPolylineName(); if ( !aPolylineName.isEmpty() ) { - aZonePolyline = Handle(HYDROData_Polyline)::DownCast( - HYDROGUI_Tool::FindObjectByName( module(), aPolylineName, KIND_POLYLINE ) ); + aZonePolyline = Handle(HYDROData_PolylineXY)::DownCast( + HYDROGUI_Tool::FindObjectByName( module(), aPolylineName, KIND_POLYLINEXY ) ); } - QString aBathymetryName = aPanel->getBathymetryName(); + QString aBathymetryName = aPanel->getSelectedAdditionalParamName(); if ( !aBathymetryName.isEmpty() ) { aZoneBathymetry = Handle(HYDROData_Bathymetry)::DownCast( HYDROGUI_Tool::FindObjectByName( module(), aBathymetryName, KIND_BATHYMETRY ) ); } + + if ( HYDROData_ImmersibleZone::generateTopShape( aZonePolyline ).IsNull() ) + { + theErrorMsg = tr( "ZONE_OBJECT_CANNOT_BE_CREATED" ); + return false; + } + + Handle(HYDROData_ImmersibleZone) aZoneObj = myIsEdit ? myEditedObject : + Handle(HYDROData_ImmersibleZone)::DownCast( doc()->CreateObject( KIND_IMMERSIBLE_ZONE ) ); + aZoneObj->SetName( anObjectName ); - aZoneObj->SetFillingColor( aPanel->getFillingColor() ); - aZoneObj->SetBorderColor( aPanel->getBorderColor() ); + if ( !myIsEdit ) + { + aZoneObj->SetFillingColor( HYDROData_ImmersibleZone::DefaultFillingColor() ); + aZoneObj->SetBorderColor( HYDROData_ImmersibleZone::DefaultBorderColor() ); + } aZoneObj->SetPolyline( aZonePolyline ); - aZoneObj->SetBathymetry( aZoneBathymetry ); + aZoneObj->SetAltitudeObject( aZoneBathymetry ); + aZoneObj->Update(); closePreview(); if( !myIsEdit ) + { module()->setObjectVisible( HYDROGUI_Tool::GetActiveOCCViewId( module() ), aZoneObj, true ); + QString anEntry = HYDROGUI_DataObject::dataObjectEntry( aZoneObj ); + theBrowseObjectsEntries.append( anEntry ); + } + + module()->setIsToUpdate( aZoneObj ); - theUpdateFlags = UF_Model | UF_OCCViewer | UF_OCC_Forced; + theUpdateFlags = UF_Model | UF_OCCViewer | UF_OCC_Forced | UF_VTKViewer; return true; } @@ -239,36 +213,51 @@ void HYDROGUI_ImmersibleZoneOp::onCreatePreview( const QString& thePolylineName if ( !aPanel ) return; - TopoDS_Wire aWire; + QApplication::setOverrideCursor( Qt::WaitCursor ); + TopoDS_Shape aZoneShape; - Handle(HYDROData_Polyline) aPolyline = Handle(HYDROData_Polyline)::DownCast( - HYDROGUI_Tool::FindObjectByName( module(), thePolylineName, KIND_POLYLINE ) ); + Handle(HYDROData_PolylineXY) aPolyline = Handle(HYDROData_PolylineXY)::DownCast( + HYDROGUI_Tool::FindObjectByName( module(), thePolylineName, KIND_POLYLINEXY ) ); if ( !aPolyline.IsNull() ) { - aWire = TopoDS::Wire( aPolyline->GetTopShape() ); + aZoneShape = HYDROData_ImmersibleZone::generateTopShape( aPolyline ); + if( aZoneShape.IsNull() ) + printErrorMessage( tr( "ZONE_OBJECT_CANNOT_BE_CREATED" ) ); } LightApp_Application* anApp = module()->getApp(); - if ( !myViewManager ) - myViewManager = ::qobject_cast( - anApp->getViewManager( OCCViewer_Viewer::Type(), true ) ); - - if ( myViewManager && !myPreviewPrs ) + if ( !getPreviewManager() ) + setPreviewManager( ::qobject_cast( + anApp->getViewManager( OCCViewer_Viewer::Type(), true ) ) ); + OCCViewer_ViewManager* aViewManager = getPreviewManager(); + if ( aViewManager && !myPreviewPrs ) { - if ( OCCViewer_Viewer* aViewer = myViewManager->getOCCViewer() ) + if ( OCCViewer_Viewer* aViewer = aViewManager->getOCCViewer() ) { Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext(); if ( !aCtx.IsNull() ) - myPreviewPrs = new HYDROGUI_Shape( aCtx, NULL ); + myPreviewPrs = new HYDROGUI_Shape( aCtx, NULL, getPreviewZLayer() ); } } - if ( !myViewManager || !myPreviewPrs ) - return; + if ( aViewManager && myPreviewPrs ) + { + QColor aFillingColor = HYDROData_ImmersibleZone::DefaultFillingColor(); + QColor aBorderColor = HYDROData_ImmersibleZone::DefaultBorderColor(); + if ( !myEditedObject.IsNull() ) { + aFillingColor = myEditedObject->GetFillingColor(); + aBorderColor = myEditedObject->GetBorderColor(); + } + + myPreviewPrs->setFillingColor( aFillingColor, false, false ); + myPreviewPrs->setBorderColor( aBorderColor, false, false ); + TopoDS_Face aFace; + if( !aZoneShape.IsNull() ) + aFace = TopoDS::Face( aZoneShape ); + myPreviewPrs->setFace( aFace, true, true, "" ); + } - myPreviewPrs->setFillingColor( aPanel->getFillingColor(), false, false ); - myPreviewPrs->setBorderColor( aPanel->getBorderColor(), false, false ); - myPreviewPrs->setFace( aWire ); + QApplication::restoreOverrideCursor(); } void HYDROGUI_ImmersibleZoneOp::closePreview()