1 // VISU OBJECT : interactive object for VISU entities implementation
3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
23 // File: VISU_CutPlanesPL.hxx
24 // Author: Alexey PETROV
27 #ifndef VISU_CutPlanesPL_HeaderFile
28 #define VISU_CutPlanesPL_HeaderFile
30 #include "VISU_ScalarMapPL.hxx"
34 class vtkAppendPolyData;
36 class VISU_CutPlanesPL : public VISU_ScalarMapPL{
39 VISU_CutPlanesPL(const VISU_CutPlanesPL&);
41 vtkTypeMacro(VISU_CutPlanesPL,VISU_ScalarMapPL);
42 static VISU_CutPlanesPL* New();
43 virtual ~VISU_CutPlanesPL();
44 virtual void ShallowCopy(VISU_PipeLine *thePipeLine);
46 enum PlaneOrientation {XY, YZ, ZX};
47 virtual void SetOrientation(const VISU_CutPlanesPL::PlaneOrientation& theOrient,
48 float theXAng, float theYAng, int theNum = 0);
50 virtual const PlaneOrientation& GetPlaneOrientation(int theNum = 0);
51 virtual float GetRotateX(int theNum = 0);
52 virtual float GetRotateY(int theNum = 0);
54 virtual float GetDisplacement(int theNum = 0) { return myDisplacement[theNum];}
55 virtual void SetDisplacement(float theDisp, int theNum = 0) { myDisplacement[theNum] = theDisp;}
57 virtual void SetPartPosition(int thePartNumber, float thePartPosition);
58 virtual float GetPartPosition(int thePartNumber, int theNum = 0);
60 virtual void SetPartDefault(int thePartNumber);
61 virtual int IsPartDefault(int thePartNumber);
63 virtual void SetNbParts(int theNb);
64 virtual int GetNbParts(){ return myNbParts;}
68 virtual void Update();
69 virtual vtkAppendPolyData* GetAppendPolyData() { return myAppendPolyData; }
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);
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]);
79 static void GetDir(float theDir[3],
80 const float theAng[3],
81 const PlaneOrientation& theBasePlane);
83 static void ClearAppendPolyData(vtkAppendPolyData *theAppendPolyData);
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);
93 virtual THook* DoHook();
94 void SetPartPosition(int theNum = 0);
97 PlaneOrientation myBasePlane[2];
98 float myAng[2][3], myDisplacement[2];
99 vtkAppendPolyData *myAppendPolyData;
100 std::vector<float> myPartPosition;
101 std::vector<int> myPartCondition;