2 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
3 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 // This library is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU Lesser General Public
7 // License as published by the Free Software Foundation; either
8 // version 2.1 of the License.
10 // This library is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 // Lesser General Public License for more details.
15 // You should have received a copy of the GNU Lesser General Public
16 // License along with this library; if not, write to the Free Software
17 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
22 // File: VISU_PipeLine.cxx
23 // Author: Alexey PETROV
27 #include "VISU_CutLinesPL.hxx"
28 #include "VISU_PipeLineUtils.hxx"
29 #include "VTKViewer_GeometryFilter.h"
31 #include <vtkAppendPolyData.h>
35 vtkStandardNewMacro(VISU_CutLinesPL);
37 VISU_CutLinesPL::VISU_CutLinesPL(){
42 void VISU_CutLinesPL::ShallowCopy(VISU_PipeLine *thePipeLine){
43 if(VISU_CutLinesPL *aPipeLine = dynamic_cast<VISU_CutLinesPL*>(thePipeLine)){
44 SetOrientation(aPipeLine->GetPlaneOrientation(1),
45 aPipeLine->GetRotateX(1),aPipeLine->GetRotateY(1),1);
46 SetDisplacement(aPipeLine->GetDisplacement(1),1);
48 if (!aPipeLine->IsDefault()) SetPosition(aPipeLine->GetPosition());
50 VISU_CutPlanesPL::ShallowCopy(thePipeLine);
53 void VISU_CutLinesPL::Init(){
54 VISU_CutPlanesPL::Init();
58 myDisplacement[0] = myDisplacement[1] = 0.5;
59 myAng[0][0] = myAng[0][1] = myAng[0][2] = 0.0;
60 myAng[1][0] = myAng[1][1] = myAng[1][2] = 0.0;
67 void VISU_CutLinesPL::SetPosition(float thePosition){
68 myPosition = thePosition;
72 float VISU_CutLinesPL::GetPosition(){
73 float aPosition = myPosition;
75 float aDir[3], aBounds[6], aBoundPrj[3];
76 GetInput2()->GetBounds(aBounds);
77 GetDir(aDir,myAng[0],myBasePlane[0]);
78 GetBoundProject(aBoundPrj,aBounds,aDir);
79 aPosition = aBoundPrj[0] + aBoundPrj[2]*myDisplacement[0];
84 void VISU_CutLinesPL::SetDefault(){
88 int VISU_CutLinesPL::IsDefault(){
93 void VISU_CutLinesPL::Update(){
94 ClearAppendPolyData(myAppendPolyData);
96 vtkAppendPolyData *anAppendPolyData = vtkAppendPolyData::New();
98 float aDir[2][3], aBaseBounds[6];
99 GetInput2()->GetBounds(aBaseBounds);
100 GetDir(aDir[0],myAng[0],myBasePlane[0]);
101 vtkUnstructuredGrid* anUnstructuredGrid =
102 myFieldTransform->GetUnstructuredGridOutput();
103 CutWithPlanes(anAppendPolyData,anUnstructuredGrid,1,aDir[0],aBaseBounds,
104 myPosition,myCondition,myDisplacement[0]);
107 vtkDataSet *aDataSet = anAppendPolyData->GetOutput();
109 if(aDataSet->GetNumberOfCells() == 0)
110 aDataSet = anUnstructuredGrid;
111 aDataSet->GetBounds(aBounds);
112 GetDir(aDir[1],myAng[1],myBasePlane[1]);
113 VISU_CutPlanesPL::CutWithPlanes(myAppendPolyData,aDataSet,GetNbParts(),aDir[1],aBounds,
114 myPartPosition,myPartCondition,myDisplacement[1]);
115 anAppendPolyData->Register(myAppendPolyData);
116 anAppendPolyData->Delete();
117 //Calculate values for building of table
118 vtkMath::Cross(aDir[0],aDir[1],myDirLn);
119 for (int i=0; i<3 ; i++) if(myDirLn[i]<0) myDirLn[i] = (-1)*myDirLn[i];//enk:: correction of bug Bug PAL10401
120 GetBoundProject(myBoundPrjLn, aBaseBounds, myDirLn);
121 VISU::Mul(myDirLn,myBoundPrjLn[0],myBasePnt);
122 CorrectPnt(myBasePnt,aBaseBounds);
124 VISU_ScalarMapPL::Update();
128 void VISU_CutLinesPL::CutWithPlanes(vtkAppendPolyData* theAppendPolyData, vtkDataSet* theDataSet,
129 int theNbPlanes, float theDir[3], float theBounds[6],
130 float thePartPosition, int thePartCondition,
131 float theDisplacement)
133 vector<float> aPartPosition(1,thePartPosition);
134 vector<int> aPartCondition(1,thePartCondition);
135 VISU_CutPlanesPL::CutWithPlanes(theAppendPolyData,theDataSet,theNbPlanes,theDir,theBounds,
136 aPartPosition,aPartCondition,theDisplacement);