一个使用vtkImplicitWindowFunction的示例

效果图:
在这里插入图片描述

示例:

    vtkSmartPointer<vtkQuadric> quadric =
        vtkSmartPointer<vtkQuadric>::New();
    quadric->SetCoefficients( 0.5,1,.2,0,.1,0,0,.2,0,0);

    vtkSmartPointer<vtkSampleFunction> sample =
        vtkSmartPointer<vtkSampleFunction>::New();
    sample->SetSampleDimensions(20,20,20);
    sample->SetImplicitFunction(quadric);
    sample->ComputeNormalsOff();

    vtkSmartPointer<vtkImplicitDataSet> dataset =
        vtkSmartPointer<vtkImplicitDataSet>::New();
    dataset->SetDataSet(sample->GetOutput());

    vtkSmartPointer<vtkImplicitWindowFunction> window =
        vtkSmartPointer<vtkImplicitWindowFunction>::New();
    window->SetImplicitFunction(dataset);
    window->SetWindowRange(0.3,0.8);

    vtkSmartPointer<vtkClipVolume> clip =
        vtkSmartPointer<vtkClipVolume>::New();
    clip->SetInputConnection(sample->GetOutputPort());
    clip->SetClipFunction(window);
    clip->SetValue(0.0);
    clip->GenerateClippedOutputOff();

    vtkSmartPointer<vtkDataSetMapper> clipMapper =
        vtkSmartPointer<vtkDataSetMapper>::New();
    clipMapper->SetInputConnection(clip->GetOutputPort());
    clipMapper->ScalarVisibilityOff();

    vtkSmartPointer<vtkActor> clipActor =
        vtkSmartPointer<vtkActor>::New();
    clipActor->SetMapper(clipMapper);
    clipActor->GetProperty()->SetColor(.8,.4,.4);

    vtkSmartPointer<vtkOutlineFilter> outline =
        vtkSmartPointer<vtkOutlineFilter>::New();
    outline->SetInputConnection(sample->GetOutputPort());

    vtkSmartPointer<vtkPolyDataMapper> outlineMapper =
        vtkSmartPointer<vtkPolyDataMapper>::New();
    outlineMapper->SetInputConnection(outline->GetOutputPort());
    vtkSmartPointer<vtkActor> outlineActor =
        vtkSmartPointer<vtkActor>::New();
    outlineActor->SetMapper(outlineMapper);
    outlineActor->GetProperty()->SetColor(0,0,0);

    vtkSmartPointer<vtkRenderer> render =
      vtkSmartPointer<vtkRenderer>::New();
    render->SetBackground(1,1,1);
    render->AddActor(outlineActor);
    render->AddActor(clipActor);
    render->GetActiveCamera()->SetParallelProjection(1);
    render->ResetCamera();

    vtkSmartPointer<vtkRenderWindow> renwindow =
        vtkSmartPointer<vtkRenderWindow>::New();
    renwindow->SetMultiSamples(0);
    renwindow->AddRenderer(render);
    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
        vtkSmartPointer<vtkRenderWindowInteractor>::New();
    renderWindowInteractor->SetRenderWindow(renwindow);
    vtkSmartPointer<vtkInteractorStyleTrackballCamera> style =
        vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
    renderWindowInteractor->SetInteractorStyle(style);
    renwindow->Render();
    renderWindowInteractor->Start();
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力减肥的小胖子5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值