Salome HOME
Fix for Bug IPAL8945
[modules/visu.git] / src / PIPELINE / VISU_CutPlanesPL.hxx
1 //  VISU OBJECT : interactive object for VISU entities implementation
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 //  This library is free software; you can redistribute it and/or
7 //  modify it under the terms of the GNU Lesser General Public
8 //  License as published by the Free Software Foundation; either
9 //  version 2.1 of the License.
10 //
11 //  This library is distributed in the hope that it will be useful,
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 //  Lesser General Public License for more details.
15 //
16 //  You should have received a copy of the GNU Lesser General Public
17 //  License along with this library; if not, write to the Free Software
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
21 //
22 //
23 // File:    VISU_CutPlanesPL.hxx
24 // Author:  Alexey PETROV
25 // Module : VISU
26
27 #ifndef VISU_CutPlanesPL_HeaderFile
28 #define VISU_CutPlanesPL_HeaderFile
29
30 #include "VISU_ScalarMapPL.hxx"
31
32 #include <vector>
33
34 class vtkAppendPolyData;
35
36 class VISU_CutPlanesPL : public VISU_ScalarMapPL{
37 protected:
38   VISU_CutPlanesPL();
39   VISU_CutPlanesPL(const VISU_CutPlanesPL&);
40 public:
41   vtkTypeMacro(VISU_CutPlanesPL,VISU_ScalarMapPL);
42   static VISU_CutPlanesPL* New();
43   virtual ~VISU_CutPlanesPL();
44   virtual void ShallowCopy(VISU_PipeLine *thePipeLine);
45
46   enum PlaneOrientation {XY, YZ, ZX};
47   virtual void SetOrientation(const VISU_CutPlanesPL::PlaneOrientation& theOrient,
48                               float theXAng, float theYAng, int theNum = 0);
49
50   virtual const PlaneOrientation& GetPlaneOrientation(int theNum = 0);
51   virtual float GetRotateX(int theNum = 0);
52   virtual float GetRotateY(int theNum = 0);
53
54   virtual float GetDisplacement(int theNum = 0) { return myDisplacement[theNum];}
55   virtual void SetDisplacement(float theDisp, int theNum = 0) { myDisplacement[theNum] = theDisp;}
56
57   virtual void SetPartPosition(int thePartNumber, float thePartPosition);
58   virtual float GetPartPosition(int thePartNumber, int theNum = 0);
59
60   virtual void SetPartDefault(int thePartNumber);
61   virtual int IsPartDefault(int thePartNumber);
62
63   virtual void SetNbParts(int theNb);
64   virtual int GetNbParts(){ return myNbParts;}
65
66 public:
67   virtual void Init();
68   virtual void Update();
69   virtual vtkAppendPolyData* GetAppendPolyData() { return myAppendPolyData; }
70
71 public:
72   static float* GetRx(float theRx[3][3], float thaAng);
73   static float* GetRy(float theRy[3][3], float thaAng);
74   static float* GetRz(float theRz[3][3], float thaAng);
75
76   static void CorrectPnt(float thePnt[3], const float BoundPrj[6]);
77   static void GetBoundProject(float BoundPrj[3], const float BoundBox[6], const float Dir[3]);
78
79   static void GetDir(float theDir[3],
80                      const float theAng[3],
81                      const PlaneOrientation& theBasePlane);
82
83   static void ClearAppendPolyData(vtkAppendPolyData *theAppendPolyData);
84
85   static void CutWithPlane(vtkAppendPolyData* theAppendPolyData, vtkDataSet* theDataSet,
86                            float theDir[3], float theOrig[3]);
87   static void CutWithPlanes(vtkAppendPolyData* theAppendPolyData, vtkDataSet* theDataSet,
88                             int theNbPlanes, float theDir[3], float theBounds[6],
89                             const std::vector<float>& thePlanePosition,
90                             const std::vector<int>& thePlaneCondition,
91                             float theDisplacement);
92 protected:
93   virtual THook* DoHook();
94   void SetPartPosition(int theNum = 0);
95
96   int myNbParts;
97   PlaneOrientation myBasePlane[2];
98   float myAng[2][3], myDisplacement[2];
99   vtkAppendPolyData *myAppendPolyData;
100   std::vector<float> myPartPosition;
101   std::vector<int> myPartCondition;
102 };
103
104 #endif