From 558522cc96345ce0bb9968f64e939fbf28b1bd81 Mon Sep 17 00:00:00 2001 From: ouv Date: Fri, 18 Oct 2013 14:00:58 +0000 Subject: [PATCH] Task: "XAO format: fields on geometry". Sub-task: "GUI/visualization - OCC viewer". --- doc/salome/gui/GEOM/images/pref15.png | Bin 96774 -> 71039 bytes .../gui/GEOM/input/geometry_preferences.doc | 12 + resources/SalomeApp.xml.in | 8 + src/DisplayGUI/DisplayGUI.cxx | 4 + src/EntityGUI/EntityGUI_FieldDlg.cxx | 50 +- src/EntityGUI/EntityGUI_FieldDlg.h | 2 + src/GEOMGUI/GEOM_Displayer.cxx | 533 ++++++++++++++++-- src/GEOMGUI/GEOM_Displayer.h | 51 +- src/GEOMGUI/GEOM_msg_en.ts | 29 + src/GEOMGUI/GeometryGUI.cxx | 64 +++ src/GEOMGUI/GeometryGUI.h | 1 + src/OBJECT/GEOM_AISShape.cxx | 220 +++++++- src/OBJECT/GEOM_AISShape.hxx | 37 +- 13 files changed, 946 insertions(+), 65 deletions(-) diff --git a/doc/salome/gui/GEOM/images/pref15.png b/doc/salome/gui/GEOM/images/pref15.png index b3b4df0f2a084feca2a1dbadc2f0abd01100726d..82189e99d19faeb08d54c81ecb5bd66f285af24f 100755 GIT binary patch literal 71039 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

p#EPpYWK@cYg>cymIBo&JJ5%2f*v7yesC}1N5A% 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 z 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 z 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 z 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 GJopFO%u&by literal 96774 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 +

