0031573: Visualization - Do not show seam edge for shading presentation with boundary...
[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_SeamEdge);
52   aTypes.Add (MT_WireFrameFace);
53
54   myModesDefinition[DM_Wireframe] = aTypes;
55
56   aTypes.Clear();
57   aTypes.Add (MT_FreeVertex);
58   aTypes.Add (MT_ShadedFace);
59
60   myModesDefinition[DM_Shading] = aTypes;
61 }
62
63 //============================================================================
64 // Method: Destructor
65 // Purpose:
66 //============================================================================
67 IVtkTools_DisplayModeFilter::~IVtkTools_DisplayModeFilter()
68 {
69 }
70
71 //============================================================================
72 // Method: RequestData
73 // Purpose: Filters cells according to the selected display mode by mesh
74 //          parts types.
75 //============================================================================
76 int IVtkTools_DisplayModeFilter::RequestData (vtkInformation        *theRequest,
77                                               vtkInformationVector **theInputVector,
78                                               vtkInformationVector  *theOutputVector)
79 {
80   SetData (myModesDefinition[myDisplayMode]);
81   return Superclass::RequestData (theRequest, theInputVector, theOutputVector);
82 }
83
84 //============================================================================
85 // Method: PrintSelf
86 // Purpose:
87 //============================================================================
88 void IVtkTools_DisplayModeFilter::PrintSelf (std::ostream& theOs, vtkIndent theIndent)
89 {
90   this->Superclass::PrintSelf (theOs, theIndent);
91   theOs << theIndent << "IVtkTools_DisplayModeFilter: display mode = ";
92   if (myDisplayMode == DM_Wireframe)
93   {
94     theOs << "Wireframe\n";
95   }
96   else
97   {
98     theOs << "Shading\n";
99   }
100 }
101
102 //============================================================================
103 // Method: SetDisplaySharedVertices
104 // Purpose:
105 //============================================================================
106 void IVtkTools_DisplayModeFilter::SetDisplaySharedVertices (const bool theDoDisplay)
107 {
108   if (myDoDisplaySharedVertices != theDoDisplay)
109   {
110     myDoDisplaySharedVertices = theDoDisplay;
111     IVtk_IdTypeMap aModeTypes;
112     for (int i = 0; i < 2; i++)
113     {
114       aModeTypes = myModesDefinition[i];
115       if (theDoDisplay && !aModeTypes.Contains(MT_SharedVertex))
116       {
117         aModeTypes.Add (MT_SharedVertex);
118       }
119       else if (!theDoDisplay && aModeTypes.Contains (MT_SharedVertex))
120       {
121         aModeTypes.Remove (MT_SharedVertex);
122       }
123       myModesDefinition[i] = aModeTypes;
124     }
125     Modified();
126   }
127 }
128
129 //============================================================================
130 // Method: SetDisplayMode
131 // Purpose:
132 //============================================================================
133 void IVtkTools_DisplayModeFilter::SetDisplayMode(const IVtk_DisplayMode theMode)
134 {
135   if (myDisplayMode != theMode)
136   {
137     myDisplayMode = theMode;
138     Modified();
139   }
140 }
141
142 //============================================================================
143 // Method: GetDisplayMode
144 // Purpose:
145 //============================================================================
146 IVtk_DisplayMode IVtkTools_DisplayModeFilter::GetDisplayMode () const
147 {
148   return myDisplayMode;
149 }
150
151 //============================================================================
152 // Method: meshTypesForMode
153 // Purpose:
154 //============================================================================
155 const IVtk_IdTypeMap& IVtkTools_DisplayModeFilter::MeshTypesForMode(IVtk_DisplayMode theMode) const
156 {
157   return myModesDefinition[theMode];
158 }
159
160 //============================================================================
161 // Method: setMeshTypesForMode
162 // Purpose:
163 //============================================================================
164 void IVtkTools_DisplayModeFilter::SetMeshTypesForMode(IVtk_DisplayMode theMode, const IVtk_IdTypeMap& theMeshTypes)
165 {
166   myModesDefinition[theMode] = theMeshTypes;
167   Modified();
168 }
169
170 //============================================================================
171 // Method: SetFaceBoundaryDraw
172 // Purpose:
173 //============================================================================
174 void IVtkTools_DisplayModeFilter::SetFaceBoundaryDraw(bool theToDraw)
175 {
176   myDrawFaceBoundaries = theToDraw;
177   if (theToDraw) {
178     myModesDefinition[DM_Shading].Add(MT_BoundaryEdge);
179     myModesDefinition[DM_Shading].Add(MT_SharedEdge);
180   }
181   else {
182     myModesDefinition[DM_Shading].Remove(MT_BoundaryEdge);
183     myModesDefinition[DM_Shading].Remove(MT_SharedEdge);
184   }
185   Modified();
186 }