X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Shape.cxx;h=f7132b32b5f0092ce14c41e1340d477b9b95c76e;hb=ea24c0c5ef94a08fff17e9d2cde931250bc0677e;hp=9967bc006c2fdf2952ea63b4b5a1e5a3031919d2;hpb=89c9794998495fcd82e49e22a75502367de46bd5;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Shape.cxx b/src/HYDROGUI/HYDROGUI_Shape.cxx index 9967bc00..f7132b32 100644 --- a/src/HYDROGUI/HYDROGUI_Shape.cxx +++ b/src/HYDROGUI/HYDROGUI_Shape.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 @@ -20,66 +16,46 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include "HYDROGUI_Shape.h" - -#include "HYDROGUI_DataObject.h" -#include "HYDROGUI_Tool.h" - -#include -#include - -#include -#include -#include - -#include - -#include -#include +#include +#include +#include #include #include #include -#include #include #include #include #include #include -#include +#include #include #include +#include +#include +#include +#include +#include +#include #include -#include #include - +#include #include -#include - -#include - -#include -#include -#include - -#include - -#include -#include - HYDROGUI_Shape::HYDROGUI_Shape( const Handle(AIS_InteractiveContext)& theContext, - const Handle(HYDROData_Entity)& theObject ) + const Handle(HYDROData_Entity)& theObject, + const int theZLayer ) : myContext( theContext ), myObject( theObject ), + myZLayer( theZLayer ), myIsHighlight( false ), myFillingColor( Qt::transparent ), myBorderColor( Qt::black ), myHighlightColor( Qt::white ), myIsToUpdate( false ), myIsVisible( true ), - myDisplayMode( AIS_WireFrame ) + myDisplayMode( AIS_Shaded ) { } @@ -89,8 +65,41 @@ HYDROGUI_Shape::~HYDROGUI_Shape() if ( !myShape.IsNull() ) myShape.Nullify(); +} + +Handle(AIS_InteractiveContext) HYDROGUI_Shape::getContext() const +{ + return myContext; +} + +Handle(HYDROData_Entity) HYDROGUI_Shape::getObject() const +{ + return myObject; +} + +TopoDS_Shape HYDROGUI_Shape::getTopoShape() const +{ + return myTopoShape; +} + +bool HYDROGUI_Shape::getIsToUpdate() const +{ + return myIsToUpdate; +} + +void HYDROGUI_Shape::setIsToUpdate( bool theState ) +{ + myIsToUpdate = theState; +} + +bool HYDROGUI_Shape::isVisible() const +{ + return myIsVisible; +} - removeTextureFile(); +Handle(AIS_InteractiveObject) HYDROGUI_Shape::getAISObject() const +{ + return myShape; } void HYDROGUI_Shape::display( const bool theIsUpdateViewer ) @@ -98,7 +107,7 @@ void HYDROGUI_Shape::display( const bool theIsUpdateViewer ) if ( myContext.IsNull() || myShape.IsNull() || !isVisible() ) return; - myContext->Display( myShape, theIsUpdateViewer ); + displayShape( theIsUpdateViewer ); } void HYDROGUI_Shape::erase( const bool theIsUpdateViewer ) @@ -109,7 +118,9 @@ void HYDROGUI_Shape::erase( const bool theIsUpdateViewer ) myContext->Erase( myShape, theIsUpdateViewer ); } -void HYDROGUI_Shape::update( const bool theIsUpdateViewer ) +void HYDROGUI_Shape::update( bool isUpdateViewer, + bool isDeactivateSelection ) + { setIsToUpdate( false ); @@ -130,10 +141,11 @@ void HYDROGUI_Shape::update( const bool theIsUpdateViewer ) if ( !aZoneShape.IsNull() ) { if ( aZoneShape.ShapeType() == TopAbs_FACE ) { TopoDS_Face aZoneFace = TopoDS::Face( aZoneShape ); - setFace( aZoneFace, false, false ); + setFace( aZoneFace, false, false, "" ); } else { myTopoShape = aZoneShape; - myDisplayMode = myTextureFileName.isEmpty() ? AIS_Shaded : AIS_Shaded+2; + //TODO: myDisplayMode = myTextureFileName.isEmpty() ? AIS_Shaded : AIS_Shaded+2; + myDisplayMode = AIS_Shaded; buildShape(); updateShape( false, false ); @@ -159,12 +171,17 @@ void HYDROGUI_Shape::update( const bool theIsUpdateViewer ) setWire( aPolylineWire, false, false ); } else { myTopoShape = aPolylineShape; - myDisplayMode = AIS_WireFrame; + // Set shading mode to avoid that hilight presentation is equal to "normal" object presentation. + // Note that hilight presentation is always to be on top ( i.e. in the top Z layer ). + myDisplayMode = AIS_Shaded; buildShape(); updateShape( false, false ); } } + + QColor aWireColor = aPolyline->GetWireColor(); + setBorderColor( aWireColor, false, false ); } else if ( myObject->IsKind( STANDARD_TYPE(HYDROData_Polyline3D) ) ) { @@ -179,12 +196,17 @@ void HYDROGUI_Shape::update( const bool theIsUpdateViewer ) setWire( aPolylineWire, false, false ); } else { myTopoShape = aPolylineShape; - myDisplayMode = AIS_WireFrame; + // Set shading mode to avoid that hilight presentation is equal to "normal" object presentation. + // Note that hilight presentation is always to be on top ( i.e. in the top Z layer ). + myDisplayMode = AIS_Shaded; buildShape(); updateShape( false, false ); } } + + QColor aWireColor = aPolyline->GetBorderColor(); + setBorderColor( aWireColor, false, false ); } else if ( myObject->IsKind( STANDARD_TYPE(HYDROData_Zone) ) ) { @@ -193,7 +215,7 @@ void HYDROGUI_Shape::update( const bool theIsUpdateViewer ) TopoDS_Face aZoneFace = TopoDS::Face( aZone->GetShape() ); - setFace( aZoneFace, false, false ); + setFace( aZoneFace, false, false, "" ); if (aZone->IsMergingNeed() && aZone->GetMergeType() == HYDROData_Zone::Merge_UNKNOWN ) { // Red color for a zone with bathymetry conflict @@ -201,95 +223,10 @@ void HYDROGUI_Shape::update( const bool theIsUpdateViewer ) } else { - // Generate the filling color for zone - QStringList aGeomObjectsNames; - - HYDROData_SequenceOfObjects aRefObjects = aZone->GetGeometryObjects(); - HYDROData_SequenceOfObjects::Iterator anIter( aRefObjects ); - for ( ; anIter.More(); anIter.Next() ) - { - Handle(HYDROData_Object) aRefbject = - Handle(HYDROData_Object)::DownCast( anIter.Value() ); - if ( aRefbject.IsNull() ) - continue; - - QString aRefObjectName = aRefbject->GetName(); - if ( aRefObjectName.isEmpty() ) - continue; - - aGeomObjectsNames.append( aRefObjectName ); - } - - setFillingColor( HYDROGUI_Tool::GenerateFillingColor( aDocument, aGeomObjectsNames ) ); + // Set the filling color for zone + setFillingColor( aZone->GetColor( Qt::darkBlue ) ); } } - else if ( myObject->IsKind( STANDARD_TYPE(HYDROData_Image) ) ) - { - Handle(HYDROData_Image) anImageObj = - Handle(HYDROData_Image)::DownCast( myObject ); - - removeTextureFile(); - - QString aTextureFileName = generateTextureFileName( anImageObj ); - - QImage anImage = anImageObj->Image(); - QString aFilePath = anImageObj->GetFilePath(); - QTransform aTrsf = anImageObj->Trsf(); - - int aWidth = anImage.width(); - int aHeight = anImage.height(); - - QTransform anInversion = QTransform::fromScale( -1, -1 ); - anImage = anImage.transformed( anInversion * aTrsf, Qt::SmoothTransformation ); - - // Workaround: Scale the texture image to the nearest width multiple 4 due to the CASCADE bug 23813 - int aTrsfWidth = anImage.width(); - int aDelta = aTrsfWidth % 4; - if ( aDelta > 0 ) - { - aTrsfWidth += ( 4 - aDelta ); - } - anImage = anImage.scaledToWidth( aTrsfWidth ); - - // temporary optimization, to reduce the saved image size (and the texture quality) - QImage anImageToSave = anImage; //RKV:reduceTexture( anImage, 500 ); - - bool isSaved = anImageToSave.save( aTextureFileName ); - if ( !isSaved ) { - QString aTitle = QObject::tr( "FILE_ERROR" ); - QString aMessage = QObject::tr( "FILE_CAN_NOT_BE_CREATED" ).arg( aTextureFileName ); - SUIT_MessageBox::warning( 0, aTitle, aMessage ); - } - - QPointF aPoint1( 0, 0 ); // 1: top left - QPointF aPoint2( aWidth, 0 ); // 2: top right - QPointF aPoint3( aWidth, aHeight ); // 3: bottom right - QPointF aPoint4( 0, aHeight ); // 4: bottom left - - aPoint1 = aTrsf.map( aPoint1 ); - aPoint2 = aTrsf.map( aPoint2 ); - aPoint3 = aTrsf.map( aPoint3 ); - aPoint4 = aTrsf.map( aPoint4 ); - - QPolygonF aPolygon = QPolygonF() << aPoint1 << aPoint2 << aPoint3 << aPoint4; - QRectF aRect = aPolygon.boundingRect(); - - gp_Pnt aPnt1( aRect.topLeft().x(), aRect.topLeft().y(), 0 ); - gp_Pnt aPnt2( aRect.topRight().x(), aRect.topRight().y(), 0 ); - gp_Pnt aPnt3( aRect.bottomRight().x(), aRect.bottomRight().y(), 0 ); - gp_Pnt aPnt4( aRect.bottomLeft().x(), aRect.bottomLeft().y(), 0 ); - - TopoDS_Edge anEdge1 = BRepBuilderAPI_MakeEdge( aPnt1, aPnt2 ).Edge(); - TopoDS_Edge anEdge2 = BRepBuilderAPI_MakeEdge( aPnt2, aPnt3 ).Edge(); - TopoDS_Edge anEdge3 = BRepBuilderAPI_MakeEdge( aPnt3, aPnt4 ).Edge(); - TopoDS_Edge anEdge4 = BRepBuilderAPI_MakeEdge( aPnt4, aPnt1 ).Edge(); - - TopoDS_Wire aWire = BRepBuilderAPI_MakeWire( anEdge1, anEdge2, anEdge3, anEdge4 ).Wire(); - aWire.Closed( true ); - - setTextureFileName( aTextureFileName, false, false ); - setFace( aWire, false, false ); - } else if ( myObject->IsKind( STANDARD_TYPE(HYDROData_Profile) ) ) { Handle(HYDROData_Profile) aProfile = @@ -307,6 +244,9 @@ void HYDROGUI_Shape::update( const bool theIsUpdateViewer ) } setWire( aProfileWire, false, false ); + + QColor aWireColor = aProfile->GetBorderColor(); + setBorderColor( aWireColor, false, false ); } else if ( myObject->IsKind( STANDARD_TYPE(HYDROData_Stream) ) || myObject->IsKind( STANDARD_TYPE(HYDROData_Channel) ) || @@ -329,7 +269,6 @@ void HYDROGUI_Shape::update( const bool theIsUpdateViewer ) { Handle(HYDROData_DummyObject3D) anObject3D = Handle(HYDROData_DummyObject3D)::DownCast( myObject ); - TopoDS_Shape aShape3D = anObject3D->GetShape(); setShape( aShape3D, false, false ); @@ -340,32 +279,57 @@ void HYDROGUI_Shape::update( const bool theIsUpdateViewer ) setFillingColor( aFillingColor, false, false ); setBorderColor( aBorderColor, false, false ); } + else if ( myObject->IsKind( STANDARD_TYPE(HYDROData_ShapesGroup) ) ) + { + Handle(HYDROData_ShapesGroup) aShapesGroup = + Handle(HYDROData_ShapesGroup)::DownCast( myObject ); + + TopTools_SequenceOfShape aShapes; + aShapesGroup->GetShapes( aShapes ); + + TopoDS_Compound aCompound; + BRep_Builder aCompoundBuilder; + aCompoundBuilder.MakeCompound( aCompound ); + + for ( int i = 1, n = aShapes.Length(); i <= n; ++i ) + { + const TopoDS_Shape& aShape = aShapes.Value( i ); + aCompoundBuilder.Add( aCompound, aShape ); + } + + setShape( aCompound, false, false ); + } } if ( myShape.IsNull() || !isVisible() ) return; - myContext->Display( myShape, theIsUpdateViewer ); + displayShape( isUpdateViewer ); + + if (isDeactivateSelection) + myContext->Deactivate(myShape); } void HYDROGUI_Shape::setVisible( const bool theState, const bool theIsUpdateViewer ) { - if ( myIsVisible == theState ) - return; - myIsVisible = theState; if ( myShape.IsNull() ) return; - if ( myIsVisible ) - myContext->Display( myShape, theIsUpdateViewer ); + if ( ( myIsVisible && myContext->IsDisplayed( myShape ) ) || + ( !myIsVisible && !myContext->IsDisplayed( myShape ) ) ) + return; + + if ( myIsVisible ) { + displayShape( theIsUpdateViewer ); + } else myContext->Erase( myShape, theIsUpdateViewer ); } -void HYDROGUI_Shape::highlight( bool theIsHighlight ) +void HYDROGUI_Shape::highlight( bool theIsHighlight, bool isUpdateViewer ) { if ( myIsHighlight == theIsHighlight ) return; @@ -376,7 +340,7 @@ void HYDROGUI_Shape::highlight( bool theIsHighlight ) return; colorShapeBorder( getActiveColor() ); - myContext->Display( myShape ); + displayShape( isUpdateViewer ); } bool HYDROGUI_Shape::isHighlighted() const @@ -389,7 +353,9 @@ void HYDROGUI_Shape::setWire( const TopoDS_Wire& theWire, const bool theIsUpdateViewer ) { myTopoShape = theWire; - myDisplayMode = AIS_WireFrame; + // To avoid that hilight presentation is equal to "normal" object presentation. + // Note that hilight presentation is always to be on top ( i.e. in the top Z layer ). + myDisplayMode = AIS_Shaded; buildShape(); updateShape( theToDisplay, theIsUpdateViewer ); @@ -426,23 +392,25 @@ void HYDROGUI_Shape::setFaces( const TopoDS_Compound& theWires, void HYDROGUI_Shape::setFace( const TopoDS_Wire& theWire, const bool theToDisplay, - const bool theIsUpdateViewer ) + const bool theIsUpdateViewer, + const QString& theTextureFileName ) { BRepBuilderAPI_MakeFace aFaceBuilder( theWire, Standard_True ); aFaceBuilder.Build(); if( aFaceBuilder.IsDone() ) { TopoDS_Face aFace = aFaceBuilder.Face(); - setFace( aFace, theToDisplay, theIsUpdateViewer ); + setFace( aFace, theToDisplay, theIsUpdateViewer, theTextureFileName ); } } void HYDROGUI_Shape::setFace( const TopoDS_Face& theFace, const bool theToDisplay, - const bool theIsUpdateViewer ) + const bool theIsUpdateViewer, + const QString& theTextureFileName ) { myTopoShape = theFace; - myDisplayMode = myTextureFileName.isEmpty() ? AIS_Shaded : AIS_Shaded+2; + myDisplayMode = theTextureFileName.isEmpty() ? AIS_Shaded : AIS_Shaded+2; //Note: AIS_Shaded+2 is the same as AIS_ExactHLR //TODO: it would be more suitable to use TexturedShape mode from GEOM_AISShape @@ -477,7 +445,7 @@ QColor HYDROGUI_Shape::getFillingColor() const void HYDROGUI_Shape::setBorderColor( const QColor& theColor, const bool theToDisplay, const bool theIsUpdateViewer ) -{ +{ myBorderColor = theColor; updateShape( theToDisplay, theIsUpdateViewer ); } @@ -497,17 +465,38 @@ QColor HYDROGUI_Shape::getHighlightColor() const return myHighlightColor; } -void HYDROGUI_Shape::setTextureFileName( const QString& theFileName, - const bool theToDisplay, - const bool theIsUpdateViewer ) +void HYDROGUI_Shape::setZLayer( const int theZLayer ) { - myTextureFileName = theFileName; - updateShape( theToDisplay, theIsUpdateViewer ); + if ( myZLayer == theZLayer ) + return; + + myZLayer = theZLayer; + if ( !myShape.IsNull() && isVisible() && !myContext.IsNull() && myZLayer >= 0 ) + myContext->SetZLayer( myShape, myZLayer ); } -QString HYDROGUI_Shape::getTextureFileName() const +Handle_AIS_InteractiveObject HYDROGUI_Shape::createShape() const { - return myTextureFileName; + if( myTopoShape.IsNull() ) { + return Handle_AIS_InteractiveObject(); + } + + TopAbs_ShapeEnum aShapeType = myTopoShape.ShapeType(); + bool IsWireEdgeCompound = aShapeType==TopAbs_COMPOUND; + if (IsWireEdgeCompound) { + TopoDS_Iterator itr(myTopoShape); + while (itr.More() && IsWireEdgeCompound) { + if (itr.Value().ShapeType() != TopAbs_WIRE && itr.Value().ShapeType() != TopAbs_EDGE) + IsWireEdgeCompound = false; + itr.Next(); + } + } + + if ( aShapeType==TopAbs_EDGE || aShapeType==TopAbs_WIRE || IsWireEdgeCompound) { + return new HYDROGUI_Polyline( myTopoShape ); + } else { + return new AIS_Shape( myTopoShape ); + } } void HYDROGUI_Shape::buildShape() @@ -515,22 +504,13 @@ void HYDROGUI_Shape::buildShape() // Erase previously created shape erase(); - if ( myTopoShape.IsNull() ) { - myShape.Nullify(); + myShape = createShape(); + if( myShape.IsNull() ) return; - } - QString aTextureFileName = getTextureFileName(); - bool anIsTexture = !aTextureFileName.isEmpty(); - - if ( anIsTexture ) - { - myShape = new AIS_TexturedShape( myTopoShape ); - } - else - { - myShape = new AIS_Shape( myTopoShape ); - } + Handle_AIS_Shape anAISShape = Handle_AIS_Shape::DownCast( myShape ); + if( !anAISShape.IsNull() ) + anAISShape ->SetHLRAngleAndDeviation( 0.001 ); if ( !myObject.IsNull() ) myShape->SetOwner( myObject ); @@ -538,20 +518,8 @@ void HYDROGUI_Shape::buildShape() myShape->SetTransparency( 0 ); myShape->SetDisplayMode( (AIS_DisplayMode)myDisplayMode ); - if( anIsTexture ) - { - Handle(AIS_TexturedShape) aTexturedShape = - Handle(AIS_TexturedShape)::DownCast( myShape ); - - aTexturedShape->SetTextureFileName( HYDROGUI_Tool::ToAsciiString( aTextureFileName ) ); - aTexturedShape->SetTextureMapOn(); - // Just use the texture image as is - aTexturedShape->DisableTextureModulate(); - aTexturedShape->SetTextureRepeat( false ); // don't repeat the texture image on the face - } - // Init default params for shape - const Handle(AIS_Drawer)& anAttributes = myShape->Attributes(); + const Handle(Prs3d_Drawer)& anAttributes = myShape->Attributes(); if ( !anAttributes.IsNull() ) { Handle(Prs3d_IsoAspect) anIsoAspect = anAttributes->UIsoAspect(); @@ -571,9 +539,9 @@ void HYDROGUI_Shape::buildShape() Handle(Prs3d_ShadingAspect) aShadingAspect = anAttributes->ShadingAspect(); if ( !aShadingAspect.IsNull() ) { - Graphic3d_MaterialAspect aMatAspect; - aMatAspect.SetAmbient( 1 ); - aMatAspect.SetDiffuse( 0 ); + Graphic3d_MaterialAspect aMatAspect( Graphic3d_NOM_PLASTIC ); + //aMatAspect.SetAmbient( 1 ); + //aMatAspect.SetDiffuse( 0 ); aShadingAspect->Aspect()->SetFrontMaterial( aMatAspect ); aShadingAspect->Aspect()->SetBackMaterial( aMatAspect ); @@ -592,7 +560,7 @@ void HYDROGUI_Shape::updateShape( const bool theToDisplay, if ( myShape.IsNull() ) return; - const Handle(AIS_Drawer)& anAttributes = myShape->Attributes(); + const Handle(Prs3d_Drawer)& anAttributes = myShape->Attributes(); if ( !anAttributes.IsNull() ) { if ( myDisplayMode == AIS_Shaded ) @@ -621,7 +589,19 @@ void HYDROGUI_Shape::updateShape( const bool theToDisplay, if ( !theToDisplay || !isVisible() || myContext.IsNull() ) return; - myContext->Display( myShape, theIsUpdateViewer ); + displayShape( theIsUpdateViewer ); +} + +void HYDROGUI_Shape::displayShape( const bool theIsUpdateViewer ) +{ + myContext->Display( myShape, Standard_False ); + + if ( myZLayer >= 0 ) + myContext->SetZLayer( myShape, myZLayer ); + + if ( theIsUpdateViewer ) { + myContext->UpdateCurrentViewer(); + } } QColor HYDROGUI_Shape::getActiveColor() const @@ -639,7 +619,7 @@ void HYDROGUI_Shape::colorShapeBorder( const QColor& theColor ) if ( myShape.IsNull() ) return; - const Handle(AIS_Drawer)& anAttributes = myShape->Attributes(); + const Handle(Prs3d_Drawer)& anAttributes = myShape->Attributes(); if ( anAttributes.IsNull() ) return; @@ -647,71 +627,45 @@ void HYDROGUI_Shape::colorShapeBorder( const QColor& theColor ) getQuantityColorVal( theColor.green() ), getQuantityColorVal( theColor.blue() ), Quantity_TOC_RGB ); - if ( myDisplayMode == AIS_Shaded ) + + if( !myTopoShape.IsNull() ) { - if ( theColor.alpha() == 0 ) + if ( myTopoShape.ShapeType() == TopAbs_WIRE ) // Note that we display polylines in shaded mode { - anAttributes->SetFaceBoundaryDraw( false ); + myShape->SetColor( aBorderColor ); } - else + else if ( myDisplayMode == AIS_Shaded ) { - anAttributes->SetFaceBoundaryDraw( true ); - - Handle(Prs3d_LineAspect) aBoundaryAspect = anAttributes->FaceBoundaryAspect(); - if ( !aBoundaryAspect.IsNull() ) - aBoundaryAspect->SetColor( aBorderColor ); + if ( theColor.alpha() == 0 ) + { + anAttributes->SetFaceBoundaryDraw( false ); + } + else + { + anAttributes->SetFaceBoundaryDraw( true ); + + Handle(Prs3d_LineAspect) aBoundaryAspect = anAttributes->FaceBoundaryAspect(); + if ( !aBoundaryAspect.IsNull() ) + { + aBoundaryAspect->SetColor( aBorderColor ); + anAttributes->SetFaceBoundaryAspect( aBoundaryAspect ); + } + Handle(Prs3d_LineAspect) aWireAspect = anAttributes->WireAspect(); + if ( !aWireAspect.IsNull() ) + { + aWireAspect->SetColor( aBorderColor ); + anAttributes->SetWireAspect( aWireAspect ); + } + } + } + else if ( myDisplayMode == AIS_WireFrame ) + { + myShape->SetColor( aBorderColor ); } } - else if ( myDisplayMode == AIS_WireFrame ) - { - myShape->SetColor( aBorderColor ); - } -} - -QString HYDROGUI_Shape::generateTextureFileName( const Handle(HYDROData_Entity)& theImageObj ) -{ - QString aResult; - if( !theImageObj.IsNull() ) - { - QString aTempDir = HYDROGUI_Tool::GetTempDir( true ); - - int aStudyId = HYDROGUI_Tool::GetActiveStudyId(); - QString aPrefix = QString( "image_%1" ).arg( aStudyId ); - - QString anEntry = HYDROGUI_DataObject::dataObjectEntry( theImageObj, false ); - anEntry.replace( ':', '_' ); - - QString anExtension = "bmp"; - - aResult = QString( "%1/%2_%3.%4" ).arg( aTempDir, aPrefix, anEntry, anExtension ); - } - return aResult; } -void HYDROGUI_Shape::removeTextureFile() const +void HYDROGUI_Shape::setDisplayMode( int theDisplayMode ) { - QFile aFile( getTextureFileName() ); - if( aFile.exists() ) - aFile.remove(); -} - -QImage HYDROGUI_Shape::reduceTexture( const QImage& theImage, const int theSizeLimit ) -{ - double aSizeLimit = (double)theSizeLimit; - double aWidth = (double)theImage.width(); - double aHeight = (double)theImage.height(); - if( aWidth > aSizeLimit || aHeight > aSizeLimit ) - { - if( aWidth > aHeight ) - { - aHeight /= ( aWidth / aSizeLimit ); - aWidth = aSizeLimit; - } - else - { - aWidth /= ( aHeight / aSizeLimit ); - aHeight = aSizeLimit; - } - } - return theImage.scaled( aWidth, aHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation ); + myDisplayMode = theDisplayMode; }