- QColor aHiColor = mgr->colorValue( "SMESH", "SettingsSelectColor", Qt::white ),
- aSelColor = mgr->colorValue( "SMESH", "SettingsItemSelectColor", Qt::yellow ),
- aPreColor = mgr->colorValue( "SMESH", "SettingsPreSelectColor", Qt::cyan );
-
- int SW = mgr->integerValue( "SMESH", "SettingsItemSelectWidth", 5 ),
- PW = mgr->integerValue( "SMESH", "SettingsPreSelectWidth", 5 );
-
- double SP1 = mgr->doubleValue( "SMESH", "SettingsNodeSelectTol", 0.025 ),
- SP2 = mgr->doubleValue( "SMESH", "SettingsElementsSelectTol", 0.001 );
-
- for ( int i=0, n=views.count(); i<n; i++ ) {
- SVTK_ViewWindow* aVtkView = GetVtkViewWindow( views[i] );
- if (!aVtkView) continue;
- // update VTK viewer properties
- SVTK_RenderWindowInteractor* anInteractor = aVtkView->getRWInteractor();
- if (anInteractor) {
- // mesh element selection
- anInteractor->SetSelectionProp(aSelColor.red()/255., aSelColor.green()/255.,
- aSelColor.blue()/255., SW );
-
- // tolerances
- anInteractor->SetSelectionTolerance(SP1, SP2);
-
- // pre-selection
- SVTK_InteractorStyle* aStyle =
- dynamic_cast<SVTK_InteractorStyle*>( anInteractor->GetInteractorStyle() );
- if (aStyle) {
- aStyle->setPreselectionProp(aPreColor.red()/255., aPreColor.green()/255.,
- aPreColor.blue()/255., PW);
- }
- }
- // update actors
- vtkRenderer* aRenderer = aVtkView->getRenderer();
- vtkActorCollection *aCollection = aRenderer->GetActors();
- aCollection->InitTraversal();
- while(vtkActor *anAct = aCollection->GetNextActor()){
- if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
- anActor->SetHighlightColor(aHiColor.red()/255., aHiColor.green()/255.,
- aHiColor.blue()/255.);
- anActor->SetPreHighlightColor(aPreColor.red()/255., aPreColor.green()/255.,
- aPreColor.blue()/255.);
- }
- }
+ QColor aHiColor = mgr->colorValue( "SMESH", "selection_object_color", Qt::white ),
+ aSelColor = mgr->colorValue( "SMESH", "selection_element_color", Qt::yellow ),
+ aPreColor = mgr->colorValue( "SMESH", "highlight_color", Qt::cyan );
+
+ int SW = mgr->integerValue( "SMESH", "selection_width", 5 ),
+ PW = mgr->integerValue( "SMESH", "highlight_width", 5 );
+
+ // adjust highlight_width to the width of mesh entities
+ int aPointSize = mgr->integerValue("SMESH", "node_size", 3);
+ int aElem0DSize = mgr->integerValue("SMESH", "elem0d_size", 5);
+ int aLineWidth = mgr->integerValue("SMESH", "element_width", 1);
+ int maxSize = aPointSize;
+ if (aElem0DSize > maxSize) maxSize = aElem0DSize;
+ if (aLineWidth > maxSize) maxSize = aLineWidth;
+ if (PW < maxSize + 2) PW = maxSize + 2;
+
+ double SP1 = mgr->doubleValue( "SMESH", "selection_precision_node", 0.025 ),
+ SP2 = mgr->doubleValue( "SMESH", "selection_precision_element", 0.001 ),
+ SP3 = mgr->doubleValue( "SMESH", "selection_precision_object", 0.025 );
+
+ for ( int i=0, n=views.count(); i<n; i++ ){
+ // update VTK viewer properties
+ if(SVTK_ViewWindow* aVtkView = GetVtkViewWindow( views[i] )){
+ // mesh element selection
+ aVtkView->SetSelectionProp(aSelColor.red()/255.,
+ aSelColor.green()/255.,
+ aSelColor.blue()/255.,
+ SW );
+ // tolerances
+ aVtkView->SetSelectionTolerance(SP1, SP2, SP3);
+
+ // pre-selection
+ aVtkView->SetPreselectionProp(aPreColor.red()/255.,
+ aPreColor.green()/255.,
+ aPreColor.blue()/255.,
+ PW);
+ // update actors
+ vtkRenderer* aRenderer = aVtkView->getRenderer();
+ VTK::ActorCollectionCopy aCopy(aRenderer->GetActors());
+ vtkActorCollection *aCollection = aCopy.GetActors();
+ aCollection->InitTraversal();
+ while(vtkActor *anAct = aCollection->GetNextActor()){
+ if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
+ anActor->SetHighlightColor(aHiColor.red()/255.,
+ aHiColor.green()/255.,
+ aHiColor.blue()/255.);
+ anActor->SetPreHighlightColor(aPreColor.red()/255.,
+ aPreColor.green()/255.,
+ aPreColor.blue()/255.);
+ }
+ }
+ }