]> Creatis software - cpPlugins.git/commitdiff
Merge branch 'master' of ssh://git.creatis.insa-lyon.fr/cpPlugins
authorLeonardo Florez-Valencia <florez-l@javeriana.edu.co>
Thu, 29 Oct 2015 19:13:52 +0000 (14:13 -0500)
committerLeonardo Florez-Valencia <florez-l@javeriana.edu.co>
Thu, 29 Oct 2015 19:13:52 +0000 (14:13 -0500)
appli/examples/CMakeLists.txt
appli/examples/example_SphereWidget.cxx
appli/examples/example_Test_Memento.cxx
lib/cpExtensions/IO/MementoState.cxx
lib/cpExtensions/IO/MementoState.h
lib/cpExtensions/Interaction/SphereWidget.cxx
lib/cpExtensions/Interaction/SphereWidget.h
lib/cpPlugins/Interface/BaseMPRWidget.cxx

index c58f67351f547717a13d7faba7e7f47b86b11431..8a9d5dfc262615fd906595826fdd8e7dccc3084b 100644 (file)
@@ -31,7 +31,7 @@ SET(
   example_HandleWidget
   example_SeedWidget
   example_SphereWidget
-  ##example_Test_Memento
+  example_Test_Memento
   ##example_MarchingCubes
   ##example_OtsuFilter
   ##example_RGBImageToHSVChannels
index ac0d27c81b553b82ba70e548e2715c6d0af97ea8..6ba1e5e40e362bedc56be9917ad05ccc0f457906 100644 (file)
@@ -30,20 +30,20 @@ typedef cpExtensions::Interaction::SphereWidget       TSphereWidget;
 
 // -------------------------------------------------------------------------
 
-std::string _path = "C://dev//creatis//cpPlugins//build//Debug//cpPluginsIO.dll";
+std::string _pathIOplugin = "C://dev//creatis//cpPlugins//build//Debug//cpPluginsIO.dll";
 std::string _img = "C://img//SphereVolume.mhd";
 
 int main(int argc, char* argv[])
 {
   if (argc >= 3)
   {
-    _path = argv[1];
+    _pathIOplugin = argv[1];
     _img = argv[2];
   }
 
   // Create interface
   TInterface plugins;
-  if (!plugins.Load(_path))
+  if (!plugins.Load(_pathIOplugin))
   {
     std::cerr << "Failed to load plugins." << std::endl;
     return(1);
@@ -105,11 +105,11 @@ int main(int argc, char* argv[])
   vtkSmartPointer<TSphereWidget> sphereWidget =
     vtkSmartPointer<TSphereWidget>::New();
   sphereWidget->SetInteractor(interactor);
-  sphereWidget->CreateDefaultRepresentation();
+//  sphereWidget->CreateDefaultRepresentation();
 
-  vtkSphereRepresentation* sphereRepresentation =
/* vtkSphereRepresentation* sphereRepresentation =
     vtkSphereRepresentation::SafeDownCast(sphereWidget->GetRepresentation());
-  sphereRepresentation->HandleVisibilityOn();
+  sphereRepresentation->HandleVisibilityOn();*/
 
   // Begin interaction
   renderer->ResetCamera();
index 01f3308e978da804d6bb05fcbaad318877a2da0b..7cbd37a69ef5a5019d494cbe0ab7b76b26e87e90 100644 (file)
 #include <future>
 #include <iostream>
 #include <cpExtensions/IO/MementoState.h>
+#include <cpPlugins/Plugins/BasicFilters/BinaryErodeImageFilter.h>
 
-#include <vtkSmartPointer.h>
 #include <vtkRenderWindow.h>
 #include <vtkRenderWindowInteractor.h>
 #include <vtkRenderer.h>
 
-#include <vtkImageCast.h>
-#include <vtkMetaImageWriter.h>
-#include <vtkMetaImageReader.h>
-#include <vtkImageMandelbrotSource.h>
-#include <vtkImageActor.h>
-#include <vtkRenderWindowInteractor.h>
-
-#include <itkImage.h>
-#include <itkBinaryErodeImageFilter.h>
-#include <itkBinaryBallStructuringElement.h>
-#include <itkImageFileReader.h>
-
 #include <itkImageToVTKImageFilter.h>
-#include <itkVTKImageToImageFilter.h>
-#include <itkBinaryThresholdImageFilter.h>
-#include <itkInvertIntensityImageFilter.h>
-
-typedef itk::Image<unsigned char, 2>    ImageType;
-typedef itk::ImageFileReader<ImageType> ReaderType;
 
-typedef cpPlugins::Interface::Image            TPluginImage;
+#ifdef WIN32
+#define myWait Sleep(10000);
+#else
+#define myWait usleep(10000);
+#endif
+
+
+// -------------------------------------------------------------------------
+// type definiftions
+
+typedef cpPlugins::Interface::Interface     TInterface;
+typedef cpPlugins::Interface::ProcessObject TProcessObject;
+typedef cpPlugins::Interface::DataObject    TDataObject;
+typedef cpPlugins::Interface::Image         TImage;
+typedef cpPlugins::Interface::Parameters    TParameters;
+typedef TInterface::TClasses                TClasses;
+
+typedef cpExtensions::Visualization::ImageSliceActors TSliceActors;
+
+typedef cpExtensions::IO::MementoState TMemento;
+typedef cpPlugins::BasicFilters::BinaryErodeImageFilter TBinaryErodeFilter;
+// -------------------------------------------------------------------------
+
+std::string _pathIOplugin = "C://dev//creatis//cpPlugins//build//Debug//cpPluginsIO.dll";
+std::string _pathBasicFiltersPlugin= "C://dev//creatis//cpPlugins//build//Debug//cpPluginsBasicFilters.dll";
+std::string _img = "C://img//SphereVolume.mhd";
+
+int main(int argc, char* argv[])
+{
+  if (argc >= 3)
+  {   
+    _img = argv[1];
+    _pathIOplugin = argv[2];
+    _pathBasicFiltersPlugin = argv[3];
+  }
+
+  // Create interface
+   TInterface plugins;
+  if (!plugins.Load(_pathIOplugin) ||
+      !plugins.Load(_pathBasicFiltersPlugin))
+  {
+    std::cerr << "Failed to load plugins." << std::endl;
+    return(1);
+  }
+
+  // Create reader
+  TProcessObject::Pointer reader;
+  reader = plugins.CreateProcessObject("cpPlugins::IO::ImageReader");
+  if (reader.IsNull())
+  {
+    std::cerr
+      << "No suitable reader found in plugins." << std::endl
+      << "Reader: " << reader.GetPointer() << std::endl
+      << std::endl;
+    return(1);
+  }
+
+  // Configure reader
+  TParameters* reader_params = reader->GetParameters();
+  reader_params->AddToStringList("FileNames", _img);
+
+  // Execute pipeline
+  std::string err = reader->Update();
+  if (err != "")
+  {
+    std::cerr << "ERROR: " << err << std::endl;
+    return(1);
+
+  }
+
+  TImage* image = reader->GetOutput< TImage >("Output");
 
-int main() {
-  auto memento = cpExtensions::IO::MementoState();
-  
-  //here goes the code
-  
-  
-  std::string filePath = "julia_mha.mhd";
-  std::string filePathRaw = "julia_mha.raw";
-  // Create an image
-  vtkSmartPointer<vtkImageMandelbrotSource> source =
-    vtkSmartPointer<vtkImageMandelbrotSource>::New();
-
-  vtkSmartPointer<vtkImageCast> castFilter =
-    vtkSmartPointer<vtkImageCast>::New();
-  castFilter->SetOutputScalarTypeToUnsignedChar();
-  castFilter->SetInputConnection(source->GetOutputPort());
-  castFilter->Update();
-
-  vtkSmartPointer<vtkMetaImageWriter> writer =
-    vtkSmartPointer<vtkMetaImageWriter>::New();
-  writer->SetInputConnection(castFilter->GetOutputPort());
-  writer->SetFileName(filePath.c_str());
-  writer->SetRAWFileName(filePathRaw.c_str());
-  writer->Write();
-
-  //ReaderType::Pointer reader = ReaderType::New();
-  vtkSmartPointer<vtkMetaImageReader> reader =
-    vtkSmartPointer<vtkMetaImageReader>::New();
-  reader->SetFileName(filePath.c_str());
-  reader->Update();
-  
   //first memento
/* auto obj = TPluginImage::New();
-
-  auto oo = dynamic_cast<cpPlugins::Interface::Image *> (reader->GetOutput());
 obj->SetSource(oo);
-  memento.SetToMemento(oo);*/
-
 TMemento* _memento = new TMemento();
+  _memento->SetToMemento(image);
+  
/* auto retrievedImage = _memento->GetFromMemento(1);
+  image->SetVTK(retrievedImage);
+*/
   // filter 1 (state 2) ---------------------------------------------------------------
+
+  TProcessObject::Pointer binaryFilter;
+  binaryFilter = plugins.CreateProcessObject("cpPlugins::BasicFilters::BinaryErodeImageFilter");
+  if (binaryFilter.IsNull())
+  {
+    std::cerr
+      << "No suitable reader found in plugins." << std::endl
+      << "Reader: " << binaryFilter.GetPointer() << std::endl
+      << std::endl;
+    return(1);
+  }
+
+  // filter 1
+  TDataObject * readerOut = reader->GetOutput< TDataObject >("Output");
+  binaryFilter->SetInput("Input", readerOut);
+  binaryFilter->Update();
+  _memento->SetToMemento(binaryFilter->GetOutput< TImage >("Output"));
+
+  myWait;
+
+  vtkSmartPointer<vtkImageData> retrievedImage = _memento->MementoUndo();
   
-  typedef itk::BinaryBallStructuringElement<
-    ImageType::PixelType, 2>                  StructuringElementType;
-  StructuringElementType structuringElement;
-  structuringElement.SetRadius(10);
-  structuringElement.CreateStructuringElement();
-
-  typedef itk::VTKImageToImageFilter<ImageType>       imgToFilter;
-  imgToFilter::Pointer connectorimg = imgToFilter::New();
-  connectorimg->SetInput(reader->GetOutput());
-  connectorimg->Update();
-
-  typedef itk::BinaryErodeImageFilter<ImageType, ImageType, StructuringElementType>
-    BinaryErodeImageFilterType;
+  // the retrieved image could not be ready if this happens the function returns null
+  // for the test we made the example wait before try to read but this is the way 
+  // to handle this
+  if (retrievedImage == nullptr)
+  {
+    return (1);
+  }
   
-  BinaryErodeImageFilterType::Pointer erodeFilter
-    = BinaryErodeImageFilterType::New();
-  erodeFilter->SetInput(connectorimg->GetOutput());
-  erodeFilter->SetKernel(structuringElement);
-
-  // filter 2 (state 3) ---------------------------------------------------------------
-
-  typedef itk::BinaryThresholdImageFilter<ImageType, ImageType>
-    BinaryThresholdImageFilterType;
-
-  BinaryThresholdImageFilterType::Pointer thresholdFilter
-    = BinaryThresholdImageFilterType::New();
-  thresholdFilter->SetInput(erodeFilter->GetOutput());
-  thresholdFilter->SetLowerThreshold(10);
-  thresholdFilter->SetUpperThreshold(30);
-  thresholdFilter->SetInsideValue(255);
-  thresholdFilter->SetOutsideValue(0);
-
-
-  // filter 3 (state 4) ---------------------------------------------------------------
-
-  typedef itk::InvertIntensityImageFilter <ImageType>
-    InvertIntensityImageFilterType;
-
-  InvertIntensityImageFilterType::Pointer invertIntensityFilter
-    = InvertIntensityImageFilterType::New();
-  invertIntensityFilter->SetInput(thresholdFilter->GetOutput());
-  invertIntensityFilter->SetMaximum(255);
-
-  // undo (state 3) ---------------------------------------------------------------
-
-  // undo (state 2) ---------------------------------------------------------------
-
-  // redo (state 3) ---------------------------------------------------------------
-
-  // visualization -- just for test
-
-  typedef itk::ImageToVTKImageFilter<ImageType>       ConnectorType;
-  ConnectorType::Pointer connector = ConnectorType::New();
-  connector->SetInput(invertIntensityFilter->GetOutput());
-  connector->Update();
-
-  vtkSmartPointer<vtkImageActor> actor =
-    vtkSmartPointer<vtkImageActor>::New();
-  actor->GetMapper()->SetInputData(connector->GetOutput());
-
-  vtkSmartPointer<vtkRenderer> renderer =
-    vtkSmartPointer<vtkRenderer>::New();
-  vtkSmartPointer<vtkRenderWindow> renderWindow =
-    vtkSmartPointer<vtkRenderWindow>::New();
-  renderWindow->AddRenderer(renderer);
-  vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
-    vtkSmartPointer<vtkRenderWindowInteractor>::New();
-  renderWindowInteractor->SetRenderWindow(renderWindow);
-
-  renderer->AddActor(actor);
-  renderer->SetBackground(.2, .3, .4);
-
-  renderWindow->Render();
-  renderWindowInteractor->Start();
-
-
-
-//#ifdef _DEBUG
-//  auto i = 0;
-//  std::cout << "wait for close";
-//  std::cin >> i;
-//#endif
+  //image->SetVTK(retrievedImage.Get()); // this metohd is not implemented yet
+
+  // Configure visualization objects
+  vtkSmartPointer< vtkRenderer > renderer =
+    vtkSmartPointer< vtkRenderer >::New();
+  renderer->SetBackground(0.1, 0.1, 0.1);
+
+  vtkSmartPointer< vtkRenderWindow > window =
+    vtkSmartPointer< vtkRenderWindow >::New();
+  window->AddRenderer(renderer);
+  window->SetSize(600, 600);
+
+  // Set up the interaction
+  vtkSmartPointer< vtkRenderWindowInteractor > interactor =
+    vtkSmartPointer< vtkRenderWindowInteractor >::New();
+  window->SetInteractor(interactor);
+
+  // Create slice actors
+  vtkSmartPointer< TSliceActors > image_actors =
+    vtkSmartPointer< TSliceActors >::New();
+  //image_actors->AddInputData(image->GetVTK< vtkImageData >(), 2);
+  image_actors->AddInputData(retrievedImage, 2);
+  image_actors->PushActorsInto(window);
+
+  // Begin interaction
+  renderer->ResetCamera();
+  window->Render();
+  interactor->Start();
 
   return 0;
 
index 12045c3d28c87e8ad351b1ffccf3835b0fbf969a..e0dd0493287518489bf013fdb16de1e08deeff7f 100644 (file)
@@ -3,63 +3,26 @@
 
 #include <vtkMetaImageReader.h>
 #include <vtkMetaImageWriter.h>
+#include <future>
+
+
+
 
 
 // -------------------------------------------------------------------------
 cpExtensions::IO::MementoState::MementoState()
 {
-       m_Id = 0;
+  m_maxId = m_Id = 0;
+  m_stateIt = m_stateReady.begin();
 };
 
 // -------------------------------------------------------------------------
-//cpExtensions::IO::MementoState::MementoState(long id, TPluginImage* _img)
-//{
-//  SetToMemento(_img);
-//}
-//
-//bool
-//cpExtensions::IO::MementoState::SetToMemento(TPluginObject * _do)
-//{
-//  char base[] = "state";
-//  std::ostringstream oss;
-//  this->m_Id++;
-//  oss << this->m_Id;
-//  std::string str = oss.str();
-//  auto complement = str.c_str();
-//
-//  std::string fileName(base);
-//  fileName.append(complement);
-//  fileName.append(".mhd");
-//
-//  std::string fileNameRaw(base);
-//  fileNameRaw.append(complement);
-//  fileNameRaw.append(".raw");
-////  save(fileName, fileNameRaw, _img);
-//
-//
-//  vtkSmartPointer<vtkMetaImageWriter> writer =
-//    vtkSmartPointer<vtkMetaImageWriter>::New();
-//
-//  auto img = TPluginImage::New();
-//  img->SetSource(_do);
-//
-// // writer->SetInputData(_do->GetVTK<vtkDataObject>());
-//  writer->SetInputData(img->GetVTK<vtkDataObject>());
-//  
-//  writer->SetFileName(fileName.c_str());
-//  writer->SetRAWFileName(fileNameRaw.c_str());
-//  writer->Write();
-//
-//  return true;
-//}
-//
-//
 bool
 cpExtensions::IO::MementoState::SetToMemento(cpPlugins::Interface::Image* _img)
 {
   char base[] = "state";
   std::ostringstream oss;
-  this->m_Id++;
+  this->m_Id;
   oss << this->m_Id;
   std::string str = oss.str();
   auto complement = str.c_str();
@@ -71,53 +34,113 @@ cpExtensions::IO::MementoState::SetToMemento(cpPlugins::Interface::Image* _img)
   std::string fileNameRaw(base);
   fileNameRaw.append(complement);
   fileNameRaw.append(".raw");
-  save(fileName, fileNameRaw, _img);
+  //save(fileName, fileNameRaw, _img);
+  m_stateReady.insert(m_stateReady.begin() + m_Id, false);
+  std::async(std::launch::async, &MementoState::Save, this, fileName, fileNameRaw, _img);
+
+  m_stateReady[m_Id] = true;
+  m_Id++;
+
+  if (m_Id > m_maxId)
+  {
+    m_maxId = m_Id;
+  }
 
   return true;
 }
-//
-//
-//// -------------------------------------------------------------------------
-//vtkSmartPointer<vtkMetaImageReader>
-//cpExtensions::IO::MementoState::getMemento(long id)
-//{
-//     char base[] = "state";
-//     std::ostringstream oss;
-//     oss << id;
-//     std::string str = oss.str();
-//     auto complement = str.c_str();
-//
-//     std::string fileName(base);
-//     fileName.append(complement);
-//     fileName.append(".mhd");
-//     return load(fileName);
-//}
-//
+
+
+// -------------------------------------------------------------------------
+vtkSmartPointer<vtkImageData>
+cpExtensions::IO::MementoState::GetFromMemento(long id)
+{
+  if (id > m_maxId)
+  {
+    return nullptr;
+  }
+
+  char base[] = "state";
+  std::ostringstream oss;
+  oss << id;
+  std::string str = oss.str();
+  auto complement = str.c_str();
+
+  std::string fileName(base);
+  fileName.append(complement);
+  fileName.append(".mhd");
+  return Load(fileName);
+  /*std::future<vtkSmartPointer<vtkImageData>> result(std::async(std::launch::async, &MementoState::Load, this, fileName));
+  return result.get();*/
+}
+
 // -------------------------------------------------------------------------
-void 
+vtkSmartPointer<vtkImageData>
+cpExtensions::IO::MementoState::MementoUndo()
+{
+  char base[] = "state";
+  std::ostringstream oss;
+  oss << --this->m_Id;
+  std::string str = oss.str();
+  auto complement = str.c_str();
+
+  std::string fileName(base);
+  fileName.append(complement);
+  fileName.append(".mhd");
+
+  if (m_stateReady.at(this->m_Id))
+  {
+    return Load(fileName);
+  }
+
+  return nullptr;
+}
+
+
+vtkSmartPointer<vtkImageData>
+cpExtensions::IO::MementoState::MementoRedo()
+{
+  char base[] = "state";
+  std::ostringstream oss;
+  oss << ++this->m_Id;
+  std::string str = oss.str();
+  auto complement = str.c_str();
+
+  std::string fileName(base);
+  fileName.append(complement);
+  fileName.append(".mhd");
+
+  if (m_stateReady.at(this->m_Id) &&
+    this->m_Id <= this->m_maxId)
+  {
+    return Load(fileName);
+  }
+  return nullptr;
+}
+
+// -------------------------------------------------------------------------
+void
 cpExtensions::IO::MementoState::
-save(const std::string& filename, const std::string& filenameRaw, cpPlugins::Interface::Image* img) {
-  
-       vtkSmartPointer<vtkMetaImageWriter> writer =
-               vtkSmartPointer<vtkMetaImageWriter>::New();
-       writer->SetInputData(img->GetVTK< vtkImageData >());
-       writer->SetFileName(filename.c_str());
-       writer->SetRAWFileName(filenameRaw.c_str());
-       writer->Write();
-  
+Save(const std::string& filename, const std::string& filenameRaw, cpPlugins::Interface::Image* img) {
+
+  vtkSmartPointer<vtkMetaImageWriter> writer =
+    vtkSmartPointer<vtkMetaImageWriter>::New();
+  writer->SetInputData(img->GetVTK< vtkImageData >());
+  writer->SetFileName(filename.c_str());
+  writer->SetRAWFileName(filenameRaw.c_str());
+  writer->Write();
 }
 
 // -------------------------------------------------------------------------
-vtkSmartPointer<vtkMetaImageReader>
-cpExtensions::IO::MementoState::load(const std::string& filename) {
-  
-       vtkSmartPointer<vtkMetaImageReader> reader =
-               vtkSmartPointer<vtkMetaImageReader>::New();
-       reader->SetFileName(filename.c_str());
-       reader->Update();
-       return reader;
-  
-//return( NULL );
+vtkSmartPointer<vtkImageData>
+cpExtensions::IO::MementoState::Load(const std::string& filename) {
+
+  vtkSmartPointer<vtkMetaImageReader> reader =
+    vtkSmartPointer<vtkMetaImageReader>::New();
+  reader->SetFileName(filename.c_str());
+
+  reader->Update();
+  return reader->GetOutput();
+
 }
 
 // eof - $RCSfile$
index 13a7a4b0d13c5afe119f72aa1554b0c7c8ea1cce..2116f36ddb3fc8e3ba4ee11148de0b550fce4530 100644 (file)
 #include <cpPlugins/Interface/Mesh.h>
 
 #include <vtkMetaImageReader.h>
-
-// -------------------------------------------------------------------------
-
-
+#include <vtkCommand.h>
 
 namespace cpExtensions
 {
   namespace IO
   {
-    //==========================================================================
-// Plugins types
-//typedef cpPlugins::Interface::Interface        TPluginsInterface;
-//typedef cpPlugins::Interface::Object           TPluginObject;
-//typedef cpPlugins::Interface::DataObject       TPluginData;
-//typedef cpPlugins::Interface::Image            TPluginImage;
-//typedef cpPlugins::Interface::ImplicitFunction TPluginImplicitFunction;
-//typedef cpPlugins::Interface::Mesh             TPluginMesh;
-//typedef cpPlugins::Interface::ProcessObject    TPluginFilter;
-//typedef cpPlugins::Interface::Parameters       TParameters;
-//
-//typedef cpExtensions::Visualization::MPRObjects TMPRObjects;
-
     class cpExtensions_EXPORT MementoState
     {
     private:
       long m_Id;
-
+      long m_maxId;
+      std::vector<bool> m_stateReady;
+      std::vector<bool>::iterator m_stateIt;
     public:
 
       MementoState();
-//      MementoState(long id, cpPlugins::Interface::Image * _img);
-
       bool SetToMemento(cpPlugins::Interface::Image* _img);
-//      bool SetToMemento(itk::ProcessObject po);
-
-//      vtkSmartPointer<vtkMetaImageReader> getMemento(long id);
+      vtkSmartPointer<vtkImageData> MementoUndo();
+      vtkSmartPointer<vtkImageData> MementoRedo();
+      vtkSmartPointer<vtkImageData> GetFromMemento(long id);
     private:
-      void save(const std::string& filename, const std::string& filenameRaw, cpPlugins::Interface::Image* img);
-      vtkSmartPointer<vtkMetaImageReader> load(const std::string& filename);
+      void Save(const std::string& filename, const std::string& filenameRaw, cpPlugins::Interface::Image* img);
+      vtkSmartPointer<vtkImageData> Load(const std::string& filename);
 
     };
   }
index 7c326e3723e6bb4fc097a905b11e82ab55bdeac1..07d778f84041a39e58e8308ff12dcf697c38b9aa 100644 (file)
@@ -8,9 +8,8 @@
 #include <vtkWidgetRepresentation.h>
 #include <vtkActor.h>
 #include <vtkSphereRepresentation.h>
-#include <vtkSphereWidget2.h>
 #include <vtkSmartPointer.h>
-
+#include <vtkSphere.h>
 
 // -------------------------------------------------------------------------
 cpExtensions::Interaction::SphereWidget::
@@ -39,19 +38,19 @@ cpExtensions::Interaction::SphereWidget::
 SphereWidget()
 : Superclass()
 {
-  vtkSmartPointer<vtkSphereRepresentation> sphereRepresentation =
-    vtkSphereRepresentation::SafeDownCast(this->GetRepresentation());
+  /*vtkSmartPointer<vtkself> self =
+    vtkself::SafeDownCast(this->GetRepresentation());*/
 
-  //sphereRepresentation->SetHandleSize(0);
-  sphereRepresentation->SetRadialLine(2);
-  sphereRepresentation->SetRadius(7);
+  //self->SetHandleSize(0);
+  //self->SetRadialLine(2);
+  this->SetRadius(7);
   
-  sphereRepresentation->SetPhiResolution(10);
-  sphereRepresentation->SetThetaResolution(20);
+  this->SetPhiResolution(10);
+  this->SetThetaResolution(20);
 
-  //sphereRepresentation->HandleVisibilityOff();
-  //sphereRepresentation->SetHandleText(0);
-  sphereRepresentation->SetRepresentationToWireframe();
+  //self->HandleVisibilityOff();
+  //self->SetHandleText(0);
+  this->SetRepresentationToWireframe();
 
   // Remove default translations
   /* vtkWidgetEventTranslator* t = this->GetEventTranslator();
@@ -110,60 +109,72 @@ void cpExtensions::Interaction::SphereWidget::_KeyPress(void* data, const char&
   SphereWidget* self = reinterpret_cast<SphereWidget*>(data);
 
   double handlePosition[3];
-  vtkSphereRepresentation* sphereRepresentation =
-    vtkSphereRepresentation::SafeDownCast(self->GetRepresentation());
-
-  
+ /* vtkself* self =
+    vtkself::SafeDownCast(self->GetRepresentation());
+  */
+  auto center = self->GetCenter();
+  auto center2 = self->GetCenter();
+  auto radius = self->GetRadius();
 
-  auto center = sphereRepresentation->GetCenter();
   self->Superclass::StartInteraction();
   switch (key)
   {
   case 122: // Z & z
   case 90:
-    sphereRepresentation->SetRadius(sphereRepresentation->GetRadius() + 0.1);
+    radius += 0.1;
+    //self->SetRadius(radius);
     break;
   case 88:  // X & x
   case 120:
-    sphereRepresentation->SetRadius(sphereRepresentation->GetRadius() - 0.1);
+    radius -= 0.1;
+    //self->SetRadius(radius);
     break;
   case 119: // W & w
   case 87:
     center[0] += 1;
-    sphereRepresentation->SetCenter(center);
+    self->Translate(center, center2);
     break;
   case 83: // S & s
   case 115: 
     center[0] -= 1;
-    sphereRepresentation->SetCenter(center);
+    self->Translate(center, center2);
     break;
   case 65: // A & a
   case 97:
     center[1] += 1;
-    sphereRepresentation->SetCenter(center);
+    self->SetCenter(center);
     break;
   case 100: // D & d
   case 68:
     center[1] -= 1;
-    sphereRepresentation->SetCenter(center);
+    self->SetCenter(center);
     break;
   case 81: // Q & q
   case 113:
     center[2] += 1;
-    sphereRepresentation->SetCenter(center);
+    self->SetCenter(center);
     break;
   case 69: // E & e
   case 101:
     center[2] -= 1;
-    sphereRepresentation->SetCenter(center);
+    self->SetCenter(center);
     break;
 
   default:
     break;
   }
-  self->SetKeyPressActivation(1);
-  self->Render();
+
+  self->SetRadius(radius);
+  self->Translate(center, center2);
+
+  vtkSmartPointer<vtkSphere> sphere = vtkSmartPointer<vtkSphere>::New();
+  
+
+  self->InvokeEvent(vtkCommand::ModifiedEvent, NULL);
   
+  self->Modified();
+  self->GetInteractor()->Render();
+  self->ReleaseFocus();
 }
 
 
index dd6a499a2e2551d0505fc62dbe736929a655e77c..11ce916c814bc236c29c3345b67b0fe8b0ff4e04 100644 (file)
@@ -3,7 +3,7 @@
 
 #include <cpExtensions/cpExtensions_Export.h>
 #include <cpExtensions/Interaction/BaseInteractorStyle.h>
-#include <vtkSphereWidget2.h>
+#include <vtkSphereWidget.h>
 
 namespace cpExtensions
 {
@@ -12,11 +12,11 @@ namespace cpExtensions
     /**
      */
     class cpExtensions_EXPORT SphereWidget
-      : public vtkSphereWidget2
+      : public vtkSphereWidget
     {
     public:
       typedef SphereWidget Self;
-      vtkTypeMacro( SphereWidget, vtkSphereWidget2 );
+      vtkTypeMacro( SphereWidget, vtkSphereWidget );
 
       typedef cpExtensions::Interaction::BaseInteractorStyle TBaseStyle;
       typedef TBaseStyle::TMouseCommand TMouseCommand;
index 2dde30b59e5f12e62a48d3ad5725cb8c281a8249..2017b177f7e75617a79e8f96a4d0d132977dd923 100644 (file)
@@ -130,6 +130,7 @@ ShowMesh(
   const double& r, const double& g, const double& b
   )
 {
+  return false;
 }
 
 // -------------------------------------------------------------------------