From e42ecf415793e6f85e5de98b41385fe53b6d00e0 Mon Sep 17 00:00:00 2001 From: Juan Prieto Date: Wed, 29 Jul 2009 14:33:51 +0000 Subject: [PATCH] install, doxy and direction --- CMakeLists.txt | 2 +- bbtk/src/bbcreaMaracasVisuPlaneDirection.cxx | 84 ++++++++++ bbtk/src/bbcreaMaracasVisuPlaneDirection.h | 62 +++++++ install/CMakeLists.txt | 10 +- lib/doxygen/CMakeLists.txt | 2 +- lib/maracasVisuLib/CMakeLists.txt | 2 + .../widgets/PlaneDirectionViewer.cxx | 76 +++++++++ .../wxWindows/widgets/PlaneDirectionViewer.h | 44 +++++ .../widgets/PlaneDirectionViewerPanel.cxx | 87 ++++++++++ .../widgets/PlaneDirectionViewerPanel.h | 24 +++ .../src/kernel/PlaneDirectionManager.cxx | 157 ++++++++++++++++++ .../src/kernel/PlaneDirectionManager.h | 60 +++++++ .../src/kernel/PlaneDirectionManagerData.cxx | 105 ++++++++++++ .../src/kernel/PlaneDirectionManagerData.h | 78 +++++++++ .../src/kernel/PlanesOperations.cxx | 77 +++++++++ .../src/kernel/PlanesOperations.h | 24 +++ 16 files changed, 889 insertions(+), 5 deletions(-) create mode 100644 bbtk/src/bbcreaMaracasVisuPlaneDirection.cxx create mode 100644 bbtk/src/bbcreaMaracasVisuPlaneDirection.h create mode 100644 lib/maracasVisuLib/src/interface/wxWindows/widgets/PlaneDirectionViewer.cxx create mode 100644 lib/maracasVisuLib/src/interface/wxWindows/widgets/PlaneDirectionViewer.h create mode 100644 lib/maracasVisuLib/src/interface/wxWindows/widgets/PlaneDirectionViewerPanel.cxx create mode 100644 lib/maracasVisuLib/src/interface/wxWindows/widgets/PlaneDirectionViewerPanel.h create mode 100644 lib/maracasVisuLib/src/kernel/PlaneDirectionManager.cxx create mode 100644 lib/maracasVisuLib/src/kernel/PlaneDirectionManager.h create mode 100644 lib/maracasVisuLib/src/kernel/PlaneDirectionManagerData.cxx create mode 100644 lib/maracasVisuLib/src/kernel/PlaneDirectionManagerData.h create mode 100644 lib/maracasVisuLib/src/kernel/PlanesOperations.cxx create mode 100644 lib/maracasVisuLib/src/kernel/PlanesOperations.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 94121a3..ad9cfc5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ PROJECT(creaMaracasVisu) SET(PROJECT_MAJOR_VERSION 1) SET(PROJECT_MINOR_VERSION 0) -SET(PROJECT_BUILD_VERSION 0) +SET(PROJECT_BUILD_VERSION 1) SET(CREA_VERBOSE_CMAKE TRUE) diff --git a/bbtk/src/bbcreaMaracasVisuPlaneDirection.cxx b/bbtk/src/bbcreaMaracasVisuPlaneDirection.cxx new file mode 100644 index 0000000..4c5a9a8 --- /dev/null +++ b/bbtk/src/bbcreaMaracasVisuPlaneDirection.cxx @@ -0,0 +1,84 @@ +#include "bbcreaMaracasVisuPlaneDirection.h" +#include "bbcreaMaracasVisuPackage.h" +namespace bbcreaMaracasVisu +{ + +BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,PlaneDirection) +BBTK_BLACK_BOX_IMPLEMENTATION(PlaneDirection,bbtk::WxBlackBox); +void PlaneDirection::Process() +{ + + + int radio = bbGetInputArrowSize(); + std::vector lstPointsx = bbGetInputlstPointsX(); + std::vector lstPointsy = bbGetInputlstPointsY(); + std::vector lstPointsz = bbGetInputlstPointsZ(); + std::vector _lstPointsx; + std::vector _lstPointsy; + std::vector _lstPointsz; + vtkRenderer* render = bbGetInputRenderer(); + vtkImageData* img = bbGetInputIn(); + std::string filename = bbGetInputFilename(); + + _planedir->SetArrowSize(radio); + if(render!=NULL){ + _planedir->SetRenderer(render); + } + + if(lstPointsx.size()>0&&lstPointsy.size()>0&&lstPointsz.size()>0){ + double* spc; + if(img != NULL){ + spc = img->GetSpacing(); + }else{ + spc = new double[3]; + spc[0]=1; + spc[1]=1; + spc[2]=1; + } + + for(int i = 0; i < lstPointsx.size();i++){ + _lstPointsx.push_back(lstPointsx[i]*spc[0]); + _lstPointsy.push_back(lstPointsy[i]*spc[1]); + _lstPointsz.push_back(lstPointsz[i]*spc[2]); + } + + _planedir->SetVectors(_lstPointsx, _lstPointsy, _lstPointsz); + _planedir->UpdateDirections(); + if(filename.compare("")!=0){ + _planedir->WriteInformation(filename,spc); + } + } + +} +void PlaneDirection::CreateWidget(wxWindow* parent) +{ + _planedir = PlaneDirectionViewer::getInstance(parent, radio, colour, opacity); + bbSetOutputWidget( _planedir ); +} +void PlaneDirection::bbUserSetDefaultValues() +{ + radio = 5; + colour[0] = 1; + colour[1] = 0; + colour[2] = 0; + opacity = 100; +} +void PlaneDirection::bbUserInitializeProcessing() +{ + std::vector temp; + bbSetInputFilename(""); + bbSetInputRenderer(0); + bbSetInputIn(0); + bbSetInputlstPointsX(temp); + bbSetInputlstPointsY(temp); + bbSetInputlstPointsZ(temp); + +} +void PlaneDirection::bbUserFinalizeProcessing() +{ + +} +} +// EO namespace bbcreaMaracasVisu + + diff --git a/bbtk/src/bbcreaMaracasVisuPlaneDirection.h b/bbtk/src/bbcreaMaracasVisuPlaneDirection.h new file mode 100644 index 0000000..3e7d0f8 --- /dev/null +++ b/bbtk/src/bbcreaMaracasVisuPlaneDirection.h @@ -0,0 +1,62 @@ +#ifdef _USE_WXWIDGETS_ +#ifndef __bbcreaMaracasVisuPlaneDirection_h_INCLUDED__ +#define __bbcreaMaracasVisuPlaneDirection_h_INCLUDED__ +#include "bbcreaMaracasVisu_EXPORT.h" +#include "bbtkWxBlackBox.h" + +#include +#include + +#include "PlaneDirectionViewer.h" + +namespace bbcreaMaracasVisu +{ + +class bbcreaMaracasVisu_EXPORT PlaneDirection + : + public bbtk::WxBlackBox +{ + BBTK_BLACK_BOX_INTERFACE(PlaneDirection,bbtk::WxBlackBox); + + BBTK_DECLARE_INPUT(In,vtkImageData*); + BBTK_DECLARE_INPUT(Renderer, vtkRenderer* ); + BBTK_DECLARE_INPUT(Filename, std::string ); + BBTK_DECLARE_INPUT( lstPointsX, std::vector ); + BBTK_DECLARE_INPUT( lstPointsY, std::vector ); + BBTK_DECLARE_INPUT( lstPointsZ, std::vector ); + BBTK_DECLARE_INPUT( ArrowSize, int ); + BBTK_PROCESS(Process); + void Process(); + BBTK_CREATE_WIDGET(CreateWidget); + void CreateWidget(wxWindow*); + +private: + PlaneDirectionViewer* _planedir; + int radio; + double colour[3]; + int opacity; +}; + +BBTK_BEGIN_DESCRIBE_BLACK_BOX(PlaneDirection,bbtk::WxBlackBox); +BBTK_NAME("PlaneDirection"); +BBTK_AUTHOR("car-prie@uniandes.edu.co"); +BBTK_DESCRIPTION("Given a list of points and grouping them in triplets, the box calculates the direction of the plane formed by the three points"); +BBTK_CATEGORY("__CategoryBlackBox__"); + +BBTK_INPUT(PlaneDirection,In,"Image data to get the spacing, if not found set to 1 1 1",vtkImageData*,""); +BBTK_INPUT(PlaneDirection,Renderer,"Renderer",vtkRenderer*,""); +BBTK_INPUT(PlaneDirection,Filename,"Filename to save the points of the plane and the direction",std::string,""); + +BBTK_INPUT(PlaneDirection , lstPointsX , " list of points X ", std::vector ,""); +BBTK_INPUT(PlaneDirection , lstPointsY , " list of points Y ", std::vector ,""); +BBTK_INPUT(PlaneDirection , lstPointsZ , " list of points Z ", std::vector ,""); + +BBTK_INPUT(PlaneDirection , ArrowSize , "Size of the arrow ", int ,""); + +BBTK_END_DESCRIBE_BLACK_BOX(PlaneDirection); +} +// EO namespace bbcreaMaracasVisu + +#endif // __bbcreaMaracasVisuPlaneDirection_h_INCLUDED__ +#endif // _USE_WXWIDGETS_ + diff --git a/install/CMakeLists.txt b/install/CMakeLists.txt index 6e0a1a8..5ae2131 100644 --- a/install/CMakeLists.txt +++ b/install/CMakeLists.txt @@ -48,10 +48,14 @@ ENDFOREACH(iLST) # ENDIF(WIN32) #ELSE (BUILD_BBTK_PACKAGE_creaMaracasVisu) - - SET(CPACK_PACKAGE_INSTALL_DIRECTORY "CreaTools/creaMaracasVisu-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") +IF(WIN32) + SET(CPACK_PACKAGE_INSTALL_DIRECTORY "CreaTools\\\\creaMaracasVisu-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") +ELSE(WIN32) + SET(CPACK_PACKAGE_INSTALL_DIRECTORY "CreaTools/creaMaracasVisu-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") +ENDIF(WIN32) + IF(WIN32) - SET(CMAKE_INSTALL_PREFIX C:/CreaTools/creaMaracasVisu) + SET(CMAKE_INSTALL_PREFIX C:/CreaTools/creaMaracasVisu) ENDIF(WIN32) diff --git a/lib/doxygen/CMakeLists.txt b/lib/doxygen/CMakeLists.txt index e20ddb3..dd48803 100644 --- a/lib/doxygen/CMakeLists.txt +++ b/lib/doxygen/CMakeLists.txt @@ -122,7 +122,7 @@ SET(INPUT SET(DOXYGEN_DOC_PREDEFINED USE_WXWIDGETS) CREA_BUILD_DOXYGEN_DOC( - ${CMAKE_PROJECT_NAME} + ${CMAKE_PROJECT_NAME}_lib "${INPUT}" "doxygen" "${CREA_DEFINITIONS}" diff --git a/lib/maracasVisuLib/CMakeLists.txt b/lib/maracasVisuLib/CMakeLists.txt index 92ea29a..c606552 100644 --- a/lib/maracasVisuLib/CMakeLists.txt +++ b/lib/maracasVisuLib/CMakeLists.txt @@ -35,6 +35,7 @@ IF ( BUILD_${LIBRARY_NAME} ) src/interface/wxWindows/widgets src/interface/wxWindows/widgets/pPlotter src/interface/wxWindows/widgets/manualContour + src/interface/wxWindows/widgets/ThresholdImageView ../../../ ) #message(jhcl\n\n ${crea_LIBRARIES}) @@ -167,6 +168,7 @@ SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_INCLUDE_PATHS lib/maracasVisuLib/src/interface/wxWindows/widgets lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter lib/maracasVisuLib/src/interface/wxWindows/widgets/manualContour + lib/maracasVisuLib/src/interface/wxWindows/widgets/ThresholdImageView lib/maracasVisuLib/../../../ ) IF ( ${PROJECT_BINARY_DIR} STREQUAL ${EXECUTABLE_OUTPUT_PATH} ) diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/PlaneDirectionViewer.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/PlaneDirectionViewer.cxx new file mode 100644 index 0000000..db97047 --- /dev/null +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/PlaneDirectionViewer.cxx @@ -0,0 +1,76 @@ + +#include "PlaneDirectionViewer.h" + +/******************************************************************************************** +** Start of data viewmanagerData +*********************************************************************************************/ + + +PlaneDirectionViewer* PlaneDirectionViewer::instance=NULL; + +PlaneDirectionViewer::PlaneDirectionViewer(wxWindow* parent,int radio, double colour[3], int opacity) +:wxPanel(parent) +{ + manager = new PlaneDirectionManager(radio, colour, opacity); + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + this->SetSizer(sizer); + this->SetAutoLayout(true); + +} + + +PlaneDirectionViewer* PlaneDirectionViewer::getInstance(wxWindow* parent,int radio, double colour[3], int opacity){ + if(instance==NULL){ + instance = new PlaneDirectionViewer(parent,radio,colour,opacity); + } + return instance; +} + +PlaneDirectionViewer* PlaneDirectionViewer::getInstance(){ + return instance; +} + +PlaneDirectionViewer::~PlaneDirectionViewer(){ + delete manager; +} + +void PlaneDirectionViewer::SetRenderer(vtkRenderer* render){ + manager->SetRenderer(render); +} +void PlaneDirectionViewer::SetVectors( std::vector lstPointsx, std::vector lstPointsy, std::vector lstPointsz){ + manager->SetVectors(lstPointsx,lstPointsy,lstPointsz); +} + +void PlaneDirectionViewer::UpdateDirections() throw (std::exception){ + manager->UpdateDirections(); + std::vector vectdata = manager->GetPlanesData(); + for(int i = 0; i < viewdata.size();i++){ + this->GetSizer()->Remove(i); + viewdata[i]->Destroy(); + } + viewdata.clear(); + for(int i = 0; i < vectdata.size(); i++){ + PlaneDirectionViewerPanel* planedirview = new PlaneDirectionViewerPanel(this, vectdata[i],i); + viewdata.push_back(planedirview); + this->GetSizer()->Add(planedirview,1); + } + this->Layout(); + +} + +void PlaneDirectionViewer::addRemoveActor(int index, bool addremove){ + manager->addRemoveActor(index, addremove); +} + +void PlaneDirectionViewer::changeColor(int index,double r,double g,double b){ + manager->changeColor(index, r,g,b); +} + +void PlaneDirectionViewer::WriteInformation(std::string filename, double* spc){ + manager->WriteInformation(filename,spc); +} + +void PlaneDirectionViewer::SetArrowSize(int arrowsize){ + manager->SetArrowSize(arrowsize); + +} \ No newline at end of file diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/PlaneDirectionViewer.h b/lib/maracasVisuLib/src/interface/wxWindows/widgets/PlaneDirectionViewer.h new file mode 100644 index 0000000..9b8fb88 --- /dev/null +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/PlaneDirectionViewer.h @@ -0,0 +1,44 @@ +#ifndef _PlaneDirectionViewer_H_ +#define _PlaneDirectionViewer_H_ + +#include + +#include +#include + +#include + +#include +#include "PlaneDirectionViewerPanel.h" +#include "PlaneDirectionManager.h" +#include "marTypes.h" + +class creaMaracasVisu_EXPORT PlaneDirectionViewer : public wxPanel { + +public: + PlaneDirectionViewer(wxWindow* parent, int radio, double colour[3], int opacity); + ~PlaneDirectionViewer(); + + void SetRenderer(vtkRenderer* render); + void SetVectors( std::vector lstPointsx, std::vector lstPointsy, std::vector lstPointsz); + + void UpdateDirections() throw (std::exception); + + static PlaneDirectionViewer* getInstance(wxWindow* parent,int radio, double colour[3], int opacity); + + static PlaneDirectionViewer* getInstance(); + + void addRemoveActor(int index, bool addremove); + + void changeColor(int index,double r,double g,double b); + + void WriteInformation(std::string filename,double* spc=NULL); + + void SetArrowSize(int arrowsize); +private: + static PlaneDirectionViewer* instance; + PlaneDirectionManager* manager; + std::vector viewdata; +}; + +#endif /*PlanesOperations_H_*/ diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/PlaneDirectionViewerPanel.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/PlaneDirectionViewerPanel.cxx new file mode 100644 index 0000000..e6dbd50 --- /dev/null +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/PlaneDirectionViewerPanel.cxx @@ -0,0 +1,87 @@ + +#include "PlaneDirectionViewerPanel.h" +#include "PlaneDirectionViewer.h" + +#include "Color.xpm" +#include + +/******************************************************************************************** +** Start of data viewmanagerData +*********************************************************************************************/ + +PlaneDirectionViewerPanel::PlaneDirectionViewerPanel(wxWindow* parent, PlaneDirectionManagerData* data, int index) +:wxPanel(parent,-1, wxDefaultPosition, wxDefaultSize,wxBORDER_SUNKEN){ + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + + _index = index; + this->SetSizer(sizer); + + checkbox = new wxCheckBox(this,-1,wxString(_T("Show Actor"))); + checkbox->SetValue(true); + Connect(checkbox->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&PlaneDirectionViewerPanel::onCheckBoxChange); + + wxBitmap bitmap(Color_xpm); + _colorchoose = new wxBitmapButton(this, -1, bitmap,wxDefaultPosition,wxSize(30,30)); + Connect(_colorchoose->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&PlaneDirectionViewerPanel::onColorChange); + + + double* p0 = data->getPoint0(); + double* p1 = data->getPoint1(); + double* p2 = data->getPoint2(); + double* dir = data->GetDirection(); + + wxString label(_T("[x, y, z]")); + wxString tempstr0; + tempstr0.Printf(_T("P1 [%f, %f, %f"),p0[0],p0[1],p0[2]); + wxString tempstr1; + tempstr1.Printf(_T("P2 [%f, %f, %f"),p1[0],p1[1],p1[2]); + wxString tempstr2; + tempstr2.Printf(_T("P3 [%f, %f, %f"),p2[0],p2[1],p2[2]); + wxString tempstr3; + tempstr3.Printf(_T("Direction [%f, %f, %f"),dir[0],dir[1],dir[2]); + + wxStaticText* textlabel = new wxStaticText(this, -1, label); + wxStaticText* textp0 = new wxStaticText(this, -1, tempstr0); + wxStaticText* textp1 = new wxStaticText(this, -1, tempstr1); + wxStaticText* textp2 = new wxStaticText(this, -1, tempstr2); + wxStaticText* textp3 = new wxStaticText(this, -1, tempstr3); + + + sizer->Add(checkbox,1); + sizer->Add(_colorchoose,1); + sizer->Add(textlabel,1); + sizer->Add(textp0,1); + sizer->Add(textp1,1); + sizer->Add(textp2,1); + sizer->Add(textp3,1); + + this->SetAutoLayout(true); + this->Layout(); + +} + +void PlaneDirectionViewerPanel::onCheckBoxChange(wxCommandEvent& event){ + PlaneDirectionViewer::getInstance()->addRemoveActor(this->_index, checkbox->GetValue()); +} + +void PlaneDirectionViewerPanel::onColorChange(wxCommandEvent& event){ + + wxColourDialog* colourdiag = new wxColourDialog(this); + if(colourdiag->ShowModal()==wxID_OK){ + wxColour colour = colourdiag->GetColourData().GetColour(); + _colorchoose->SetBackgroundColour(colour); + + double r = (double)(colour.Red())/255.0; + double g = (double)(colour.Green())/255.0; + double b = (double)(colour.Blue())/255.0; + + PlaneDirectionViewer::getInstance()->changeColor(this->_index,r,g,b); + } + delete colourdiag; + +} + +PlaneDirectionViewerPanel::~PlaneDirectionViewerPanel(){ + +} + diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/PlaneDirectionViewerPanel.h b/lib/maracasVisuLib/src/interface/wxWindows/widgets/PlaneDirectionViewerPanel.h new file mode 100644 index 0000000..961f6f1 --- /dev/null +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/PlaneDirectionViewerPanel.h @@ -0,0 +1,24 @@ +#ifndef PlaneDirectionViewerPanel_H_ +#define PlaneDirectionViewerPanel_H_ + +#include +#include "PlaneDirectionManagerData.h" + +class PlaneDirectionViewerPanel : public wxPanel { + +public: + PlaneDirectionViewerPanel(wxWindow* parent, PlaneDirectionManagerData* data, int index); + ~PlaneDirectionViewerPanel(); + + void onCheckBoxChange(wxCommandEvent& event); + + void onColorChange(wxCommandEvent& event); + +private: + int _index; + wxCheckBox* checkbox; + + wxBitmapButton* _colorchoose; +}; + +#endif /*PlaneDirectionViewerPanel_H_*/ diff --git a/lib/maracasVisuLib/src/kernel/PlaneDirectionManager.cxx b/lib/maracasVisuLib/src/kernel/PlaneDirectionManager.cxx new file mode 100644 index 0000000..0900a39 --- /dev/null +++ b/lib/maracasVisuLib/src/kernel/PlaneDirectionManager.cxx @@ -0,0 +1,157 @@ + +#include "PlaneDirectionManager.h" + +/******************************************************************************************** +** Start of data viewmanagerData +*********************************************************************************************/ + +PlaneDirectionManager::PlaneDirectionManager(int radio, double colour[3] , int opacity){ + _radio = radio; + _colour = colour; + _opacity = opacity; + +} + + +PlaneDirectionManager::~PlaneDirectionManager(){ + RemoveAllActorsFromIndex(); +} + +void PlaneDirectionManager::SetRenderer(vtkRenderer* render){ + _render = render; +} +void PlaneDirectionManager::SetVectors( std::vector lstPointsx, std::vector lstPointsy, std::vector lstPointsz){ + + _lstPointsx = lstPointsx; + _lstPointsy = lstPointsy; + _lstPointsz = lstPointsz; +} + +void PlaneDirectionManager::UpdateDirections() throw (std::exception){ + UpdateVectors(); + UpdateActors(); + AddActors(); + +} +void PlaneDirectionManager::AddActors(){ + for(int i = 0; i < _vectdata.size();i++){ + _render->AddViewProp (_vectdata[i]->GetActor()); + } +} +void PlaneDirectionManager::RemoveAllActorsFromIndex(int n)throw (std::exception){ + /*due to incompleate set of points to create the plane + */ + if(_render==NULL){ + throw std::exception(); + } + for(int i = _vectdata.size()-1; i >= n;i--){ + _render->RemoveViewProp(_vectdata[i]->GetActor()); + delete _vectdata[i]; + _vectdata.pop_back(); + } + +} +void PlaneDirectionManager::UpdateVectors()throw (std::exception){ + PlaneDirectionManagerData* temp; + bool deletelast = false; + int currentdata = 0; + for(int i = 0; i < _lstPointsx.size();i++){ + if(i % 3 == 0){ + if(_vectdata.size()>currentdata){ + temp = _vectdata[currentdata]; + }else{ + temp = new PlaneDirectionManagerData(_radio, _colour, _opacity); + _vectdata.push_back(temp); + } + temp->setPoint0(_lstPointsx[i],_lstPointsy[i],_lstPointsz[i]); + deletelast = true; + }else if(i % 3 == 1){ + temp->setPoint1(_lstPointsx[i],_lstPointsy[i],_lstPointsz[i]); + }else if(i % 3 == 2){ + temp->setPoint2(_lstPointsx[i],_lstPointsy[i],_lstPointsz[i]); + currentdata++; + deletelast = false; + } + } + RemoveAllActorsFromIndex(currentdata); +} + +void PlaneDirectionManager::UpdateActors(){ + for(int i = 0; i < _vectdata.size();i++){ + _vectdata[i]->UpdateActor(); + } +} + +void PlaneDirectionManager::addRemoveActor(int index, bool addremove){ + + if(index < _vectdata.size()){ + if(addremove){ + _render->AddViewProp (_vectdata[index]->GetActor()); + }else{ + _render->RemoveViewProp (_vectdata[index]->GetActor()); + } + + } + + +} + +void PlaneDirectionManager::changeColor(int index,double r,double g,double b){ + GetPlaneDirectionManagerData(index)->ChangeColour(r,g,b); +} + +PlaneDirectionManagerData* PlaneDirectionManager::GetPlaneDirectionManagerData(int id) { + + return _vectdata[id]; +} + +void PlaneDirectionManager::WriteInformation(std::string filename, double* spc){ + FILE *ff; + ff = fopen( filename.c_str() , "w+" ); + if(spc ==NULL){ + spc = new double[3]; + spc[0] = 1; + spc[1] = 1; + spc[2] = 1; + } + if (ff!=NULL) + { + for(int i = 0; i < _vectdata.size();i++){ + + double* p0 = _vectdata[i]->getPoint0(); + double* p1 = _vectdata[i]->getPoint1(); + double* p2 = _vectdata[i]->getPoint2(); + double* dir = _vectdata[i]->GetDirection(); + + double p0x = p0[0]/spc[0]; + double p0y = p0[1]/spc[1]; + double p0z = p0[2]/spc[2]; + + double p1x = p1[0]/spc[0]; + double p1y = p1[1]/spc[1]; + double p1z = p1[2]/spc[2]; + + double p2x = p2[0]/spc[0]; + double p2y = p2[1]/spc[1]; + double p2z = p2[2]/spc[2]; + + double dirx = dir[0]/spc[0]; + double diry = dir[1]/spc[1]; + double dirz = dir[2]/spc[2]; + + fprintf(ff,"Dir%d\n",i); + fprintf(ff,"\tP0[%f, %f, %f]\tP1[%f, %f, %f]\tP2[%f, %f, %f]\tDir[%f, %f, %f] \n", + p0x,p0y,p0z, p1x,p1y,p1z, p2x,p2y,p2z, dirx,diry,dirz); + } + + fclose(ff); + } else { // else ff + printf("PlaneDirectionManager::WriteInformation ...Error... creating file"); + } //ff + + +} + +void PlaneDirectionManager::SetArrowSize(int arrowsize){ + _radio = arrowsize; +} \ No newline at end of file diff --git a/lib/maracasVisuLib/src/kernel/PlaneDirectionManager.h b/lib/maracasVisuLib/src/kernel/PlaneDirectionManager.h new file mode 100644 index 0000000..fb4d9f7 --- /dev/null +++ b/lib/maracasVisuLib/src/kernel/PlaneDirectionManager.h @@ -0,0 +1,60 @@ +#ifndef PlaneDirectionManager_H_ +#define PlaneDirectionManager_H_ + +#include + +#include + +#include "PlaneDirectionManagerData.h" + +#include + +#include + +class PlaneDirectionManager { + +public: + PlaneDirectionManager(int radio, double colour[3], int opacity); + ~PlaneDirectionManager(); + + void SetRenderer(vtkRenderer* render); + void SetVectors( std::vector lstPointsx, std::vector lstPointsy, std::vector lstPointsz); + + void UpdateDirections() throw (std::exception); + + std::vector GetPlanesData(){ + return _vectdata; + } + + void addRemoveActor(int index, bool addremove); + + void changeColor(int index,double r,double g,double b); + + PlaneDirectionManagerData* GetPlaneDirectionManagerData(int id); + + void WriteInformation(std::string filename, double* spc=NULL); + + void SetArrowSize(int arrowsize); +private: + + std::vector _lstPointsx; + std::vector _lstPointsy; + std::vector _lstPointsz; + + std::vector _vectdata; + + void RemoveAllActorsFromIndex(int n=0)throw (std::exception); + void UpdateVectors()throw (std::exception); + + void UpdateActors(); + void AddActors(); + + vtkRenderer* _render; + + int _radio; + double* _colour; + int _opacity; + +}; + +#endif /*PlaneDirectionManager_H_*/ diff --git a/lib/maracasVisuLib/src/kernel/PlaneDirectionManagerData.cxx b/lib/maracasVisuLib/src/kernel/PlaneDirectionManagerData.cxx new file mode 100644 index 0000000..e6f6133 --- /dev/null +++ b/lib/maracasVisuLib/src/kernel/PlaneDirectionManagerData.cxx @@ -0,0 +1,105 @@ + +#include "PlaneDirectionManagerData.h" + +/******************************************************************************************** +** Start of data viewmanagerData +*********************************************************************************************/ + +PlaneDirectionManagerData::PlaneDirectionManagerData(int radio, double colour[3], int opacity) +:PlanesOperations(){ + _vtkarrow = vtkArrowSource::New(); + _arrowMapper = vtkPolyDataMapper::New(); + _arrowActor = vtkActor::New(); + + _vtkarrow->SetTipResolution(30); + _vtkarrow->SetShaftResolution( 30 ); + _arrowMapper->SetInput( _vtkarrow->GetOutput() ); + _arrowActor->SetMapper(_arrowMapper); + + _radio = radio; + _colour = colour; + _opacity = opacity; + + p0 = new double[3]; + p0[0] = 0; + p0[1] = 0; + p0[2] = 0; + p1 = new double[3]; + p1[0] = 0; + p1[1] = 0; + p1[2] = 0; + p2 = new double[3]; + p2[0] = 1; + p2[1] = 1; + p2[2] = 1; + _dir = new double[3]; + _dir[0] = 0; + _dir[1] = 0; + _dir[2] = 0; +} + + +PlaneDirectionManagerData::~PlaneDirectionManagerData(){ + + _vtkarrow->Delete(); + _arrowMapper->Delete(); + _arrowActor->Delete(); + delete p0; + delete p1; + delete p2; + delete _dir; +} + +vtkProp3D* PlaneDirectionManagerData::GetActor(){ + return _arrowActor; +} + +void PlaneDirectionManagerData::UpdateActor(){ + + _arrowActor->GetProperty()->SetColor( _colour[0] , _colour[1] , _colour[2] ); + _arrowActor->GetProperty()->SetOpacity( _opacity ); + + + double* vect1= getNormal(makeVector(p0, p1)); + double* vect2= getNormal(makeVector(p0, p2)); + _dir = getNormal(getCrossProduct(vect1, vect2)); + double *newvectnorm = getNormal(getCrossProduct(_dir, vect2)); + double *midp = GetMidPoint(); + + vtkMatrix4x4* _matrix = vtkMatrix4x4::New(); + _matrix->Identity(); + _matrix->SetElement(0,0,_dir[0]*_radio); + _matrix->SetElement(1,0,_dir[1]*_radio); + _matrix->SetElement(2,0,_dir[2]*_radio); + _matrix->SetElement(0,1,vect2[0]*_radio); + _matrix->SetElement(1,1,vect2[1]*_radio); + _matrix->SetElement(2,1,vect2[2]*_radio); + _matrix->SetElement(0,2,newvectnorm[0]*_radio); + _matrix->SetElement(1,2,newvectnorm[1]*_radio); + _matrix->SetElement(2,2,newvectnorm[2]*_radio); + _matrix->SetElement(0,3,midp[0]); + _matrix->SetElement(1,3,midp[1]); + _matrix->SetElement(2,3,midp[2]); + _arrowActor->SetUserMatrix(_matrix); + +} + +void PlaneDirectionManagerData::ChangeColour(double r,double g,double b){ + _colour[0] = r; + _colour[1] = g; + _colour[2] = b; + if(_arrowActor!=NULL){ + _arrowActor->GetProperty()->SetColor( r,g,b ); + } +} + +double* PlaneDirectionManagerData::GetMidPoint(){ + if(p0 != NULL && p1 != NULL && p2 != NULL){ + double* ret = new double[3]; + ret[0] = (p0[0] + p1[0] +p2[0])/3; + ret[1] = (p0[1] + p1[1] +p2[1])/3; + ret[2] = (p0[2] + p1[2] +p2[2])/3; + return ret; + } + return NULL; +} diff --git a/lib/maracasVisuLib/src/kernel/PlaneDirectionManagerData.h b/lib/maracasVisuLib/src/kernel/PlaneDirectionManagerData.h new file mode 100644 index 0000000..64637e4 --- /dev/null +++ b/lib/maracasVisuLib/src/kernel/PlaneDirectionManagerData.h @@ -0,0 +1,78 @@ +#ifndef PlaneDirectionManagerData_H_ +#define PlaneDirectionManagerData_H_ + +#include + +#include "PlanesOperations.h" + + +#include + +#include +//#include +#include +#include +#include +#include +#include + + +class PlaneDirectionManagerData : public PlanesOperations { + +public: + PlaneDirectionManagerData(int radio, double colour[3], int opacity); + ~PlaneDirectionManagerData(); + + void setPoint0(double x,double y,double z){ + p0[0] = x; + p0[1] = y; + p0[2] = z; + } + void setPoint1(double x,double y,double z){ + p1[0] = x; + p1[1] = y; + p1[2] = z; + } + void setPoint2(double x,double y,double z){ + p2[0] = x; + p2[1] = y; + p2[2] = z; + } + double* getPoint0(){ + return p0; + } + double* getPoint1(){ + return p1; + } + double* getPoint2(){ + return p2; + } + + void UpdateActor(); + + vtkProp3D* GetActor(); + + double* GetDirection(){ + return _dir; + } + + void ChangeColour(double r,double g,double b); + +private: + double* p0; + double* p1; + double* p2; + int _radio; + double* _colour; + int _opacity; + double* _dir; + + vtkArrowSource *_vtkarrow; + vtkPolyDataMapper *_arrowMapper; + vtkActor *_arrowActor; + + double* GetMidPoint(); + +}; + +#endif /*PlaneDirectionManagerData_H_*/ diff --git a/lib/maracasVisuLib/src/kernel/PlanesOperations.cxx b/lib/maracasVisuLib/src/kernel/PlanesOperations.cxx new file mode 100644 index 0000000..001f272 --- /dev/null +++ b/lib/maracasVisuLib/src/kernel/PlanesOperations.cxx @@ -0,0 +1,77 @@ + +#include "PlanesOperations.h" + +/******************************************************************************************** +** Start of data viewmanagerData +*********************************************************************************************/ + +PlanesOperations::PlanesOperations(){ +} + + +PlanesOperations::~PlanesOperations(){ + +} + + +double* PlanesOperations::getCrossProduct(double* vect0,double* vect1){ + double* vectCross; + vectCross = new double[3]; + vectCross[0] = vect0[1]*vect1[2]-(vect0[2]*vect1[1]); + vectCross[1] = -(vect0[0]*vect1[2]-(vect0[2]*vect1[0])); + vectCross[2] = vect0[0]*vect1[1]-(vect0[1]*vect1[0]); + + return vectCross; +} +/** +** Returns the magnitud of the given vector +**/ +double PlanesOperations::getMagnitud(double* vect){ + + double mag; + + mag = sqrt(pow(vect[0],2) + pow(vect[1],2) + pow(vect[2],2)); + + std::cout<<"mag "< + +#include + +class PlanesOperations { + +public: + PlanesOperations(); + ~PlanesOperations(); + + + + double* getCrossProduct(double* vect0,double* vect1); + double getPodoubleProduct(double* vect0,double* vect1); + double* getNormal(double* vect); + double getMagnitud(double* vect); + double* makeVector(double podouble0[3], double podouble1[3]); + +}; + +#endif /*PlanesOperations_H_*/ -- 2.46.0