Salome HOME
Update Help for VISU module.
[modules/visu.git] / src / PIPELINE / VISU_VectorsPL.cxx
index 786f7ec069a39870981bad7f1501f6a25ef0225f..c34d36d9de8c7aaa94e0dd53497450ddf1489917 100644 (file)
@@ -1,23 +1,23 @@
 //  VISU OBJECT : interactive object for VISU entities implementation
 //
 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-// 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
 //
 //
 // File:    VISU_PipeLine.cxx
@@ -27,8 +27,8 @@
 
 #include "VISU_VectorsPL.hxx"
 #include "VISU_PipeLineUtils.hxx"
-#include "SALOME_TransformFilter.h"
-#include "SALOME_Transform.h"
+#include "VTKViewer_TransformFilter.h"
+#include "VTKViewer_Transform.h"
 
 #include <vtkGlyph3D.h>
 #include <vtkConeSource.h>
@@ -39,11 +39,33 @@ vtkStandardNewMacro(VISU_VectorsPL);
 
 VISU_VectorsPL::VISU_VectorsPL(){
   myGlyph = vtkGlyph3D::New();
-  myTransformFilter = SALOME_TransformFilter::New();
+
+  myGlyphSource = vtkGlyphSource2D::New();
+  myConeSource = vtkConeSource::New();
+  myLineSource = vtkLineSource::New();
+
+  myCenters = vtkCellCenters::New();
+  myTransformFilter = VTKViewer_TransformFilter::New();
+  myIsShrinkable = false;
 }
 
 VISU_VectorsPL::~VISU_VectorsPL(){
+  myGlyph->UnRegisterAllOutputs();
   myGlyph->Delete();
+
+  myCenters->UnRegisterAllOutputs();
+  myCenters->Delete();
+
+  myGlyphSource->UnRegisterAllOutputs();
+  myGlyphSource->Delete();
+
+  myConeSource->UnRegisterAllOutputs();
+  myConeSource->Delete();
+
+  myLineSource->UnRegisterAllOutputs();
+  myLineSource->Delete();
+
+  myTransformFilter->UnRegisterAllOutputs();
   myTransformFilter->Delete();
 }
 
@@ -56,23 +78,23 @@ void VISU_VectorsPL::ShallowCopy(VISU_PipeLine *thePipeLine){
 }
 
 
-void VISU_VectorsPL::SetTransform(SALOME_Transform* theTransform){
+void VISU_VectorsPL::SetTransform(VTKViewer_Transform* theTransform){
   myFieldTransform->SetSpaceTransform(theTransform);
   myTransformFilter->SetTransform(theTransform);
   myTransformFilter->Modified();
 }
-SALOME_Transform* VISU_VectorsPL::GetTransform(){
+VTKViewer_Transform* VISU_VectorsPL::GetTransform(){
   return myFieldTransform->GetSpaceTransform();
 }
 
 
-void VISU_VectorsPL::SetScale(float theScale) { 
+void VISU_VectorsPL::SetScale(float theScale) {
   if(myScaleFactor == theScale) return;
   myScaleFactor = theScale;
   myGlyph->SetScaleFactor(myScaleFactor);
   Modified();
 }
-float VISU_VectorsPL::GetScale() { 
+float VISU_VectorsPL::GetScale() {
   return myGlyph->GetScaleFactor();
 }
 
@@ -86,7 +108,7 @@ void VISU_VectorsPL::Init(){
 
 
 VISU_ScalarMapPL::THook* VISU_VectorsPL::DoHook(){
-  VISU::ToCellCenters(myTransformFilter,myInput,myFieldTransform);
+  VISU::ToCellCenters(myTransformFilter,myCenters,GetInput2(),myFieldTransform);
   myGlyph->SetInput(myTransformFilter->GetOutput());
   myGlyph->SetVectorModeToUseVector();
   myGlyph->SetScaleModeToScaleByVector();
@@ -98,44 +120,54 @@ VISU_ScalarMapPL::THook* VISU_VectorsPL::DoHook(){
 void VISU_VectorsPL::Update(){
   switch (myTypeGlyph) {
   case ARROW: {
-    vtkGlyphSource2D *aGlyphSource = vtkGlyphSource2D::New();
-    aGlyphSource->SetGlyphTypeToArrow();
-    aGlyphSource->SetFilled(0);
-    if(myPosGlyph == TAIL)
-      aGlyphSource->SetCenter(0.5, 0.0, 0.0);
-    else if(myPosGlyph == HEAD)
-      aGlyphSource->SetCenter(-0.5, 0.0, 0.0);
-    myGlyph->SetSource(aGlyphSource->GetOutput());
-    aGlyphSource->Register(myGlyph);
-    aGlyphSource->Delete();
+    myGlyphSource->SetGlyphTypeToArrow();
+    myGlyphSource->SetFilled(0);
+    switch (myPosGlyph) {
+    case TAIL:
+      myGlyphSource->SetCenter(0.5, 0.0, 0.0);
+      break;
+    case HEAD:
+      myGlyphSource->SetCenter(-0.5, 0.0, 0.0);
+      break;
+    case CENTER:
+      myGlyphSource->SetCenter(0.0, 0.0, 0.0);
+    }
+//     if(myPosGlyph == TAIL)
+//       myGlyphSource->SetCenter(0.5, 0.0, 0.0);
+//     else if(myPosGlyph == HEAD)
+//       myGlyphSource->SetCenter(-0.5, 0.0, 0.0);
+    myGlyph->SetSource(myGlyphSource->GetOutput());
   }
     break;
   case CONE2:
   case CONE6: {
-    vtkConeSource *aGlyphSource = vtkConeSource::New(); //by default
     if (myTypeGlyph == CONE2)
-      aGlyphSource->SetResolution(3);
+      myConeSource->SetResolution(3);
     else
-      aGlyphSource->SetResolution(7);
-    aGlyphSource->SetHeight(1.0);
-    aGlyphSource->SetRadius(.1);
-    
-    if(myPosGlyph == TAIL)
-      aGlyphSource->SetCenter(0.5, 0.0, 0.0);
-    else if(myPosGlyph == HEAD)
-      aGlyphSource->SetCenter(-0.5, 0.0, 0.0);
-    
-    myGlyph->SetSource(aGlyphSource->GetOutput());
-    aGlyphSource->Register(myGlyph);
-    aGlyphSource->Delete();
+      myConeSource->SetResolution(7);
+    myConeSource->SetHeight(1.0);
+    myConeSource->SetRadius(.1);
+
+    switch (myPosGlyph) {
+    case TAIL:
+      myConeSource->SetCenter(0.5, 0.0, 0.0);
+      break;
+    case HEAD:
+      myConeSource->SetCenter(-0.5, 0.0, 0.0);
+      break;
+    case CENTER:
+      myConeSource->SetCenter(0.0, 0.0, 0.0);
+    }
+//     if(myPosGlyph == TAIL)
+//       myConeSource->SetCenter(0.5, 0.0, 0.0);
+//     else if(myPosGlyph == HEAD)
+//       myConeSource->SetCenter(-0.5, 0.0, 0.0);
+    myGlyph->SetSource(myConeSource->GetOutput());
   }
     break;
   case NONE:
   default: {
-    vtkLineSource *aGlyphSource = vtkLineSource::New(); 
-    myGlyph->SetSource(aGlyphSource->GetOutput());
-    aGlyphSource->Register(myGlyph);
-    aGlyphSource->Delete();
+    myGlyph->SetSource(myLineSource->GetOutput());
   }
   }