Developer documentation | Axl-2.5.1

axlActorShapeBSpline.cpp
Go to the documentation of this file.
1 /* axlActorShapeBSpline.cpp ---
2  *
3  * Author: Meriadeg Perrinel
4  * Copyright (C) 2008 - Meriadeg Perrinel, Inria.
5  * Created: Fri Dec 17 11:06:08 2010 (+0100)
6  * Version: $Id$
7  * Last-Updated: Mon Dec 17 15:04:10 2012 (+0100)
8  * By: Julien Wintz
9  * Update #: 78
10  */
11 
12 /* Commentary:
13  *
14  */
15 
16 /* Change log:
17  *
18  */
19 
20 #include "axlActorShapeBSpline.h"
21 #include "axlControlPointsWidget.h"
22 
25 
26 #include <dtkMathSupport/dtkVector3D.h>
27 
28 #include <vtkActor.h>
29 #include <vtkActorCollection.h>
30 #include <vtkCellArray.h>
31 #include <vtkCellData.h>
32 #include <vtkCommand.h>
33 #include <vtkDoubleArray.h>
34 #include <vtkLookupTable.h>
35 #include <vtkObjectFactory.h>
36 //#include <vtkPainterPolyDataMapper.h>
37 #include <vtkPoints.h>
38 #include <vtkPointData.h>
39 #include <vtkPolyData.h>
40 #include <vtkPolyVertex.h>
41 #include <vtkPolygon.h>
42 #include <vtkPolyDataMapper.h>
43 #include <vtkPolyDataNormals.h>
44 #include <vtkProperty.h>
45 #include <vtkProp.h>
46 #include <vtkQuad.h>
47 #include <vtkTexture.h>
48 //#include <vtkTriangle.h>
49 #include <vtkTriangleStrip.h>
50 #include <vtkTimerLog.h>
51 #include <vtkSmartPointer.h>
52 #include <vtkStripper.h>
53 #include <vtkPointData.h>
54 #include <vtkTriangleFilter.h>
55 #include <vtkPNGReader.h>
56 #include <vtkFloatArray.h>
57 //#include <vtkOpenGLHardwareSupport.h>
58 #include <vtkOpenGLRenderWindow.h>
59 //#include <vtkPainterPolyDataMapper.h>
60 #include <vtkProperty.h>
61 
62 #include <vtkFeatureEdges.h>
63 #include <vtkExtractEdges.h>
64 #include <vtkRenderWindowInteractor.h>
65 #include <vtkRendererCollection.h>
66 
67 
68 //for meshing and create poly data structure.
70 #include <dtkCoreSupport/dtkAbstractDataFactory.h>
71 #include <axlCore/axlMesh.h>
72 
73 #include <vtkLine.h>
74 #include <vtkTriangle.h>
75 
76 // /////////////////////////////////////////////////////////////////
77 // axlActorShapeBSplinePrivate
78 // /////////////////////////////////////////////////////////////////
79 
80 class axlActorShapeBSplinePrivate
81 {
82 public:
83  axlShapeBSpline *splineShape;
84  vtkSmartPointer<vtkActor> edgeActor;
85 
86  vtkSmartPointer<vtkCellArray> lines;
87 };
88 
89 #if (VTK_MAJOR_VERSION <= 5)
90 vtkCxxRevisionMacro(axlActorShapeBSpline, "$Revision: 0.0.1 $");
91 #endif
92 
94 
95 axlActorShapeBSpline::axlActorShapeBSpline(void) : axlActorBSpline(), d(new axlActorShapeBSplinePrivate)
96 {
97  d->splineShape = NULL;
98  d->edgeActor = vtkSmartPointer<vtkActor>::New();
99  d->edgeActor->SetVisibility(false);
100  this->AddPart(d->edgeActor);
101 
102  d->lines = vtkSmartPointer<vtkCellArray>::New();
103 
104 }
105 
107 {
108 
109  if(d->splineShape->identifier() == "axlShapeBSpline")
110  disconnect(d->splineShape,SIGNAL(edgeSelected(int)), this, SLOT(onSelectBoundaryEdge(int)));
111 
112  delete d;
113  d = NULL;
114 }
115 
116 dtkAbstractData *axlActorShapeBSpline::data(void)
117 {
118  return d->splineShape;
119 }
120 
121 void axlActorShapeBSpline::setData(dtkAbstractData *spline_shape1)
122 {
123  axlShapeBSpline *spline_Shape = dynamic_cast<axlShapeBSpline *>(spline_shape1);
124  // we compute here points, triangles, and normals
125  d->splineShape = spline_Shape;
126 
127  this->setPoints(vtkSmartPointer<vtkPoints>::New());
128 
129  this->setNormals(vtkSmartPointer<vtkDoubleArray>::New());
130 
131  // qDebug()<<"axlActorShapeBSpline::setShape 2"<<vtkTimerLog::GetCPUTime()<<vtkTimerLog::GetCPUTime()-currentTime;
132 
133  this->setActor(vtkSmartPointer<vtkActor>::New());
134  this->setCellArray(vtkSmartPointer<vtkCellArray>::New());
135  this->setPolyData(vtkSmartPointer<vtkPolyData>::New());
136  this->setMapper(vtkSmartPointer<vtkPolyDataMapper>::New());
137 
138  //this->pointsUpdate();
139  this->normalsUpdate();
140  this->polyDataUpdate();
141 
142  this->getPolyData()->SetPoints(this->getPoints());
143  //this->getPolyData()->SetLines(d->lines);
144  this->getPolyData()->SetPolys(this->getCellArray());
145  this->getPolyData()->GetPointData()->SetNormals(this->getNormals());
146 
147  //vtkSmartPointer<vtkPolyDataNormals> polyDataNormals = vtkSmartPointer<vtkPolyDataNormals>::New();
148  //polyDataNormals->AutoOrientNormalsOn();
149  //polyDataNormals->FlipNormalsOn();
150  //polyDataNormals->SetInput(this->getPolyData());
151 #if (VTK_MAJOR_VERSION <= 5)
152  this->getMapper()->SetInput(this->getPolyData());
153 #else
154  this->getMapper()->SetInputData(this->getPolyData());
155 #endif
156  this->getActor()->SetMapper(this->getMapper());
157 
158  this->getMapper()->ScalarVisibilityOff();
159 
160  // add sphere param
161  // this->initCurrentPoint();
162  //vtkSmartPointer<vtkProp3D> prop3d = this->getActor();
163  this->AddPart(this->getActor());
164 
165  // add the observer
166  if(!this->getObserver())
167  {
168  this->NewObserver();
169  this->setObserverData(d->splineShape);
170  }
171 
172  QColor color = d->splineShape->color();
173  this->getActor()->GetProperty()->SetColor(color.redF(), color.greenF(), color.blueF());
174 
175  QString shader = d->splineShape->shader();
176  if(!shader.isEmpty())
177  this->setShader(shader);
178 
179  connect(d->splineShape, SIGNAL(edgeSelected(int,int,int)), this, SLOT(onSelectBoundaryEdge(int,int,int)));
180 
181  // For updating the geometry (ie. the mesh representation of the spline)
182  connect(d->splineShape, SIGNAL(modifiedGeometry()), this, SLOT(onUpdateGeometry()));
183  connect(d->splineShape, SIGNAL(modifiedProperty()), this, SLOT(onUpdateProperty()));
184  // For redrawing the control point widget
185  connect(d->splineShape, SIGNAL(modifiedStructure()), this, SLOT(onUpdateStructure()));
186 }
187 
188 
190 {
191  vtkSmartPointer<vtkDoubleArray> scalarArray = vtkSmartPointer<vtkDoubleArray>::New();
192  scalarArray->SetName("mapperCollorArrayDefaultField");
193  scalarArray->SetNumberOfComponents(1);
194 
195  if(d->splineShape->hasFaces()) {
196 
197  int addIndex = 0;
198  for(int indice = 0; indice < d->splineShape->countFaces(); indice++){
199 
200  double start_u = d->splineShape->startParam_u(indice);
201  double start_v = d->splineShape->startParam_v(indice);
202  double end_u = d->splineShape->endParam_u(indice);
203  double end_v = d->splineShape->endParam_v(indice);
204  double paramCourant_u = start_u;
205  double paramCourant_v = start_v;
206 
207  int n_u = d->splineShape->numSamples_u(indice);// need to be superior than 1
208  int n_v = d->splineShape->numSamples_v(indice);
209 
210  scalarArray->SetNumberOfTuples(n_u * n_v);
211 
212  double interval_u = (double)(end_u - start_u) / (n_u - 1);
213  double interval_v = (double)(end_v - start_v) / (n_v - 1);
214 
215  for(int i = 0; i < n_v - 1 ; i++)
216  {
217  for(int j = 0; j < n_u - 1 ; j++)
218  {
219  scalarArray->SetTuple1(i * n_u + j+addIndex, d->splineShape->scalarValue(paramCourant_u, paramCourant_v));
220  paramCourant_u += interval_u;
221  }
222 
223  scalarArray->SetTuple1(i * n_u + (n_u - 1)+addIndex, d->splineShape->scalarValue(end_u, paramCourant_v));
224  paramCourant_u = start_u;
225  paramCourant_v += interval_v;
226  }
227  for(int i = 0; i < n_u - 1; i++)
228  {
229  scalarArray->SetTuple1(n_u * (n_v - 1) + i+addIndex, d->splineShape->scalarValue(paramCourant_u, end_v));
230  paramCourant_u += interval_u;
231  }
232  scalarArray->SetTuple1(n_u * n_v - 1+addIndex, d->splineShape->scalarValue(end_u, end_v));
233 
234 
235  vtkSmartPointer<vtkPolyData> data = this->getPolyData();
236  data->GetPointData()->AddArray(scalarArray);
237  data->GetPointData()->SetActiveScalars("mapperCollorArrayDefaultField");
238 
239  vtkSmartPointer<vtkLookupTable> lookupTable = vtkSmartPointer<vtkLookupTable>::New();
240  lookupTable->SetRange(-1.0, 1.0);
241  lookupTable->SetNumberOfTableValues(d->splineShape->stripes());
242  lookupTable->Build();
243  for(int i= 0; i < d->splineShape->stripes(); i+=2)
244  {
245  lookupTable->SetTableValue(i , 1.0, 1.0, 1.0);
246  lookupTable->SetTableValue(i+1, 0.0, 0.0, 0.0);
247  }
248  // test to get light direction .... TO DELETE
249 
250  vtkSmartPointer<vtkDoubleArray> lightArray = vtkSmartPointer<vtkDoubleArray>::New();
251  lightArray->SetName("mapperLightDirection");
252  lightArray->SetNumberOfComponents(3);
253 
254  paramCourant_u = start_u;
255  paramCourant_v = start_v;
256 
257  lightArray->SetNumberOfTuples(n_u * n_v);
258  double *currentLight = new double[3];
259  currentLight[0] = 1.0;
260  currentLight[1] = 0.6;
261  currentLight[2] = 0.2;
262  for(int j = 0; j < n_v - 1; j++)
263  {
264  for(int i = 0; i < n_u - 1; i++)
265  {
266  lightArray->SetTuple(j * n_u + i+addIndex, currentLight);
267  }
268 
269  lightArray->SetTuple(j * n_u + n_u - 1+addIndex, currentLight);
270  paramCourant_u = start_u;
271  paramCourant_v += interval_v;
272  }
273 
274  for(int i = 0; i < n_u - 1; i++)
275  {
276  lightArray->SetTuple((n_v - 1) * n_u + i+addIndex, currentLight);
277  paramCourant_u += interval_u;
278  }
279  lightArray->SetTuple(n_v * n_u - 1+addIndex, currentLight);
280 
281  data = this->getPolyData();
282  data->GetPointData()->AddArray(lightArray);
283 
284 
285  //add vertex attrib array
286  vtkSmartPointer<vtkPolyDataMapper> mapper = this->getMapper();
287  vtkSmartPointer<vtkPolyData> polyData = this->getPolyData();
288  mapper->MapDataArrayToVertexAttribute("scalarsattrib", data->GetPointData()->GetArrayName(2), vtkDataObject::FIELD_ASSOCIATION_POINTS, -1);
289  mapper->SetLookupTable(lookupTable);
290  mapper->SetInterpolateScalarsBeforeMapping(true);
291  mapper->UseLookupTableScalarRangeOn();
292  addIndex = addIndex + n_u*n_v;
293 
294  }
295 
296  }
297 
298  this->Modified();
299 }
300 
301 
303 {
304 
305  if(d->splineShape)
306  {
307  this->getMapper()->RemoveAllInputs();
308  this->getPolyData()->Initialize();
309 
310  // delete current vtkPoint and vtkCellArray
311  this->getPoints()->Reset();
312  this->getCellArray()->Reset();
313 
314  this->getPoints()->Squeeze();
315  this->getCellArray()->Squeeze();
316 
317  this->getNormals()->Initialize();
318  //this->getPolyData()->GetPointData()->RemoveArray("mapperCollorArrayIsophote");//back to solid color
319 
320  //this->pointsUpdate();
321  this->normalsUpdate();
322 
323  this->getPolyData()->GetPointData()->SetNormals(this->getNormals());
324 
325  this->polyDataUpdate();
326 
327 
328  this->getPolyData()->SetPoints(this->getPoints());
329  this->getPolyData()->SetPolys(this->getCellArray());
330 
331 #if (VTK_MAJOR_VERSION <= 5)
332  this->getMapper()->SetInput(this->getPolyData());
333 #else
334  this->getMapper()->SetInputData(this->getPolyData());
335 #endif
336 
337  }
338 
339  if(d->splineShape->fields().count() != 0){
340  d->splineShape->touchField();
341  d->splineShape->touchGeometry();
342  }
343 
344 }
345 
347  // we consider here that all memory vtk pipeline from points to polydata are free but not deleted...
348  if(d->splineShape->hasFaces()) {
349 
350  int numCell = d->splineShape->countFaces();
351  int addIndex = 0;
352  int dataArraysSize =0;
353 
354  for(int in = 0; in <numCell;in++){
355  int n_u = d->splineShape->numSamples_u(in);// need to be superior than 1
356  int n_v = d->splineShape->numSamples_v(in);
357  dataArraysSize = dataArraysSize + n_u*n_v;
358 
359  }
360 
361  vtkSmartPointer<vtkDoubleArray> normals = this->getNormals();
362  normals->SetNumberOfComponents(3);
363  normals->SetNumberOfTuples(dataArraysSize);
364  normals->SetName("normalArray");
365 
366  for(int indice =0;indice < numCell;indice ++){
367 
368  double start_u = d->splineShape->startParam_u(indice);
369  double start_v = d->splineShape->startParam_v(indice);
370  double end_u = d->splineShape->endParam_u(indice);
371  double end_v = d->splineShape->endParam_v(indice);
372  double paramCourant_u = start_u;
373  double paramCourant_v = start_v;
374 
375  int n_u = d->splineShape->numSamples_u(indice);// need to be superior than 1
376  int n_v = d->splineShape->numSamples_v(indice);
377 
378 
379  double interval_u = (double)(end_u - start_u) / (n_u - 1);
380  double interval_v = (double)(end_v - start_v) / (n_v - 1);
381 
382  axlPoint *currentNormal = new axlPoint(0.,0.,1.);
383 
384  //double currentTime = vtkTimerLog::GetCPUTime();
385 
386  // qDebug()<<"axlActorShapeBSpline::setShape 1" <<currentTime;
387  int ind1 = 0;
388  int ind2 = 0;
389  for(int i = 0; i < n_v - 1; i++)
390  {
391  ind1 = i * n_u;
392  for(int j = 0; j < n_u - 1; j++)
393  {
394  ind2 = ind1 +j;
395 
396  d->splineShape->normal(currentNormal ,paramCourant_u, paramCourant_v,indice);
397  currentNormal->normalize();
398 
399  normals->SetTuple(ind2+addIndex, currentNormal->coordinates());
400 
401  paramCourant_u += interval_u;
402  }
403  ind2 = ind1 + (n_u - 1);
404 
405  d->splineShape->normal(currentNormal, end_u, paramCourant_v,indice);
406  currentNormal->normalize();
407 
408  normals->SetTuple(ind2+addIndex, currentNormal->coordinates());
409 
410  paramCourant_u = start_u;
411  paramCourant_v += interval_v;
412  }
413  ind1 = n_u * (n_v - 1);
414  for(int i = 0; i < n_u - 1; i++)
415  {
416  ind2 = ind1 + i;
417 
418  d->splineShape->normal(currentNormal, paramCourant_u, end_v,indice);
419  currentNormal->normalize();
420 
421  normals->SetTuple(ind2 +addIndex, currentNormal->coordinates());
422 
423  paramCourant_u+=interval_u;
424  //qDebug()<< "ind 3"<<ind3;
425 
426  }
427  ind1 = n_u * n_v - 1;
428 
429  d->splineShape->normal(currentNormal, end_u, end_v,indice);
430  currentNormal->normalize();
431 
432  normals->SetTuple(ind1+addIndex, currentNormal->coordinates());
433 
434  delete currentNormal;
435 
436  addIndex = addIndex + n_u*n_v;
437 
438  }
439  }
440 }
441 
443 {
444  // we consider here that all memory vtk pipeline from points to polydata are free but not deleted...
445  if(d->splineShape->hasFaces()){
446 
447  int numCell = d->splineShape->countFaces();
448  int addIndex = 0;
449  int dataArraysSize =0;
450 
451  for(int in = 0; in <numCell;in++){
452  int n_u = d->splineShape->numSamples_u(in);// need to be superior than 1
453  int n_v = d->splineShape->numSamples_v(in);
454  dataArraysSize = dataArraysSize + n_u*n_v;
455 
456  }
457 
458  vtkPoints *points = this->getPoints();
459  points->SetNumberOfPoints(dataArraysSize);
460 
461  for(int indice =0;indice < numCell;indice ++){
462 
463  double start_u = d->splineShape->startParam_u(indice);
464  double start_v = d->splineShape->startParam_v(indice);
465  double end_u = d->splineShape->endParam_u(indice);
466  double end_v = d->splineShape->endParam_v(indice);
467  double paramCourant_u = start_u;
468  double paramCourant_v = start_v;
469 
470  int n_u = d->splineShape->numSamples_u(indice);// need to be superior than 1
471  int n_v = d->splineShape->numSamples_v(indice);
472 
473  axlPoint *pointCourant = new axlPoint(0.,0.,0.);
474  double interval_u = (double)(end_u - start_u) / (n_u - 1);
475  double interval_v = (double)(end_v - start_v) / (n_v - 1);
476 
477 
478  //double currentTime = vtkTimerLog::GetCPUTime();
479 
480  // qDebug()<<"axlActorShapeBSpline::setShape 1" <<currentTime;
481  int ind1 = 0;
482  int ind2 = 0;
483  for(int i = 0; i < n_v - 1; i++)
484  {
485  ind1 = i * n_u;
486  for(int j = 0; j < n_u - 1; j++)
487  {
488  ind2 = ind1 +j;
489  d->splineShape->eval(pointCourant, paramCourant_u, paramCourant_v, indice);
490  points->SetPoint(ind2+addIndex, pointCourant->coordinates());
491 
492 
493  paramCourant_u += interval_u;
494  }
495  ind2 = ind1 + (n_u - 1);
496 
497  d->splineShape->eval(pointCourant, end_u, paramCourant_v,indice);
498  points->SetPoint(ind2+addIndex , pointCourant->coordinates());
499 
500 
501  paramCourant_u = start_u;
502  paramCourant_v += interval_v;
503  }
504  ind1 = n_u * (n_v - 1);
505  for(int i = 0; i < n_u - 1; i++)
506  {
507  ind2 = ind1 + i;
508  d->splineShape->eval(pointCourant, paramCourant_u, end_v,indice);
509  points->SetPoint(ind2 +addIndex, pointCourant->coordinates());
510 
511 
512  paramCourant_u+=interval_u;
513  //qDebug()<< "ind 3"<<ind3;
514 
515  }
516  ind1 = n_u * n_v - 1;
517  d->splineShape->eval(pointCourant, end_u, end_v,indice);
518  points->SetPoint(ind1+addIndex, pointCourant->coordinates());
519 
520  delete pointCourant;
521 
522  addIndex = addIndex + n_u*n_v;
523 
524  }
525  }
526 
527 }
528 
530 
531  vtkSmartPointer<vtkCellArray> cellArray = vtkSmartPointer<vtkCellArray>::New();
532  //this->getCellArray();
533  vtkSmartPointer<vtkCellArray> linesArray = d->lines;
534  //vtkSmartPointer<vtkPoints> pointLines = d->linePoints;
535 
536  this->pointsUpdate();
537  if(d->splineShape->hasFaces()) {
538 
539  int addIndex = 0;
540  for(int indice = 0;indice < d->splineShape->countFaces();indice++){
541  int n_u = d->splineShape->numSamples_u(indice);
542  int n_v = d->splineShape->numSamples_v(indice);
543 
544  int ind1 = 0;
545  int ind2 = 0;
546 
547  vtkSmartPointer<vtkQuad> currentQuad = vtkSmartPointer<vtkQuad>::New();
548  currentQuad->GetPointIds()->SetNumberOfIds(4);
549 
550  for(int j = 0; j < n_v - 1; j++)
551  {
552  for(int i= 0; i < n_u - 1; i++)
553  {
554  ind1 = j * n_u + i + addIndex;
555  ind2 = ind1 + n_u ;
556 
557  currentQuad->GetPointIds()->SetId(0, ind1);
558  currentQuad->GetPointIds()->SetId(1, ind1 + 1);
559  currentQuad->GetPointIds()->SetId(2, ind2 + 1);
560  currentQuad->GetPointIds()->SetId(3, ind2);
561 
562  cellArray->InsertNextCell(currentQuad);
563  }
564  }
565  addIndex = addIndex + n_u*n_v;
566  }
567  }
568 
569  this->setCellArray(cellArray);
570 }
571 
573 {
574  // this->pointsUpdate();
575  // this->normalsUpdate();
576  // this->polyDataUpdate();
577 
578  // Note: ideally we should not need to call this ?
579  this->onSamplingChanged();
580 }
581 
582 
583 void axlActorShapeBSpline::onSelectBoundaryEdge(int numEdge, int previous, int n)
584 {
585  if(numEdge == -1){
586  if(d->edgeActor)
587  d->edgeActor->SetVisibility(false);
588  }else{
589 
590  vtkSmartPointer<vtkPolyData> selectedEdge = vtkSmartPointer<vtkPolyData>::New();
591  selectedEdge->SetPoints(this->getPoints());
592  selectedEdge->SetLines(d->lines);
593  int ne = selectedEdge->GetNumberOfLines();
594 
595  selectedEdge->BuildLinks();
596  for(int i = 0; i < previous;i++){
597  selectedEdge->DeleteCell(i);
598  }
599  for(int i = previous-1+n; i < ne;i++){
600  selectedEdge->DeleteCell(i);
601  }
602  selectedEdge->RemoveDeletedCells();
603 
604  // Visualize
605  vtkSmartPointer<vtkPolyDataMapper> edgeMapper =
606  vtkSmartPointer<vtkPolyDataMapper>::New();
607 #if (VTK_MAJOR_VERSION <= 5)
608  edgeMapper->SetInput(selectedEdge);
609 #else
610  edgeMapper->SetInputData(selectedEdge);
611 #endif
612 
613  d->edgeActor->SetMapper(edgeMapper);
614  d->edgeActor->GetProperty()->EdgeVisibilityOn();
615  d->edgeActor->GetProperty()->SetEdgeColor(1,0,0);
616 
617  d->edgeActor->GetProperty()->SetLineWidth(6);
618  d->edgeActor->SetVisibility(true);
619  }
620 
621  emit updated();
622 
623 
624 }
625 
627 
628  return axlActorShapeBSpline::New();
629 }
Class axlPoint defines 3D points.
Definition: axlPoint.h:34
vtkSmartPointer< vtkCellArray > getCellArray(void)
Definition: axlActor.cpp:307
vtkSmartPointer< vtkDoubleArray > getNormals(void)
Definition: axlActor.cpp:285
vtkStandardNewMacro(axlActorShapeBSpline)
double * coordinates(void) const
Returns coordinates of this point.
Definition: axlPoint.cpp:445
void setNormals(vtkSmartPointer< vtkDoubleArray > normals)
Definition: axlActor.cpp:290
virtual void onSamplingChanged(void)
vtkSmartPointer< vtkPolyData > getPolyData(void)
Definition: axlActor.cpp:295
void setCellArray(vtkSmartPointer< vtkCellArray > cellArray)
Definition: axlActor.cpp:312
static axlActorShapeBSpline * New(void)
vtkCxxRevisionMacro(axlActorShapeBSpline,"$Revision: 0.0.1 $")
void updated(void)
vtkSmartPointer< vtkPoints > getPoints(void)
Definition: axlActor.cpp:275
dtkAbstractData * data(void)
void normalize(void)
Definition: axlPoint.cpp:410
virtual void setShader(QString vsfile)
Definition: axlActor.cpp:517
void setPolyData(vtkSmartPointer< vtkPolyData > polyData)
Definition: axlActor.cpp:300
void setMapper(vtkSmartPointer< vtkPolyDataMapper > mapper)
Definition: axlActor.cpp:332
virtual void setData(dtkAbstractData *spline_shape1)
void setActor(vtkSmartPointer< vtkActor > actor)
Definition: axlActor.cpp:322
vtkSmartPointer< vtkActor > getActor(void)
Definition: axlActor.cpp:317
virtual void onUpdateProperty(void)
vtkSmartPointer< vtkPolyDataMapper > getMapper(void)
Definition: axlActor.cpp:327
axlAbstractActor * createAxlActorShapeBSpline(void)
Class axlShapeBSpline defines a set of boundary curves (Edges) and bspline surface patches (Face)...
void setObserverData(dtkAbstractData *data)
Definition: axlActor.cpp:424
axlActorControlPolygonObserver * getObserver(void)
Definition: axlActor.cpp:366
virtual void onUpdateStructure(void)
virtual void onUpdateGeometry(void)
void NewObserver(void)
Definition: axlActor.cpp:386
void setPoints(vtkSmartPointer< vtkPoints > points)
Definition: axlActor.cpp:280
void onSelectBoundaryEdge(int numEdge, int previous, int n)