#include "wxVtkSceneManager.h"
-#include <vtkInteractorStyleBaseView2D.h>
-
-#include "vtkConeSource.h"
-#include "vtkPolyDataMapper.h"
-#include "vtkActor.h"
-#include "vtkRenderer.h"
namespace bbtk
{
//=========================================================================
- wxVtkSceneManager::wxVtkSceneManager(wxVtk3DBaseView *baseView,int id)
+ wxVtkSceneManager::wxVtkSceneManager(wxDropTarget *parent, wxVtk3DBaseView *baseView,int id)
{
_id=id;
_baseView=baseView;
if( _baseView!=NULL )
{
- vtkInteractorStyleBaseView* baseViewControlManager = (vtkInteractorStyleBaseView*)_baseView->GetInteractorStyleBaseView();
- baseViewControlManager->AddInteractorStyleMaracas( this );
+
+ _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget(parent);
+ registerController(this);
configureBaseView();
- vtkRenderer *ren1 =_baseView->GetRenderer();
+ /*//JUST TO TEST
vtkConeSource *cone = vtkConeSource::New();
- cone->SetResolution(8);
+ cone->SetResolution(10);
vtkPolyDataMapper *map = vtkPolyDataMapper::New();
map->SetInput(cone->GetOutput());
act->SetMapper(map);
- ren1->AddActor(act);
+ /////////////////////
+
+
+ vtkPoints *_pts = vtkPoints::New();
+ _pts->SetNumberOfPoints(4);
+
+ _pts->SetPoint(0, -1 , -1 , 0 );
+ _pts->SetPoint(1, 1 , -1 , 0 );
+ _pts->SetPoint(2, 1 , 1 , 0 );
+ _pts->SetPoint(3, -1 , 1 , 0 );
+
+ vtkCellArray *lines = vtkCellArray::New();
+ lines->InsertNextCell(5);
+ lines->InsertCellPoint(0);
+ lines->InsertCellPoint(1);
+ lines->InsertCellPoint(2);
+ lines->InsertCellPoint(3);
+ lines->InsertCellPoint(0);
+
+ vtkPolyData *_pd = vtkPolyData::New();
+ _pd->SetPoints( _pts );
+ _pd->SetLines( lines );
+
+ vtkActor *_pointVtkActor = vtkActor::New();
+ vtkPolyDataMapper* _bboxMapper = vtkPolyDataMapper::New();
+
+ _bboxMapper->SetInput(_pd);
+ _pointVtkActor->SetMapper(_bboxMapper);
+
+ getRenderer()->AddActor(_pointVtkActor);
+
+
+*/
+ /////////////////////
+
+ //getRenderer()->AddActor(act);
- ren1->Render();
+ //getRenderer()->Render();
+
+
}
}
+ //=========================================================================
+ void wxVtkSceneManager::disconnectDrop()
+ {
+ _baseView->GetWxVTKRenderWindowInteractor()->SetDropTarget(NULL);
+ }
//=========================================================================
wxVtkSceneManager::~wxVtkSceneManager()
{
void wxVtkSceneManager::configureBaseView()
{
- vtkInteractorStyleBaseView2D *temp = new vtkInteractorStyleBaseView2D();
- _baseView->SetInteractorStyleBaseView(temp);
+ vtkInteractorStyleBaseView2D *interactorstylebaseview = vtkInteractorStyleBaseView2D::New();
+
+ _baseView->SetInteractorStyleBaseView(interactorstylebaseview);
+
+ wxVTKRenderWindowInteractor *iren = _baseView->GetWxVTKRenderWindowInteractor();
+ interactorstylebaseview->SetInteractor ( iren );
+ iren->SetInteractorStyle(interactorstylebaseview);
+ interactorstylebaseview->SetwxVtkBaseView(_baseView);
+
+ //_baseView->GetRenderer()->SetActiveCamera(_baseView->GetCamera());
+ //_baseView->GetRenderer()->ResetCamera ();
+ //_baseView->GetCamera()->SetParallelProjection(true);
+
+ _baseView->GetRenderer()->SetBackground(0.9,0.9,0.9);
+ _baseView->GetRenderer()->GradientBackgroundOff();
+ _baseView->Refresh();
}
//=========================================================================
+ void wxVtkSceneManager::createGBlackBox(int x, int y, std::string packageName, std::string boxName)
+ {
+ int type = GBLACKBOX;
+
+ //Create the MVC Objects
+ GBlackBoxModel *model = (GBlackBoxModel*)GObjectsMVCFactory::getInstance()->createGObjectModel(type);
+ vtkGObjectView *view = GObjectsMVCFactory::getInstance()->createGObjectView(type);
+ GObjectController* controller = GObjectsMVCFactory::getInstance()->createGObjectController(type);
+
+ BlackBoxDescriptor::Pointer descriptor = GObjectsMVCFactory::getInstance()->getBlackBoxDescriptor(packageName, boxName);
+
+ //Prepares the initial model
+ double xx = x;
+ double yy = _baseView->GetRenWin()->GetSize()[1]-y;
+ double zz = 0;
+ _baseView->TransCoordScreenToWorld(xx,yy,zz);
+ model->setInicPoint(xx,yy,zz);
+ model->addObserver(view);
+
+ //Iterate and create the input ports
+ std::map<std::string, BlackBoxInputDescriptor*> descriptorInMap = descriptor->GetInputDescriptorMap();
+ std::map<std::string, BlackBoxInputDescriptor*>::iterator itInput;
+
+ //ERASE
+ cantTemp=0;
+
+ for(itInput = descriptorInMap.begin(); itInput != descriptorInMap.end(); ++itInput)
+ {
+ BlackBoxInputDescriptor *desc = itInput->second;
+ createGInputPort(desc,model);
+
+ //ERASE
+ cantTemp+=2;
+ }
+
+
+ //Iterate and create the output ports
+ std::map<std::string, BlackBoxOutputDescriptor*> descriptorOutMap = descriptor->GetOutputDescriptorMap();
+ std::map<std::string, BlackBoxOutputDescriptor*>::iterator itOutput;
+
+ //ERASE
+ cantTemp=0;
+
+ for(itOutput = descriptorOutMap.begin();itOutput != descriptorOutMap.end(); ++itOutput)
+ {
+ BlackBoxOutputDescriptor *desc = itOutput->second;
+ createGOutputPort(desc,model);
+
+ //ERASE
+ cantTemp+=2;
+ }
+
+
+ //Associates the view with the correspondent renderer and the model.
+ //(NOTE: Refresh is only made by the view)
+ view->setModel(model);
+ view->setBaseView(_baseView);
+ view->initVtkObjects();
+
+ //Associates the controller with the correspondent model and view
+ controller->setModelAndView(model,view);
+
+ //Refresh renderwindow with new objects
+ refreshRenderWindow();
+
+ //Register the controller of the new object
+ registerController((InteractorStyleMaracas*) controller);
+
+ //Add the object to the objects list (only boxes and connectors)
+ objects.push_back(model);
+
+ }
+
+ //=========================================================================
+
+ void wxVtkSceneManager::createGOutputPort(BlackBoxOutputDescriptor *desc,GBlackBoxModel *blackBox)
+ {
+ int type = GPORT;
+
+ //Create the MVC Objects
+ GPortModel *model = (GPortModel*)GObjectsMVCFactory::getInstance()->createGObjectModel(type);
+ vtkGObjectView *view = GObjectsMVCFactory::getInstance()->createGObjectView(type);
+ GObjectController* controller = GObjectsMVCFactory::getInstance()->createGObjectController(type);
+
+ model->registerInBox(blackBox);
+ blackBox->addOutputPort(model);
+
+ //Prepares the initial model
+ double xx = 0;
+ double yy = 0;
+ double zz = 0;
+ blackBox->getInicPoint(xx,yy,zz);
+
+ xx++;
+ yy+=cantTemp;
+ model->setInicPoint(xx,yy,zz);
+
+ //Associates the view with the correspondent renderer and the model.
+ //(NOTE: Refresh is only made by the view)
+ view->setModel(model);
+ view->setBaseView(_baseView);
+ view->initVtkObjects();
+
+ //Associates the controller with the correspondent model and view
+ controller->setModelAndView(model,view);
+
+ //Register the controller of the new object
+ registerController((InteractorStyleMaracas*) controller);
+ }
+
+ //=========================================================================
+
+ void wxVtkSceneManager::createGInputPort(BlackBoxInputDescriptor *desc,GBlackBoxModel *blackBox)
+ {
+ int type = GPORT;
+
+ //Create the MVC Objects
+ GPortModel *model = (GPortModel*)GObjectsMVCFactory::getInstance()->createGObjectModel(type);
+ vtkGObjectView *view = GObjectsMVCFactory::getInstance()->createGObjectView(type);
+ GObjectController* controller = GObjectsMVCFactory::getInstance()->createGObjectController(type);
+
+ model->registerInBox(blackBox);
+ blackBox->addInputPort(model);
+
+
+ //Prepares the initial model
+ double xx = 0;
+ double yy = 0;
+ double zz = 0;
+ blackBox->getInicPoint(xx,yy,zz);
+
+ xx--;
+ yy+=cantTemp;
+ model->setInicPoint(xx,yy,zz);
+
+ //Associates the view with the correspondent renderer and the model.
+ //(NOTE: Refresh is only made by the view)
+ view->setModel(model);
+ view->setBaseView(_baseView);
+ view->initVtkObjects();
+
+ //Associates the controller with the correspondent model and view
+ controller->setModelAndView(model,view);
+
+ //Register the controller of the new object
+ registerController((InteractorStyleMaracas*) controller);
+ }
+
+ //=========================================================================
+
+ void wxVtkSceneManager::registerController(InteractorStyleMaracas *param)
+ {
+ vtkInteractorStyleBaseView* baseViewControlManager = (vtkInteractorStyleBaseView*)_baseView->GetInteractorStyleBaseView();
+ baseViewControlManager->AddInteractorStyleMaracas( param );
+ }
+
+ //=========================================================================
+
+ vtkRenderer* wxVtkSceneManager::getRenderer()
+ {
+ return _baseView->GetRenderer();
+ }
+
+ //=========================================================================
+
+ vtkRenderWindow* wxVtkSceneManager::getRenderWindow()
+ {
+ return _baseView->GetRenWin();
+ }
+ //=========================================================================
+
+ void wxVtkSceneManager::refreshRenderWindow()
+ {
+ _baseView->GetRenWin()->Render();
+ }
+ //=========================================================================
+
+ bool wxVtkSceneManager::OnMouseMove()
+ {
+ //cout<<"RaC wxVtkSceneManager::OnMouseMove "<<endl;
+ return true;
+ }
+ //=========================================================================
} // EO namespace bbtk
// EOF