X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ShapeBathymetry.cxx;h=a88b5069923989e42e06f4bcf2ef403b7ef4b692;hb=58bb6b7459bebeeb089c9ed486c4683a8bae7288;hp=026f8a0462588a47adf830fb94b8dd8936993dda;hpb=1c640c1b3be696caa0348d7904794e899e8e4e69;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ShapeBathymetry.cxx b/src/HYDROGUI/HYDROGUI_ShapeBathymetry.cxx index 026f8a04..a88b5069 100644 --- a/src/HYDROGUI/HYDROGUI_ShapeBathymetry.cxx +++ b/src/HYDROGUI/HYDROGUI_ShapeBathymetry.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 @@ -26,22 +22,22 @@ #include #include -#include -#include +#include #include HYDROGUI_ShapeBathymetry::HYDROGUI_ShapeBathymetry( HYDROGUI_OCCDisplayer* theDisplayer, const Handle(AIS_InteractiveContext)& theContext, - const Handle_HYDROData_Bathymetry& theBathymetry, + const Handle(HYDROData_Bathymetry)& theBathymetry, const int theZLayer ) : HYDROGUI_Shape( theContext, theBathymetry, theZLayer ), myDisplayer( theDisplayer ) { + setDisplayMode( AIS_PointCloud::DM_Points ); } HYDROGUI_ShapeBathymetry::~HYDROGUI_ShapeBathymetry() { - myDisplayer->SetToUpdateColorScale(); + setToUpdateColorScale( true ); } void HYDROGUI_ShapeBathymetry::update( bool theIsUpdateViewer, bool isDeactivateSelection ) @@ -52,7 +48,7 @@ void HYDROGUI_ShapeBathymetry::update( bool theIsUpdateViewer, bool isDeactivate Handle(HYDROData_Bathymetry) aBath = Handle(HYDROData_Bathymetry)::DownCast( getObject() ); - if ( !aBath.IsNull() ) + if ( !aBath.IsNull() && !aBath->GetAltitudePoints().empty()) { buildShape(); updateShape( false, false ); @@ -62,28 +58,29 @@ void HYDROGUI_ShapeBathymetry::update( bool theIsUpdateViewer, bool isDeactivate } -Handle_AIS_InteractiveObject HYDROGUI_ShapeBathymetry::createShape() const +Handle(AIS_InteractiveObject) HYDROGUI_ShapeBathymetry::createShape() const { - Handle_HYDROData_Bathymetry aBath = Handle_HYDROData_Bathymetry::DownCast( getObject() ); + Handle(AIS_InteractiveObject) aPntCloud; + + Handle(HYDROData_Bathymetry) aBath = Handle(HYDROData_Bathymetry)::DownCast( getObject() ); if( !aBath.IsNull() ) { - Handle_AIS_PointCloud aPntCloud = new HYDROGUI_BathymetryPrs(); + aPntCloud = new HYDROGUI_BathymetryPrs(); + aPntCloud->SetHilightMode( AIS_PointCloud::DM_BndBox ); aPntCloud->Attributes()->SetPointAspect (new Prs3d_PointAspect (Aspect_TOM_POINT, Quantity_NOC_WHITE, 2.0)); const HYDROData_Bathymetry::AltitudePoints& aBathPoints = aBath->GetAltitudePoints(); - int aLower = aBathPoints.Lower(); - int anUpper = aBathPoints.Upper(); + int aLower = 0; + int anUpper = (int)aBathPoints.size()-1; HYDROGUI_ShapeBathymetry* aThat = const_cast( this ); aThat->myCoords = new TColgp_HArray1OfPnt( aLower, anUpper ); aThat->myColors = new Quantity_HArray1OfColor( aLower, anUpper ); for( int i=aLower; i<=anUpper; i++ ) - aThat->myCoords->SetValue( i, aBathPoints.Value( i ) ); - - return aPntCloud; + aThat->myCoords->SetValue( i, gp_Pnt( aBathPoints[i].X, aBathPoints[i].Y, aBathPoints[i].Z ) ); } - else - return Handle_AIS_InteractiveObject(); + + return aPntCloud; } void HYDROGUI_ShapeBathymetry::GetRange( double& theMin, double& theMax ) const @@ -105,8 +102,10 @@ void HYDROGUI_ShapeBathymetry::GetRange( double& theMin, double& theMax ) const } } -void HYDROGUI_ShapeBathymetry::UpdateWithColorScale( const Handle(Aspect_ColorScale)& theColorScale ) +void HYDROGUI_ShapeBathymetry::UpdateWithColorScale( const Handle(AIS_ColorScale)& theColorScale ) { + if (!myCoords) + return; for( int i=myCoords->Lower(), n=myCoords->Upper(); i<=n; i++ ) { double z = myCoords->Value( i ).Z(); @@ -114,7 +113,7 @@ void HYDROGUI_ShapeBathymetry::UpdateWithColorScale( const Handle(Aspect_ColorSc theColorScale->FindColor( z, aColor ); myColors->SetValue( i, aColor ); } - Handle_AIS_PointCloud aPntCloud = Handle_AIS_PointCloud::DownCast( getAISObject() ); + Handle(AIS_PointCloud) aPntCloud = Handle(AIS_PointCloud)::DownCast( getAISObject() ); aPntCloud->SetPoints( myCoords, myColors ); getContext()->Redisplay( aPntCloud, Standard_False ); } @@ -125,8 +124,7 @@ void HYDROGUI_ShapeBathymetry::setVisible( const bool theState, bool isShown = getContext()->IsDisplayed( getAISObject() ); bool isChanged = ( isShown != theState ); HYDROGUI_Shape::setVisible( theState, theIsUpdateViewer ); - if( isChanged ) - myDisplayer->SetToUpdateColorScale(); + setToUpdateColorScale( isChanged ); } void HYDROGUI_ShapeBathymetry::displayShape( const bool theIsUpdateViewer ) @@ -134,8 +132,7 @@ void HYDROGUI_ShapeBathymetry::displayShape( const bool theIsUpdateViewer ) bool isShown = getContext()->IsDisplayed( getAISObject() ); bool isChanged = ( !isShown ); HYDROGUI_Shape::displayShape( theIsUpdateViewer ); - if( isChanged ) - myDisplayer->SetToUpdateColorScale(); + setToUpdateColorScale( isChanged ); } void HYDROGUI_ShapeBathymetry::display( const bool theIsUpdateViewer ) @@ -143,8 +140,7 @@ void HYDROGUI_ShapeBathymetry::display( const bool theIsUpdateViewer ) bool isShown = getContext()->IsDisplayed( getAISObject() ); bool isChanged = ( !isShown ); HYDROGUI_Shape::display( theIsUpdateViewer ); - if( isChanged ) - myDisplayer->SetToUpdateColorScale(); + setToUpdateColorScale( isChanged ); } void HYDROGUI_ShapeBathymetry::erase( const bool theIsUpdateViewer ) @@ -152,6 +148,13 @@ void HYDROGUI_ShapeBathymetry::erase( const bool theIsUpdateViewer ) bool isShown = getContext()->IsDisplayed( getAISObject() ); bool isChanged = ( isShown ); HYDROGUI_Shape::erase( theIsUpdateViewer ); - if( isChanged ) + setToUpdateColorScale( isChanged ); +} + +void HYDROGUI_ShapeBathymetry::setToUpdateColorScale( bool isChanged ) +{ +#ifndef LIGHT_MODE + if( isChanged && myDisplayer ) myDisplayer->SetToUpdateColorScale(); +#endif }