VTK 设置滑动条

以下例子是:

               面绘制一个mhd文件,在设置  vesselExtractor->SetValue( 0 ,20)的第二个值时,沿用滑动条来观察结果;

如果你用在其他场景下,相应改变vtkSliderCallback中的参数和函数语句即可;

参考的博客原文:https://blog.csdn.net/u014003644/article/details/76724290

#include"vtkConeSource.h"
#include"vtkPolyDataMapper.h"
#include"vtkRenderWindow.h"
#include"vtkCamera.h"
#include"vtkActor.h"
#include"vtkRenderer.h"
#include"vtkRenderWindowInteractor.h"
#include"vtkInteractorStyleTrackballCamera.h"

#include"vtkCommand.h"
#include"vtkSliderWidget.h"
#include"vtkSliderRepresentation3D.h"
#include"vtkProperty.h"
#include"vtkLight.h"

class vtkSliderCallback :public vtkCommand
{
public:
    static vtkSliderCallback *New()
    {return new vtkSliderCallback; }
    
    virtual void Execute(vtkObject*caller, unsigned long, void*)
    {
        vtkSliderWidget*sliderWidget = reinterpret_cast<vtkSliderWidget*>(caller);
       
        this->vesselExtractor->SetValue( 0 ,static_cast<vtkSliderRepresentation*>
                                        (sliderWidget->GetRepresentation())->GetValue());
    }
    vtkSliderCallback() :vesselExtractor(0){}
    vtkMarchingCubes *vesselExtractor;
    
};

int main()
{
    vtkSmartPointer<vtkMetaImageReader> Reader =vtkSmartPointer<vtkMetaImageReader>::New();
    Reader->SetFileName("/Users/mac/Desktop/Hessian.mhd");
    Reader->Update();
    if (!Reader->GetOutputPort())
    {
        cout << "open failed" << endl;
    }
    
    vtkMarchingCubes *vesselExtractor = vtkMarchingCubes::New();
    vesselExtractor->SetInputConnection(Reader->GetOutputPort());
    vesselExtractor->SetNumberOfContours(1);
    vesselExtractor->SetValue( 0 ,20);   //面绘制设置的值,可改
    
    vtkStripper *vesselStripper = vtkStripper::New();
    vesselStripper->SetInputConnection(vesselExtractor->GetOutputPort());
    
    
    vtkPolyDataMapper *vesselMapper = vtkPolyDataMapper::New();
    vesselMapper->SetInputConnection(vesselStripper->GetOutputPort());
    vesselMapper->SetScalarRange(0,2);
    
    vtkActor *vessel = vtkActor::New();
    vessel->SetMapper(vesselMapper);
    vessel->GetProperty()->SetDiffuseColor(-4, -4, 0);
    vessel->GetProperty()->SetSpecular(.3);
    vessel->GetProperty()->SetSpecularPower(20);
    vessel->GetProperty()->SetColor(1,0.75,0);
    vessel->GetProperty()->SetOpacity(1);
    
    vtkRenderer*ren1 = vtkRenderer::New();
    ren1->AddActor(vessel);
    ren1->SetBackground( 120, 120, 120 );
    
    vtkRenderWindow*renWin = vtkRenderWindow::New();
    renWin->AddRenderer(ren1);
    renWin->SetSize(1000, 1000);
    vtkRenderWindowInteractor*iren = vtkRenderWindowInteractor::New();//设定交互
    iren->SetRenderWindow(renWin);
    vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New();
    iren->SetInteractorStyle(style);
    
    //实例化vtkSliderRepresentation3D,并设置属性。该对象用做滑块在场景中的3D表示
    vtkSliderRepresentation3D* sliderRep = vtkSliderRepresentation3D::New();
    sliderRep->SetValue(30);
    //滑动条两端的值,默认0-100
    sliderRep->SetMinimumValue(0);
    sliderRep->SetMaximumValue(100);
    sliderRep->SetTitleText("vessel value");
    //text position
    sliderRep->GetPoint1Coordinate()->SetCoordinateSystemToWorld();
    sliderRep->GetPoint1Coordinate()->SetValue(10, 10, 0);
    sliderRep->GetPoint2Coordinate()->SetCoordinateSystemToWorld();
    sliderRep->GetPoint2Coordinate()->SetValue(200, 10, 0);//Titletext的坐标
    
    sliderRep->SetSliderLength(0.05);
    sliderRep->SetSliderWidth(0.05);
    sliderRep->SetEndCapLength(0.05);
    
    vtkSliderWidget*sliderWidget = vtkSliderWidget::New();
    sliderWidget->SetInteractor(iren);
    sliderWidget->SetRepresentation(sliderRep);
    sliderWidget->SetAnimationModeToAnimate();
    sliderWidget->EnabledOn();//用于使用滑块
    
    vtkSliderCallback* callback = vtkSliderCallback::New();
    callback->vesselExtractor = vesselExtractor;
    sliderWidget->AddObserver(vtkCommand::InteractionEvent, callback);
    
    //vtkBoxWidget*boxWidget = vtkBoxWidget::New();//创建vtkBoxWidget实例
    //boxWidget->SetInteractor(iren);  // 设置交互器
    //boxWidget->SetPlaceFactor(1.25); //设置缩放因子
    
    //boxWidget->SetProp3D(coneActor);//关联一个道具
    //boxWidget->PlaceWidget();//对位置初始化
    vtkMyCallback*callback = vtkMyCallback::New();
    //boxWidget->AddObserver(vtkCommand::InteractionEvent, callback);
    
    //boxWidget->On();
    
    iren->Initialize();
    iren->Start();
    
    return 0;
}

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值