+
  • Operations
  • diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in index 73bb3172e..af5f33ef5 100644 --- a/resources/SalomeApp.xml.in +++ b/resources/SalomeApp.xml.in @@ -68,6 +68,14 @@ + + + + + + + + diff --git a/src/DisplayGUI/DisplayGUI.cxx b/src/DisplayGUI/DisplayGUI.cxx index fee7c9787..c4432718c 100644 --- a/src/DisplayGUI/DisplayGUI.cxx +++ b/src/DisplayGUI/DisplayGUI.cxx @@ -88,6 +88,9 @@ bool DisplayGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent) SalomeApp_Application* app = getGeometryGUI()->getApp(); if (!app) return false; + SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); + if ( !appStudy ) return false; + LightApp_SelectionMgr *Sel = app->selectionMgr(); SALOME_ListIO selected; Sel->selectedObjects( selected ); @@ -150,6 +153,7 @@ bool DisplayGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent) break; } Sel->setSelectedObjects( selected ); + GEOM_Displayer( appStudy ).UpdateColorScale(); return true; } diff --git a/src/EntityGUI/EntityGUI_FieldDlg.cxx b/src/EntityGUI/EntityGUI_FieldDlg.cxx index 9b4246b20..d6465df75 100644 --- a/src/EntityGUI/EntityGUI_FieldDlg.cxx +++ b/src/EntityGUI/EntityGUI_FieldDlg.cxx @@ -915,6 +915,16 @@ EntityGUI_FieldDlg::~EntityGUI_FieldDlg() } // if ( !myField->_is_nil()) // aDisplayer->Display(myField); + + QListIterator anIter( myHiddenFieldStepIds ); + while( anIter.hasNext() ) + { + const int aStepId = anIter.next(); + GEOM::GEOM_FieldStep_var step = myField->GetStep( aStepId ); + if( !step->_is_nil() ) + aDisplayer->Display( step, false ); + } + aDisplayer->UpdateViewer(); } //================================================================================= @@ -924,6 +934,7 @@ EntityGUI_FieldDlg::~EntityGUI_FieldDlg() void EntityGUI_FieldDlg::Init() { myDmMode = -1; + myHiddenFieldStepIds.clear(); myStepsCombo->clear(); if ( myIsCreation || myField->_is_nil() ) @@ -950,6 +961,29 @@ void EntityGUI_FieldDlg::Init() } else // edition { + // 1) get and sort step IDs + // 2) hide all displayed field steps' presentations + GEOM_Displayer* aDisplayer = getDisplayer(); + GEOM::ListOfLong_var stepIDs = myField->GetSteps(); + size_t i; + QList< int > stepsList; + for ( i = 0; i < stepIDs->length(); ++i ) + { + int aStepId = stepIDs[i]; + stepsList.push_back( aStepId ); + GEOM::GEOM_FieldStep_var step = myField->GetStep( aStepId ); + if( !step->_is_nil() ) + { + QString anEntry( step->GetStudyEntry() ); + if( aDisplayer->IsDisplayed( anEntry ) ) + { + aDisplayer->Erase( step, false, false ); + myHiddenFieldStepIds << aStepId; + } + } + } + qSort( stepsList.begin(), stepsList.end() ); + myIsCreation = false; CORBA::String_var fName = myField->GetName(); @@ -975,15 +1009,8 @@ void EntityGUI_FieldDlg::Init() myDimCombo->setEnabled( false ); myNbCompsSpin->setEnabled( false ); - // get and sort step IDs - GEOM::ListOfLong_var stepIDs = myField->GetSteps(); - QList< int > stepsList; - for ( size_t i = 0; i < stepIDs->length(); ++i ) - stepsList.push_back( stepIDs[i] ); - qSort( stepsList.begin(), stepsList.end() ); - myStepsCombo->blockSignals( true ); - for ( size_t i = 0; i < stepIDs->length(); ++i ) + for ( i = 0; i < stepIDs->length(); ++i ) { myStepsCombo->insertItem( i, QString::number( stepsList[i] )); if ( myCurStepID == stepsList[i] ) @@ -1854,7 +1881,14 @@ bool EntityGUI_FieldDlg::execute() } } tbl->setValues( step ); + + // update the presentation if it is displayed + CORBA::String_var aStepEntry = step->GetStudyEntry(); + Handle(SALOME_InteractiveObject) aStepIO = + new SALOME_InteractiveObject( aStepEntry.in(), "GEOM", "TEMP_IO" ); + getDisplayer()->Redisplay( aStepIO, false, false ); } + getDisplayer()->UpdateViewer(); // remove steps if ( !myIsCreation ) diff --git a/src/EntityGUI/EntityGUI_FieldDlg.h b/src/EntityGUI/EntityGUI_FieldDlg.h index c3a0b7ae1..01dd762ff 100644 --- a/src/EntityGUI/EntityGUI_FieldDlg.h +++ b/src/EntityGUI/EntityGUI_FieldDlg.h @@ -120,6 +120,8 @@ private: int myDmMode; bool myIsHiddenMain; + QList myHiddenFieldStepIds; + QPushButton* myShapeSelBtn; QLineEdit* myShapeName; QComboBox* myTypeCombo; diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index fca019379..9e59ce7e2 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -72,9 +72,13 @@ #include #include +#include +#include + // OCCT Includes #include #include +#include #include #include #include @@ -258,7 +262,7 @@ SUIT_SelectionFilter* GEOM_Displayer::getComplexFilter( const QList* aSubSh // Function : getEntry // Purpose : //================================================================ -static std::string getEntry( GEOM::GEOM_Object_ptr object ) +static std::string getEntry( GEOM::GEOM_BaseObject_ptr object ) { SUIT_Session* session = SUIT_Session::session(); SalomeApp_Application* app = dynamic_cast( session->activeApplication() ); @@ -280,7 +284,7 @@ static std::string getEntry( GEOM::GEOM_Object_ptr object ) // Function : getName // Purpose : //================================================================ -static std::string getName( GEOM::GEOM_Object_ptr object ) +static std::string getName( GEOM::GEOM_BaseObject_ptr object ) { SUIT_Session* session = SUIT_Session::session(); SalomeApp_Application* app = dynamic_cast( session->activeApplication() ); @@ -359,6 +363,11 @@ GEOM_Displayer::GEOM_Displayer( SalomeApp_Study* st ) #endif myViewFrame = 0; + + myFieldDataType = GEOM::FDT_Double; + myFieldDimension = 0; + myFieldStepRangeMin = 0; + myFieldStepRangeMax = 0; } //================================================================= @@ -413,7 +422,7 @@ void GEOM_Displayer::Display( const Handle(SALOME_InteractiveObject)& theIO, * not using dialog boxes. */ //================================================================= -void GEOM_Displayer::Display( GEOM::GEOM_Object_ptr theObj, const bool updateViewer ) +void GEOM_Displayer::Display( GEOM::GEOM_BaseObject_ptr theObj, const bool updateViewer ) { if ( theObj->_is_nil() ) return; @@ -466,7 +475,7 @@ void GEOM_Displayer::Erase( const Handle(SALOME_InteractiveObject)& theIO, * Erase geometry object in the current viewer */ //================================================================= -void GEOM_Displayer::Erase( GEOM::GEOM_Object_ptr theObj, +void GEOM_Displayer::Erase( GEOM::GEOM_BaseObject_ptr theObj, const bool forced, const bool updateViewer ) { @@ -486,7 +495,8 @@ void GEOM_Displayer::Erase( GEOM::GEOM_Object_ptr theObj, */ //================================================================= void GEOM_Displayer::Redisplay( const Handle(SALOME_InteractiveObject)& theIO, - const bool updateViewer ) + const bool updateViewer, + const bool checkActiveViewer ) { // Remove the object permanently ( == true) SUIT_Session* ses = SUIT_Session::session(); @@ -508,7 +518,7 @@ void GEOM_Displayer::Redisplay( const Handle(SALOME_InteractiveObject)& theIO, SALOME_View* view = dynamic_cast(vmodel); if ( view ) { - if ( view->isVisible( theIO ) || view == GetActiveView() ) + if ( view->isVisible( theIO ) || ( checkActiveViewer && view == GetActiveView() ) ) { Erase( theIO, true, false, view ); Display( theIO, updateViewer, view ); @@ -759,6 +769,14 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap } } + // set field step data + AISShape->setFieldStepInfo( myFieldDataType, + myFieldDimension, + myFieldStepData, + myFieldStepName, + myFieldStepRangeMin, + myFieldStepRangeMax ); + if ( create && !isTemporary && aMgrId != -1 ) { // set properties to the study study->setObjectPropMap( aMgrId, entry, propMap ); @@ -936,11 +954,13 @@ void GEOM_Displayer::Erase( const SALOME_ListIO& theIOList, * Calls Redisplay() method for each object in the given list */ //================================================================= -void GEOM_Displayer::Redisplay( const SALOME_ListIO& theIOList, const bool updateViewer ) +void GEOM_Displayer::Redisplay( const SALOME_ListIO& theIOList, + const bool updateViewer, + const bool checkActiveViewer ) { SALOME_ListIteratorOfListIO Iter( theIOList ); for ( ; Iter.More(); Iter.Next() ) - Redisplay( Iter.Value(), false ); + Redisplay( Iter.Value(), false, checkActiveViewer ); if ( updateViewer ) UpdateViewer(); @@ -1276,13 +1296,34 @@ SALOME_Prs* GEOM_Displayer::buildPresentation( const QString& entry, CORBA::Object_var object = GeometryGUI::ClientSObjectToObject(SO); if ( !CORBA::is_nil( object ) ) { - // downcast to GEOM object - GEOM::GEOM_Object_var GeomObject = GEOM::GEOM_Object::_narrow( object ); - if ( !GeomObject->_is_nil() ) + // downcast to GEOM base object + GEOM::GEOM_BaseObject_var GeomBaseObject = GEOM::GEOM_BaseObject::_narrow( object ); + if ( !GeomBaseObject->_is_nil() ) { - // finally set shape - setShape( GEOM_Client::get_client().GetShape( GeometryGUI::GetGeomGen(), GeomObject ) ); - myType = GeomObject->GetType(); + myType = GeomBaseObject->GetType(); + + // 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() ) + { + GEOM::GEOM_Field_var GeomField = GeomFieldStep->GetField(); + if ( !GeomField->_is_nil() ) + GeomObject = GeomField->GetShape(); + } + + // read the field step information + readFieldStepInfo( GeomFieldStep ); + } + + if ( !GeomObject->_is_nil() ) + { + // finally set shape + setShape( GEOM_Client::get_client().GetShape( GeometryGUI::GetGeomGen(), GeomObject ) ); + } } } } @@ -1344,6 +1385,13 @@ void GEOM_Displayer::internalReset() { myIO.Nullify(); myShape.Nullify(); + + myFieldDataType = GEOM::FDT_Double; + myFieldDimension = 0; + myFieldStepData.clear(); + myFieldStepName.Clear(); + myFieldStepRangeMin = 0; + myFieldStepRangeMax = 0; } //================================================================= @@ -1542,6 +1590,13 @@ void GEOM_Displayer::AfterDisplay( SALOME_View* v, const SALOME_OCCPrs* p ) } } } + UpdateColorScale(); +} + +void GEOM_Displayer::AfterErase( SALOME_View* v, const SALOME_OCCPrs* p ) +{ + LightApp_Displayer::AfterErase( v, p ); + UpdateColorScale(); } //================================================================= @@ -1709,12 +1764,29 @@ void GEOM_Displayer::setShape( const TopoDS_Shape& theShape ) myShape = theShape; } +void GEOM_Displayer::setFieldStepInfo( const GEOM::field_data_type theFieldDataType, + const int theFieldDimension, + const QList& theFieldStepData, + const TCollection_AsciiString& theFieldStepName, + const double theFieldStepRangeMin, + const double theFieldStepRangeMax ) +{ + myFieldDataType = theFieldDataType; + myFieldDimension = theFieldDimension; + myFieldStepData = theFieldStepData; + myFieldStepName = theFieldStepName; + myFieldStepRangeMin = theFieldStepRangeMin; + myFieldStepRangeMax = theFieldStepRangeMax; +} + bool GEOM_Displayer::canBeDisplayed( const QString& entry, const QString& viewer_type ) const { _PTR(SObject) anObj = getStudy()->studyDS()->FindObjectID( (const char*)entry.toLatin1() ); GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(anObj)); // enable displaying of GEOM objects + GEOM::GEOM_FieldStep_var aFieldStepObj = GEOM::GEOM_FieldStep::_narrow(GeometryGUI::ClientSObjectToObject(anObj)); // enable displaying of GEOM field steps GEOM::GEOM_Gen_var aCompObj = GEOM::GEOM_Gen::_narrow(GeometryGUI::ClientSObjectToObject(anObj)); // enable displaying of whole GEOM component - return ( !CORBA::is_nil( aGeomObj ) || !CORBA::is_nil( aCompObj ) ) && (viewer_type == SOCC_Viewer::Type() || viewer_type == SVTK_Viewer::Type()); + return ( !CORBA::is_nil( aGeomObj ) || !CORBA::is_nil( aFieldStepObj ) || !CORBA::is_nil( aCompObj ) ) && + (viewer_type == SOCC_Viewer::Type() || viewer_type == SVTK_Viewer::Type()); } int GEOM_Displayer::SetDisplayMode( const int theMode ) @@ -1876,36 +1948,38 @@ PropMap GEOM_Displayer::getObjectProperties( SalomeApp_Study* study, CORBA::Object_var object = GeometryGUI::ClientSObjectToObject( SO ); if ( !CORBA::is_nil( object ) ) { GEOM::GEOM_Object_var geomObject = GEOM::GEOM_Object::_narrow( object ); - // check that geom object has color properly set - bool hasColor = false; - SALOMEDS::Color aSColor = getColor( geomObject, hasColor ); - // set color from geometry object (only once, if it is not yet set in GUI) - // current implementation is to use same color for all aspects - // (TODO) possible future improvements about free boundaries, standalone edges etc colors can be here - if ( hasColor && !storedMap.contains( GEOM::propertyName( GEOM::Color ) ) ) { - QColor objColor = QColor::fromRgbF( aSColor.R, aSColor.G, aSColor.B ); - propMap.insert( GEOM::propertyName( GEOM::ShadingColor ), objColor ); - propMap.insert( GEOM::propertyName( GEOM::WireframeColor ), objColor ); - propMap.insert( GEOM::propertyName( GEOM::LineColor ), objColor ); - propMap.insert( GEOM::propertyName( GEOM::FreeBndColor ), objColor ); - propMap.insert( GEOM::propertyName( GEOM::PointColor ), objColor ); - } - // check that object has point marker properly set - GEOM::marker_type mType = geomObject->GetMarkerType(); - GEOM::marker_size mSize = geomObject->GetMarkerSize(); - int mTextureId = geomObject->GetMarkerTexture(); - bool hasMarker = ( mType > GEOM::MT_NONE && mType < GEOM::MT_USER && mSize > GEOM::MS_NONE && mSize <= GEOM::MS_70 ) || - ( mType == GEOM::MT_USER && mTextureId > 0 ); - // set point marker from geometry object (only once, if it is not yet set in GUI) - if ( hasMarker && !storedMap.contains( GEOM::propertyName( GEOM::PointMarker ) ) ) { - if ( mType > GEOM::MT_NONE && mType < GEOM::MT_USER ) { - // standard type - propMap.insert( GEOM::propertyName( GEOM::PointMarker ), - QString( "%1%2%3" ).arg( (int)mType ).arg( GEOM::subSectionSeparator() ).arg( (int)mSize ) ); + if ( !CORBA::is_nil( geomObject ) ) { // to check + // check that geom object has color properly set + bool hasColor = false; + SALOMEDS::Color aSColor = getColor( geomObject, hasColor ); + // set color from geometry object (only once, if it is not yet set in GUI) + // current implementation is to use same color for all aspects + // (TODO) possible future improvements about free boundaries, standalone edges etc colors can be here + if ( hasColor && !storedMap.contains( GEOM::propertyName( GEOM::Color ) ) ) { + QColor objColor = QColor::fromRgbF( aSColor.R, aSColor.G, aSColor.B ); + propMap.insert( GEOM::propertyName( GEOM::ShadingColor ), objColor ); + propMap.insert( GEOM::propertyName( GEOM::WireframeColor ), objColor ); + propMap.insert( GEOM::propertyName( GEOM::LineColor ), objColor ); + propMap.insert( GEOM::propertyName( GEOM::FreeBndColor ), objColor ); + propMap.insert( GEOM::propertyName( GEOM::PointColor ), objColor ); } - else if ( mType == GEOM::MT_USER ) { - // custom texture - propMap.insert( GEOM::propertyName( GEOM::PointMarker ), QString::number( mTextureId ) ); + // check that object has point marker properly set + GEOM::marker_type mType = geomObject->GetMarkerType(); + GEOM::marker_size mSize = geomObject->GetMarkerSize(); + int mTextureId = geomObject->GetMarkerTexture(); + bool hasMarker = ( mType > GEOM::MT_NONE && mType < GEOM::MT_USER && mSize > GEOM::MS_NONE && mSize <= GEOM::MS_70 ) || + ( mType == GEOM::MT_USER && mTextureId > 0 ); + // set point marker from geometry object (only once, if it is not yet set in GUI) + if ( hasMarker && !storedMap.contains( GEOM::propertyName( GEOM::PointMarker ) ) ) { + if ( mType > GEOM::MT_NONE && mType < GEOM::MT_USER ) { + // standard type + propMap.insert( GEOM::propertyName( GEOM::PointMarker ), + QString( "%1%2%3" ).arg( (int)mType ).arg( GEOM::subSectionSeparator() ).arg( (int)mSize ) ); + } + else if ( mType == GEOM::MT_USER ) { + // custom texture + propMap.insert( GEOM::propertyName( GEOM::PointMarker ), QString::number( mTextureId ) ); + } } } } @@ -2110,3 +2184,374 @@ void GEOM_Displayer::EraseWithChildren(const Handle(SALOME_InteractiveObject)& t view->Repaint(); } } + +void GEOM_Displayer::readFieldStepInfo( GEOM::GEOM_FieldStep_var theGeomFieldStep ) +{ + if( theGeomFieldStep->_is_nil() ) + return; + + GEOM::GEOM_Field_var aGeomField = theGeomFieldStep->GetField(); + if( aGeomField->_is_nil() ) + return; + + GEOM::GEOM_Object_var aGeomFieldShape = aGeomField->GetShape(); + if( aGeomFieldShape->_is_nil() ) + return; + + TCollection_AsciiString aFieldStepName( theGeomFieldStep->GetName() ); + TCollection_AsciiString aFieldName( aGeomField->GetName() ); + TCollection_AsciiString aShapeName( aGeomFieldShape->GetName() ); + + aFieldStepName = aShapeName + "\n" + aFieldName + "\n" + aFieldStepName; + + GEOM::field_data_type aFieldDataType = aGeomField->GetDataType(); + + int aFieldDimension = aGeomField->GetDimension(); + + GEOM::string_array_var aFieldComponents = aGeomField->GetComponents(); + int aFieldNbComponents = aFieldComponents->length(); + + QList aFieldStepData; + if( aFieldDataType == GEOM::FDT_Bool ) + { + GEOM::GEOM_BoolFieldStep_var aGeomBoolFieldStep = GEOM::GEOM_BoolFieldStep::_narrow( theGeomFieldStep ); + if ( !aGeomBoolFieldStep->_is_nil() ) + { + GEOM::short_array_var aValues = aGeomBoolFieldStep->GetValues(); + for( size_t i = 0, n = aValues->length(); i < n; i++ ) + aFieldStepData << (bool)aValues[i]; + } + } + else if( aFieldDataType == GEOM::FDT_Int ) + { + GEOM::GEOM_IntFieldStep_var aGeomIntFieldStep = GEOM::GEOM_IntFieldStep::_narrow( theGeomFieldStep ); + if ( !aGeomIntFieldStep->_is_nil() ) + { + GEOM::ListOfLong_var aValues = aGeomIntFieldStep->GetValues(); + for( size_t i = 0, n = aValues->length(); i < n; i++ ) + aFieldStepData << aValues[i]; + } + } + else if( aFieldDataType == GEOM::FDT_Double ) + { + GEOM::GEOM_DoubleFieldStep_var aGeomDoubleFieldStep = GEOM::GEOM_DoubleFieldStep::_narrow( theGeomFieldStep ); + if ( !aGeomDoubleFieldStep->_is_nil() ) + { + GEOM::ListOfDouble_var aValues = aGeomDoubleFieldStep->GetValues(); + for( size_t i = 0, n = aValues->length(); i < n; i++ ) + aFieldStepData << aValues[i]; + } + } + else if( aFieldDataType == GEOM::FDT_String ) + { + GEOM::GEOM_StringFieldStep_var aGeomStringFieldStep = GEOM::GEOM_StringFieldStep::_narrow( theGeomFieldStep ); + if ( !aGeomStringFieldStep->_is_nil() ) + { + GEOM::string_array_var aValues = aGeomStringFieldStep->GetValues(); + for( size_t i = 0, n = aValues->length(); i < n; i++ ) + aFieldStepData << QString( aValues[i] ); + } + } + + double aFieldStepRangeMin = 0, aFieldStepRangeMax = 0; + aFieldStepData = groupFieldData( aFieldStepData, + aFieldNbComponents, + aFieldDataType == GEOM::FDT_String, + aFieldStepRangeMin, + aFieldStepRangeMax ); + + setFieldStepInfo( aFieldDataType, + aFieldDimension, + aFieldStepData, + aFieldStepName, + aFieldStepRangeMin, + aFieldStepRangeMax ); +} + +QList GEOM_Displayer::groupFieldData( const QList& theFieldStepData, + const int theFieldNbComponents, + const bool theIsString, + double& theFieldStepRangeMin, + double& theFieldStepRangeMax ) +{ + QList aResultList; + theFieldStepRangeMin = 0; + theFieldStepRangeMax = 0; + + if( theFieldStepData.isEmpty() || theFieldNbComponents < 1 ) + return aResultList; + + int aNbSubShapes = theFieldStepData.count() / theFieldNbComponents; + + QList aGroupedList; + + bool anIsBoolean = false; + for( int aSubShape = 0; aSubShape < aNbSubShapes; aSubShape++ ) + { + double aNorm = 0; + QStringList aStringList; + + int aBaseIndex = aSubShape * theFieldNbComponents; + for( int aComponent = 0; aComponent < theFieldNbComponents; aComponent++ ) + { + int anIndex = aComponent + aBaseIndex; + + const QVariant& aVariant = theFieldStepData[ anIndex ]; + if( theIsString ) + { + if( aVariant.type() == QVariant::String ) + aStringList << aVariant.toString(); + } + else + { + double aValue = 0; + if( aVariant.type() == QVariant::Bool ) + { + aValue = aVariant.toBool() ? 1.0 : 0.0; + aNorm += aValue; + anIsBoolean = true; + } + else + { + if( aVariant.type() == QVariant::Int ) + aValue = double( aVariant.toInt() ); + else if( aVariant.type() == QVariant::Double ) + aValue = aVariant.toDouble(); + aNorm += aValue * aValue; + } + } + } + + if( theIsString ) + aGroupedList << aStringList.join( "\n" ); + else + { + if( anIsBoolean ) + aNorm /= theFieldNbComponents; + else + aNorm = pow( aNorm, 0.5 ); + + if( aGroupedList.isEmpty() ) + theFieldStepRangeMin = theFieldStepRangeMax = aNorm; + else + { + theFieldStepRangeMin = Min( theFieldStepRangeMin, aNorm ); + theFieldStepRangeMax = Max( theFieldStepRangeMax, aNorm ); + } + + aGroupedList << aNorm; + } + } + + if( anIsBoolean ) + { + theFieldStepRangeMin = 0.0; + theFieldStepRangeMax = 1.0; + } + + SUIT_Session* session = SUIT_Session::session(); + SUIT_ResourceMgr* resMgr = session->resourceMgr(); + Standard_Integer aNbIntervals = resMgr->integerValue( "Geometry", "scalar_bar_nb_intervals", 20 ); + + QListIterator anIter( aGroupedList ); + while( anIter.hasNext() ) + { + const QVariant& aVariant = anIter.next(); + if( theIsString ) + aResultList << aVariant; + else + { + QColor aQColor; + Quantity_Color aColor; + if( FindColor( aVariant.toDouble(), theFieldStepRangeMin, theFieldStepRangeMax, anIsBoolean ? 2 : aNbIntervals, aColor ) ) + aQColor = QColor::fromRgbF( aColor.Red(), aColor.Green(), aColor.Blue() ); + aResultList << aQColor; + } + } + return aResultList; +} + +// Note: the method is copied from Aspect_ColorScale class +Standard_Integer GEOM_Displayer::HueFromValue( const Standard_Integer aValue, + const Standard_Integer aMin, + const Standard_Integer aMax ) +{ + Standard_Integer minLimit( 0 ), maxLimit( 230 ); + + Standard_Integer aHue = maxLimit; + if ( aMin != aMax ) + aHue = (Standard_Integer)( maxLimit - ( maxLimit - minLimit ) * ( aValue - aMin ) / ( aMax - aMin ) ); + + aHue = Min( Max( minLimit, aHue ), maxLimit ); + + return aHue; +} + +// Note: the method is copied from Aspect_ColorScale class +Standard_Boolean GEOM_Displayer::FindColor( const Standard_Real aValue, + const Standard_Real aMin, + const Standard_Real aMax, + const Standard_Integer ColorsCount, + Quantity_Color& aColor ) +{ + if( aValueaMax || aMaxaMax ) + IntervNumber = ColorsCount-1; + else if( Abs( aMax-aMin ) > Precision::Approximation() ) + IntervNumber = Floor( Standard_Real( ColorsCount ) * ( aValue - aMin ) / ( aMax - aMin ) ); // 'Ceiling' replaced with 'Floor' + + Standard_Integer Interv = Standard_Integer( IntervNumber ); + + aColor = Quantity_Color( HueFromValue( Interv, 0, ColorsCount - 1 ), 1.0, 1.0, Quantity_TOC_HLS ); + + return Standard_True; + } +} + +void GEOM_Displayer::UpdateColorScale( const bool theIsRedisplayFieldSteps ) +{ + SalomeApp_Study* aStudy = dynamic_cast( myApp->activeStudy() ); + if( !aStudy ) + return; + + SOCC_Viewer* aViewModel = dynamic_cast( GetActiveView() ); + if( !aViewModel ) + return; + + Handle(V3d_Viewer) aViewer = aViewModel->getViewer3d(); + if( aViewer.IsNull() ) + return; + + aViewer->InitActiveViews(); + if( !aViewer->MoreActiveViews() ) + return; + + Handle(V3d_View) aView = aViewer->ActiveView(); + if( aView.IsNull() ) + return; + + Standard_Boolean anIsDisplayColorScale = Standard_False; + TCollection_AsciiString aColorScaleTitle; + 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 = aSelectedObjects.First(); + if( !anIO.IsNull() ) + { + 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() ) + { + 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 ) + { + anIsDisplayColorScale = Standard_True; + aColorScaleTitle = aFieldStepName; + aColorScaleMin = aFieldStepRangeMin; + aColorScaleMax = aFieldStepRangeMax; + anIsBoolean = aFieldDataType == GEOM::FDT_Bool; + } + } + } + } + } + } + + 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 ); + + 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 ); + } + if( !aView->ColorScaleIsDisplayed() ) + aView->ColorScaleDisplay(); + } + else + { + if( aView->ColorScaleIsDisplayed() ) + aView->ColorScaleErase(); + } + + if( theIsRedisplayFieldSteps ) + { + _PTR(Study) aStudyDS = aStudy->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->getObjectMap( aViewManager->getGlobalId() ); + for( ObjMap::ConstIterator objIt = anObjects.begin(); objIt != anObjects.end(); objIt++ ) + { + _PTR(SObject) aSObj( aStudyDS->FindObjectID( objIt.key().toLatin1().constData() ) ); + if( aSObj ) + { + CORBA::Object_var anObject = GeometryGUI::ClientSObjectToObject( aSObj ); + if( !CORBA::is_nil( anObject ) ) + { + GEOM::GEOM_FieldStep_var aFieldStep = GEOM::GEOM_FieldStep::_narrow( anObject ); + if( !aFieldStep->_is_nil() ) + { + CORBA::String_var aStepEntry = aFieldStep->GetStudyEntry(); + Handle(SALOME_InteractiveObject) aStepIO = + new SALOME_InteractiveObject( aStepEntry.in(), "GEOM", "TEMP_IO" ); + Redisplay( aStepIO, false, false ); + } + } + } + } + } + } + } + + UpdateViewer(); +} diff --git a/src/GEOMGUI/GEOM_Displayer.h b/src/GEOMGUI/GEOM_Displayer.h index 4f0c137f4..e5ee15cec 100644 --- a/src/GEOMGUI/GEOM_Displayer.h +++ b/src/GEOMGUI/GEOM_Displayer.h @@ -44,6 +44,7 @@ class SALOME_OCCViewType; #include #include #include +#include #include @@ -85,18 +86,19 @@ public: // This overloaded Display() method can be useful for operations // not using dialog boxes. - void Display ( GEOM::GEOM_Object_ptr theObj, + void Display ( GEOM::GEOM_BaseObject_ptr theObj, const bool updateViewer = true ); void Redisplay ( const Handle(SALOME_InteractiveObject)& theIO, - const bool updateViewer = true ); + const bool updateViewer = true, + const bool checkActiveViewer = true ); void Erase ( const Handle(SALOME_InteractiveObject)& theIO, const bool forced = false, const bool updateViewer = true, SALOME_View* theViewFrame = 0 ); - void Erase ( GEOM::GEOM_Object_ptr theObj, + void Erase ( GEOM::GEOM_BaseObject_ptr theObj, const bool forced = false, const bool updateViewer = true ); @@ -113,7 +115,8 @@ public: const bool updateViewer = true ); void Redisplay ( const SALOME_ListIO& theIOList, - const bool updateViewer = true ); + const bool updateViewer = true, + const bool checkActiveViewer = true ); /* build presentation accordint to the current viewer type*/ SALOME_Prs* BuildPrs ( GEOM::GEOM_Object_ptr ); @@ -157,6 +160,7 @@ public: virtual void Update( SALOME_VTKPrs* ); virtual void BeforeDisplay( SALOME_View*, const SALOME_OCCPrs* ); virtual void AfterDisplay ( SALOME_View*, const SALOME_OCCPrs* ); + virtual void AfterErase ( SALOME_View*, const SALOME_OCCPrs* ); /* This methos is used for activisation/deactivisation of objects to be displayed*/ void SetToActivate( const bool ); @@ -188,6 +192,9 @@ public: const QString&, SALOME_View* = 0); + /* Update visibility and parameters of the currently selected field step's color scale */ + void UpdateColorScale( const bool theIsRedisplayFieldSteps = false ); + protected: /* internal methods */ /* Builds presentation according to the current viewer type */ @@ -199,6 +206,14 @@ protected: /* Sets shape */ void setShape( const TopoDS_Shape& theShape ); + /* Sets field step information */ + void setFieldStepInfo( const GEOM::field_data_type theFieldDataType, + const int theFieldDimension, + const QList& theFieldStepData, + const TCollection_AsciiString& theFieldStepName, + const double theFieldStepRangeMin, + const double theFieldStepRangeMax ); + /* Resets internal data */ void internalReset(); @@ -214,10 +229,36 @@ protected: PropMap getObjectProperties( SalomeApp_Study*, const QString&, SALOME_View* = 0 ); PropMap getDefaultPropertyMap(); - + + /* Methods for reading the field step information */ + void readFieldStepInfo( GEOM::GEOM_FieldStep_var theGeomFieldStep ); + QList groupFieldData( const QList& theFieldStepData, + const int theFieldNbComponents, + const bool theIsString, + double& theFieldStepRangeMin, + double& theFieldStepRangeMax ); + + // Note: the method is copied from Aspect_ColorScale class + static Standard_Integer HueFromValue( const Standard_Integer aValue, + const Standard_Integer aMin, + const Standard_Integer aMax ); + + // Note: the method is copied from Aspect_ColorScale class + static Standard_Boolean FindColor( const Standard_Real aValue, + const Standard_Real aMin, + const Standard_Real aMax, + const Standard_Integer ColorsCount, + Quantity_Color& aColor ); + protected: Handle(SALOME_InteractiveObject) myIO; TopoDS_Shape myShape; + GEOM::field_data_type myFieldDataType; + int myFieldDimension; + QList myFieldStepData; + TCollection_AsciiString myFieldStepName; + double myFieldStepRangeMin; + double myFieldStepRangeMax; std::string myName; std::string myTexture; int myType; diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 8fb681203..c0b8d2e95 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -3232,6 +3232,35 @@ Please, select face, shell or solid and try again PREF_ISOS_V Along V + + PREF_GROUP_SCALAR_BAR + Scalar bar for field step presentation + + + PREF_SCALAR_BAR_X_POSITION + X position + + + PREF_SCALAR_BAR_Y_POSITION + Y position + + + PREF_SCALAR_BAR_WIDTH + Width + + + PREF_SCALAR_BAR_HEIGHT + Height + + + PREF_SCALAR_BAR_TEXT_HEIGHT + Text height + + + PREF_SCALAR_BAR_NUMBER_OF_INTERVALS + Number of intervals + + PROCESS_SHAPE_NEW_OBJ_NAME ProcessShape diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 2e88829e7..df17cd484 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -1773,6 +1773,7 @@ bool GeometryGUI::activateModule( SUIT_Study* study ) connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() )); connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() )); + connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() )); if ( !myCreationInfoWdg ) myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() ); @@ -1853,6 +1854,7 @@ bool GeometryGUI::deactivateModule( SUIT_Study* study ) LightApp_SelectionMgr* selMrg = getApp()->selectionMgr(); disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() )); + disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() )); getApp()->removeDockWindow( myCreationInfoWdg->getWinID() ); myCreationInfoWdg = 0; @@ -2104,6 +2106,15 @@ void GeometryGUI::onAutoBringToFront() GeometryGUI::Modified(); } +void GeometryGUI::updateFieldColorScale() +{ + if( SalomeApp_Study* aStudy = dynamic_cast( getApp()->activeStudy() ) ) + { + GEOM_Displayer aDisplayer( aStudy ); + aDisplayer.UpdateColorScale(); + } +} + QString GeometryGUI::engineIOR() const { if ( !CORBA::is_nil( GetGeomGen() ) ) @@ -2436,6 +2447,46 @@ void GeometryGUI::createPreferences() setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList ); setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList ); + // Scalar bar for field step presentation + int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId ); + setPreferenceProperty( scalarBarGroup, "columns", 2 ); + + int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup, + LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" ); + setPreferenceProperty( sbXPosition, "min", 0 ); + setPreferenceProperty( sbXPosition, "max", 1 ); + setPreferenceProperty( sbXPosition, "step", 0.05 ); + + int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup, + LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" ); + setPreferenceProperty( sbYPosition, "min", 0 ); + setPreferenceProperty( sbYPosition, "max", 1 ); + setPreferenceProperty( sbYPosition, "step", 0.05 ); + + int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup, + LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" ); + setPreferenceProperty( sbWidth, "min", 0 ); + setPreferenceProperty( sbWidth, "max", 1 ); + setPreferenceProperty( sbWidth, "step", 0.05 ); + + int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup, + LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" ); + setPreferenceProperty( sbHeight, "min", 0 ); + setPreferenceProperty( sbHeight, "max", 1 ); + setPreferenceProperty( sbHeight, "step", 0.05 ); + + int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup, + LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" ); + setPreferenceProperty( sbTextHeight, "min", 6 ); + setPreferenceProperty( sbTextHeight, "max", 24 ); + setPreferenceProperty( sbTextHeight, "step", 1 ); + + int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup, + LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" ); + setPreferenceProperty( sbNbIntervals, "min", 2 ); + setPreferenceProperty( sbNbIntervals, "max", 64 ); + setPreferenceProperty( sbNbIntervals, "step", 1 ); + int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId ); setPreferenceProperty( originGroup, "columns", 2 ); @@ -2469,6 +2520,19 @@ void GeometryGUI::preferencesChanged( const QString& section, const QString& par else if (param == QString("toplevel_dm")) { GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0)); } + else if (param == QString("scalar_bar_x_position") || + param == QString("scalar_bar_y_position") || + param == QString("scalar_bar_width") || + param == QString("scalar_bar_height") || + param == QString("scalar_bar_text_height") || + param == QString("scalar_bar_nb_intervals")) { + if( SalomeApp_Study* aStudy = dynamic_cast( getApp()->activeStudy() ) ) + { + GEOM_Displayer aDisplayer( aStudy ); + bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals"); + aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps ); + } + } } } diff --git a/src/GEOMGUI/GeometryGUI.h b/src/GEOMGUI/GeometryGUI.h index 78eb05db4..3d4af608b 100644 --- a/src/GEOMGUI/GeometryGUI.h +++ b/src/GEOMGUI/GeometryGUI.h @@ -174,6 +174,7 @@ private slots: void updateMaterials(); void updateCreationInfo(); void onAutoBringToFront(); + void updateFieldColorScale(); signals : void SignalDeactivateActiveDialog(); diff --git a/src/OBJECT/GEOM_AISShape.cxx b/src/OBJECT/GEOM_AISShape.cxx index ed3d535e0..e634e8c90 100644 --- a/src/OBJECT/GEOM_AISShape.cxx +++ b/src/OBJECT/GEOM_AISShape.cxx @@ -47,6 +47,8 @@ #include #include #include +#include +#include #include #include @@ -58,6 +60,7 @@ #include #include #include +#include #include #include @@ -142,8 +145,16 @@ static void indicesToOwners( const TColStd_IndexedMapOfInteger& aIndexMap, GEOM_AISShape::GEOM_AISShape(const TopoDS_Shape& shape, const Standard_CString aName) - : SALOME_AISShape(shape), myName(aName), myDisplayVectors(false) + : SALOME_AISShape(shape), + myName(aName), + myDisplayVectors(false), + myFieldDataType(GEOM::FDT_Double), + myFieldDimension(0), + myFieldStepRangeMin(0), + myFieldStepRangeMax(0) { + SetHilightMode( CustomHighlight ); // override setting the mode to 0 inside AIS_Shape constructor + myShadingColor = Quantity_Color( Quantity_NOC_GOLDENROD ); myPrevDisplayMode = 0; storeBoundaryColors(); @@ -203,11 +214,16 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent if (IsInfinite()) aPrs->SetInfiniteState(Standard_True); //pas de prise en compte lors du FITALL Handle(AIS_InteractiveContext) anIC = GetContext(); - + + bool anIsField = !myFieldStepData.isEmpty(); + bool anIsColorField = anIsField && myFieldDataType != GEOM::FDT_String; + bool anIsTextField = anIsField && myFieldDataType == GEOM::FDT_String; + // StdSelect_DisplayMode d = (StdSelect_DisplayMode) aMode; bool isTopLev = isTopLevel() && switchTopLevel(); switch (aMode) { case 0://StdSelect_DM_Wireframe: + case CustomHighlight: { restoreIsoNumbers(); // Restore wireframe edges colors @@ -218,7 +234,10 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent anAspect->SetColor( topLevelColor() ); Attributes()->SetWireAspect( anAspect ); } - StdPrs_WFDeflectionShape::Add(aPrs,myshape,myDrawer); + if( !isTopLev && anIsColorField && myFieldDimension == 1 ) + drawField( aPrs, false, aMode == CustomHighlight ); + else + StdPrs_WFDeflectionShape::Add(aPrs,myshape,myDrawer); break; } case 1://StdSelect_DM_Shading: @@ -264,7 +283,10 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent myDrawer->SetFreeBoundaryAspect( anAspect ); // Add edges to presentation - StdPrs_WFDeflectionShape::Add(aPrs,myshape,myDrawer); + if( anIsColorField && myFieldDimension == 1 ) + drawField( aPrs ); + else + StdPrs_WFDeflectionShape::Add(aPrs,myshape,myDrawer); } if (isShowVectors()) @@ -312,6 +334,15 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent } } } + + // draw color field on vertices + if( anIsColorField && myFieldDimension == 0 && aMode != CustomHighlight ) + drawField( aPrs ); + + // draw text field + if( anIsTextField ) + drawField( aPrs, true ); + // aPrs->ReCompute(); // for hidden line recomputation if necessary... } @@ -383,9 +414,17 @@ void GEOM_AISShape::shadingMode(const Handle(PrsMgr_PresentationManager3d)& aPre myDrawer->ShadingAspect()->SetColor(myDrawer->ShadingAspect()->Aspect()->FrontMaterial().AmbientColor()); } - // PAL12113: AIS_Shape::Compute() works correctly with shapes containing no faces - //StdPrs_ShadedShape::Add(aPrs,myshape,myDrawer); - AIS_Shape::Compute(aPresentationManager, aPrs, aMode); + bool anIsColorField = !myFieldStepData.isEmpty() && myFieldDataType != GEOM::FDT_String; + if( anIsColorField && ( myFieldDimension == 2 || myFieldDimension == 3 || myFieldDimension == -1 ) ) + { + drawField( aPrs ); + } + else + { + // PAL12113: AIS_Shape::Compute() works correctly with shapes containing no faces + //StdPrs_ShadedShape::Add(aPrs,myshape,myDrawer); + AIS_Shape::Compute(aPresentationManager, aPrs, aMode); + } } void GEOM_AISShape::storeIsoNumbers() @@ -492,3 +531,170 @@ Standard_Boolean GEOM_AISShape::switchTopLevel() { Standard_Boolean GEOM_AISShape::toActivate() { return Standard_True; } + +void GEOM_AISShape::setFieldStepInfo( const GEOM::field_data_type theFieldDataType, + const int theFieldDimension, + const QList& theFieldStepData, + const TCollection_AsciiString& theFieldStepName, + const double theFieldStepRangeMin, + const double theFieldStepRangeMax ) +{ + myFieldDataType = theFieldDataType; + myFieldDimension = theFieldDimension; + myFieldStepData = theFieldStepData; + myFieldStepName = theFieldStepName; + myFieldStepRangeMin = theFieldStepRangeMin; + myFieldStepRangeMax = theFieldStepRangeMax; +} + +void GEOM_AISShape::getFieldStepInfo( GEOM::field_data_type& theFieldDataType, + int& theFieldDimension, + QList& theFieldStepData, + TCollection_AsciiString& theFieldStepName, + double& theFieldStepRangeMin, + double& theFieldStepRangeMax ) const +{ + theFieldDataType = myFieldDataType; + theFieldDimension = myFieldDimension; + theFieldStepData = myFieldStepData; + theFieldStepName = myFieldStepName; + theFieldStepRangeMin = myFieldStepRangeMin; + theFieldStepRangeMax = myFieldStepRangeMax; +} + +void GEOM_AISShape::drawField( const Handle(Prs3d_Presentation)& thePrs, + const bool theIsString, + const bool theIsHighlight ) +{ + if( myFieldStepData.isEmpty() ) + return; + + QListIterator aFieldStepDataIter( myFieldStepData ); + + TopAbs_ShapeEnum aShapeType = TopAbs_SHAPE; + switch( myFieldDimension ) + { + case 0: aShapeType = TopAbs_VERTEX; break; + case 1: aShapeType = TopAbs_EDGE; break; + case 2: aShapeType = TopAbs_FACE; break; + case 3: aShapeType = TopAbs_SOLID; break; + case -1: aShapeType = TopAbs_VERTEX; break; + } + + TopTools_IndexedMapOfShape aShapeMap; + TopExp::MapShapes( myshape, aShapeMap ); + + TColStd_IndexedMapOfInteger anIndexMap; + + TopExp_Explorer anExp; + for( anExp.Init( myshape, aShapeType ); anExp.More(); anExp.Next() ) + { + TopoDS_Shape aSubShape = anExp.Current(); + if( !aSubShape.IsNull() ) + { + Standard_Integer aSubShapeIndex = aShapeMap.FindIndex( aSubShape ); + if( anIndexMap.Contains( aSubShapeIndex ) ) + continue; + + anIndexMap.Add( aSubShapeIndex ); + + Handle(Graphic3d_Group) aGroup = Prs3d_Root::NewGroup( thePrs ); + + QColor aQColor; + QString aString; + if( aFieldStepDataIter.hasNext() ) + { + const QVariant& aVariant = aFieldStepDataIter.next(); + if( theIsString ) + aString = aVariant.toString(); + else + aQColor = aVariant.value(); + } + else + break; + + if( theIsString ) + { + gp_Pnt aCenter; + if( computeMassCenter( aSubShape, aCenter ) ) + { + Graphic3d_Vertex aVertex( aCenter.X(), aCenter.Y(), aCenter.Z() ); + + Handle(Graphic3d_AspectText3d) anAspectText3d = new Graphic3d_AspectText3d(); + anAspectText3d->SetStyle( Aspect_TOST_ANNOTATION ); + aGroup->SetPrimitivesAspect( anAspectText3d ); + + aGroup->Text( aString.toLatin1().constData(), aVertex, 14 ); + } + } + else + { + Quantity_Color aColor( aQColor.redF(), aQColor.greenF(), aQColor.blueF(), Quantity_TOC_RGB ); + if( myFieldDimension == 0 ) + { + TopoDS_Vertex aVertexShape = TopoDS::Vertex( aSubShape ); + if( !aVertexShape.IsNull() ) + { + gp_Pnt aPnt = BRep_Tool::Pnt( aVertexShape ); + + Handle(Graphic3d_AspectMarker3d) anAspectMarker3d = new Graphic3d_AspectMarker3d(); + anAspectMarker3d->SetColor( aColor ); + anAspectMarker3d->SetType( Aspect_TOM_POINT ); + anAspectMarker3d->SetScale( 10.0 ); + aGroup->SetPrimitivesAspect( anAspectMarker3d ); + + Handle(Graphic3d_ArrayOfPoints) anArray = new Graphic3d_ArrayOfPoints( 1 ); + anArray->AddVertex( aPnt.X(), aPnt.Y(), aPnt.Z() ); + + aGroup->AddPrimitiveArray( anArray ); + } + } + else if( myFieldDimension == 1 ) + { + myDrawer->WireAspect()->SetColor( aColor ); + if( theIsHighlight ) + myDrawer->WireAspect()->SetWidth( myOwnWidth ); + else + myDrawer->WireAspect()->SetWidth( myOwnWidth + 4 ); + StdPrs_WFDeflectionShape::Add( thePrs, aSubShape, myDrawer ); + } + else if( myFieldDimension == 2 || + myFieldDimension == 3 || + myFieldDimension == -1 ) + { + myDrawer->ShadingAspect()->SetColor( aColor ); + StdPrs_ShadedShape::Add( thePrs, aSubShape, myDrawer ); + } + } + } + } +} + +Standard_Boolean GEOM_AISShape::computeMassCenter( const TopoDS_Shape& theShape, + gp_Pnt& theCenter ) +{ + Standard_Real aX = 0, aY = 0, aZ = 0; + Standard_Integer aNbPoints = 0; + + TopExp_Explorer anExp; + for( anExp.Init( theShape, TopAbs_VERTEX ); anExp.More(); anExp.Next() ) + { + TopoDS_Vertex aVertex = TopoDS::Vertex( anExp.Current() ); + if( !aVertex.IsNull() ) + { + gp_Pnt aPnt = BRep_Tool::Pnt( aVertex ); + aX += aPnt.X(); + aY += aPnt.Y(); + aZ += aPnt.Z(); + aNbPoints++; + } + } + + if( aNbPoints == 0 ) + return Standard_False; + + theCenter.SetCoord( aX / (Standard_Real)aNbPoints, + aY / (Standard_Real)aNbPoints, + aZ / (Standard_Real)aNbPoints ); + return Standard_True; +} diff --git a/src/OBJECT/GEOM_AISShape.hxx b/src/OBJECT/GEOM_AISShape.hxx index db0fe6176..3a61cfed3 100644 --- a/src/OBJECT/GEOM_AISShape.hxx +++ b/src/OBJECT/GEOM_AISShape.hxx @@ -29,6 +29,8 @@ #include "GEOM_OBJECT_defs.hxx" +#include + #ifndef _Standard_HeaderFile #include #endif @@ -60,6 +62,9 @@ #include #include +#include +#include + class PrsMgr_PresentationManager3d; class Prs3d_Presentation; class SALOME_InteractiveObject; @@ -74,7 +79,8 @@ public: //WireFrame, //!< the same as AIS_WireFrame //Shading, //!< the same as AIS_Shaded ShadingWithEdges = AIS_Shaded+1, //!< shading with edges - TexturedShape = ShadingWithEdges+1 //!< the same as AIS_ExactHLR + TexturedShape = ShadingWithEdges+1, //!< the same as AIS_ExactHLR + CustomHighlight = TexturedShape+1 } DispMode; //! Enumeration of top level display modes @@ -149,6 +155,19 @@ public: void setPrevDisplayMode(const Standard_Integer mode); Standard_Integer prevDisplayMode() const {return myPrevDisplayMode;} + // Field step information + void setFieldStepInfo( const GEOM::field_data_type theFieldDataType, + const int theFieldDimension, + const QList& theFieldStepData, + const TCollection_AsciiString& theFieldStepName, + const double theFieldStepRangeMin, + const double theFieldStepRangeMax ); + void getFieldStepInfo( GEOM::field_data_type& theFieldDataType, + int& theFieldDimension, + QList& theFieldStepData, + TCollection_AsciiString& theFieldStepName, + double& theFieldStepRangeMin, + double& theFieldStepRangeMax ) const; protected: void shadingMode(const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, @@ -157,6 +176,15 @@ protected: void restoreBoundaryColors(); + // Displaying the field data + void drawField( const Handle(Prs3d_Presentation)& thePrs, + const bool theIsText = false, + const bool theIsHighlight = false ); + + // Auxiliary method to compute a center of mass for the specified shape + static Standard_Boolean computeMassCenter( const TopoDS_Shape& theShape, + gp_Pnt& theCenter ); + Quantity_Color myShadingColor; Quantity_Color myFreeBoundaryColor; @@ -173,6 +201,13 @@ private: Standard_Boolean myTopLevel; Standard_Integer myPrevDisplayMode; + GEOM::field_data_type myFieldDataType; + int myFieldDimension; + QList myFieldStepData; + TCollection_AsciiString myFieldStepName; + double myFieldStepRangeMin; + double myFieldStepRangeMax; + static TopLevelDispMode myTopLevelDm; static Quantity_Color myTopLevelColor; }; -- 2.39.2