[vtkusers] vtkCutter->Update doesn't update the vtkCutter->GetOutput()

Nicolas Sarrasin nsarrasin at phenix-systems.com
Thu Nov 4 04:00:58 EDT 2010


04/11/2010 05:50, Bill Lorensen a écrit :
> Here is a complete working copy. I had to put the plane in the loop also:

Thank you very much, I reached the same conclusion.

Le 04/11/2010 05:50, Bill Lorensen a écrit :
> Here is a complete working copy. I had to put the plane in the loop also:
>
> // slicing of a sphere by a plane. the plane is iteratively rotated all
> // around the sphere
>
> #include<vtkSmartPointer.h>
> #include<vtkPolyData.h>
> #include<vtkTransform.h>
> #include<vtkPlane.h>
> #include<vtkCutter.h>
> #include<vtkMath.h>
> #include<vtkAppendPolyData.h>
> #include<vtkPolyDataMapper.h>
> #include<vtkActor.h>
> #include<vtkProperty.h>
> #include<vtkRenderer.h>
> #include<vtkRenderWindow.h>
> #include<vtkRenderWindowInteractor.h>
> #include<vtkSphereSource.h>
> #include<vtkInteractorStyleTrackballCamera.h>
> #include<vector>
>
> int main (int argc, char *argv[])
> {
>    // The object to cut
>    vtkSmartPointer<vtkSphereSource>  sph =
>      vtkSmartPointer<vtkSphereSource>::New();
>    sph->SetRadius(25.);
>    sph->SetPhiResolution(50);
>    sph->SetThetaResolution(50);
>
>    vtkPolyData *polydata = sph->GetOutput();
>
>    // Init the cutting plane
>    double bounds[6], center[3];
>    polydata->GetBounds(bounds);
>    polydata->GetCenter(center);
>
>    int nbsections = 10;
>    double angle = 360./(double)nbsections;
>
>    // Init the transformation
>    vtkSmartPointer<vtkTransform>  transf =
>      vtkSmartPointer<vtkTransform>::New();
>    transf->RotateWXYZ(angle, 0.0, 0.0, 1.0);
>
>    vtkSmartPointer<vtkMatrix4x4>  mat =
>      vtkSmartPointer<vtkMatrix4x4>::New();
>    transf->GetMatrix(mat);
>
>    vtkSmartPointer<vtkAppendPolyData>  appdata =
>      vtkSmartPointer<vtkAppendPolyData>::New();
>
>    double normal[4]={
>      bounds[0]-center[0],
>      bounds[2]-center[1],
>      0,
>      1};
>
>    double new_normal[4];
>
>    for(int step=0; step<nbsections; step++)
>      {
>      vtkSmartPointer<vtkPlane>  plane =
>        vtkSmartPointer<vtkPlane>::New();
>
>      // Rotation of the cutting plane around normal
>      mat->MultiplyPoint(normal, new_normal);
>      plane->SetNormal(new_normal);
>      plane->SetOrigin(center);
>      plane->GetNormal(normal);
>
>      vtkSmartPointer<vtkCutter>  cutter =
>        vtkSmartPointer<vtkCutter>::New();
>      cutter->SetInput(polydata);
>      cutter->SetCutFunction(plane);
>
>      appdata->AddInput(cutter->GetOutput());
>
>      }
>
>    //visualisation
>    //1. All slices
>    vtkSmartPointer<vtkPolyDataMapper>  appmapper =
>      vtkSmartPointer<vtkPolyDataMapper>::New();
>    appmapper->SetInput(appdata->GetOutput());
>
>    vtkSmartPointer<vtkActor>  appactor =
>      vtkSmartPointer<vtkActor>::New();
>    appactor->SetMapper(appmapper);
>    appactor->GetProperty()->SetColor(1,0,0);
>
>    //2. polydata
>    vtkSmartPointer<vtkPolyDataMapper>  teethmapper =
>      vtkSmartPointer<vtkPolyDataMapper>::New();
>    teethmapper->SetInput(polydata);
>
>    vtkSmartPointer<vtkActor>  teethactor =
>      vtkSmartPointer<vtkActor>::New();
>    teethactor->SetMapper(teethmapper);
>    teethactor->GetProperty()->SetColor(0.8,0.8,0.8);
>
>    // The usual renderer, render window and interactor
>    vtkSmartPointer<vtkRenderer>  ren1 =
>      vtkSmartPointer<vtkRenderer>::New();
>    vtkSmartPointer<vtkRenderWindow>  renWin =
>      vtkSmartPointer<vtkRenderWindow>::New();
>    vtkSmartPointer<vtkRenderWindowInteractor>  iren =
>      vtkSmartPointer<vtkRenderWindowInteractor>::New();
>
>    ren1->SetBackground(.1, .2, .3);
>    renWin->AddRenderer(ren1);
>    iren->SetRenderWindow(renWin);
>
>    ren1->AddActor(appactor);
>    ren1->AddActor(teethactor);
>
>    renWin->Render();
>    iren->Start();
> }
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20101104/ba4a4b5b/attachment.htm>


More information about the vtkusers mailing list