X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Shape.cxx;h=7739a90ed91925faf577af9c7c5c45b407847c7e;hb=f34b90e9e4e02ba65419134d5d37a2e42aecfabf;hp=c53f1d0aea34c8769bbcb1ab5c644a5f15be0198;hpb=5e3bdc5a57c68f336943a1890f263e6f6c7afcc9;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Shape.cxx b/src/HYDROGUI/HYDROGUI_Shape.cxx index c53f1d0a..7739a90e 100644 --- a/src/HYDROGUI/HYDROGUI_Shape.cxx +++ b/src/HYDROGUI/HYDROGUI_Shape.cxx @@ -28,6 +28,8 @@ #include #include +#include + #include #include #include @@ -39,6 +41,7 @@ #include #include +#include #include #include #include @@ -46,6 +49,7 @@ #include #include #include +#include #include #include @@ -108,13 +112,15 @@ void HYDROGUI_Shape::erase( const bool theIsUpdateViewer ) myContext->Erase( myShape, theIsUpdateViewer ); } -void HYDROGUI_Shape::update( const bool theIsUpdateViewer ) +void HYDROGUI_Shape::update( const bool theIsUpdateViewer, + const bool theIsDisplayOnTop ) { setIsToUpdate( false ); if ( myContext.IsNull() ) return; + bool isDeactivateSelection = false; // Try to retrieve information from object if ( !myObject.IsNull() ) { @@ -164,6 +170,9 @@ void HYDROGUI_Shape::update( const bool theIsUpdateViewer ) updateShape( false, false ); } } + + QColor aWireColor = aPolyline->GetWireColor(); + setBorderColor( aWireColor, false, false ); } else if ( myObject->IsKind( STANDARD_TYPE(HYDROData_Polyline3D) ) ) { @@ -184,6 +193,9 @@ void HYDROGUI_Shape::update( const bool theIsUpdateViewer ) updateShape( false, false ); } } + + QColor aWireColor = aPolyline->GetBorderColor(); + setBorderColor( aWireColor, false, false ); } else if ( myObject->IsKind( STANDARD_TYPE(HYDROData_Zone) ) ) { @@ -288,26 +300,7 @@ void HYDROGUI_Shape::update( const bool theIsUpdateViewer ) setTextureFileName( aTextureFileName, false, false ); setFace( aWire, false, false ); - } - else if ( myObject->IsKind( STANDARD_TYPE(HYDROData_Obstacle) ) ) - { - Handle(HYDROData_Obstacle) anObstacle = - Handle(HYDROData_Obstacle)::DownCast( myObject ); - - //TODO BEGIN of the block of code to be reimplemented - //TODO GetTopShape() to be used in future - myTopoShape = anObstacle->GetShape3D(); - myDisplayMode = AIS_Shaded; - - QColor aFillingColor = anObstacle->GetFillingColor(); - QColor aBorderColor = anObstacle->GetBorderColor(); - - setFillingColor( aFillingColor, false, false ); - setBorderColor( aBorderColor, false, false ); - - buildShape(); - updateShape( false, false ); - //TODO END of the block of code to be reimplemented + isDeactivateSelection = true; } else if ( myObject->IsKind( STANDARD_TYPE(HYDROData_Profile) ) ) { @@ -326,44 +319,80 @@ 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) ) ) + else if ( myObject->IsKind( STANDARD_TYPE(HYDROData_Stream) ) || + myObject->IsKind( STANDARD_TYPE(HYDROData_Channel) ) || + myObject->IsKind( STANDARD_TYPE(HYDROData_Obstacle) ) ) { - Handle(HYDROData_Stream) aStream = - Handle(HYDROData_Stream)::DownCast( myObject ); + Handle(HYDROData_Object) aGeomObject = + Handle(HYDROData_Object)::DownCast( myObject ); - TopoDS_Shape aStreamShape = aStream->GetTopShape(); + TopoDS_Shape anObjShape = aGeomObject->GetTopShape(); - setShape( aStreamShape, false, false ); + setShape( anObjShape, false, false ); - QColor aFillingColor = aStream->GetFillingColor(); - QColor aBorderColor = aStream->GetBorderColor(); + QColor aFillingColor = aGeomObject->GetFillingColor(); + QColor aBorderColor = aGeomObject->GetBorderColor(); setFillingColor( aFillingColor, false, false ); setBorderColor( aBorderColor, false, false ); } - else if ( myObject->IsKind( STANDARD_TYPE(HYDROData_Channel) ) ) + else if ( myObject->IsKind( STANDARD_TYPE(HYDROData_DummyObject3D) ) ) { - Handle(HYDROData_Channel) aChannel = - Handle(HYDROData_Channel)::DownCast( myObject ); - - TopoDS_Face aChannelShape2d = TopoDS::Face( aChannel->GetTopShape() ); - TopoDS_Shape aChannelShape = aChannel->GetShape3D(); + Handle(HYDROData_DummyObject3D) anObject3D = + Handle(HYDROData_DummyObject3D)::DownCast( myObject ); + TopoDS_Shape aShape3D = anObject3D->GetShape(); - setShape( aChannelShape, false, false ); + setShape( aShape3D, false, false ); - QColor aFillingColor = aChannel->GetFillingColor(); - QColor aBorderColor = aChannel->GetBorderColor(); + QColor aFillingColor = anObject3D->GetFillingColor(); + QColor aBorderColor = anObject3D->GetBorderColor(); 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 ); + + if ( theIsDisplayOnTop ) { + // Display the shape on the top Z layer + Standard_Integer aNewLayerId = -1; + if ( myContext->CurrentViewer() && + myContext->CurrentViewer()->AddZLayer( aNewLayerId ) && + aNewLayerId > 0 ) { + myContext->SetZLayer( myShape, aNewLayerId ); + } + } + + if (isDeactivateSelection) + myContext->Deactivate(myShape); } void HYDROGUI_Shape::setVisible( const bool theState, @@ -383,7 +412,7 @@ void HYDROGUI_Shape::setVisible( const bool theState, myContext->Erase( myShape, theIsUpdateViewer ); } -void HYDROGUI_Shape::highlight( bool theIsHighlight ) +void HYDROGUI_Shape::highlight( bool theIsHighlight, bool isUpdateViewer ) { if ( myIsHighlight == theIsHighlight ) return; @@ -394,7 +423,7 @@ void HYDROGUI_Shape::highlight( bool theIsHighlight ) return; colorShapeBorder( getActiveColor() ); - myContext->Display( myShape ); + myContext->Display( myShape, isUpdateViewer ); } bool HYDROGUI_Shape::isHighlighted() const @@ -550,6 +579,8 @@ void HYDROGUI_Shape::buildShape() myShape = new AIS_Shape( myTopoShape ); } + myShape->SetHLRAngleAndDeviation( 0.001 ); + if ( !myObject.IsNull() ) myShape->SetOwner( myObject ); @@ -589,9 +620,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 ); @@ -677,7 +708,10 @@ void HYDROGUI_Shape::colorShapeBorder( const QColor& theColor ) Handle(Prs3d_LineAspect) aBoundaryAspect = anAttributes->FaceBoundaryAspect(); if ( !aBoundaryAspect.IsNull() ) + { aBoundaryAspect->SetColor( aBorderColor ); + anAttributes->SetFaceBoundaryAspect( aBoundaryAspect ); + } } } else if ( myDisplayMode == AIS_WireFrame )