From 4d33eed28b1bdb0f38eacdf021205fbf40a13693 Mon Sep 17 00:00:00 2001 From: ouv Date: Thu, 25 Mar 2010 13:55:29 +0000 Subject: [PATCH] Issue 0020613: EDF 1106 : Modify Node Marker in SMESH and VISU --- doc/salome/gui/SMESH/images/colors_size.png | Bin 0 -> 21537 bytes .../gui/SMESH/images/custom_point_marker.png | Bin 0 -> 8145 bytes .../gui/SMESH/images/point_marker_widget1.png | Bin 0 -> 4405 bytes .../gui/SMESH/images/point_marker_widget2.png | Bin 0 -> 4322 bytes .../gui/SMESH/images/std_point_marker.png | Bin 0 -> 8630 bytes doc/salome/gui/SMESH/input/colors_size.doc | 35 +++ doc/salome/gui/SMESH/input/point_marker.doc | 53 +++++ .../SMESH/input/viewing_meshes_overview.doc | 2 +- resources/SalomeApp.xml | 3 +- src/OBJECT/SMESH_Actor.cxx | 72 +++--- src/OBJECT/SMESH_Actor.h | 3 - src/OBJECT/SMESH_ActorDef.h | 8 +- src/OBJECT/SMESH_DeviceActor.cxx | 59 ++++- src/OBJECT/SMESH_DeviceActor.h | 12 +- src/SMESHGUI/SMESHGUI.cxx | 222 ++++++++++++++++-- src/SMESHGUI/SMESHGUI.h | 5 + .../SMESHGUI_Preferences_ColorDlg.cxx | 99 ++++++-- src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h | 15 +- src/SMESHGUI/SMESHGUI_VTKUtils.cxx | 3 +- src/SMESHGUI/SMESH_msg_en.ts | 12 +- 20 files changed, 509 insertions(+), 94 deletions(-) create mode 100755 doc/salome/gui/SMESH/images/colors_size.png create mode 100755 doc/salome/gui/SMESH/images/custom_point_marker.png create mode 100755 doc/salome/gui/SMESH/images/point_marker_widget1.png create mode 100755 doc/salome/gui/SMESH/images/point_marker_widget2.png create mode 100755 doc/salome/gui/SMESH/images/std_point_marker.png create mode 100644 doc/salome/gui/SMESH/input/colors_size.doc create mode 100644 doc/salome/gui/SMESH/input/point_marker.doc diff --git a/doc/salome/gui/SMESH/images/colors_size.png b/doc/salome/gui/SMESH/images/colors_size.png new file mode 100755 index 0000000000000000000000000000000000000000..58210c0bc7456dbd7555b34dfc34fd6376e70a34 GIT binary patch literal 21537 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 V;Q5Jg`IPWUrBmSLzX3;5FI@lt literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/custom_point_marker.png b/doc/salome/gui/SMESH/images/custom_point_marker.png new file mode 100755 index 0000000000000000000000000000000000000000..a46e33ed99610ecc67111b6c23bad8f3cb2b4be2 GIT binary patch literal 8145 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/point_marker_widget1.png b/doc/salome/gui/SMESH/images/point_marker_widget1.png new file mode 100755 index 0000000000000000000000000000000000000000..13b8e6dab33764fef3c125991f07fe5234819bc7 GIT binary patch literal 4405 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 D>9mWV literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/point_marker_widget2.png b/doc/salome/gui/SMESH/images/point_marker_widget2.png new file mode 100755 index 0000000000000000000000000000000000000000..dbb81b40e5c958d24445a250c540fc82b959a277 GIT binary patch literal 4322 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 C25de6 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/std_point_marker.png b/doc/salome/gui/SMESH/images/std_point_marker.png new file mode 100755 index 0000000000000000000000000000000000000000..2a62693091425f40876265a19662913a1f8e3213 GIT binary patch literal 8630 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/input/colors_size.doc b/doc/salome/gui/SMESH/input/colors_size.doc new file mode 100644 index 000000000..aa244579b --- /dev/null +++ b/doc/salome/gui/SMESH/input/colors_size.doc @@ -0,0 +1,35 @@ +/*! + +\page colors_size_page Colors / Size + +\image html colors_size.png + +Using this dialog you can define the following set of mesh visualization +parameters: +
    +
  • Elements
  • +
      +
    • Fill - color of surface of elements (seen in Shading mode).
    • +
    • Back Face - color of interior surface of elements.
    • +
    • Outline - color of borders of elements.
    • +
    • 0D slements - color of 0D elements.
    • +
    • Size of 0D slements - size of 0D elements.
    • +
    • Width - width of lines (edges and borders of elements).
    • +
    • Shrink coef. - relative space of elements compared to gaps between + them in shrink mode.
    • +
    +
  • Nodes
  • +
      +
    • Color - color of nodes.
    • +
    • Marker - group of options allowing to change the representation of + points (see \subpage point_marker_page "Point Marker" page).
    • +
    +
  • Orientation of faces
  • +
      +
    • Color - color of orientation vertors.
    • +
    • Scale - size of orientation vectors.
    • +
    • 3D vectors - allows to choose between 2D planar and 3D vectors.
    • +
    +
+ +*/ \ No newline at end of file diff --git a/doc/salome/gui/SMESH/input/point_marker.doc b/doc/salome/gui/SMESH/input/point_marker.doc new file mode 100644 index 000000000..c298893ef --- /dev/null +++ b/doc/salome/gui/SMESH/input/point_marker.doc @@ -0,0 +1,53 @@ +/*! + +\page point_marker_page Point Marker + +\n You can change the representation of points in +the 3D viewer either by selecting one of the predefined +shapes or by loading a custom texture from an external file. + +- Standard point markers + +The Mesh module provides a set of predefined point marker shapes +which can be used to display points in 3D viewer. +Each standard point marker has two attributes: type (defines shape +form) and scale factor (defines shape size). + +\image html point_marker_widget1.png + +
+ +\image html std_point_marker.png "Mesh presentation with standard point markers" + +- Custom point markers + +It is also possible to load a point marker shape from an external file. +This file should provide a description of the point texture as a set +of lines; each line is represented as sequence of "0" and "1" symbols, +where "1" symbol means an opaque pixel and "0" symbol means a +transparent pixel. The width of the texture correspond to the length +of the longest line in the file, expanded to the nearest byte-aligned +value. The height of the texture is equal to the number of non-empty +lines in the file. Note that missing symbols are replaced by "0". + +Here is a texture file sample: + +
+00111100
+00111100
+11111111
+11111111
+11111111
+11111111
+00111100
+00111100
+
+ +\image html point_marker_widget2.png + +
+ +\image html custom_point_marker.png "Mesh presentation with custom point markers" + +*/ + diff --git a/doc/salome/gui/SMESH/input/viewing_meshes_overview.doc b/doc/salome/gui/SMESH/input/viewing_meshes_overview.doc index 9039b9365..207c4dda5 100644 --- a/doc/salome/gui/SMESH/input/viewing_meshes_overview.doc +++ b/doc/salome/gui/SMESH/input/viewing_meshes_overview.doc @@ -40,7 +40,7 @@ of quadratic edges as broken lines or as arcs faces of the selected mesh. Vector is shown for each 2D mesh element and for each free face of 3D mesh element. Vector direction is calculated by the first three nodes of face as a cross product of vectors n1-n2 and n1-n3. -
  • Colors / Size - allows to select color and size of +
  • \subpage colors_size_page "Colors / Size" - allows to select color and size of meshes.
  • \subpage transparency_page "Transparency" - allows to change the transparency of mesh elements.
  • diff --git a/resources/SalomeApp.xml b/resources/SalomeApp.xml index 5aa23f063..690895886 100644 --- a/resources/SalomeApp.xml +++ b/resources/SalomeApp.xml @@ -33,7 +33,8 @@ - + + diff --git a/src/OBJECT/SMESH_Actor.cxx b/src/OBJECT/SMESH_Actor.cxx index 16d71448f..cef45817b 100644 --- a/src/OBJECT/SMESH_Actor.cxx +++ b/src/OBJECT/SMESH_Actor.cxx @@ -86,7 +86,6 @@ static int MYDEBUG = 0; #endif static int aLineWidthInc = 2; -static int aPointSizeInc = 2; SMESH_ActorDef* SMESH_ActorDef::New(){ @@ -129,7 +128,6 @@ SMESH_ActorDef::SMESH_ActorDef() if ( mgr && mgr->booleanValue( "SMESH", "use_precision", false ) ) myControlsPrecision = mgr->integerValue( "SMESH", "controls_precision", -1); - vtkFloatingPointType aPointSize = SMESH::GetFloat("SMESH:node_size",3); vtkFloatingPointType aElem0DSize = SMESH::GetFloat("SMESH:elem0d_size",5); vtkFloatingPointType aLineWidth = SMESH::GetFloat("SMESH:element_width",1); @@ -224,7 +222,7 @@ SMESH_ActorDef::SMESH_ActorDef() my1DProp = vtkProperty::New(); my1DProp->DeepCopy(myEdgeProp); my1DProp->SetLineWidth(aLineWidth + aLineWidthInc); - my1DProp->SetPointSize(aPointSize); + my1DProp->SetPointSize(aElem0DSize); my1DExtProp = vtkProperty::New(); my1DExtProp->DeepCopy(myEdgeProp); @@ -233,7 +231,7 @@ SMESH_ActorDef::SMESH_ActorDef() anRGB[2] = 1 - anRGB[2]; my1DExtProp->SetColor(anRGB[0],anRGB[1],anRGB[2]); my1DExtProp->SetLineWidth(aLineWidth + aLineWidthInc); - my1DExtProp->SetPointSize(aPointSize + aPointSizeInc); + my1DExtProp->SetPointSize(aElem0DSize); my1DExtActor = SMESH_DeviceActor::New(); my1DExtActor->SetUserMatrix(aMatrix); @@ -294,7 +292,6 @@ SMESH_ActorDef::SMESH_ActorDef() myNodeProp = vtkProperty::New(); SMESH::GetColor( "SMESH", "node_color", anRGB[0], anRGB[1], anRGB[2], QColor( 255, 0, 0 ) ); myNodeProp->SetColor(anRGB[0],anRGB[1],anRGB[2]); - myNodeProp->SetPointSize(aPointSize); myNodeActor = SMESH_DeviceActor::New(); myNodeActor->SetUserMatrix(aMatrix); @@ -312,7 +309,6 @@ SMESH_ActorDef::SMESH_ActorDef() anRGB[1] = 1 - anRGB[1]; anRGB[2] = 1 - anRGB[2]; myNodeExtProp->SetColor(anRGB[0],anRGB[1],anRGB[2]); - myNodeExtProp->SetPointSize(aPointSize); myNodeExtActor = SMESH_DeviceActor::New(); myNodeExtActor->SetUserMatrix(aMatrix); @@ -342,8 +338,7 @@ SMESH_ActorDef::SMESH_ActorDef() myHighlightProp->SetSpecular(0.0); SMESH::GetColor( "SMESH", "selection_object_color", anRGB[0], anRGB[1], anRGB[2], QColor( 255, 255, 255 ) ); myHighlightProp->SetColor(anRGB[0],anRGB[1],anRGB[2]); - //myHighlightProp->SetPointSize(aPointSize); - myHighlightProp->SetPointSize(std::max(aElem0DSize,aPointSize)); // ?? + myHighlightProp->SetPointSize(aElem0DSize); // ?? myHighlightProp->SetRepresentation(1); myPreselectProp = vtkProperty::New(); @@ -352,8 +347,7 @@ SMESH_ActorDef::SMESH_ActorDef() myPreselectProp->SetSpecular(0.0); SMESH::GetColor( "SMESH", "highlight_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 255, 255 ) ); myPreselectProp->SetColor(anRGB[0],anRGB[1],anRGB[2]); - //myPreselectProp->SetPointSize(aPointSize); - myPreselectProp->SetPointSize(std::max(aElem0DSize,aPointSize)); // ?? + myPreselectProp->SetPointSize(aElem0DSize); // ?? myPreselectProp->SetRepresentation(1); myHighlitableActor = SMESH_DeviceActor::New(); @@ -1012,6 +1006,10 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj, if( dynamic_cast( myVisualObj.get() ) ) SetIsDisplayNameActor( true ); + int aMarkerType = mgr->integerValue( "SMESH", "type_of_marker", 1 ); // dot + int aMarkerScale = mgr->integerValue( "SMESH", "marker_scale", 9 ); // 5 pixels + SetMarkerStd( (VTK::MarkerType)aMarkerType, (VTK::MarkerScale)aMarkerScale ); + myTimeStamp->Modified(); Modified(); return true; @@ -1219,15 +1217,15 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){ my0DActor->VisibilityOn(); } - if(myEntityMode & eEdges){ + if(myEntityMode & eEdges && GetRepresentation() != ePoint){ my1DActor->VisibilityOn(); } - if(myEntityMode & eFaces){ + if(myEntityMode & eFaces && GetRepresentation() != ePoint){ my2DActor->VisibilityOn(); } - if(myEntityMode & eVolumes){ + if(myEntityMode & eVolumes && GetRepresentation() != ePoint){ my3DActor->VisibilityOn(); } @@ -1508,6 +1506,12 @@ void SMESH_ActorDef::UpdateHighlight(){ SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints); myHighlitableActor->SetVisibility(anIsVisible); myHighlitableActor->SetRepresentation(SMESH_DeviceActor::ePoint); + + VTK::MarkerType aMarkerType = GetMarkerType(); + if(aMarkerType != VTK::MT_USER) + myHighlitableActor->SetMarkerStd(aMarkerType, GetMarkerScale()); + else + myHighlitableActor->SetMarkerTexture(GetMarkerTexture(), myMarkerTexture); } } } @@ -1712,35 +1716,8 @@ void SMESH_ActorDef::SetLineWidth(vtkFloatingPointType theVal){ } -void SMESH_ActorDef::SetNodeSize(vtkFloatingPointType theVal){ - myNodeProp->SetPointSize(theVal); - myNodeExtProp->SetPointSize(theVal); - - vtkFloatingPointType aPointSize = my0DProp->GetPointSize() > theVal ? my0DProp->GetPointSize() : theVal; - //myHighlightProp->SetPointSize(theVal); - myHighlightProp->SetPointSize(aPointSize); // ?? - //myPreselectProp->SetPointSize(theVal); - myPreselectProp->SetPointSize(aPointSize); // ?? - - my1DProp->SetPointSize(theVal + aPointSizeInc); - my1DExtProp->SetPointSize(theVal + aPointSizeInc); - - Modified(); -} - -vtkFloatingPointType SMESH_ActorDef::GetNodeSize(){ - return myNodeProp->GetPointSize(); -} - void SMESH_ActorDef::Set0DSize(vtkFloatingPointType theVal){ my0DProp->SetPointSize(theVal); - - vtkFloatingPointType aPointSize = myNodeProp->GetPointSize() > theVal ? myNodeProp->GetPointSize() : theVal; - //myHighlightProp->SetPointSize(theVal); - myHighlightProp->SetPointSize(aPointSize); // ?? - //myPreselectProp->SetPointSize(theVal); - myPreselectProp->SetPointSize(aPointSize); // ?? - Modified(); } @@ -2049,3 +2026,18 @@ SMESH_Actor::EQuadratic2DRepresentation SMESH_ActorDef::GetQuadratic2DRepresenta else return SMESH_Actor::eLines; } + +void SMESH_ActorDef::SetMarkerStd( VTK::MarkerType theMarkerType, VTK::MarkerScale theMarkerScale ) +{ + SALOME_Actor::SetMarkerStd( theMarkerType, theMarkerScale ); + myNodeActor->SetMarkerStd( theMarkerType, theMarkerScale ); + myNodeExtActor->SetMarkerStd( theMarkerType, theMarkerScale ); +} + +void SMESH_ActorDef::SetMarkerTexture( int theMarkerId, VTK::MarkerTexture theMarkerTexture ) +{ + SALOME_Actor::SetMarkerTexture( theMarkerId, theMarkerTexture ); + myNodeActor->SetMarkerTexture( theMarkerId, theMarkerTexture ); + myNodeExtActor->SetMarkerTexture( theMarkerId, theMarkerTexture ); + myMarkerTexture = theMarkerTexture; // for deferred update of myHighlightActor +} diff --git a/src/OBJECT/SMESH_Actor.h b/src/OBJECT/SMESH_Actor.h index fee096c57..6b724cc9e 100644 --- a/src/OBJECT/SMESH_Actor.h +++ b/src/OBJECT/SMESH_Actor.h @@ -72,9 +72,6 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor virtual vtkFloatingPointType GetLineWidth() = 0; virtual void SetLineWidth(vtkFloatingPointType theVal) = 0; - virtual void SetNodeSize(vtkFloatingPointType size) = 0; - virtual vtkFloatingPointType GetNodeSize() = 0; - virtual void Set0DSize(vtkFloatingPointType size) = 0; virtual vtkFloatingPointType Get0DSize() = 0; diff --git a/src/OBJECT/SMESH_ActorDef.h b/src/OBJECT/SMESH_ActorDef.h index 559ffd630..186eee6d8 100644 --- a/src/OBJECT/SMESH_ActorDef.h +++ b/src/OBJECT/SMESH_ActorDef.h @@ -127,9 +127,6 @@ class SMESH_ActorDef : public SMESH_Actor virtual vtkFloatingPointType GetLineWidth(); virtual void SetLineWidth(vtkFloatingPointType theVal); - virtual void SetNodeSize(vtkFloatingPointType size) ; - virtual vtkFloatingPointType GetNodeSize() ; - virtual void Set0DSize(vtkFloatingPointType size); virtual vtkFloatingPointType Get0DSize(); @@ -209,6 +206,9 @@ class SMESH_ActorDef : public SMESH_Actor virtual void SetQuadratic2DRepresentation(EQuadratic2DRepresentation); virtual EQuadratic2DRepresentation GetQuadratic2DRepresentation(); + virtual void SetMarkerStd( VTK::MarkerType, VTK::MarkerScale ); + virtual void SetMarkerTexture( int, VTK::MarkerTexture ); + protected: void SetControlMode(eControl theMode, bool theCheckEntityMode); void SetImplicitFunctionUsed(bool theIsImplicitFunctionUsed); @@ -283,6 +283,8 @@ class SMESH_ActorDef : public SMESH_Actor bool myIsFacesOriented; + VTK::MarkerTexture myMarkerTexture; + SMESH_ActorDef(); ~SMESH_ActorDef(); diff --git a/src/OBJECT/SMESH_DeviceActor.cxx b/src/OBJECT/SMESH_DeviceActor.cxx index f7d455ddb..4bbb7e6d5 100644 --- a/src/OBJECT/SMESH_DeviceActor.cxx +++ b/src/OBJECT/SMESH_DeviceActor.cxx @@ -31,6 +31,7 @@ #include "SMESH_ActorUtils.h" #include "SMESH_FaceOrientationFilter.h" #include "VTKViewer_CellLocationsArray.h" +#include "VTKViewer_PolyDataMapper.h" #include #include @@ -88,7 +89,7 @@ SMESH_DeviceActor myRepresentation = eSurface; myProperty = vtkProperty::New(); - myMapper = vtkPolyDataMapper::New(); + myMapper = VTKViewer_PolyDataMapper::New(); vtkMapper::GetResolveCoincidentTopologyPolygonOffsetParameters(myPolygonOffsetFactor, myPolygonOffsetUnits); @@ -703,6 +704,7 @@ SMESH_DeviceActor myGeomFilter->SetWireframeMode(false); GetProperty()->SetRepresentation(theMode); } + SetMarkerEnabled(theMode == ePoint); myRepresentation = theMode; UpdateFaceOrientation(); GetProperty()->Modified(); @@ -901,3 +903,58 @@ void SMESH_DeviceActor::SetQuadraticArcAngle(vtkFloatingPointType theMaxAngle){ vtkFloatingPointType SMESH_DeviceActor::GetQuadraticArcAngle(){ return myGeomFilter->GetQuadraticArcAngle(); } + +/*! + * Set point marker enabled + * \param theMarkerEnabled flag to enable/disable point marker + */ +void SMESH_DeviceActor::SetMarkerEnabled( bool theMarkerEnabled ) +{ + myMapper->SetMarkerEnabled( theMarkerEnabled ); +} + +/*! + * Set standard point marker + * \param theMarkerType type of the marker + */ +void SMESH_DeviceActor::SetMarkerStd( VTK::MarkerType theMarkerType, VTK::MarkerScale theMarkerScale ) +{ + myMapper->SetMarkerStd( theMarkerType, theMarkerScale ); +} + +/*! + * Set custom point marker + * \param theMarkerId id of the marker texture + * \param theMarkerTexture marker texture + */ +void SMESH_DeviceActor::SetMarkerTexture( int theMarkerId, VTK::MarkerTexture theMarkerTexture ) +{ + myMapper->SetMarkerTexture( theMarkerId, theMarkerTexture ); +} + +/*! + * Get type of the point marker + * \return type of the point marker + */ +VTK::MarkerType SMESH_DeviceActor::GetMarkerType() +{ + return myMapper->GetMarkerType(); +} + +/*! + Get scale of the point marker + \return scale of the point marker +*/ +VTK::MarkerScale SMESH_DeviceActor::GetMarkerScale() +{ + return myMapper->GetMarkerScale(); +} + +/*! + * Get texture identifier of the point marker + * \return texture identifier of the point marker + */ +int SMESH_DeviceActor::GetMarkerTexture() +{ + return myMapper->GetMarkerTexture(); +} diff --git a/src/OBJECT/SMESH_DeviceActor.h b/src/OBJECT/SMESH_DeviceActor.h index 8b2fd6bf7..eb4c45b49 100644 --- a/src/OBJECT/SMESH_DeviceActor.h +++ b/src/OBJECT/SMESH_DeviceActor.h @@ -29,6 +29,7 @@ #define SMESH_DEVICE_ACTOR_H #include +#include #include "SMESH_Controls.hxx" #include "SMESH_Object.h" @@ -39,7 +40,6 @@ class vtkCell; class vtkProperty; class vtkMergeFilter; class vtkShrinkFilter; -class vtkPolyDataMapper; class vtkUnstructuredGrid; class vtkScalarBarActor; class vtkLookupTable; @@ -49,6 +49,7 @@ class vtkPassThroughFilter; class VTKViewer_Transform; class VTKViewer_TransformFilter; class VTKViewer_ExtractUnstructuredGrid; +class VTKViewer_PolyDataMapper; class SMESH_ExtractGeometry; class SMESH_FaceOrientationFilter; @@ -133,11 +134,18 @@ class SMESHOBJECT_EXPORT SMESH_DeviceActor: public vtkLODActor{ void SetImplicitFunctionUsed(bool theIsImplicitFunctionUsed); bool IsImplicitFunctionUsed() const{ return myIsImplicitFunctionUsed;} + void SetMarkerEnabled( bool ); + void SetMarkerStd( VTK::MarkerType, VTK::MarkerScale ); + void SetMarkerTexture( int, VTK::MarkerTexture ); + VTK::MarkerType GetMarkerType(); + VTK::MarkerScale GetMarkerScale(); + int GetMarkerTexture(); + protected: void Init(TVisualObjPtr theVisualObj, vtkImplicitBoolean* theImplicitBoolean); void SetUnstructuredGrid(vtkUnstructuredGrid* theGrid); - vtkPolyDataMapper *myMapper; + VTKViewer_PolyDataMapper *myMapper; TVisualObjPtr myVisualObj; vtkProperty *myProperty; diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index e8c832b83..1ccc5cc65 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -153,7 +153,7 @@ void ExportMeshToFile(int theCommandID); - void SetDisplayMode(int theCommandID); + void SetDisplayMode(int theCommandID, SMESHGUI_StudyId2MarkerMap& theMarkerMap); void SetDisplayEntity(int theCommandID); @@ -716,7 +716,7 @@ } } - void SetDisplayMode(int theCommandID){ + void SetDisplayMode(int theCommandID, SMESHGUI_StudyId2MarkerMap& theMarkerMap){ SALOME_ListIO selected; SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); if( !app ) @@ -814,7 +814,6 @@ int Edgewidth = (int)anActor->GetLineWidth(); if(Edgewidth == 0) Edgewidth = 1; - int intValue = int(anActor->GetNodeSize()); vtkFloatingPointType Shrink = anActor->GetShrinkFactor(); vtkFloatingPointType faces_orientation_color[3]; @@ -836,11 +835,21 @@ aDlg->SetColor(5, c0D); aDlg->SetColor(6, o); aDlg->SetIntValue(1, Edgewidth); - aDlg->SetIntValue(2, intValue); - aDlg->SetIntValue(3, int(Shrink*100.)); - aDlg->SetIntValue(4, size0D); + aDlg->SetIntValue(2, int(Shrink*100.)); + aDlg->SetIntValue(3, size0D); aDlg->SetDoubleValue(1, faces_orientation_scale); aDlg->SetBooleanValue(1, faces_orientation_3dvectors); + + aDlg->setCustomMarkerMap( theMarkerMap[ aStudy->StudyId() ] ); + + VTK::MarkerType aMarkerTypeCurrent = anActor->GetMarkerType(); + VTK::MarkerScale aMarkerScaleCurrent = anActor->GetMarkerScale(); + int aMarkerTextureCurrent = anActor->GetMarkerTexture(); + if( aMarkerTypeCurrent != VTK::MT_USER ) + aDlg->setStandardMarker( aMarkerTypeCurrent, aMarkerScaleCurrent ); + else + aDlg->setCustomMarker( aMarkerTextureCurrent ); + if(aDlg->exec()){ QColor color = aDlg->GetColor(1); QColor edgecolor = aDlg->GetColor(2); @@ -862,20 +871,19 @@ vtkFloatingPointType (edgecolor.blue()) / 255.); /* Shrink factor and size edges */ - anActor->SetShrinkFactor(aDlg->GetIntValue(3) / 100.); + anActor->SetShrinkFactor(aDlg->GetIntValue(2) / 100.); anActor->SetLineWidth(aDlg->GetIntValue(1)); /* Nodes color and size */ anActor->SetNodeColor(vtkFloatingPointType (nodecolor.red()) / 255., vtkFloatingPointType (nodecolor.green()) / 255., vtkFloatingPointType (nodecolor.blue()) / 255.); - anActor->SetNodeSize(aDlg->GetIntValue(2)); /* 0D elements */ anActor->Set0DColor(vtkFloatingPointType (color0D.red()) / 255., vtkFloatingPointType (color0D.green()) / 255., vtkFloatingPointType (color0D.blue()) / 255.); - anActor->Set0DSize(aDlg->GetIntValue(4)); + anActor->Set0DSize(aDlg->GetIntValue(3)); /* Faces orientation */ vtkFloatingPointType c[3] = {vtkFloatingPointType(faces_orientation_color.redF()), @@ -885,6 +893,21 @@ anActor->SetFacesOrientationScale(aDlg->GetDoubleValue(1)); anActor->SetFacesOrientation3DVectors(aDlg->GetBooleanValue(1)); + /* Point marker */ + theMarkerMap[ aStudy->StudyId() ] = aDlg->getCustomMarkerMap(); + + VTK::MarkerType aMarkerTypeNew = aDlg->getMarkerType(); + VTK::MarkerScale aMarkerScaleNew = aDlg->getStandardMarkerScale(); + int aMarkerTextureNew = aDlg->getCustomMarkerID(); + if( aMarkerTypeNew != VTK::MT_USER ) + anActor->SetMarkerStd( aMarkerTypeNew, aMarkerScaleNew ); + else { + const VTK::MarkerMap& aMarkerMap = theMarkerMap[ aStudy->StudyId() ]; + VTK::MarkerMap::const_iterator anIter = aMarkerMap.find( aMarkerTextureNew ); + if( anIter != aMarkerMap.end() ) + anActor->SetMarkerTexture( aMarkerTextureNew, anIter->second.second ); + } + SMESH::SMESH_GroupBase_var aGroupObject = SMESH::IObjectToInterface(IObject); if( !aGroupObject->_is_nil() ) { @@ -1618,13 +1641,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 213: // Nodes case 212: // Nodes case 211: // Nodes - ::SetDisplayMode(theCommandID); + ::SetDisplayMode(theCommandID, myMarkerMap); break; //2D quadratic representation case 231: case 232: - ::SetDisplayMode(theCommandID); + ::SetDisplayMode(theCommandID, myMarkerMap); break; // Display Entity @@ -3797,13 +3820,34 @@ void SMESHGUI::createPreferences() // Mesh tab ------------------------------------------------------------------------ int meshTab = addPreference( tr( "PREF_TAB_MESH" ) ); int nodeGroup = addPreference( tr( "PREF_GROUP_NODES" ), meshTab ); - setPreferenceProperty( nodeGroup, "columns", 2 ); + setPreferenceProperty( nodeGroup, "columns", 3 ); addPreference( tr( "PREF_COLOR" ), nodeGroup, LightApp_Preferences::Color, "SMESH", "node_color" ); - int nodeSz = addPreference( tr( "PREF_SIZE" ), nodeGroup, LightApp_Preferences::IntSpin, "SMESH", "node_size" ); - setPreferenceProperty( nodeSz, "min", 1 ); - setPreferenceProperty( nodeSz, "max", 5 ); + int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), nodeGroup, LightApp_Preferences::Selector, "SMESH", "type_of_marker" ); + + SUIT_ResourceMgr* aResourceMgr = SMESH::GetResourceMgr(this); + QList aMarkerTypeIndicesList; + QList aMarkerTypeIconsList; + for ( int i = VTK::MT_POINT; i < VTK::MT_USER; i++ ) { + QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i ); + QPixmap pixmap = aResourceMgr->loadPixmap( "VTKViewer", tr( qPrintable( icoFile ) ) ); + aMarkerTypeIndicesList << i; + aMarkerTypeIconsList << pixmap; + } + setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList ); + setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList ); + + int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), nodeGroup, LightApp_Preferences::Selector, "SMESH", "marker_scale" ); + + QList aMarkerScaleIndicesList; + QStringList aMarkerScaleValuesList; + for ( int i = VTK::MS_10; i <= VTK::MS_70; i++ ) { + aMarkerScaleIndicesList << i; + aMarkerScaleValuesList << QString::number( (i-(int)VTK::MS_10)*0.5 + 1.0 ); + } + setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList ); + setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList ); int elemGroup = addPreference( tr( "PREF_GROUP_ELEMENTS" ), meshTab ); setPreferenceProperty( elemGroup, "columns", 2 ); @@ -4213,6 +4257,7 @@ SALOMEDS::Color SMESHGUI::getUniqueColor( const QList& theReser const char gSeparator = '_'; // character used to separate parameter names const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b) +const char gPathSep = '|'; // character used to separate paths /*! * \brief Store visual parameters @@ -4238,6 +4283,39 @@ void SMESHGUI::storeVisualParameters (int savePoint) savePoint); _PTR(IParameters) ip = ClientFactory::getIParameters(ap); + // store map of custom markers + const VTK::MarkerMap& aMarkerMap = myMarkerMap[ studyDS->StudyId() ]; + if( !aMarkerMap.empty() ) + { + VTK::MarkerMap::const_iterator anIter = aMarkerMap.begin(); + for( ; anIter != aMarkerMap.end(); anIter++ ) + { + int anId = anIter->first; + VTK::MarkerData aMarkerData = anIter->second; + std::string aMarkerFileName = aMarkerData.first; + VTK::MarkerTexture aMarkerTexture = aMarkerData.second; + if( aMarkerTexture.size() < 3 ) + continue; // should contain at least width, height and the first value + + QString aPropertyName( "texture" ); + aPropertyName += gSeparator; + aPropertyName += QString::number( anId ); + + QString aPropertyValue = aMarkerFileName.c_str(); + aPropertyValue += gPathSep; + + VTK::MarkerTexture::const_iterator aTextureIter = aMarkerTexture.begin(); + ushort aWidth = *aTextureIter++; + ushort aHeight = *aTextureIter++; + aPropertyValue += QString::number( aWidth ); aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aHeight ); aPropertyValue += gDigitsSep; + for( ; aTextureIter != aMarkerTexture.end(); aTextureIter++ ) + aPropertyValue += QString::number( *aTextureIter ); + + ip->setProperty( aPropertyName.toStdString(), aPropertyValue.toStdString() ); + } + } + // viewers counters are used for storing view_numbers in IParameters int vtkViewers = 0; @@ -4345,14 +4423,32 @@ void SMESHGUI::storeVisualParameters (int savePoint) // Sizes of lines and points QString sizeStr ("line"); sizeStr += gDigitsSep; sizeStr += QString::number((int)aSmeshActor->GetLineWidth()); - sizeStr += gDigitsSep; sizeStr += "node"; - sizeStr += gDigitsSep; sizeStr += QString::number((int)aSmeshActor->GetNodeSize()); sizeStr += gDigitsSep; sizeStr += "shrink"; sizeStr += gDigitsSep; sizeStr += QString::number(aSmeshActor->GetShrinkFactor()); param = vtkParam + "Sizes"; ip->setParameter(entry, param, sizeStr.toLatin1().data()); + // Point marker + QString markerStr; + + VTK::MarkerType aMarkerType = aSmeshActor->GetMarkerType(); + if( aMarkerType == VTK::MT_USER ) { + markerStr += "custom"; + markerStr += gDigitsSep; + markerStr += QString::number( aSmeshActor->GetMarkerTexture() ); + } + else { + markerStr += "std"; + markerStr += gDigitsSep; + markerStr += QString::number( (int)aMarkerType ); + markerStr += gDigitsSep; + markerStr += QString::number( (int)aSmeshActor->GetMarkerScale() ); + } + + param = vtkParam + "PointMarker"; + ip->setParameter(entry, param, markerStr.toLatin1().data()); + // Opacity param = vtkParam + "Opacity"; ip->setParameter(entry, param, @@ -4411,6 +4507,63 @@ void SMESHGUI::restoreVisualParameters (int savePoint) savePoint); _PTR(IParameters) ip = ClientFactory::getIParameters(ap); + // restore map of custom markers + VTK::MarkerMap& aMarkerMap = myMarkerMap[ studyDS->StudyId() ]; + + std::vector properties = ip->getProperties(); + for (std::vector::iterator propIt = properties.begin(); propIt != properties.end(); ++propIt) + { + std::string property = *propIt; + QString aPropertyName( property.c_str() ); + QString aPropertyValue( ip->getProperty( property ).c_str() ); + + QStringList aPropertyNameList = aPropertyName.split( gSeparator, QString::SkipEmptyParts ); + if( aPropertyNameList.size() != 2 ) + continue; + + int anId = 0; + bool ok = false; + if( aPropertyNameList[0] == "texture" ) + anId = aPropertyNameList[1].toInt( &ok ); + + if( !ok || anId < 1 ) + continue; + + QStringList aPropertyValueList = aPropertyValue.split( gPathSep, QString::SkipEmptyParts ); + if( aPropertyValueList.size() != 2 ) + continue; + + std::string aMarkerFileName = aPropertyValueList[0].toStdString(); + QString aMarkerTextureString = aPropertyValueList[1]; + QStringList aMarkerTextureStringList = aMarkerTextureString.split( gDigitsSep, QString::SkipEmptyParts ); + if( aMarkerTextureStringList.size() != 3 ) + continue; + + ok = false; + ushort aWidth = aMarkerTextureStringList[0].toUShort( &ok ); + if( !ok ) + continue; + + ok = false; + ushort aHeight = aMarkerTextureStringList[1].toUShort( &ok ); + if( !ok ) + continue; + + VTK::MarkerTexture aMarkerTexture; + aMarkerTexture.push_back( aWidth ); + aMarkerTexture.push_back( aHeight ); + + QString aMarkerTextureData = aMarkerTextureStringList[2]; + for( int i = 0, n = aMarkerTextureData.length(); i < n; i++ ) + { + QChar aChar = aMarkerTextureData.at( i ); + if( aChar.isDigit() ) + aMarkerTexture.push_back( aChar.digitValue() ); + } + + aMarkerMap[ anId ] = VTK::MarkerData( aMarkerFileName, aMarkerTexture ); + } + std::vector entries = ip->getEntries(); for (std::vector::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt) @@ -4557,18 +4710,49 @@ void SMESHGUI::restoreVisualParameters (int savePoint) // Sizes of lines and points else if (paramNameStr == "Sizes") { QStringList sizes = val.split(gDigitsSep, QString::SkipEmptyParts); - if (sizes.count() == 6) { + if (sizes.count() == 4) { + if (sizes[0] != "line" || sizes[2] != "shrink") { + MESSAGE("Invalid order of data in Sizes, must be: " + "line:int:shrink:float"); + } + else { + aSmeshActor->SetLineWidth(sizes[1].toInt()); + aSmeshActor->SetShrinkFactor(sizes[3].toFloat()); + } + } + else if (sizes.count() == 6) { // just to support old format if (sizes[0] != "line" || sizes[2] != "node" || sizes[4] != "shrink") { MESSAGE("Invalid order of data in Sizes, must be: " "line:int:node:int:shrink:float"); } else { aSmeshActor->SetLineWidth(sizes[1].toInt()); - aSmeshActor->SetNodeSize(sizes[3].toInt()); + //aSmeshActor->SetNodeSize(sizes[3].toInt()); // made obsolete aSmeshActor->SetShrinkFactor(sizes[5].toFloat()); } } } + // Point marker + else if (paramNameStr == "PointMarker") { + QStringList data = val.split(gDigitsSep, QString::SkipEmptyParts); + if( data.count() >= 2 ) { + bool ok = false; + int aParam1 = data[1].toInt( &ok ); + if( ok ) { + if( data[0] == "std" && data.count() == 3 ) { + int aParam2 = data[2].toInt( &ok ); + aSmeshActor->SetMarkerStd( (VTK::MarkerType)aParam1, (VTK::MarkerScale)aParam2 ); + } + else if( data[0] == "custom" ) { + VTK::MarkerMap::const_iterator markerIt = aMarkerMap.find( aParam1 ); + if( markerIt != aMarkerMap.end() ) { + VTK::MarkerData aMarkerData = markerIt->second; + aSmeshActor->SetMarkerTexture( aParam1, aMarkerData.second ); + } + } + } + } + } // Opacity else if (paramNameStr == "Opacity") { aSmeshActor->SetOpacity(val.toFloat()); diff --git a/src/SMESHGUI/SMESHGUI.h b/src/SMESHGUI/SMESHGUI.h index 66ac986ec..6b9036e72 100644 --- a/src/SMESHGUI/SMESHGUI.h +++ b/src/SMESHGUI/SMESHGUI.h @@ -31,6 +31,7 @@ // SALOME GUI includes #include +#include #include // IDL includes @@ -52,6 +53,8 @@ class LightApp_SelectionMgr; class SMESHGUI_FilterLibraryDlg; +typedef std::map SMESHGUI_StudyId2MarkerMap; + //================================================================================= // class : SMESHGUI // purpose : @@ -166,6 +169,8 @@ private : LightApp_Displayer* myDisplayer; SMESHGUI_FilterLibraryDlg* myFilterLibraryDlg; + + SMESHGUI_StudyId2MarkerMap myMarkerMap; }; #endif // SMESHGUI_H diff --git a/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx b/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx index 7e0981d63..3b86bb27e 100644 --- a/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx @@ -34,6 +34,7 @@ #include #include #include +#include // Qt includes #include @@ -124,24 +125,26 @@ SMESHGUI_Preferences_ColorDlg::SMESHGUI_Preferences_ColorDlg( SMESHGUI* theModul // ------------------------------- QGroupBox* ButtonGroup2 = new QGroupBox( tr( "Nodes" ), this ); - QHBoxLayout* ButtonGroup2Layout = new QHBoxLayout( ButtonGroup2 ); + QGridLayout* ButtonGroup2Layout = new QGridLayout( ButtonGroup2 ); ButtonGroup2Layout->setSpacing( SPACING ); ButtonGroup2Layout->setMargin( MARGIN ); QLabel* TextLabel_Nodes_Color = new QLabel( tr( "Color" ), ButtonGroup2 ); btnNodeColor = new QtxColorButton( ButtonGroup2 ); - QLabel* TextLabel_Nodes_Size = new QLabel( tr( "Size" ), ButtonGroup2 ); - SpinBox_Nodes_Size = new QSpinBox( ButtonGroup2 ); - SpinBox_Nodes_Size->setRange( 0, 5 ); - SpinBox_Nodes_Size->setSingleStep( 1 ); - SpinBox_Nodes_Size->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - SpinBox_Nodes_Size->setButtonSymbols( QSpinBox::PlusMinus ); + QGroupBox* MarkerGroup = new QGroupBox( tr( "Marker" ), ButtonGroup2 ); + QVBoxLayout* MarkerGroupLayout = new QVBoxLayout( MarkerGroup ); + MarkerGroupLayout->setSpacing( 0 ); + MarkerGroupLayout->setMargin( 0 ); - ButtonGroup2Layout->addWidget( TextLabel_Nodes_Color ); - ButtonGroup2Layout->addWidget( btnNodeColor ); - ButtonGroup2Layout->addWidget( TextLabel_Nodes_Size ); - ButtonGroup2Layout->addWidget( SpinBox_Nodes_Size ); + MarkerWidget = new VTKViewer_MarkerWidget( MarkerGroup ); + + MarkerGroupLayout->addWidget( MarkerWidget ); + + ButtonGroup2Layout->addWidget( TextLabel_Nodes_Color, 0, 0 ); + ButtonGroup2Layout->addWidget( btnNodeColor, 0, 1 ); + ButtonGroup2Layout->addWidget( MarkerGroup, 1, 0, 1, 3 ); + ButtonGroup2Layout->setColumnStretch( 2, 1 ); // ------------------------------- QGroupBox* ButtonGroup3 = new QGroupBox( tr( "Orientation of faces" ), this ); @@ -304,9 +307,8 @@ void SMESHGUI_Preferences_ColorDlg::SetIntValue( int type, int value ) { switch ( type ) { case 1 : SpinBox_Width->setValue( value ); break; // width - case 2 : SpinBox_Nodes_Size->setValue( value ); break; // nodes size = value; break; - case 3 : SpinBox_Shrink->setValue( value ); break; // shrink coeff - case 4 : SpinBox_0DElements_Size->setValue( value ); break; // 0d elements + case 2 : SpinBox_Shrink->setValue( value ); break; // shrink coeff + case 3 : SpinBox_0DElements_Size->setValue( value ); break; // 0d elements default: break; } } @@ -320,9 +322,8 @@ int SMESHGUI_Preferences_ColorDlg::GetIntValue( int type ) int res = 0; switch ( type ) { case 1 : res = SpinBox_Width->value(); break; // width - case 2 : res = SpinBox_Nodes_Size->value(); break; // nodes size - case 3 : res = SpinBox_Shrink->value(); break; // shrink coeff - case 4 : res = SpinBox_0DElements_Size->value(); break; // 0d elements + case 2 : res = SpinBox_Shrink->value(); break; // shrink coeff + case 3 : res = SpinBox_0DElements_Size->value(); break; // 0d elements default: break; } return res; @@ -379,3 +380,67 @@ bool SMESHGUI_Preferences_ColorDlg::GetBooleanValue( int type ) } return res; } + +//================================================================================= +// function : setCustomMarkerMap() +// purpose : +//================================================================================= +void SMESHGUI_Preferences_ColorDlg::setCustomMarkerMap( VTK::MarkerMap theMarkerMap ) +{ + MarkerWidget->setCustomMarkerMap( theMarkerMap ); +} + +//================================================================================= +// function : getCustomMarkerMap() +// purpose : +//================================================================================= +VTK::MarkerMap SMESHGUI_Preferences_ColorDlg::getCustomMarkerMap() +{ + return MarkerWidget->getCustomMarkerMap(); +} + +//================================================================================= +// function : setStandardMarker() +// purpose : +//================================================================================= +void SMESHGUI_Preferences_ColorDlg::setStandardMarker( VTK::MarkerType theMarkerType, + VTK::MarkerScale theMarkerScale ) +{ + MarkerWidget->setStandardMarker( theMarkerType, theMarkerScale ); +} + +//================================================================================= +// function : setCustomMarker() +// purpose : +//================================================================================= +void SMESHGUI_Preferences_ColorDlg::setCustomMarker( int theId ) +{ + MarkerWidget->setCustomMarker( theId ); +} + +//================================================================================= +// function : getMarkerType() +// purpose : +//================================================================================= +VTK::MarkerType SMESHGUI_Preferences_ColorDlg::getMarkerType() const +{ + return MarkerWidget->getMarkerType(); +} + +//================================================================================= +// function : getStandardMarkerScale() +// purpose : +//================================================================================= +VTK::MarkerScale SMESHGUI_Preferences_ColorDlg::getStandardMarkerScale() const +{ + return MarkerWidget->getStandardMarkerScale(); +} + +//================================================================================= +// function : getCustomMarkerID() +// purpose : +//================================================================================= +int SMESHGUI_Preferences_ColorDlg::getCustomMarkerID() const +{ + return MarkerWidget->getCustomMarkerID(); +} diff --git a/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h b/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h index 5b23b4e6b..cf899f3ad 100644 --- a/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h +++ b/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h @@ -29,6 +29,9 @@ // SMESH includes #include "SMESH_SMESHGUI.hxx" +// SALOME GUI includes +#include + // Qt includes #include @@ -38,6 +41,7 @@ class SMESHGUI; class QtxDoubleSpinBox; class QtxIntSpinBox; class QtxColorButton; +class VTKViewer_MarkerWidget; class SMESHGUI_EXPORT SMESHGUI_Preferences_ColorDlg : public QDialog { @@ -56,6 +60,15 @@ public: void SetBooleanValue( int, bool ); bool GetBooleanValue( int ); + void setCustomMarkerMap( VTK::MarkerMap ); + VTK::MarkerMap getCustomMarkerMap(); + + void setStandardMarker( VTK::MarkerType, VTK::MarkerScale ); + void setCustomMarker( int ); + VTK::MarkerType getMarkerType() const; + VTK::MarkerScale getStandardMarkerScale() const; + int getCustomMarkerID() const; + protected: void closeEvent( QCloseEvent* ); @@ -76,7 +89,7 @@ private: QSpinBox* SpinBox_Width; QtxIntSpinBox* SpinBox_Shrink; QtxColorButton* btnNodeColor; - QSpinBox* SpinBox_Nodes_Size; + VTKViewer_MarkerWidget* MarkerWidget; QtxColorButton* btnOrientationColor; QtxDoubleSpinBox* SpinBox_Orientation_Scale; QCheckBox* CheckBox_Orientation_3DVectors; diff --git a/src/SMESHGUI/SMESHGUI_VTKUtils.cxx b/src/SMESHGUI/SMESHGUI_VTKUtils.cxx index ba884ff79..afcea77ca 100644 --- a/src/SMESHGUI/SMESHGUI_VTKUtils.cxx +++ b/src/SMESHGUI/SMESHGUI_VTKUtils.cxx @@ -822,10 +822,9 @@ namespace SMESH 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; + int maxSize = aElem0DSize; if (aElem0DSize > maxSize) maxSize = aElem0DSize; if (aLineWidth > maxSize) maxSize = aLineWidth; if (PW < maxSize + 2) PW = maxSize + 2; diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index 5aa706b4b..7d6253610 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -3278,6 +3278,10 @@ Please, create VTK viewer and try again PREF_LABELS_COLOR Labels color + + PREF_MARKER_SCALE + Scale of marker + PREF_NODES Nodes @@ -3310,10 +3314,6 @@ Please, create VTK viewer and try again PREF_SHRINK_COEFF Shrink coef. - - PREF_SIZE - Size - PREF_TAB_GENERAL General @@ -3330,6 +3330,10 @@ Please, create VTK viewer and try again PREF_TITLE_COLOR Title color + + PREF_TYPE_OF_MARKER + Type of marker + PREF_COLOR_0D 0D elements