X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMGUI%2FGEOM_Displayer.cxx;h=5dfc36699c7f60931226ab96d3d4e8c40452961e;hb=5e7cf6df5a668d1e1608ba946c59ba34234d8942;hp=3d17ca13edf0224d81d4bb5c7d99a6354d199b21;hpb=3cd4475b687481f4d0afbe338b7da33c158c4ed0;p=modules%2Fgeom.git diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx old mode 100644 new mode 100755 index 3d17ca13e..5dfc36699 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 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 @@ -25,7 +25,6 @@ // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) #include "GEOM_Displayer.h" -#include "GEOMGUI_DimensionProperty.h" #include "GeometryGUI.h" #include @@ -38,14 +37,18 @@ #include #include -#include #include +#include #include #include #include #include #include +#include +#include +#include + #include #include @@ -87,7 +90,9 @@ #include #include #include -#include +#if OCC_VERSION_MAJOR < 7 + #include +#endif #include #include #include @@ -99,7 +104,6 @@ #include #include #include -#include #include #include #include @@ -167,7 +171,7 @@ namespace if ( aPixmap.IsNull() ) { QPixmap px(":images/default_texture.png"); if ( !px.isNull() ) - aPixmap = OCCViewer_Utilities::imageToPixmap( px.toImage() ); + aPixmap = OCCViewer_Utilities::imageToPixmap( px.toImage() ); } return aPixmap; } @@ -459,15 +463,13 @@ static std::string getName( GEOM::GEOM_BaseObject_ptr object ) * Constructor */ //================================================================= -GEOM_Displayer::GEOM_Displayer( SalomeApp_Study* st ) +GEOM_Displayer::GEOM_Displayer() + : myUpdateColorScale(true), myIsRedisplayed( false ) { - if( st ) - myApp = dynamic_cast( st->application() ); - else - myApp = 0; + SUIT_Session* session = SUIT_Session::session(); + myApp = dynamic_cast( session->activeApplication() ); /* Shading Color */ - SUIT_Session* session = SUIT_Session::session(); SUIT_ResourceMgr* resMgr = session->resourceMgr(); QColor col = resMgr->colorValue( "Geometry", "shading_color", QColor( 255, 0, 0 ) ); @@ -496,17 +498,24 @@ GEOM_Displayer::GEOM_Displayer( SalomeApp_Study* st ) // This parameter is used for activisation/deactivisation (selection) of objects to be displayed myToActivate = true; - // Activate parallel vizualisation only for testing purpose - // and if the corresponding env variable is set to 1 - char* parallel_visu = getenv("PARALLEL_VISU"); - if (parallel_visu && atoi(parallel_visu)) - { - MESSAGE("Parallel visualisation on"); - BRepMesh_IncrementalMesh::SetParallelDefault(Standard_True); - } + // Activate parallel vizualisation by default. + // It can be switched OFF via the environment variable: + // export PARALLEL_VISU=0 + Standard_Boolean parallel_visu = Standard_True; + char* parallel_visu_env = getenv("PARALLEL_VISU"); + if (parallel_visu_env && atoi(parallel_visu_env) == 0) + parallel_visu = Standard_False; + BRepMesh_IncrementalMesh::SetParallelDefault(parallel_visu); myViewFrame = 0; +#if OCC_VERSION_MAJOR >= 7 + myColorScale = new AIS_ColorScale; + myColorScale->SetZLayer (Graphic3d_ZLayerId_TopOSD); + myColorScale->SetTransformPersistence ( + Graphic3d_TransformPers::FromDeprecatedParams(Graphic3d_TMF_2d, gp_Pnt (-1,-1,0))); +#endif + myFieldDataType = GEOM::FDT_Double; myFieldDimension = 0; myFieldStepRangeMin = 0; @@ -630,6 +639,8 @@ void GEOM_Displayer::Redisplay( const Handle(SALOME_InteractiveObject)& theIO, const bool updateViewer, const bool checkActiveViewer ) { + bool aRedisplayed = myIsRedisplayed; + myIsRedisplayed = true; // Remove the object permanently ( == true) SUIT_Session* ses = SUIT_Session::session(); SUIT_Application* app = ses->activeApplication(); @@ -659,6 +670,7 @@ void GEOM_Displayer::Redisplay( const Handle(SALOME_InteractiveObject)& theIO, } } } + myIsRedisplayed = aRedisplayed; } //================================================================= @@ -678,8 +690,23 @@ void GEOM_Displayer::Redisplay( const Handle(SALOME_InteractiveObject)& theIO, return; } + bool aRedisplayed = myIsRedisplayed; + myIsRedisplayed = true; Erase( theIO, true, false, theViewFrame ); Display( theIO, theUpdateViewer, theViewFrame ); + myIsRedisplayed = aRedisplayed; + // hide annotations for erased presentation + SUIT_Session* session = SUIT_Session::session(); + SalomeApp_Application* anApp = dynamic_cast( session->activeApplication() ); + GeometryGUI* aModule = dynamic_cast( anApp->activeModule() ); + if ( aModule ) { + if ( !theViewFrame->isVisible( theIO ) ) { + aModule->GetAnnotationMgr()->EraseVisibleAnnotations(QString(theIO->getEntry()), dynamic_cast( theViewFrame )); + } + else { + aModule->GetAnnotationMgr()->DisplayVisibleAnnotations(QString(theIO->getEntry()), dynamic_cast( theViewFrame )); + } + } } //================================================================= @@ -708,7 +735,7 @@ void GEOM_Displayer::UpdateVisibility( SALOME_View* v, const SALOME_Prs* p, bool QString entry = p->GetEntry(); if ( !entry.isEmpty() ) { if ( vId != -1 ) - aStudy->setObjectProperty( vId, entry, GEOM::propertyName( GEOM::Visibility ), on ); + aStudy->setObjectProperty( vId, entry, GEOM::propertyName( GEOM::Visibility ), on ); setVisibilityState( entry, on ? Qtx::ShownState : Qtx::HiddenState ); } } @@ -773,7 +800,7 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap int aMgrId = !anIO.IsNull() ? getViewManagerId( myViewFrame ) : -1; // get presentation properties - PropMap propMap = getObjectProperties( study, entry, myViewFrame ); + PropMap propMap = getObjectProperties( entry, myViewFrame ); // Temporary staff: vertex must be infinite for correct visualization AISShape->SetInfiniteState( myShape.Infinite() ); // || myShape.ShapeType() == TopAbs_VERTEX // VSR: 05/04/2010: Fix 20668 (Fit All for points & lines) @@ -845,7 +872,7 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap // - face boundaries color and line width anAspect = AISShape->Attributes()->FaceBoundaryAspect(); anAspect->SetColor( SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::OutlineColor ) ).value() ) ); - anAspect->SetWidth( propMap.value( GEOM::propertyName( GEOM::LineWidth ) ).toInt() ); + anAspect->SetWidth( HasWidth() ? GetWidth() : propMap.value( GEOM::propertyName( GEOM::LineWidth ) ).toInt() ); AISShape->Attributes()->SetFaceBoundaryAspect( anAspect ); // set display vectors flag @@ -915,14 +942,14 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap aImagePath = GetTexture().c_str(); if ( ! entry.isEmpty() ) { // check that study is active - SalomeApp_Study* study = getActiveStudy(); + SalomeApp_Study* study = getStudy(); if ( study ) { // Store the texture in object properties for next displays study->setObjectProperty( aMgrId, entry, GEOM::propertyName( GEOM::Texture ), QString( GetTexture().c_str() ) ); study->setObjectProperty( aMgrId, entry, GEOM::propertyName( GEOM::DisplayMode ), 3 ); // Update propeties map - propMap = getObjectProperties( study, entry, myViewFrame ); + propMap = getObjectProperties( entry, myViewFrame ); } } } @@ -980,13 +1007,13 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap int textureId = aList[0].toInt(); Standard_Integer aWidth, aHeight; Handle(TColStd_HArray1OfByte) aTexture = - GeometryGUI::getTexture( study, textureId, aWidth, aHeight ); + GeometryGUI::getTexture( textureId, aWidth, aHeight ); if ( !aTexture.IsNull() ) { Handle(Prs3d_PointAspect) aTextureAspect = new Prs3d_PointAspect( HasColor() ? - // predefined color, manually set to displayer via GEOM_Displayer::SetColor() function - (Quantity_NameOfColor)GetColor() : - // color from properties + // predefined color, manually set to displayer via GEOM_Displayer::SetColor() function + (Quantity_NameOfColor)GetColor() : + // color from properties SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::PointColor ) ).value() ), aWidth, aHeight, aTexture ); @@ -1043,7 +1070,7 @@ void GEOM_Displayer::updateActorProperties( GEOM_Actor* actor, bool create ) int aMgrId = !anIO.IsNull() ? getViewManagerId( myViewFrame ) : -1; // get presentation properties - PropMap propMap = getObjectProperties( study, entry, myViewFrame ); + PropMap propMap = getObjectProperties( entry, myViewFrame ); QColor c; ///////////////////////////////////////////////////////////////////////// @@ -1234,11 +1261,12 @@ void GEOM_Displayer::updateDimensions( const Handle(SALOME_InteractiveObject)& t QColor aQColor = aResMgr->colorValue ( "Geometry", "dimensions_color", QColor( 0, 255, 0 ) ); int aLineWidth = aResMgr->integerValue( "Geometry", "dimensions_line_width", 1 ); - double aFontHeight = aResMgr->doubleValue ( "Geometry", "dimensions_font_height", 10 ); + QFont aFont = aResMgr->fontValue ( "Geometry", "dimensions_font", QFont("Y14.5M-2009", 14) ); double anArrowLength = aResMgr->doubleValue ( "Geometry", "dimensions_arrow_length", 5 ); bool isUnitsShown = aResMgr->booleanValue( "Geometry", "dimensions_show_units", false ); QString aUnitsLength = aResMgr->stringValue ( "Geometry", "dimensions_length_units", "m" ); QString aUnitsAngle = aResMgr->stringValue ( "Geometry", "dimensions_angle_units", "deg" ); + bool aUseText3d = aResMgr->booleanValue( "Geometry", "dimensions_use_text3d", false ); // restore dimension presentation from saved attribute or property data AIS_ListOfInteractive aRestoredDimensions; @@ -1256,7 +1284,7 @@ void GEOM_Displayer::updateDimensions( const Handle(SALOME_InteractiveObject)& t } else { - aRecords.LoadFromAttribute( getStudy(), theIO->getEntry() ); + aRecords.LoadFromAttribute( theIO->getEntry() ); } // create up-to-date dimension presentations @@ -1304,10 +1332,12 @@ void GEOM_Displayer::updateDimensions( const Handle(SALOME_InteractiveObject)& t aStyle->SetCommonColor( aColor ); aStyle->MakeUnitsDisplayed( (Standard_Boolean) isUnitsShown ); - aStyle->MakeText3d( Standard_True ); + aStyle->MakeText3d( aUseText3d ); aStyle->MakeTextShaded( Standard_True ); - aStyle->SetExtensionSize( aFontHeight * 0.5 ); - aStyle->TextAspect()->SetHeight( aFontHeight ); + int fsize = aFont.pixelSize() != -1 ? aFont.pixelSize() : aFont.pointSize(); + aStyle->SetExtensionSize( fsize * 0.5 ); + aStyle->TextAspect()->SetFont( aFont.family().toLatin1().data() ); + aStyle->TextAspect()->SetHeight( fsize ); aStyle->ArrowAspect()->SetLength( anArrowLength ); aStyle->LineAspect()->SetWidth( aLineWidth ); aStyle->SetTextHorizontalPosition( aPrs->DimensionAspect()->TextHorizontalPosition() ); @@ -1729,49 +1759,43 @@ SALOME_Prs* GEOM_Displayer::buildPresentation( const QString& entry, // set interactive object setIO( theIO ); // Find SOBject (because shape should be published previously) - SUIT_Session* session = SUIT_Session::session(); - SUIT_Application* app = session->activeApplication(); - if ( app ) + if ( getStudy() ) { - SalomeApp_Study* study = dynamic_cast( app->activeStudy() ); - if ( study ) + _PTR(SObject) SO ( getStudy()->studyDS()->FindObjectID( theIO->getEntry() ) ); + if ( SO ) { - _PTR(SObject) SO ( study->studyDS()->FindObjectID( theIO->getEntry() ) ); - if ( SO ) + // get CORBA reference to data object + CORBA::Object_var object = GeometryGUI::ClientSObjectToObject(SO); + if ( !CORBA::is_nil( object ) ) { - // get CORBA reference to data object - CORBA::Object_var object = GeometryGUI::ClientSObjectToObject(SO); - if ( !CORBA::is_nil( object ) ) + // downcast to GEOM base object + GEOM::GEOM_BaseObject_var GeomBaseObject = GEOM::GEOM_BaseObject::_narrow( object ); + if ( !GeomBaseObject->_is_nil() ) { - // downcast to GEOM base object - GEOM::GEOM_BaseObject_var GeomBaseObject = GEOM::GEOM_BaseObject::_narrow( object ); - if ( !GeomBaseObject->_is_nil() ) - { - myType = GeomBaseObject->GetType(); + myType = GeomBaseObject->GetType(); - // downcast to GEOM object - GEOM::GEOM_Object_var GeomObject = GEOM::GEOM_Object::_narrow( GeomBaseObject ); - if ( myType == GEOM_FIELD_STEP ) + // downcast to GEOM object + GEOM::GEOM_Object_var GeomObject = GEOM::GEOM_Object::_narrow( GeomBaseObject ); + if ( myType == GEOM_FIELD_STEP ) + { + // get the GEOM object from the field's shape + GEOM::GEOM_FieldStep_var GeomFieldStep = GEOM::GEOM_FieldStep::_narrow( GeomBaseObject ); + if ( !GeomFieldStep->_is_nil() ) { - // get the GEOM object from the field's shape - GEOM::GEOM_FieldStep_var GeomFieldStep = GEOM::GEOM_FieldStep::_narrow( GeomBaseObject ); - if ( !GeomFieldStep->_is_nil() ) - { - GEOM::GEOM_Field_var GeomField = GeomFieldStep->GetField(); - if ( !GeomField->_is_nil() ) - GeomObject = GeomField->GetShape(); - } - - // read the field step information - readFieldStepInfo( GeomFieldStep ); + GEOM::GEOM_Field_var GeomField = GeomFieldStep->GetField(); + if ( !GeomField->_is_nil() ) + GeomObject = GeomField->GetShape(); } - if ( !GeomObject->_is_nil() ) - { - theIO->setName( GeomObject->GetName() ); - // finally set shape - setShape( GEOM_Client::get_client().GetShape( GeometryGUI::GetGeomGen(), GeomObject ) ); - } + // read the field step information + readFieldStepInfo( GeomFieldStep ); + } + + if ( !GeomObject->_is_nil() ) + { + theIO->setName( GeomObject->GetName() ); + // finally set shape + setShape( GEOM_Client::get_client().GetShape( GeometryGUI::GetGeomGen(), GeomObject ) ); } } } @@ -2035,7 +2059,7 @@ void GEOM_Displayer::BeforeDisplay( SALOME_View* v, const SALOME_OCCPrs* ) if ( !ic.IsNull() ) { if ( ic->HasOpenedContext() ) - ic->CloseAllContexts(); + ic->CloseAllContexts(Standard_True); } } } @@ -2043,6 +2067,18 @@ void GEOM_Displayer::BeforeDisplay( SALOME_View* v, const SALOME_OCCPrs* ) void GEOM_Displayer::AfterDisplay( SALOME_View* v, const SALOME_OCCPrs* p ) { UpdateColorScale(false,false); + + // visualize annotations for displayed presentation + SUIT_Session* session = SUIT_Session::session(); + SalomeApp_Application* anApp = dynamic_cast( session->activeApplication() ); + GeometryGUI* aModule = dynamic_cast( anApp->activeModule() ); + if ( aModule ) { + if ( !myIsRedisplayed ) { + aModule->GetAnnotationMgr()->DisplayVisibleAnnotations(QString(p->GetEntry()), dynamic_cast( v )); + } else { + aModule->GetAnnotationMgr()->UpdateVisibleAnnotations(QString(p->GetEntry()), dynamic_cast( v )); + } + } } void GEOM_Displayer::BeforeErase( SALOME_View* v, const SALOME_OCCPrs* p ) @@ -2055,6 +2091,15 @@ void GEOM_Displayer::AfterErase( SALOME_View* v, const SALOME_OCCPrs* p ) { LightApp_Displayer::AfterErase( v, p ); UpdateColorScale(false,false); + + if ( !myIsRedisplayed ) { + // hide annotations for erased presentation + SUIT_Session* session = SUIT_Session::session(); + SalomeApp_Application* anApp = dynamic_cast( session->activeApplication() ); + GeometryGUI* aModule = dynamic_cast( anApp->activeModule() ); + if ( aModule ) + aModule->GetAnnotationMgr()->EraseVisibleAnnotations(QString(p->GetEntry()), dynamic_cast( v )); + } } //================================================================= @@ -2450,21 +2495,20 @@ SALOMEDS::Color GEOM_Displayer::getUniqueColor( const QList& th return aSColor; } -PropMap GEOM_Displayer::getObjectProperties( SalomeApp_Study* study, - const QString& entry, +PropMap GEOM_Displayer::getObjectProperties( const QString& entry, SALOME_View* view ) { // get default properties for the explicitly specified default view type PropMap propMap = GEOM_Displayer::getDefaultPropertyMap(); - if ( study && view ) { + if ( getStudy() && view ) { SUIT_ViewModel* viewModel = dynamic_cast( view ); SUIT_ViewManager* viewMgr = ( viewModel != 0 ) ? viewModel->getViewManager() : 0; int viewId = ( viewMgr != 0 ) ? viewMgr->getGlobalId() : -1; if ( viewModel && viewId != -1 ) { // get properties from the study - PropMap storedMap = study->getObjectProperties( viewId, entry ); + PropMap storedMap = getStudy()->getObjectProperties( viewId, entry ); // overwrite default properties from stored ones (that are specified) for ( int prop = GEOM::Visibility; prop <= GEOM::LastProperty; prop++ ) { if ( storedMap.contains( GEOM::propertyName( (GEOM::Property)prop ) ) ) @@ -2484,7 +2528,7 @@ PropMap GEOM_Displayer::getObjectProperties( SalomeApp_Study* study, if ( !entry.isEmpty() ) { // get CORBA reference to geom object - _PTR(SObject) SO( study->studyDS()->FindObjectID( entry.toStdString() ) ); + _PTR(SObject) SO( getStudy()->studyDS()->FindObjectID( entry.toStdString() ) ); if ( SO ) { CORBA::Object_var object = GeometryGUI::ClientSObjectToObject( SO ); if ( !CORBA::is_nil( object ) ) { @@ -2552,7 +2596,7 @@ PropMap GEOM_Displayer::getDefaultPropertyMap() // - transparency (opacity = 1-transparency) propMap.insert( GEOM::propertyName( GEOM::Transparency ), - resMgr->integerValue( "Geometry", "transparency", 0 ) / 100. ); + resMgr->integerValue( "Geometry", "transparency", 0 ) / 100. ); // - display mode (take default value from preferences) propMap.insert( GEOM::propertyName( GEOM::DisplayMode ), @@ -2682,16 +2726,9 @@ SALOMEDS::Color GEOM_Displayer::getColor(GEOM::GEOM_Object_var theGeomObject, bo void GEOM_Displayer::EraseWithChildren(const Handle(SALOME_InteractiveObject)& theIO, - const bool eraseOnlyChildren) { - SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); - if ( !app ) - return; - - SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); - if ( !appStudy ) - return; - - LightApp_DataObject* parent = appStudy->findObjectByEntry(theIO->getEntry()); + const bool eraseOnlyChildren) +{ + LightApp_DataObject* parent = getStudy()->findObjectByEntry(theIO->getEntry()); if( !parent) return; @@ -2699,7 +2736,7 @@ void GEOM_Displayer::EraseWithChildren(const Handle(SALOME_InteractiveObject)& t // Erase from all views QList views; SALOME_View* view; - ViewManagerList vmans = app->viewManagers(); + ViewManagerList vmans = myApp->viewManagers(); SUIT_ViewManager* vman; foreach ( vman, vmans ) { SUIT_ViewModel* vmod = vman->getViewModel(); @@ -2911,7 +2948,11 @@ QList GEOM_Displayer::groupFieldData( const QList& theFieldS { QColor aQColor; Quantity_Color aColor; +#if OCC_VERSION_MAJOR < 7 if( FindColor( aVariant.toDouble(), theFieldStepRangeMin, theFieldStepRangeMax, anIsBoolean ? 2 : aNbIntervals, aColor ) ) +#else + if( AIS_ColorScale::FindColor( aVariant.toDouble(), theFieldStepRangeMin, theFieldStepRangeMax, anIsBoolean ? 2 : aNbIntervals, aColor ) ) +#endif aQColor = QColor::fromRgbF( aColor.Red(), aColor.Green(), aColor.Blue() ); aResultList << aQColor; } @@ -2919,6 +2960,7 @@ QList GEOM_Displayer::groupFieldData( const QList& theFieldS return aResultList; } +#if OCC_VERSION_MAJOR < 7 // Note: the method is copied from Aspect_ColorScale class Standard_Integer GEOM_Displayer::HueFromValue( const Standard_Integer aValue, const Standard_Integer aMin, @@ -2962,13 +3004,10 @@ Standard_Boolean GEOM_Displayer::FindColor( const Standard_Real aValue, return Standard_True; } } +#endif void GEOM_Displayer::UpdateColorScale( const bool theIsRedisplayFieldSteps, const bool updateViewer ) { - SalomeApp_Study* aStudy = dynamic_cast( myApp->activeStudy() ); - if( !aStudy ) - return; - SOCC_Viewer* aViewModel = dynamic_cast( GetActiveView() ); if( !aViewModel ) return; @@ -2990,43 +3029,41 @@ void GEOM_Displayer::UpdateColorScale( const bool theIsRedisplayFieldSteps, cons Standard_Real aColorScaleMin = 0, aColorScaleMax = 0; Standard_Boolean anIsBoolean = Standard_False; - SALOME_ListIO aSelectedObjects; - myApp->selectionMgr()->selectedObjects( aSelectedObjects ); - if( aSelectedObjects.Extent() == 1 ) + Handle(SALOME_InteractiveObject) anIO; + if ( myUpdateColorScale ) + anIO = myApp->selectionMgr()->soleSelectedObject(); + + if( !anIO.IsNull() ) { - Handle(SALOME_InteractiveObject) anIO = aSelectedObjects.First(); - if( !anIO.IsNull() ) + SOCC_Prs* aPrs = dynamic_cast( aViewModel->CreatePrs( anIO->getEntry() ) ); + if( aPrs ) { - SOCC_Prs* aPrs = dynamic_cast( aViewModel->CreatePrs( anIO->getEntry() ) ); - if( aPrs ) + AIS_ListOfInteractive aList; + aPrs->GetObjects( aList ); + AIS_ListIteratorOfListOfInteractive anIter( aList ); + for( ; anIter.More(); anIter.Next() ) { - AIS_ListOfInteractive aList; - aPrs->GetObjects( aList ); - AIS_ListIteratorOfListOfInteractive anIter( aList ); - for( ; anIter.More(); anIter.Next() ) + Handle(GEOM_AISShape) aShape = Handle(GEOM_AISShape)::DownCast( anIter.Value() ); + if( !aShape.IsNull() ) { - Handle(GEOM_AISShape) aShape = Handle(GEOM_AISShape)::DownCast( anIter.Value() ); - if( !aShape.IsNull() ) + GEOM::field_data_type aFieldDataType; + int aFieldDimension; + QList aFieldStepData; + TCollection_AsciiString aFieldStepName; + double aFieldStepRangeMin, aFieldStepRangeMax; + aShape->getFieldStepInfo( aFieldDataType, + aFieldDimension, + aFieldStepData, + aFieldStepName, + aFieldStepRangeMin, + aFieldStepRangeMax ); + if( !aFieldStepData.isEmpty() && aFieldDataType != GEOM::FDT_String ) { - GEOM::field_data_type aFieldDataType; - int aFieldDimension; - QList aFieldStepData; - TCollection_AsciiString aFieldStepName; - double aFieldStepRangeMin, aFieldStepRangeMax; - aShape->getFieldStepInfo( aFieldDataType, - aFieldDimension, - aFieldStepData, - aFieldStepName, - aFieldStepRangeMin, - aFieldStepRangeMax ); - if( !aFieldStepData.isEmpty() && aFieldDataType != GEOM::FDT_String ) - { - anIsDisplayColorScale = Standard_True; - aColorScaleTitle = aFieldStepName; - aColorScaleMin = aFieldStepRangeMin; - aColorScaleMax = aFieldStepRangeMax; - anIsBoolean = aFieldDataType == GEOM::FDT_Bool; - } + anIsDisplayColorScale = Standard_True; + aColorScaleTitle = aFieldStepName; + aColorScaleMin = aFieldStepRangeMin; + aColorScaleMax = aFieldStepRangeMax; + anIsBoolean = aFieldDataType == GEOM::FDT_Bool; } } } @@ -3035,49 +3072,67 @@ void GEOM_Displayer::UpdateColorScale( const bool theIsRedisplayFieldSteps, cons if( anIsDisplayColorScale ) { - Handle(Aspect_ColorScale) aColorScale = aView->ColorScale(); - if( !aColorScale.IsNull() ) + SUIT_Session* session = SUIT_Session::session(); + SUIT_ResourceMgr* resMgr = session->resourceMgr(); + + Standard_Real anXPos = resMgr->doubleValue( "Geometry", "scalar_bar_x_position", 0.05 ); + Standard_Real anYPos = resMgr->doubleValue( "Geometry", "scalar_bar_y_position", 0.1 ); + Standard_Real aWidth = resMgr->doubleValue( "Geometry", "scalar_bar_width", 0.2 ); + Standard_Real aHeight = resMgr->doubleValue( "Geometry", "scalar_bar_height", 0.5 ); + Standard_Integer aTextHeight = resMgr->integerValue( "Geometry", "scalar_bar_text_height", 14 ); + Standard_Integer aNbIntervals = resMgr->integerValue( "Geometry", "scalar_bar_nb_intervals", 20 ); + +#if OCC_VERSION_MAJOR < 7 + Handle(Aspect_ColorScale) myColorScale = aView->ColorScale(); + if( !myColorScale.IsNull() ) { - SUIT_Session* session = SUIT_Session::session(); - SUIT_ResourceMgr* resMgr = session->resourceMgr(); - - Standard_Real anXPos = resMgr->doubleValue( "Geometry", "scalar_bar_x_position", 0.05 ); - Standard_Real anYPos = resMgr->doubleValue( "Geometry", "scalar_bar_y_position", 0.1 ); - Standard_Real aWidth = resMgr->doubleValue( "Geometry", "scalar_bar_width", 0.2 ); - Standard_Real aHeight = resMgr->doubleValue( "Geometry", "scalar_bar_height", 0.5 ); - Standard_Integer aTextHeight = resMgr->integerValue( "Geometry", "scalar_bar_text_height", 14 ); - Standard_Integer aNbIntervals = resMgr->integerValue( "Geometry", "scalar_bar_nb_intervals", 20 ); - - aColorScale->SetXPosition( anXPos ); - aColorScale->SetYPosition( anYPos ); - aColorScale->SetWidth( aWidth ); - aColorScale->SetHeight( aHeight ); - - aColorScale->SetTextHeight( aTextHeight ); - aColorScale->SetNumberOfIntervals( anIsBoolean ? 2 : aNbIntervals ); - - aColorScale->SetTitle( aColorScaleTitle ); - aColorScale->SetRange( aColorScaleMin, aColorScaleMax ); + myColorScale->SetXPosition( anXPos ); + myColorScale->SetYPosition( anYPos ); + myColorScale->SetWidth( aWidth ); + myColorScale->SetHeight( aHeight ); +#else + Standard_Integer aWinWidth = 0, aWinHeight = 0; + aView->Window()->Size (aWinWidth, aWinHeight); + + myColorScale->SetPosition (aWinWidth*anXPos, aWinHeight*anYPos); + //myColorScale->SetBreadth (aWinWidth); // ??? + myColorScale->SetBreadth (aWinWidth*aWidth); // ??? + myColorScale->SetHeight (aWinHeight*aHeight); +#endif + + myColorScale->SetRange( aColorScaleMin, aColorScaleMax ); + myColorScale->SetNumberOfIntervals( anIsBoolean ? 2 : aNbIntervals ); + + myColorScale->SetTextHeight( aTextHeight ); + myColorScale->SetTitle( aColorScaleTitle ); + +#if OCC_VERSION_MAJOR < 7 } if( !aView->ColorScaleIsDisplayed() ) aView->ColorScaleDisplay(); } else - { if( aView->ColorScaleIsDisplayed() ) aView->ColorScaleErase(); +#else + if( !aViewModel->getAISContext()->IsDisplayed( myColorScale ) ) + aViewModel->getAISContext()->Display( myColorScale, Standard_True); } + else + if( aViewModel->getAISContext()->IsDisplayed( myColorScale ) ) + aViewModel->getAISContext()->Erase( myColorScale, Standard_True ); +#endif if( theIsRedisplayFieldSteps ) { - _PTR(Study) aStudyDS = aStudy->studyDS(); + _PTR(Study) aStudyDS = getStudy()->studyDS(); QList vmList; myApp->viewManagers( vmList ); for( QList::Iterator vmIt = vmList.begin(); vmIt != vmList.end(); vmIt++ ) { if( SUIT_ViewManager* aViewManager = *vmIt ) { - const ObjMap& anObjects = aStudy->getObjectProperties( aViewManager->getGlobalId() ); + const ObjMap& anObjects = getStudy()->getObjectProperties( aViewManager->getGlobalId() ); for( ObjMap::ConstIterator objIt = anObjects.begin(); objIt != anObjects.end(); objIt++ ) { _PTR(SObject) aSObj( aStudyDS->FindObjectID( objIt.key().toLatin1().constData() ) );