X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ImmersibleZoneOp.cxx;h=678d8059680af73ba72bbc589df2d754c376232b;hb=d6e19029f8b41f295db878e9aecf451c2edda4af;hp=3e9fd482bbee6b2f055c3c4c33e747f5825c59ed;hpb=1c6465288cda49e75392724ddc01aba7cfe4ef68;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ImmersibleZoneOp.cxx b/src/HYDROGUI/HYDROGUI_ImmersibleZoneOp.cxx index 3e9fd482..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,6 +24,7 @@ #include "HYDROGUI_Shape.h" #include "HYDROGUI_Tool.h" #include "HYDROGUI_UpdateFlags.h" +#include "HYDROGUI_DataObject.h" #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" ) ); @@ -71,76 +73,35 @@ void HYDROGUI_ImmersibleZoneOp::startOperation() 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_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_POLYLINEXY ); - for ( ; anIter.More(); anIter.Next() ) - { - Handle(HYDROData_PolylineXY) aPolylineObj = - Handle(HYDROData_PolylineXY)::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->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() @@ -166,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 ) @@ -190,11 +152,6 @@ 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_PolylineXY) aZonePolyline; Handle(HYDROData_Bathymetry) aZoneBathymetry; @@ -205,30 +162,47 @@ bool HYDROGUI_ImmersibleZoneOp::processApply( int& theUpdateFlags, 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 ); - if ( !myIsEdit ) { + 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,54 +213,51 @@ void HYDROGUI_ImmersibleZoneOp::onCreatePreview( const QString& thePolylineName if ( !aPanel ) return; - TopoDS_Wire aWire; - TopoDS_Shape aShape; + QApplication::setOverrideCursor( Qt::WaitCursor ); + TopoDS_Shape aZoneShape; Handle(HYDROData_PolylineXY) aPolyline = Handle(HYDROData_PolylineXY)::DownCast( HYDROGUI_Tool::FindObjectByName( module(), thePolylineName, KIND_POLYLINEXY ) ); if ( !aPolyline.IsNull() ) { - aShape = aPolyline->GetShape(); - if ( aShape.ShapeType() == TopAbs_WIRE ) { - aWire = TopoDS::Wire( aShape ); - } + 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(); + } - 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( aFillingColor, false, false ); - myPreviewPrs->setBorderColor( aBorderColor, false, false ); - if ( !aWire.IsNull() ) { - myPreviewPrs->setFace( aWire ); - } else if ( !aShape.IsNull() && aShape.ShapeType() == TopAbs_COMPOUND ) { - TopoDS_Compound aCompound = TopoDS::Compound( aShape ); - if ( !aCompound.IsNull() ) { - myPreviewPrs->setFaces( aCompound ); - } - } + QApplication::restoreOverrideCursor(); } void HYDROGUI_ImmersibleZoneOp::closePreview()