0031544: Visualization - show boundaries of faces in shading mode of VTK presentation
[occt.git] / src / IVtkTools / IVtkTools_DisplayModeFilter.cxx
1 // Created on: 2011-11-15 
2 // Created by: Roman KOZLOV
3 // Copyright (c) 2001-2012 OPEN CASCADE SAS 
4 // 
5 //This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 #include <IVtkTools_DisplayModeFilter.hxx>
17 #include <IVtkVTK_ShapeData.hxx>
18
19 // prevent disabling some MSVC warning messages by VTK headers 
20 #ifdef _MSC_VER
21 #pragma warning(push)
22 #endif
23 #include <vtkInformation.h>
24 #include <vtkInformationVector.h>
25 #include <vtkObjectFactory.h>
26 #ifdef _MSC_VER
27 #pragma warning(pop)
28 #endif
29
30 vtkStandardNewMacro(IVtkTools_DisplayModeFilter)
31
32 //============================================================================
33 // Method: Constructor
34 // Purpose:
35 //============================================================================
36 IVtkTools_DisplayModeFilter::IVtkTools_DisplayModeFilter()
37   : myDisplayMode (DM_Wireframe),
38     myDoDisplaySharedVertices (false),
39   myDrawFaceBoundaries( false )
40 {
41   // Filter according to values in subshapes types array.
42   myIdsArrayName = IVtkVTK_ShapeData::ARRNAME_MESH_TYPES();
43
44   IVtk_IdTypeMap aTypes;
45
46   aTypes.Add (MT_IsoLine);
47   aTypes.Add (MT_FreeVertex);
48   aTypes.Add (MT_FreeEdge);
49   aTypes.Add (MT_BoundaryEdge);
50   aTypes.Add (MT_SharedEdge);
51   aTypes.Add (MT_WireFrameFace);
52
53   myModesDefinition[DM_Wireframe] = aTypes;
54
55   aTypes.Clear();
56   aTypes.Add (MT_FreeVertex);
57   aTypes.Add (MT_ShadedFace);
58
59   myModesDefinition[DM_Shading] = aTypes;
60 }
61
62 //============================================================================
63 // Method: Destructor
64 // Purpose:
65 //============================================================================
66 IVtkTools_DisplayModeFilter::~IVtkTools_DisplayModeFilter()
67 {
68 }
69
70 //============================================================================
71 // Method: RequestData
72 // Purpose: Filters cells according to the selected display mode by mesh
73 //          parts types.
74 //============================================================================
75 int IVtkTools_DisplayModeFilter::RequestData (vtkInformation        *theRequest,
76                                               vtkInformationVector **theInputVector,
77                                               vtkInformationVector  *theOutputVector)
78 {
79   SetData (myModesDefinition[myDisplayMode]);
80   return Superclass::RequestData (theRequest, theInputVector, theOutputVector);
81 }
82
83 //============================================================================
84 // Method: PrintSelf
85 // Purpose:
86 //============================================================================
87 void IVtkTools_DisplayModeFilter::PrintSelf (std::ostream& theOs, vtkIndent theIndent)
88 {
89   this->Superclass::PrintSelf (theOs, theIndent);
90   theOs << theIndent << "IVtkTools_DisplayModeFilter: display mode = ";
91   if (myDisplayMode == DM_Wireframe)
92   {
93     theOs << "Wireframe\n";
94   }
95   else
96   {
97     theOs << "Shading\n";
98   }
99 }
100
101 //============================================================================
102 // Method: SetDisplaySharedVertices
103 // Purpose:
104 //============================================================================
105 void IVtkTools_DisplayModeFilter::SetDisplaySharedVertices (const bool theDoDisplay)
106 {
107   if (myDoDisplaySharedVertices != theDoDisplay)
108   {
109     myDoDisplaySharedVertices = theDoDisplay;
110     IVtk_IdTypeMap aModeTypes;
111     for (int i = 0; i < 2; i++)
112     {
113       aModeTypes = myModesDefinition[i];
114       if (theDoDisplay && !aModeTypes.Contains(MT_SharedVertex))
115       {
116         aModeTypes.Add (MT_SharedVertex);
117       }
118       else if (!theDoDisplay && aModeTypes.Contains (MT_SharedVertex))
119       {
120         aModeTypes.Remove (MT_SharedVertex);
121       }
122       myModesDefinition[i] = aModeTypes;
123     }
124     Modified();
125   }
126 }
127
128 //============================================================================
129 // Method: SetDisplayMode
130 // Purpose:
131 //============================================================================
132 void IVtkTools_DisplayModeFilter::SetDisplayMode(const IVtk_DisplayMode theMode)
133 {
134   if (myDisplayMode != theMode)
135   {
136     myDisplayMode = theMode;
137     Modified();
138   }
139 }
140
141 //============================================================================
142 // Method: GetDisplayMode
143 // Purpose:
144 //============================================================================
145 IVtk_DisplayMode IVtkTools_DisplayModeFilter::GetDisplayMode () const
146 {
147   return myDisplayMode;
148 }
149
150 //============================================================================
151 // Method: meshTypesForMode
152 // Purpose:
153 //============================================================================
154 const IVtk_IdTypeMap& IVtkTools_DisplayModeFilter::MeshTypesForMode(IVtk_DisplayMode theMode) const
155 {
156   return myModesDefinition[theMode];
157 }
158
159 //============================================================================
160 // Method: setMeshTypesForMode
161 // Purpose:
162 //============================================================================
163 void IVtkTools_DisplayModeFilter::SetMeshTypesForMode(IVtk_DisplayMode theMode, const IVtk_IdTypeMap& theMeshTypes)
164 {
165   myModesDefinition[theMode] = theMeshTypes;
166   Modified();
167 }
168
169 //============================================================================
170 // Method: SetFaceBoundaryDraw
171 // Purpose:
172 //============================================================================
173 void IVtkTools_DisplayModeFilter::SetFaceBoundaryDraw(bool theToDraw)
174 {
175   myDrawFaceBoundaries = theToDraw;
176   if (theToDraw) {
177     myModesDefinition[DM_Shading].Add(MT_BoundaryEdge);
178     myModesDefinition[DM_Shading].Add(MT_SharedEdge);
179   }
180   else {
181     myModesDefinition[DM_Shading].Remove(MT_BoundaryEdge);
182     myModesDefinition[DM_Shading].Remove(MT_SharedEdge);
183   }
184   Modified();
185 }