26 #include <dtkMathSupport/dtkVector3D.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>
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>
47 #include <vtkTexture.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>
58 #include <vtkOpenGLRenderWindow.h>
60 #include <vtkProperty.h>
62 #include <vtkFeatureEdges.h>
63 #include <vtkExtractEdges.h>
64 #include <vtkRenderWindowInteractor.h>
65 #include <vtkRendererCollection.h>
70 #include <dtkCoreSupport/dtkAbstractDataFactory.h>
74 #include <vtkTriangle.h>
80 class axlActorSurfaceBSplinePrivate
84 vtkSmartPointer<vtkActor> edgeActor;
86 vtkSmartPointer<vtkCellArray> lines;
89 #if (VTK_MAJOR_VERSION <= 5)
97 return d->splineSurface;
104 d->splineSurface = spline_Surface;
106 this->
setPoints(vtkSmartPointer<vtkPoints>::New());
108 this->
setNormals(vtkSmartPointer<vtkDoubleArray>::New());
112 this->
setActor(vtkSmartPointer<vtkActor>::New());
113 this->
setCellArray(vtkSmartPointer<vtkCellArray>::New());
114 this->
setPolyData(vtkSmartPointer<vtkPolyData>::New());
115 this->
setMapper(vtkSmartPointer<vtkPolyDataMapper>::New());
130 #if (VTK_MAJOR_VERSION <= 5)
137 this->
getMapper()->ScalarVisibilityOff();
151 QColor color = d->splineSurface->color();
152 this->
getActor()->GetProperty()->SetColor(color.redF(), color.greenF(), color.blueF());
154 QString shader = d->splineSurface->shader();
155 if(!shader.isEmpty())
221 connect(d->splineSurface,SIGNAL(edgeSelected(
int,
int,
int)),
this,SLOT(
onSelectBoundaryEdge(
int,
int,
int)));
226 connect(d->splineSurface,SIGNAL(modifiedGeometry()),
this, SLOT(
onUpdateGeometry()));
227 connect(d->splineSurface,SIGNAL(modifiedProperty()),
this, SLOT(
onUpdateProperty()));
229 connect(d->splineSurface,SIGNAL(modifiedStructure()),
this, SLOT(
onUpdateStructure()));
236 vtkSmartPointer<vtkDoubleArray> scalarArray = vtkSmartPointer<vtkDoubleArray>::New();
237 scalarArray->SetName(
"mapperCollorArrayDefaultField");
238 scalarArray->SetNumberOfComponents(1);
240 if(!d->splineSurface->hasCells()){
242 double start_u = d->splineSurface->startParam_u();
243 double start_v = d->splineSurface->startParam_v();
244 double end_u = d->splineSurface->endParam_u();
245 double end_v = d->splineSurface->endParam_v();
246 double paramCourant_u = start_u;
247 double paramCourant_v = start_v;
249 int n_u = d->splineSurface->numSamples_u();
250 int n_v = d->splineSurface->numSamples_v();
252 scalarArray->SetNumberOfTuples(n_u * n_v);
254 double interval_u = (double)(end_u - start_u) / (n_u - 1);
255 double interval_v = (double)(end_v - start_v) / (n_v - 1);
257 for(
int i = 0; i < n_v - 1 ; i++)
259 for(
int j = 0; j < n_u - 1 ; j++)
261 scalarArray->SetTuple1(i * n_u + j, d->splineSurface->scalarValue(paramCourant_u, paramCourant_v));
262 paramCourant_u += interval_u;
265 scalarArray->SetTuple1(i * n_u + (n_u - 1), d->splineSurface->scalarValue(end_u, paramCourant_v));
266 paramCourant_u = start_u;
267 paramCourant_v += interval_v;
269 for(
int i = 0; i < n_u - 1; i++)
271 scalarArray->SetTuple1(n_u * (n_v - 1) + i, d->splineSurface->scalarValue(paramCourant_u, end_v));
272 paramCourant_u += interval_u;
274 scalarArray->SetTuple1(n_u * n_v - 1, d->splineSurface->scalarValue(end_u, end_v));
278 data->GetPointData()->AddArray(scalarArray);
279 data->GetPointData()->SetActiveScalars(
"mapperCollorArrayDefaultField");
281 vtkSmartPointer<vtkLookupTable> lookupTable = vtkSmartPointer<vtkLookupTable>::New();
282 lookupTable->SetRange(-1.0, 1.0);
283 lookupTable->SetNumberOfTableValues(d->splineSurface->stripes());
284 lookupTable->Build();
285 for(
int i= 0; i < d->splineSurface->stripes(); i+=2)
287 lookupTable->SetTableValue(i , 1.0, 1.0, 1.0);
288 lookupTable->SetTableValue(i+1, 0.0, 0.0, 0.0);
292 vtkSmartPointer<vtkDoubleArray> lightArray = vtkSmartPointer<vtkDoubleArray>::New();
293 lightArray->SetName(
"mapperLightDirection");
294 lightArray->SetNumberOfComponents(3);
296 paramCourant_u = start_u;
297 paramCourant_v = start_v;
299 lightArray->SetNumberOfTuples(n_u * n_v);
300 double *currentLight =
new double[3];
301 currentLight[0] = 1.0;
302 currentLight[1] = 0.6;
303 currentLight[2] = 0.2;
304 for(
int j = 0; j < n_v - 1; j++)
306 for(
int i = 0; i < n_u - 1; i++)
308 lightArray->SetTuple(j * n_u + i, currentLight);
311 lightArray->SetTuple(j * n_u + n_u - 1, currentLight);
312 paramCourant_u = start_u;
313 paramCourant_v += interval_v;
316 for(
int i = 0; i < n_u - 1; i++)
318 lightArray->SetTuple((n_v - 1) * n_u + i, currentLight);
319 paramCourant_u += interval_u;
321 lightArray->SetTuple(n_v * n_u - 1, currentLight);
324 data->GetPointData()->AddArray(lightArray);
328 vtkSmartPointer<vtkPolyDataMapper> mapper = this->
getMapper();
329 vtkSmartPointer<vtkPolyData> polyData = this->
getPolyData();
330 mapper->MapDataArrayToVertexAttribute(
"scalarsattrib", data->GetPointData()->GetArrayName(2), vtkDataObject::FIELD_ASSOCIATION_POINTS, -1);
331 mapper->SetLookupTable(lookupTable);
332 mapper->SetInterpolateScalarsBeforeMapping(
true);
333 mapper->UseLookupTableScalarRangeOn();
338 for(
int indice=0; indice < d->splineSurface->countCells();indice++){
340 double start_u = d->splineSurface->startParam_u(indice);
341 double start_v = d->splineSurface->startParam_v(indice);
342 double end_u = d->splineSurface->endParam_u(indice);
343 double end_v = d->splineSurface->endParam_v(indice);
344 double paramCourant_u = start_u;
345 double paramCourant_v = start_v;
347 int n_u = d->splineSurface->numSamples_u(indice);
348 int n_v = d->splineSurface->numSamples_v(indice);
350 scalarArray->SetNumberOfTuples(n_u * n_v);
352 double interval_u = (double)(end_u - start_u) / (n_u - 1);
353 double interval_v = (double)(end_v - start_v) / (n_v - 1);
355 for(
int i = 0; i < n_v - 1 ; i++)
357 for(
int j = 0; j < n_u - 1 ; j++)
359 scalarArray->SetTuple1(i * n_u + j+addIndex, d->splineSurface->scalarValue(paramCourant_u, paramCourant_v));
360 paramCourant_u += interval_u;
363 scalarArray->SetTuple1(i * n_u + (n_u - 1)+addIndex, d->splineSurface->scalarValue(end_u, paramCourant_v));
364 paramCourant_u = start_u;
365 paramCourant_v += interval_v;
367 for(
int i = 0; i < n_u - 1; i++)
369 scalarArray->SetTuple1(n_u * (n_v - 1) + i+addIndex, d->splineSurface->scalarValue(paramCourant_u, end_v));
370 paramCourant_u += interval_u;
372 scalarArray->SetTuple1(n_u * n_v - 1+addIndex, d->splineSurface->scalarValue(end_u, end_v));
376 data->GetPointData()->AddArray(scalarArray);
377 data->GetPointData()->SetActiveScalars(
"mapperCollorArrayDefaultField");
379 vtkSmartPointer<vtkLookupTable> lookupTable = vtkSmartPointer<vtkLookupTable>::New();
380 lookupTable->SetRange(-1.0, 1.0);
381 lookupTable->SetNumberOfTableValues(d->splineSurface->stripes());
382 lookupTable->Build();
383 for(
int i= 0; i < d->splineSurface->stripes(); i+=2)
385 lookupTable->SetTableValue(i , 1.0, 1.0, 1.0);
386 lookupTable->SetTableValue(i+1, 0.0, 0.0, 0.0);
390 vtkSmartPointer<vtkDoubleArray> lightArray = vtkSmartPointer<vtkDoubleArray>::New();
391 lightArray->SetName(
"mapperLightDirection");
392 lightArray->SetNumberOfComponents(3);
394 paramCourant_u = start_u;
395 paramCourant_v = start_v;
397 lightArray->SetNumberOfTuples(n_u * n_v);
398 double *currentLight =
new double[3];
399 currentLight[0] = 1.0;
400 currentLight[1] = 0.6;
401 currentLight[2] = 0.2;
402 for(
int j = 0; j < n_v - 1; j++)
404 for(
int i = 0; i < n_u - 1; i++)
406 lightArray->SetTuple(j * n_u + i+addIndex, currentLight);
409 lightArray->SetTuple(j * n_u + n_u - 1+addIndex, currentLight);
410 paramCourant_u = start_u;
411 paramCourant_v += interval_v;
414 for(
int i = 0; i < n_u - 1; i++)
416 lightArray->SetTuple((n_v - 1) * n_u + i+addIndex, currentLight);
417 paramCourant_u += interval_u;
419 lightArray->SetTuple(n_v * n_u - 1+addIndex, currentLight);
422 data->GetPointData()->AddArray(lightArray);
426 vtkSmartPointer<vtkPolyDataMapper> mapper = this->
getMapper();
427 vtkSmartPointer<vtkPolyData> polyData = this->
getPolyData();
428 mapper->MapDataArrayToVertexAttribute(
"scalarsattrib", data->GetPointData()->GetArrayName(2), vtkDataObject::FIELD_ASSOCIATION_POINTS, -1);
429 mapper->SetLookupTable(lookupTable);
430 mapper->SetInterpolateScalarsBeforeMapping(
true);
431 mapper->UseLookupTableScalarRangeOn();
432 addIndex = addIndex + n_u*n_v;
473 #if (VTK_MAJOR_VERSION <= 5)
481 if(d->splineSurface->fields().count() != 0){
482 d->splineSurface->touchField();
483 d->splineSurface->touchGeometry();
492 if(!d->splineSurface->hasCells()){
493 double start_u = d->splineSurface->startParam_u();
494 double start_v = d->splineSurface->startParam_v();
495 double end_u = d->splineSurface->endParam_u();
496 double end_v = d->splineSurface->endParam_v();
497 double paramCourant_u = start_u;
498 double paramCourant_v = start_v;
501 int n_u = d->splineSurface->numSamples_u();
502 int n_v = d->splineSurface->numSamples_v();
504 double interval_u = (double)(end_u - start_u) / (n_u - 1);
505 double interval_v = (double)(end_v - start_v) / (n_v - 1);
507 vtkSmartPointer<vtkDoubleArray> normals = this->
getNormals();
509 normals->SetNumberOfComponents(3);
510 normals->SetNumberOfTuples(n_u * n_v);
511 normals->SetName(
"normalArray");
519 for(
int i = 0; i < n_v - 1; i++)
522 for(
int j = 0; j < n_u - 1; j++)
526 d->splineSurface->normal(currentNormal ,paramCourant_u, paramCourant_v);
529 normals->SetTuple(ind2, currentNormal->
coordinates());
531 paramCourant_u += interval_u;
533 ind2 = ind1 + (n_u - 1);
536 d->splineSurface->normal(currentNormal, end_u, paramCourant_v);
539 normals->SetTuple(ind2, currentNormal->
coordinates());
541 paramCourant_u = start_u;
542 paramCourant_v += interval_v;
544 ind1 = n_u * (n_v - 1);
545 for(
int i = 0; i < n_u - 1; i++)
549 d->splineSurface->normal(currentNormal, paramCourant_u, end_v);
552 normals->SetTuple(ind2, currentNormal->
coordinates());
554 paramCourant_u+=interval_u;
558 ind1 = n_u * n_v - 1;
560 d->splineSurface->normal(currentNormal, end_u, end_v);
563 normals->SetTuple(ind1, currentNormal->
coordinates());
566 delete currentNormal;
569 int numCell = d->splineSurface->countCells();
571 int dataArraysSize =0;
574 for(
int in = 0; in <numCell;in++){
575 int n_u = d->splineSurface->numSamples_u(in);
576 int n_v = d->splineSurface->numSamples_v(in);
577 dataArraysSize = dataArraysSize + n_u*n_v;
581 vtkSmartPointer<vtkDoubleArray> normals = this->
getNormals();
582 normals->SetNumberOfComponents(3);
583 normals->SetNumberOfTuples(dataArraysSize);
584 normals->SetName(
"normalArray");
586 for(
int indice =0;indice < numCell;indice ++){
588 double start_u = d->splineSurface->startParam_u(indice);
589 double start_v = d->splineSurface->startParam_v(indice);
590 double end_u = d->splineSurface->endParam_u(indice);
591 double end_v = d->splineSurface->endParam_v(indice);
592 double paramCourant_u = start_u;
593 double paramCourant_v = start_v;
595 int n_u = d->splineSurface->numSamples_u(indice);
596 int n_v = d->splineSurface->numSamples_v(indice);
599 double interval_u = (double)(end_u - start_u) / (n_u - 1);
600 double interval_v = (double)(end_v - start_v) / (n_v - 1);
609 for(
int i = 0; i < n_v - 1; i++)
612 for(
int j = 0; j < n_u - 1; j++)
616 d->splineSurface->normal(currentNormal ,paramCourant_u, paramCourant_v,indice);
619 normals->SetTuple(ind2+addIndex, currentNormal->
coordinates());
621 paramCourant_u += interval_u;
623 ind2 = ind1 + (n_u - 1);
625 d->splineSurface->normal(currentNormal, end_u, paramCourant_v,indice);
628 normals->SetTuple(ind2+addIndex, currentNormal->
coordinates());
630 paramCourant_u = start_u;
631 paramCourant_v += interval_v;
633 ind1 = n_u * (n_v - 1);
634 for(
int i = 0; i < n_u - 1; i++)
638 d->splineSurface->normal(currentNormal, paramCourant_u, end_v,indice);
641 normals->SetTuple(ind2 +addIndex, currentNormal->
coordinates());
643 paramCourant_u+=interval_u;
647 ind1 = n_u * n_v - 1;
649 d->splineSurface->normal(currentNormal, end_u, end_v,indice);
652 normals->SetTuple(ind1+addIndex, currentNormal->
coordinates());
655 delete currentNormal;
657 addIndex = addIndex + n_u*n_v;
668 if(d->splineSurface->rational())
670 d->splineSurface->updateRcoeff();
674 if(!d->splineSurface->hasCells()){
679 double start_u = d->splineSurface->startParam_u();
680 double start_v = d->splineSurface->startParam_v();
681 double end_u = d->splineSurface->endParam_u();
682 double end_v = d->splineSurface->endParam_v();
683 double paramCourant_u = start_u;
684 double paramCourant_v = start_v;
688 int n_u = d->splineSurface->numSamples_u();
689 int n_v = d->splineSurface->numSamples_v();
690 points->SetNumberOfPoints(n_u * n_v);
693 double interval_u = (double)(end_u - start_u) / (n_u - 1);
694 double interval_v = (double)(end_v - start_v) / (n_v - 1);
699 for(
int i = 0; i < n_v - 1; i++)
702 for(
int j = 0; j < n_u - 1; j++)
705 d->splineSurface->eval(pointCourant, paramCourant_u, paramCourant_v);
707 points->SetPoint(ind2, pointCourant->
coordinates());
709 paramCourant_u += interval_u;
711 ind2 = ind1 + (n_u - 1);
713 d->splineSurface->eval(pointCourant, end_u, paramCourant_v);
714 points->SetPoint(ind2 , pointCourant->
coordinates());
717 paramCourant_u = start_u;
718 paramCourant_v += interval_v;
720 ind1 = n_u * (n_v - 1);
721 for(
int i = 0; i < n_u - 1; i++)
724 d->splineSurface->eval(pointCourant, paramCourant_u, end_v);
725 points->SetPoint(ind2, pointCourant->
coordinates());
728 paramCourant_u+=interval_u;
732 ind1 = n_u * n_v - 1;
733 d->splineSurface->eval(pointCourant, end_u, end_v);
734 points->SetPoint(ind1, pointCourant->
coordinates());
739 std::cout<<
"axlActorSurfaceBSpline::pointsUpdate(void)::d->splineSurface->hasCells()=ture"<<std::endl;
741 int numCell = d->splineSurface->countCells();
743 int dataArraysSize =0;
746 for(
int in = 0; in <numCell;in++){
747 int n_u = d->splineSurface->numSamples_u(in);
748 int n_v = d->splineSurface->numSamples_v(in);
749 dataArraysSize = dataArraysSize + n_u*n_v;
754 points->SetNumberOfPoints(dataArraysSize);
758 for(
int indice =0;indice < numCell;indice ++){
760 double start_u = d->splineSurface->startParam_u(indice);
761 double start_v = d->splineSurface->startParam_v(indice);
762 double end_u = d->splineSurface->endParam_u(indice);
763 double end_v = d->splineSurface->endParam_v(indice);
764 double paramCourant_u = start_u;
765 double paramCourant_v = start_v;
767 int n_u = d->splineSurface->numSamples_u(indice);
768 int n_v = d->splineSurface->numSamples_v(indice);
771 double interval_u = (double)(end_u - start_u) / (n_u - 1);
772 double interval_v = (double)(end_v - start_v) / (n_v - 1);
780 for(
int i = 0; i < n_v - 1; i++)
783 for(
int j = 0; j < n_u - 1; j++)
786 d->splineSurface->eval(pointCourant, paramCourant_u, paramCourant_v, indice);
787 points->SetPoint(ind2+addIndex, pointCourant->
coordinates());
789 paramCourant_u += interval_u;
791 ind2 = ind1 + (n_u - 1);
793 d->splineSurface->eval(pointCourant, end_u, paramCourant_v,indice);
794 points->SetPoint(ind2+addIndex , pointCourant->
coordinates());
797 paramCourant_u = start_u;
798 paramCourant_v += interval_v;
800 ind1 = n_u * (n_v - 1);
801 for(
int i = 0; i < n_u - 1; i++)
804 d->splineSurface->eval(pointCourant, paramCourant_u, end_v,indice);
805 points->SetPoint(ind2 +addIndex, pointCourant->
coordinates());
808 paramCourant_u+=interval_u;
812 ind1 = n_u * n_v - 1;
813 d->splineSurface->eval(pointCourant, end_u, end_v,indice);
814 points->SetPoint(ind1+addIndex, pointCourant->
coordinates());
818 addIndex = addIndex + n_u*n_v;
896 vtkSmartPointer<vtkCellArray> cellArray =vtkSmartPointer<vtkCellArray>::New();
898 vtkSmartPointer<vtkCellArray> linesArray = d->lines;
977 if(!d->splineSurface->hasCells()){
978 int n_u = d->splineSurface->numSamples_u();
979 int n_v = d->splineSurface->numSamples_v();
985 vtkSmartPointer<vtkQuad> currentQuad = vtkSmartPointer<vtkQuad>::New();
986 currentQuad->GetPointIds()->SetNumberOfIds(4);
988 for(
int j = 0; j < n_v - 1; j++)
990 for(
int i= 0; i <n_u - 1; i++)
995 currentQuad->GetPointIds()->SetId(0, ind1);
996 currentQuad->GetPointIds()->SetId(1, ind1 + 1);
997 currentQuad->GetPointIds()->SetId(2, ind2 + 1);
998 currentQuad->GetPointIds()->SetId(3, ind2);
1000 cellArray->InsertNextCell(currentQuad);
1007 for(
int indice = 0;indice < d->splineSurface->countCells();indice++){
1008 int n_u = d->splineSurface->numSamples_u(indice);
1009 int n_v = d->splineSurface->numSamples_v(indice);
1014 vtkSmartPointer<vtkQuad> currentQuad = vtkSmartPointer<vtkQuad>::New();
1015 currentQuad->GetPointIds()->SetNumberOfIds(4);
1017 for(
int j = 0; j < n_v - 1; j++)
1019 for(
int i= 0; i < n_u - 1; i++)
1021 ind1 = j * n_u + i + addIndex;
1024 currentQuad->GetPointIds()->SetId(0, ind1);
1025 currentQuad->GetPointIds()->SetId(1, ind1 + 1);
1026 currentQuad->GetPointIds()->SetId(2, ind2 + 1);
1027 currentQuad->GetPointIds()->SetId(3, ind2);
1029 cellArray->InsertNextCell(currentQuad);
1032 addIndex = addIndex + n_u*n_v;
1061 d->edgeActor->SetVisibility(
false);
1064 vtkSmartPointer<vtkPolyData> selectedEdge = vtkSmartPointer<vtkPolyData>::New();
1065 selectedEdge->SetPoints(this->
getPoints());
1066 selectedEdge->SetLines(d->lines);
1067 int ne = selectedEdge->GetNumberOfLines();
1069 selectedEdge->BuildLinks();
1070 for(
int i = 0; i < previous;i++){
1071 selectedEdge->DeleteCell(i);
1073 for(
int i = previous-1+n; i < ne;i++){
1074 selectedEdge->DeleteCell(i);
1076 selectedEdge->RemoveDeletedCells();
1079 vtkSmartPointer<vtkPolyDataMapper> edgeMapper =
1080 vtkSmartPointer<vtkPolyDataMapper>::New();
1081 #if (VTK_MAJOR_VERSION <= 5)
1082 edgeMapper->SetInput(selectedEdge);
1084 edgeMapper->SetInputData(selectedEdge);
1087 d->edgeActor->SetMapper(edgeMapper);
1088 d->edgeActor->GetProperty()->EdgeVisibilityOn();
1089 d->edgeActor->GetProperty()->SetEdgeColor(1,0,0);
1091 d->edgeActor->GetProperty()->SetLineWidth(6);
1092 d->edgeActor->SetVisibility(
true);
1103 d->splineSurface = NULL;
1104 d->edgeActor = vtkSmartPointer<vtkActor>::New();
1105 d->edgeActor->SetVisibility(
false);
1106 this->AddPart(d->edgeActor);
1108 d->lines = vtkSmartPointer<vtkCellArray>::New();
1115 if(d->splineSurface->identifier() ==
"axlSurfaceBSpline")
Class axlPoint defines 3D points.
vtkSmartPointer< vtkCellArray > getCellArray(void)
vtkSmartPointer< vtkDoubleArray > getNormals(void)
virtual axlControlPointsWidget * getControlPoints(void)
double * coordinates(void) const
Returns coordinates of this point.
void setNormals(vtkSmartPointer< vtkDoubleArray > normals)
virtual void setData(dtkAbstractData *spline_Surface1)
vtkCxxRevisionMacro(axlActorSurfaceBSpline,"$Revision: 0.0.1 $")
vtkSmartPointer< vtkPolyData > getPolyData(void)
void setCellArray(vtkSmartPointer< vtkCellArray > cellArray)
void setMapperCollorArray(void)
axlAbstractActor * createAxlActorSurfaceBSpline(void)
vtkSmartPointer< vtkPoints > getPoints(void)
~axlActorSurfaceBSpline(void)
void polyDataUpdate(void)
static axlActorSurfaceBSpline * New(void)
virtual void setShader(QString vsfile)
vtkStandardNewMacro(axlActorSurfaceBSpline)
void setPolyData(vtkSmartPointer< vtkPolyData > polyData)
void setMapper(vtkSmartPointer< vtkPolyDataMapper > mapper)
void onSelectBoundaryEdge(int numEdge, int previous, int n)
void setActor(vtkSmartPointer< vtkActor > actor)
vtkSmartPointer< vtkActor > getActor(void)
virtual void onUpdateProperty(void)
vtkSmartPointer< vtkPolyDataMapper > getMapper(void)
virtual void onUpdateGeometry(void)
void setObserverData(dtkAbstractData *data)
virtual void onSamplingChanged(void)
axlActorControlPolygonObserver * getObserver(void)
dtkAbstractData * data(void)
virtual void onUpdateStructure(void)
void setPoints(vtkSmartPointer< vtkPoints > points)
axlActorSurfaceBSpline(void)