Developer documentation | Axl-2.5.1

axlActor.cpp
Go to the documentation of this file.
1 /* axlActor.cpp ---
2  *
3  * Author: Meriadeg Perrinel
4  * Copyright (C) 2008 - Meriadeg Perrinel, Inria.
5  * Created: Fri Dec 17 10:59:21 2010 (+0100)
6  * Version: $Id$
7  * Last-Updated: Wed Mar 16 21:51:16 2011 (+0100)
8  * By: Meriadeg Perrinel
9  * Update #: 23
10  */
11 
12 /* Commentary:
13  *
14  */
15 
16 /* Change log:
17  *
18  */
19 
20 #include "axlActor.h"
21 
26 #include "axlCore/axlMesh.h"
27 
28 
29 #include "axlActorCurveBSpline.h"
30 #include "axlActorSurfaceBSpline.h"
31 #include "axlActorShapeBSpline.h"
32 #include "axlActorVolumeBSpline.h"
33 #include "axlActorComposite.h"
34 
35 
36 #include <vtkActor.h>
37 #include <vtkVolume.h>
38 #include <vtkAssemblyNode.h>
39 #include <vtkAssemblyPath.h>
40 #include <vtkCellArray.h>
41 #include <vtkCellData.h>
42 #include <vtkCellPicker.h>
43 #include <vtkDoubleArray.h>
44 #include <vtkCommand.h>
45 #include <vtkMatrix4x4.h>
46 #include <vtkPoints.h>
47 #include <vtkPointData.h>
48 #include <vtkPolyData.h>
49 #include <vtkDataSet.h>
50 #include <vtkPolyDataMapper.h>
51 #include <vtkDataSetMapper.h>
52 //#include <vtkUnstructuredGridVolumeMapper.h>
53 #include <vtkProp3DCollection.h>
54 #include <vtkProperty.h>
55 #include <vtkRenderer.h>
56 #include <vtkRendererCollection.h>
57 #include <vtkRenderWindow.h>
58 #include <vtkRenderWindowInteractor.h>
59 #include <vtkSmartPointer.h>
60 #include <vtkTimerLog.h>
61 #include <vtkUnstructuredGrid.h>
62 
63 #include <vtkShader.h>
64 //#include <vtkShader2Collection.h>
65 #include <vtkShaderProgram.h>
66 #include <vtkOpenGLProperty.h>
67 
68 class axlActorControlPolygonObserver : public vtkCommand
69 {
70 public:
72  {
74  }
75 
76  virtual void Execute(vtkObject *caller, unsigned long event, void *)
77  {
78  vtkRenderWindowInteractor *interactor = observerDataAssembly->getInteractor();
79  if(event == vtkCommand::InteractionEvent) {
80  if (dynamic_cast <axlAbstractCurveBSpline *>(observerData)) {
81  if(axlActorCurveBSpline *actorCurveBSpline = dynamic_cast<axlActorCurveBSpline *>(observerDataAssembly))
82  actorCurveBSpline->pointsUpdate();
83  }
84  else if (dynamic_cast <axlAbstractSurfaceBSpline *>(observerData)) {
85  if(axlActorSurfaceBSpline *actorSurfaceBSpline = dynamic_cast<axlActorSurfaceBSpline *>(observerDataAssembly))
86  actorSurfaceBSpline->pointsUpdate();
87 
88  }
89  else if (dynamic_cast <axlAbstractVolumeBSpline *>(observerData)) {
90  if(axlActorVolumeBSpline *actorVolumeBSpline = dynamic_cast<axlActorVolumeBSpline *>(observerDataAssembly))
91  actorVolumeBSpline->pointsUpdate();
92  }
93  else if (dynamic_cast <axlShapeBSpline *>(observerData)) {
94  if(axlActorShapeBSpline *actorShapeBSpline = dynamic_cast<axlActorShapeBSpline *>(observerDataAssembly))
95  actorShapeBSpline->pointsUpdate();
96  }
97 
98  if (dynamic_cast<axlAbstractData *>(observerData)->fields().count() != 0) {
99  dynamic_cast<axlAbstractData *>(observerData)->touchField();
100  dynamic_cast<axlAbstractData *>(observerData)->touchGeometry();
101  }
102  observerData_points->Modified();
103  }// endif event == vtkCommand::InteractionEvent
104 
105  if (event == vtkCommand::LeftButtonPressEvent && interactor->GetShiftKey()) {
106  // Actor State processing
108  this->pickAndSetMode(axlActor::selection,false);
109 
111  this->pickAndSetMode(axlActor::passive,false);
112  }//end left button press event
113 
114  if(event == vtkCommand::RightButtonPressEvent && interactor->GetShiftKey()) {
115 
116  if (interactor->GetControlKey())
117  {
120  }
121  else
122  this->pickAndSetMode(axlActor::passive,true);
123  }//end if right button press event
124 
125  if(event == vtkCommand::KeyPressEvent) {
126  vtkRenderWindowInteractor *interactor = observerDataAssembly->getInteractor();
127  QString modifier(interactor->GetKeySym());
128  if(modifier.compare("e") == 0 && observerDataAssembly->getState()==axlActor::selection)//Tab Active : mode editable change
130 
131  if(modifier.compare("u") == 0 && observerDataAssembly->getState()==axlActor::edition)//Tab Active : mode editable change
133  }
134  }//execute
135 
136  virtual void setData(dtkAbstractData *data)
137  {
138  observerData = data ;
139  }
140 
141  virtual dtkAbstractData * getData(void)
142  {
143  return observerData;
144  }
145 
146  // define differents behavior when user pick on a actor with keyboard active or not and mouse event.
147  virtual void pickAndSetMode(int state, bool pathNull)
148  {
149  //double currentTime = vtkTimerLog::GetCPUTime();
150  //double start = clock();
151  // we need some Render coordonate (only one render for the moment)
152  vtkSmartPointer<vtkAssemblyPath> path;
153  vtkRenderWindowInteractor *interactor = observerDataAssembly->getInteractor();
154  vtkSmartPointer<vtkRenderWindow> renderWindow = interactor->GetRenderWindow();
155  vtkSmartPointer<vtkRendererCollection> rendererCollection = renderWindow->GetRenderers();
156  vtkSmartPointer<vtkRenderer> render = rendererCollection->GetFirstRenderer();
157  int X = interactor->GetEventPosition()[0];
158  int Y = interactor->GetEventPosition()[1];
159 
160  if (!render || !render->IsInViewport(X, Y))
161  {
162  qDebug()<<" No renderer or bad cursor coordonates in axlActor";
163  }
164 
165  /*vtkPropCollection *propSet = observerDataPicker->GetPickList();
166  bool isNull = propSet->GetLastProp()==NULL;
167  qDebug()<<"execute " <<propSet->GetNumberOfItems()<<isNull;*/
168 
169  //observerDataPicker->InitializePickList();
170  //observerDataPicker->GetPickFromList();
171 
172  observerDataPicker->Pick(X,Y,0.0,render);
173 
174  path = observerDataPicker->GetPath();
175 
176  if (!pathNull && path != NULL)
177  {
178  //qDebug()<<"axlActor::pickAndSetMode"<<observerDataPicker<<observerDataPicker->GetProp3D()->GetPickable()<<path->GetLastNode()->GetViewProp();
179  vtkCollectionSimpleIterator listPropIterator;
180  path->InitTraversal(listPropIterator);
181  vtkSmartPointer<vtkAssemblyNode> node;
182  //bool found=0;
183  /*for(int i = 0; i < path->GetNumberOfItems() && !found ; i++)
184  {
185  node = path->GetNextNode(listPropIterator);
186  if(node->GetViewProp() == vtkProp::SafeDownCast(observerData_actor))
187  {
188  qDebug()<<"axlActor::pickAndSetMode";
189  observerDataAssembly->setMode(state);
190  found = 1;
191  }
192  }**/
193  // qDebug()<<" axlActor :: pickAndSetMode";
194  if(path->GetLastNode()->GetViewProp() == vtkProp::SafeDownCast(observerData_actor))
195  {
196  //observerDataAssembly->setMode(state);
197  }
198 
199  /*qDebug()<<"End Time pickAndSetMode "<<vtkTimerLog::GetCPUTime()<< vtkTimerLog::GetCPUTime() - currentTime;
200  double end = clock();
201  double cpuTime = difftime(end, start)/CLOCKS_PER_SEC;
202  qDebug()<<"axlVtkView cpu time "<<cpuTime; //d->widget->update() ;*/
203  }
204  else if(pathNull && path==NULL)
205  {
207  }
208 
209  }
211  vtkSmartPointer<vtkActor> observerData_actor;
212  vtkSmartPointer<vtkCellPicker> observerDataPicker;
213  dtkAbstractData *observerData;
214  vtkSmartPointer<vtkPoints> observerData_points;
215  vtkSmartPointer<vtkPolyData> observerData_polyData;
216  // useful for axlActorVolumeBSpline
217  vtkSmartPointer<vtkUnstructuredGrid> observerData_UnstructuredGrid;
218 };
219 
220 
221 
222 // /////////////////////////////////////////////////////////////////
223 // axlActorPrivate
224 // /////////////////////////////////////////////////////////////////
225 
226 class axlActorPrivate
227 {
228 public:
229  vtkSmartPointer<vtkPoints> points;
230  vtkSmartPointer<vtkPolyData> polyData;
231  vtkSmartPointer<vtkUnstructuredGrid> unstructuredGrid;
232  vtkSmartPointer<vtkCellArray> cellArray;
233  vtkSmartPointer<vtkDoubleArray> normals;
234  vtkSmartPointer<vtkActor> actor;
235  vtkSmartPointer<vtkPolyDataMapper> mapper;
236  //To use if necessary
237  vtkSmartPointer<vtkVolume> actor3D;
238  vtkSmartPointer<vtkDataSetMapper> mapper3D;
239  vtkRenderWindowInteractor *interactor;
240  vtkSmartPointer<vtkCellPicker> CpCursorPicker;
242  // axlActor::ActorState state;
243 
244  int State;
245 
246  QString active_scalars;
247 };
248 
250 {
251  return (bool)(this->GetVisibility());
252 }
253 
254 void axlActor::setInteractor(void *interactor)
255 {
256  if(interactor)
257  d->interactor = static_cast<vtkRenderWindowInteractor *>(interactor);
258  else
259  d->interactor = NULL;
260 }
261 
262 
263 
264 vtkRenderWindowInteractor *axlActor::getInteractor(void)
265 {
266  return d->interactor;
267 }
268 
269 
270 dtkAbstractData * axlActor::getObserverData(void)
271 {
272  return d->observer->getData();
273 }
274 
275 vtkSmartPointer<vtkPoints> axlActor::getPoints(void)
276 {
277  return d->points;
278 }
279 
280 void axlActor::setPoints(vtkSmartPointer<vtkPoints> points)
281 {
282  d->points = points;
283 }
284 
285 vtkSmartPointer<vtkDoubleArray> axlActor::getNormals(void)
286 {
287  return d->normals;
288 }
289 
290 void axlActor::setNormals(vtkSmartPointer<vtkDoubleArray> normals)
291 {
292  d->normals = normals;
293 }
294 
295 vtkSmartPointer<vtkPolyData> axlActor::getPolyData(void)
296 {
297  return d->polyData;
298 }
299 
300 void axlActor::setPolyData(vtkSmartPointer<vtkPolyData> polyData)
301 {
302  d->polyData = polyData;
303 }
304 
305 
306 
307 vtkSmartPointer<vtkCellArray> axlActor::getCellArray(void)
308 {
309  return d->cellArray;
310 }
311 
312 void axlActor::setCellArray(vtkSmartPointer<vtkCellArray> cellArray)
313 {
314  d->cellArray = cellArray;
315 }
316 
317 vtkSmartPointer<vtkActor> axlActor::getActor(void)
318 {
319  return d->actor;
320 }
321 
322 void axlActor::setActor(vtkSmartPointer<vtkActor> actor)
323 {
324  d->actor = actor;
325 }
326 
327 vtkSmartPointer<vtkPolyDataMapper> axlActor::getMapper(void)
328 {
329  return d->mapper;
330 }
331 
332 void axlActor::setMapper(vtkSmartPointer<vtkPolyDataMapper> mapper)
333 {
334  d->mapper = mapper;
335 }
336 
337 
338 // To use if necessary
339 vtkSmartPointer<vtkVolume> axlActor::getvtkVolume(void){
340  return d->actor3D;
341 }
342 
343 void axlActor::setvtkVolume(vtkSmartPointer<vtkVolume> actor){
344  d->actor3D = actor;
345 }
346 
347 vtkSmartPointer<vtkDataSetMapper> axlActor::getDataSetMapper(void){
348  return d->mapper3D;
349 }
350 
351 void axlActor::setDataSetMapper(vtkSmartPointer<vtkDataSetMapper> mapper){
352  d->mapper3D = mapper;
353 }
354 
355 
356 vtkSmartPointer<vtkCellPicker> axlActor::getCellPicker(void)
357 {
358  return d->CpCursorPicker;
359 }
360 
361 void axlActor::setCellPicker(vtkSmartPointer<vtkCellPicker> cellPicker)
362 {
363  d->CpCursorPicker = cellPicker;
364 }
365 
367 {
368  return d->observer;
369 }
370 
372 {
373  d->observer = observer;
374 }
375 
376 vtkSmartPointer<vtkUnstructuredGrid> axlActor::getUnstructuredGrid(void)
377 {
378  return d->unstructuredGrid;
379 }
380 
381 void axlActor::setUnstructuredGrid(vtkSmartPointer<vtkUnstructuredGrid> unstructuredGrid)
382 {
383  d->unstructuredGrid = unstructuredGrid;
384 }
385 
387 {
388  d->observer = axlActorControlPolygonObserver::New();
389 
390  d->observer->observerDataAssembly = this;
391  d->observer->observerDataPicker = this->getCellPicker();
392  d->observer->observerData_points = this->getPoints();
393 
394  d->observer->observerData_polyData = this->getPolyData();
395  d->observer->observerData_UnstructuredGrid = this->getUnstructuredGrid();
396 
397  d->observer->observerData_actor = this->getActor();
398 
399  d->interactor->AddObserver(vtkCommand::LeftButtonPressEvent, d->observer);
400  d->interactor->AddObserver(vtkCommand::RightButtonPressEvent, d->observer);
401  d->interactor->AddObserver(vtkCommand::InteractionEvent, d->observer);
402  d->interactor->AddObserver(vtkCommand::KeyPressEvent, d->observer);
403 }
404 
406 {
407  if(d->observer) {
408  d->interactor->RemoveObservers(vtkCommand::LeftButtonPressEvent, d->observer);
409  d->interactor->RemoveObservers(vtkCommand::RightButtonPressEvent, d->observer);
410  d->interactor->RemoveObservers(vtkCommand::InteractionEvent, d->observer);
411  d->interactor->RemoveObservers(vtkCommand::KeyPressEvent, d->observer);
412 
413  d->observer->observerDataAssembly = NULL;
414  d->observer->observerDataPicker = NULL;
415  d->observer->observerData_points = NULL;
416  d->observer->observerData_polyData = NULL;
417  d->observer->observerData_UnstructuredGrid = NULL;
418  d->observer->observerData_actor = NULL;
419  d->observer->Delete();
420  d->observer = NULL;
421  }
422 }
423 
424 void axlActor::setObserverData(dtkAbstractData *data)
425 {
426  d->observer->setData(data);
427 }
428 
430 {
431  return d->State;
432 }
433 
434 void axlActor::setState(int state)
435 {
436  d->State = state;
437 }
438 
439 
440 void axlActor::setDisplay(bool display)
441 {
442  if (!this->getActor()) {
443  qDebug() << "No tet actor computed for this axlActor";
444  return;
445  }
446 
447  if (display) {
448  if (!this->GetParts()->IsItemPresent(this->getActor())) {
449  this->VisibilityOn();
450  }
451  }
452 
453  if (!display){
454  if (this->GetParts()->IsItemPresent(this->getActor())!=0) {
455  this->VisibilityOff();
456  }
457  }
458 }
459 
460 
461 void axlActor::setOpacity(double opacity)
462 {
463  Q_UNUSED(opacity);
464 
465  if (axlAbstractData *data = dynamic_cast<axlAbstractData *>(this->data())) {
466  double opa = data->opacity();
467  d->actor->GetProperty()->SetOpacity(opa);
468  }
469 }
470 
471 void axlActor::setSize(double size)
472 {
473 // Q_UNUSED(size);
474 
475  // if(axlAbstractData *data = dynamic_cast<axlAbstractData *>(this->data()))
476  if (dynamic_cast<axlAbstractData *>(this->data())) {
477 // double opa = data->size();
478  d->actor->SetScale(size);
479  }
480 }
481 
482 void axlActor::setInterpolation(int interpolation)
483 {
484  d->actor->GetProperty()->SetInterpolation(interpolation);
485 
486  if (axlMesh *data = dynamic_cast<axlMesh *>(this->data()))
487  data->setInterpolation(interpolation);
488 }
489 
490 void axlActor::setColor(double red, double green, double blue)
491 {
492  Q_UNUSED(red);
493  Q_UNUSED(green);
494  Q_UNUSED(blue);
495 
496  if (axlAbstractData *data = dynamic_cast<axlAbstractData *>(this->data())) {
497  vtkProperty *prop = this->getActor()->GetProperty();
498  QColor color = data->color();
499 
500  if (this->getState() == axlActor::passive) {
501  prop->SetColor(color.redF(), color.greenF(), color.blueF());
502 
503  }
504  else if (this->getState() == axlActor::selection || this->getState() == axlActor::edition) {
505  qreal *h = new qreal(0.0);
506  qreal *s = new qreal(0.0);
507  qreal *l = new qreal(0.0);
508  color.getHslF(h, s, l);
509  color.setHslF(*h, *s, *l + (1.0 - *l) / 2.0);
510  prop->SetColor(color.redF(), color.greenF(), color.blueF());
511  }
512  }
513 
514  this->Modified();
515 }
516 
517 void axlActor::setShader(QString vsfile)
518 {
519  // verify first that the vertex shader file exist :
520  vtkProperty *prop = this->getActor()->GetProperty();
521 
522  if (QFile::exists(vsfile)) {
523  QFileInfo file_info = QFileInfo(vsfile);
524 
525  QString shader_vertex_extension = ".vs";
526  QString shader_fragment_extension = ".fs";
527 
528  QString vertex_shader_source = dtkReadFile(file_info.path() + "/" +
529  file_info.completeBaseName() +
530  shader_vertex_extension);
531 
532  QString fragment_shader_source = dtkReadFile(file_info.path() + "/" +
533  file_info.completeBaseName() +
534  shader_fragment_extension);
535 
536  this->setShaderFromString(vertex_shader_source, fragment_shader_source);
537  prop->GetShading();
538  }
539  else {
540  prop->vtkProperty::ShadingOff();
541  }
542 
543  this->Modified();
544 }
545 
546 void axlActor::setShaderFromString(QString vertex_shader_source,
547  QString fragment_shader_source)
548 {
549  vtkProperty *prop = this->getActor()->GetProperty();
550 
551  if ((vertex_shader_source != "") && (fragment_shader_source != "")) {
552  //The GLSL binded program
553  vtkSmartPointer<vtkShaderProgram> program = vtkSmartPointer<vtkShaderProgram>::New();
554  // program->SetContext(renWin);
555 
556  // Prepare the fragment shader
557  vtkSmartPointer<vtkShader> fragment_shader = vtkSmartPointer<vtkShader>::New();
558 
559 // fragment_shader->SetType(VTK_SHADER_TYPE_FRAGMENT);
560  fragment_shader->SetType(vtkShader::Type::Fragment);
561 // fragment_shader->SetSourceCode(fragment_shader_source.toStdString().c_str());
562  fragment_shader->SetSource(fragment_shader_source.toStdString().c_str());
563 // fragment_shader->SetContext(program->GetContext());
564 
565  // Prepare the vertex shader
566  vtkSmartPointer<vtkShader> vertex_shader = vtkSmartPointer<vtkShader>::New();
567 
568 // vertex_shader->SetType(VTK_SHADER_TYPE_VERTEX);
569  vertex_shader->SetType(vtkShader::Type::Vertex);
570 // vertex_shader->SetSourceCode(vertex_shader_source.toStdString().c_str());
571  vertex_shader->SetSource(vertex_shader_source.toStdString().c_str());
572 // vertex_shader->SetContext(program->GetContext());
573 
574 // program->GetShaders()->AddItem(vertex_shader);
575  program->SetVertexShader(vertex_shader);
576 // program->GetShaders()->AddItem(fragment_shader);
577  program->SetFragmentShader(fragment_shader);
578 
579  // TODO:: fix this for openGL2
580  vtkSmartPointer<vtkOpenGLProperty> openGLproperty = static_cast<vtkOpenGLProperty*>(prop);
581 // openGLproperty->SetPropProgram(program);
582 
583  // activate the shading
584  prop->vtkProperty::ShadingOn();
585  }
586  else {
587  prop->vtkProperty::ShadingOff();
588  }
589 
590 }
591 
592 
593 // slots---------------------------
594 
595 void axlActor::hide(void)
596 {
597  this->setMode(0);
598  this->VisibilityOff();
599  this->Modified();
600 }
601 
602 void axlActor::show(void)
603 {
604  this->VisibilityOn();
605  this->Modified();
606 }
607 
609 {
610  this->Modified();
611 }
612 
614 {
615  this->deleteObserver();
616  this->RemoveAllObservers();
617  this->RemovePart(this->getActor());
618  this->getActor()->RemoveAllObservers();
619 
620  if(axlActorComposite *actorComposite = dynamic_cast<axlActorComposite *>(this->parent()) )
621  actorComposite->removeActorReference(this);
622 
623  //this->getPoints()->Delete();
624  //this->getCellArray()->Delete();
625  // delete current vtkPoint and vtkCellArray
626  //this->getPoints()->Reset();
627  //->Reset();
628 
629  //this->getPoints()->Squeeze();
630  //this->getCellArray()->Squeeze();
631 
632 
633  //this->getPolyData()->Reset();
634  //this->getPolyData()->Squeeze();
635 
636  //this->getMapper()->Delete();
637  //this->getActor()->Delete();
638 
639  //this->Delete();
640 }
641 
642 
643 //axlAbstractActor *axlActor::createActor(dtkAbstractData *data){
644 
645 // if (axlPoint *point = dynamic_cast<axlPoint *>(data)) {
646 
647 // axlActorPoint *actor = axlActorPoint::New();
648 // return actor;
649 // }
650 
651 // else if (axlCone *cone = dynamic_cast<axlCone *>(data)) {
652 
653 // axlActorCone *actor = axlActorCone::New();
654 // return actor;
655 // }
656 
657 // else if (axlCylinder *cylinder = dynamic_cast<axlCylinder *>(data)) {
658 
659 // axlActorCylinder *actor = axlActorCylinder::New();
660 // return actor;
661 // }
662 
663 // else if (axlTorus *torus = dynamic_cast<axlTorus *>(data)) {
664 
665 // axlActorTorus *actor = axlActorTorus::New();
666 // return actor;
667 // }
668 
669 // // else if (axlCircleArc *arc = dynamic_cast<axlCircleArc *>(data)) {
670 
671 // // axlActorCircleArc *actor = axlActorCircleArc::New();
672 // // return actor;
673 // // }
674 
675 // else if (axlEllipsoid *ellipsoid = dynamic_cast<axlEllipsoid *>(data)) {
676 
677 // axlActorEllipsoid *actor = axlActorEllipsoid::New();
678 // return actor;
679 // }
680 // else if (axlLine *line = dynamic_cast<axlLine *>(data)) {
681 
682 // axlActorLine *actor = axlActorLine::New();
683 // return actor;
684 // }
685 // else if (axlPlane *plane = dynamic_cast<axlPlane *>(data)) {
686 
687 // axlActorPlane *actor = axlActorPlane::New();
688 // return actor;
689 // }
690 // else if (axlSphere *sphere = dynamic_cast<axlSphere *>(data)) {
691 
692 // axlActorSphere *actor = axlActorSphere::New();
693 // return actor;
694 // }
695 
696 // else if (axlAbstractCurveBSpline *spline_curve = dynamic_cast<axlAbstractCurveBSpline *>(data)) {
697 
698 // axlActorCurveBSpline *actor = axlActorCurveBSpline::New();
699 // return actor;
700 // }
701 
702 // else if(axlAbstractSurfaceBSpline *spline_surface = dynamic_cast<axlAbstractSurfaceBSpline *>(data)) {
703 
704 // axlActorSurfaceBSpline *actor = axlActorSurfaceBSpline::New();
705 // return actor;
706 // }
707 // else if(axlAbstractVolumeBSpline *spline_volume = dynamic_cast<axlAbstractVolumeBSpline *>(data)) {
708 
709 // axlActorVolumeBSpline *actor = axlActorVolumeBSpline::New();
710 // return actor;
711 // }
712 
713 // else if(axlAbstractDataComposite *composite = dynamic_cast<axlAbstractDataComposite *>(data))
714 // {
715 // axlActorComposite *actor = axlActorComposite::New();
716 // return actor;
717 // }else if (axlDataDynamic *line = dynamic_cast<axlDataDynamic *>(data)) {
718 
719 // axlActorDataDynamic *actor = axlActorDataDynamic::New();
720 // return actor;
721 // }else
722 // {
723 // axlActorMesh *actor = axlActorMesh::New();
724 // return actor;
725 // }
726 
727 //}
728 
729 
730 
731 
732 QStringList axlActor::fields(void)
733 {
734  QStringList fields;
735 
736  if(d->polyData){
737  for(int i = 0; i < d->polyData->GetPointData()->GetNumberOfArrays(); i++)
738  fields << QString(d->polyData->GetPointData()->GetArray(i)->GetName());
739 
740  for(int i = 0; i < d->polyData->GetCellData()->GetNumberOfArrays(); i++)
741  fields << QString(d->polyData->GetCellData()->GetArray(i)->GetName());
742 
743  for(int i = 0; i < d->polyData->GetFieldData()->GetNumberOfArrays(); i++)
744  fields << QString(d->polyData->GetFieldData()->GetArray(i)->GetName());
745  }
746  if(d->unstructuredGrid){
747  for(int i = 0; i < d->unstructuredGrid->GetPointData()->GetNumberOfArrays(); i++)
748  fields << QString(d->unstructuredGrid->GetPointData()->GetArray(i)->GetName());
749 
750  for(int i = 0; i < d->unstructuredGrid->GetCellData()->GetNumberOfArrays(); i++)
751  fields << QString(d->unstructuredGrid->GetCellData()->GetArray(i)->GetName());
752 
753  for(int i = 0; i < d->unstructuredGrid->GetFieldData()->GetNumberOfArrays(); i++)
754  fields << QString(d->unstructuredGrid->GetFieldData()->GetArray(i)->GetName());
755  }
756 
757 
758  return fields;
759 }
760 
762 {
763  double matrix[16]; this->GetMatrix(matrix);
764  qDebug()<< " Matrix of the assembly " <<this;
765  for(int i = 0 ; i < 4 ; i++)
766  qDebug()<<matrix[4 * i + 0]<<matrix[4 * i + 1]<<matrix[4 * i + 2]<<matrix[4 * i + 3];
767  qDebug()<< "\n";
768 }
769 
770 
771 axlActor::axlActor(void) : axlAbstractActor(), vtkAssembly(), d(new axlActorPrivate)
772 {
773  d->State = axlActor::passive;
774  d->CpCursorPicker = vtkSmartPointer<vtkCellPicker>::New();
775  d->CpCursorPicker->SetTolerance(0.001);
776  d->observer = NULL;
777 }
778 
780 {
781  delete d;
782 
783  d = NULL;
784 }
virtual void Execute(vtkObject *caller, unsigned long event, void *)
Definition: axlActor.cpp:76
vtkSmartPointer< vtkCellArray > getCellArray(void)
Definition: axlActor.cpp:307
void setDataSetMapper(vtkSmartPointer< vtkDataSetMapper > mapper)
Definition: axlActor.cpp:351
vtkSmartPointer< vtkDoubleArray > getNormals(void)
Definition: axlActor.cpp:285
void setUnstructuredGrid(vtkSmartPointer< vtkUnstructuredGrid > unstructuredGrid)
Definition: axlActor.cpp:381
virtual void setDisplay(bool display)
Definition: axlActor.cpp:440
void setNormals(vtkSmartPointer< vtkDoubleArray > normals)
Definition: axlActor.cpp:290
~axlActor(void)
Definition: axlActor.cpp:779
dtkAbstractData * getObserverData(void)
Definition: axlActor.cpp:270
vtkSmartPointer< vtkPolyData > getPolyData(void)
Definition: axlActor.cpp:295
virtual void setShaderFromString(QString vertex_shader_source, QString fragment_shader_source)
Definition: axlActor.cpp:546
vtkSmartPointer< vtkPolyData > observerData_polyData
Definition: axlActor.cpp:215
virtual void setState(int state)
Definition: axlActor.cpp:434
virtual dtkAbstractData * getData(void)
Definition: axlActor.cpp:141
virtual void setColor(double red, double green, double blue)
Definition: axlActor.cpp:490
virtual void pickAndSetMode(int state, bool pathNull)
Definition: axlActor.cpp:147
void setCellArray(vtkSmartPointer< vtkCellArray > cellArray)
Definition: axlActor.cpp:312
static axlActorControlPolygonObserver * New(void)
Definition: axlActor.cpp:71
virtual int getState(void)
Definition: axlActor.cpp:429
virtual void update(void)
Definition: axlActor.cpp:608
virtual void setInteractor(void *interactor)
Definition: axlActor.cpp:254
vtkSmartPointer< vtkCellPicker > getCellPicker()
Definition: axlActor.cpp:356
vtkSmartPointer< vtkCellPicker > observerDataPicker
Definition: axlActor.cpp:212
void deleteObserver(void)
Definition: axlActor.cpp:405
virtual void setData(dtkAbstractData *data)
Definition: axlActor.cpp:136
void setCellPicker(vtkSmartPointer< vtkCellPicker > cellPicker)
Definition: axlActor.cpp:361
virtual void setMode(int state)
void setObserver(axlActorControlPolygonObserver *observer)
Definition: axlActor.cpp:371
virtual bool isVisible(void)
Definition: axlActor.cpp:249
vtkSmartPointer< vtkPoints > getPoints(void)
Definition: axlActor.cpp:275
void drawAssymblyMatrix(void)
Definition: axlActor.cpp:761
virtual void setSize(double size)
Definition: axlActor.cpp:471
vtkSmartPointer< vtkActor > observerData_actor
Definition: axlActor.cpp:211
virtual void setInterpolation(int interpolation)
Definition: axlActor.cpp:482
virtual void setShader(QString vsfile)
Definition: axlActor.cpp:517
virtual void onRemoved(void)
Definition: axlActor.cpp:613
void setvtkVolume(vtkSmartPointer< vtkVolume > actor)
Definition: axlActor.cpp:343
virtual axlAbstractActor * parent(void)
virtual void setOpacity(double opacity)
Definition: axlActor.cpp:461
void setPolyData(vtkSmartPointer< vtkPolyData > polyData)
Definition: axlActor.cpp:300
void setMapper(vtkSmartPointer< vtkPolyDataMapper > mapper)
Definition: axlActor.cpp:332
vtkSmartPointer< vtkVolume > getvtkVolume(void)
Definition: axlActor.cpp:339
virtual dtkAbstractData * data(void)=0
axlActor(void)
Definition: axlActor.cpp:771
vtkSmartPointer< vtkUnstructuredGrid > getUnstructuredGrid(void)
Definition: axlActor.cpp:376
vtkSmartPointer< vtkDataSetMapper > getDataSetMapper(void)
Definition: axlActor.cpp:347
void setActor(vtkSmartPointer< vtkActor > actor)
Definition: axlActor.cpp:322
vtkSmartPointer< vtkActor > getActor(void)
Definition: axlActor.cpp:317
QStringList fields(void)
Definition: axlActor.cpp:732
vtkSmartPointer< vtkPolyDataMapper > getMapper(void)
Definition: axlActor.cpp:327
dtkAbstractData * observerData
Definition: axlActor.cpp:213
void setObserverData(dtkAbstractData *data)
Definition: axlActor.cpp:424
vtkSmartPointer< vtkUnstructuredGrid > observerData_UnstructuredGrid
Definition: axlActor.cpp:217
axlActorControlPolygonObserver * getObserver(void)
Definition: axlActor.cpp:366
virtual void show(void)
Definition: axlActor.cpp:602
virtual vtkRenderWindowInteractor * getInteractor(void)
Definition: axlActor.cpp:264
vtkSmartPointer< vtkPoints > observerData_points
Definition: axlActor.cpp:214
Class axlAbstractData defines an API for all type of axel data.
void NewObserver(void)
Definition: axlActor.cpp:386
void setPoints(vtkSmartPointer< vtkPoints > points)
Definition: axlActor.cpp:280
virtual void hide(void)
Definition: axlActor.cpp:595
Class axlMesh defines a piecewise-linear 3D object.
Definition: axlMesh.h:41