1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-09-03 14:10:33 +03:00

0031544: Visualization - show boundaries of faces in shading mode of VTK presentation

This commit is contained in:
vsv
2020-05-08 18:14:49 +03:00
committed by bugmaster
parent 158f2931a7
commit 4db6748cc5
4 changed files with 183 additions and 19 deletions

View File

@@ -35,7 +35,8 @@ vtkStandardNewMacro(IVtkTools_DisplayModeFilter)
//============================================================================
IVtkTools_DisplayModeFilter::IVtkTools_DisplayModeFilter()
: myDisplayMode (DM_Wireframe),
myDoDisplaySharedVertices (false)
myDoDisplaySharedVertices (false),
myDrawFaceBoundaries( false )
{
// Filter according to values in subshapes types array.
myIdsArrayName = IVtkVTK_ShapeData::ARRNAME_MESH_TYPES();
@@ -49,20 +50,22 @@ IVtkTools_DisplayModeFilter::IVtkTools_DisplayModeFilter()
aTypes.Add (MT_SharedEdge);
aTypes.Add (MT_WireFrameFace);
myModesDefinition.Bind (DM_Wireframe, aTypes);
myModesDefinition[DM_Wireframe] = aTypes;
aTypes.Clear();
aTypes.Add (MT_FreeVertex);
aTypes.Add (MT_ShadedFace);
myModesDefinition.Bind (DM_Shading, aTypes);
myModesDefinition[DM_Shading] = aTypes;
}
//============================================================================
// Method: Destructor
// Purpose:
//============================================================================
IVtkTools_DisplayModeFilter::~IVtkTools_DisplayModeFilter() { }
IVtkTools_DisplayModeFilter::~IVtkTools_DisplayModeFilter()
{
}
//============================================================================
// Method: RequestData
@@ -73,7 +76,7 @@ int IVtkTools_DisplayModeFilter::RequestData (vtkInformation *theRequest,
vtkInformationVector **theInputVector,
vtkInformationVector *theOutputVector)
{
SetData (myModesDefinition.Find (myDisplayMode));
SetData (myModesDefinition[myDisplayMode]);
return Superclass::RequestData (theRequest, theInputVector, theOutputVector);
}
@@ -104,24 +107,20 @@ void IVtkTools_DisplayModeFilter::SetDisplaySharedVertices (const bool theDoDisp
if (myDoDisplaySharedVertices != theDoDisplay)
{
myDoDisplaySharedVertices = theDoDisplay;
vtkIdType aVertexType = MT_SharedVertex;
NCollection_DataMap<IVtk_DisplayMode, IVtk_IdTypeMap>::Iterator aModes (myModesDefinition);
NCollection_DataMap<IVtk_DisplayMode, IVtk_IdTypeMap> aNewModes;
IVtk_IdTypeMap aModeTypes;
for (; aModes.More(); aModes.Next())
for (int i = 0; i < 2; i++)
{
aModeTypes = aModes.Value();
if (theDoDisplay && !aModeTypes.Contains(aVertexType))
aModeTypes = myModesDefinition[i];
if (theDoDisplay && !aModeTypes.Contains(MT_SharedVertex))
{
aModeTypes.Add (aVertexType);
aModeTypes.Add (MT_SharedVertex);
}
else if (!theDoDisplay && aModeTypes.Contains (aVertexType))
else if (!theDoDisplay && aModeTypes.Contains (MT_SharedVertex))
{
aModeTypes.Remove (aVertexType);
aModeTypes.Remove (MT_SharedVertex);
}
aNewModes.Bind (aModes.Key(), aModeTypes);
myModesDefinition[i] = aModeTypes;
}
myModesDefinition = aNewModes;
Modified();
}
}
@@ -148,3 +147,39 @@ IVtk_DisplayMode IVtkTools_DisplayModeFilter::GetDisplayMode () const
return myDisplayMode;
}
//============================================================================
// Method: meshTypesForMode
// Purpose:
//============================================================================
const IVtk_IdTypeMap& IVtkTools_DisplayModeFilter::MeshTypesForMode(IVtk_DisplayMode theMode) const
{
return myModesDefinition[theMode];
}
//============================================================================
// Method: setMeshTypesForMode
// Purpose:
//============================================================================
void IVtkTools_DisplayModeFilter::SetMeshTypesForMode(IVtk_DisplayMode theMode, const IVtk_IdTypeMap& theMeshTypes)
{
myModesDefinition[theMode] = theMeshTypes;
Modified();
}
//============================================================================
// Method: SetFaceBoundaryDraw
// Purpose:
//============================================================================
void IVtkTools_DisplayModeFilter::SetFaceBoundaryDraw(bool theToDraw)
{
myDrawFaceBoundaries = theToDraw;
if (theToDraw) {
myModesDefinition[DM_Shading].Add(MT_BoundaryEdge);
myModesDefinition[DM_Shading].Add(MT_SharedEdge);
}
else {
myModesDefinition[DM_Shading].Remove(MT_BoundaryEdge);
myModesDefinition[DM_Shading].Remove(MT_SharedEdge);
}
Modified();
}

View File

@@ -46,6 +46,18 @@ public:
//! Get current display mode.
IVtk_DisplayMode GetDisplayMode() const;
//! Returns list of displaying mesh element types for the given display mode
const IVtk_IdTypeMap& MeshTypesForMode(IVtk_DisplayMode theMode) const;
//! Set a list of displaying mesh element types for the given display mode
void SetMeshTypesForMode(IVtk_DisplayMode theMode, const IVtk_IdTypeMap& theMeshTypes);
//! Draw Boundary of faces for shading mode
void SetFaceBoundaryDraw(bool theToDraw);
//! Returns True if drawing Boundary of faces for shading mode is defined.
bool FaceBoundaryDraw() const { return myDrawFaceBoundaries; }
protected:
//! Filter cells according to the given set of ids.
virtual int RequestData (vtkInformation *, vtkInformationVector **, vtkInformationVector *);
@@ -55,9 +67,12 @@ protected:
protected:
//! Display mode defining mesh types to pass through this filter.
IVtk_DisplayMode myDisplayMode;
NCollection_DataMap<IVtk_DisplayMode, IVtk_IdTypeMap> myModesDefinition;
bool myDoDisplaySharedVertices;
IVtk_DisplayMode myDisplayMode;
IVtk_IdTypeMap myModesDefinition[2];
bool myDoDisplaySharedVertices;
//! Draw Face boundaries flag is applicable only for shading display mode.
bool myDrawFaceBoundaries;
};
#ifdef _MSC_VER