vtkSpline这个类怎么使用啊?
vtk吧
全部回复
仅看楼主
level 7
vtkSpline这个类怎么使用啊,我以为和vtkLine差不多,可是和我想的不一样。我知道怎么用vtkSplineWidget,但是不知道怎么vtkSpline。
2016年07月15日 04点07分 1
level 12
去看看这些:
vtkCardinalSpline vtkKochenekSpline vtkParametricSpline vtkSCurveSpline.
2016年07月18日 01点07分 2
level 7
看了官方的例子,vtkCardinalSpline、vtkKochenekSpline、vtkSCurveSpline的使用如下:
#include <vtkSmartPointer.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkProperty.h>
#include <vtkPoints.h>
#include <vtkPointSource.h>
#include <vtkSpline.h>
#include <vtkCardinalSpline.h>
#include <vtkParametricSpline.h>
#include <vtkParametricFunctionSource.h>
#include <vtkKochanekSpline.h>
#include <vtkSCurveSpline.h>
int main()
{
/*
//1.原例子设置点的方式
vtkSmartPointer<vtkPointSource> pointSource =
vtkSmartPointer<vtkPointSource>::New();
pointSource->SetNumberOfPoints(5);
pointSource->Update();
vtkPoints* points = pointSource->GetOutput()->GetPoints();
*/
//2.我试下设置定点,也可以运行
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
points->InsertNextPoint(0,0,0);
points->InsertNextPoint(0,1,0);
points->InsertNextPoint(1,1,0);
points->InsertNextPoint(1,0,0);
points->InsertNextPoint(0,0,0);
/*//scurve spline
vtkSmartPointer<vtkSCurveSpline> xSpline =
vtkSmartPointer<vtkSCurveSpline>::New();
vtkSmartPointer<vtkSCurveSpline> ySpline =
vtkSmartPointer<vtkSCurveSpline>::New();
vtkSmartPointer<vtkSCurveSpline> zSpline =
vtkSmartPointer<vtkSCurveSpline>::New();
*/
/*
//cardinal spline
vtkSmartPointer<vtkCardinalSpline> xSpline = vtkSmartPointer<vtkCardinalSpline>::New();
vtkSmartPointer<vtkCardinalSpline> ySpline = vtkSmartPointer<vtkCardinalSpline>::New();
vtkSmartPointer<vtkCardinalSpline> zSpline = vtkSmartPointer<vtkCardinalSpline>::New();
*/
//kochanek spline
vtkSmartPointer<vtkKochanekSpline> xSpline = vtkSmartPointer<vtkKochanekSpline>::New();
vtkSmartPointer<vtkKochanekSpline> ySpline = vtkSmartPointer<vtkKochanekSpline>::New();
vtkSmartPointer<vtkKochanekSpline> zSpline = vtkSmartPointer<vtkKochanekSpline>::New();
vtkSmartPointer<vtkParametricSpline> spline =
vtkSmartPointer<vtkParametricSpline>::New();
spline->SetXSpline(xSpline);
spline->SetYSpline(ySpline);
spline->SetZSpline(zSpline);
spline->SetPoints(points);
vtkSmartPointer<vtkParametricFunctionSource> functionSource =
vtkSmartPointer<vtkParametricFunctionSource>::New();
functionSource->SetParametricFunction(spline);
functionSource->Update();
// Setup actor and mapper
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(functionSource->GetOutputPort());
vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
// Setup render window, renderer, and interactor
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
renderer->AddActor(actor);
renderer->SetBackground(0.1,0.2,0.3);
renderWindow->Render();
renderWindowInteractor->Start();
return 0;
}
运行结果:
vtkSCurveSpline:
vtkCardinalSpline:
vtkKochenekSpline:
2016年07月19日 09点07分 3
level 7
vtkParametricSpline的使用则更加简单:
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
points->InsertNextPoint(0,0,0);
points->InsertNextPoint(0,1,0);
points->InsertNextPoint(1,1,0);
points->InsertNextPoint(1,0,0);
points->InsertNextPoint(0,0,0);
vtkSmartPointer<vtkParametricSpline> spline =
vtkSmartPointer<vtkParametricSpline>::New();
spline->SetPoints(points);
vtkSmartPointer<vtkParametricFunctionSource> functionSource =
vtkSmartPointer<vtkParametricFunctionSource>::New();
functionSource->SetParametricFunction(spline);
functionSource->Update();
// Setup actor and mapper
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(functionSource->GetOutputPort());
vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
// Setup render window, renderer, and interactor
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
renderer->AddActor(actor);
renderer->SetBackground(0.1,0.2,0.3);
renderWindow->Render();
renderWindowInteractor->Start();
运行结果:
2016年07月19日 09点07分 5
level 7
但是这不是我要的效果啊,我希望可以像使用vtkSplineWidget一样可以调节区域范围,如图:
但是好像vtkSplineWidget这个类好像不能在图像上使用,或者是我的代码有问题?
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
points->InsertNextPoint(0,0,0);
points->InsertNextPoint(1,0,0);
points->InsertNextPoint(1,1,0);
points->InsertNextPoint(0,1,0);
points->InsertNextPoint(0,0,0);
vtkSmartPointer<vtkProperty> property = vtkSmartPointer<vtkProperty>::New();
property->SetLineWidth(1);
property->SetColor(1.0,0,0);
property->SetPointSize(0.5);
vtkSmartPointer<vtkSplineWidget> splineWidget = vtkSmartPointer<vtkSplineWidget>::New();
splineWidget->InitializeHandles(points);
splineWidget->SetLineProperty(property);
vtkSmartPointer<vtkJPEGReader> reader = vtkSmartPointer<vtkJPEGReader>::New();
reader->SetFileName("C:\\Users\\Administrator\\Desktop\\lyt.jpg");
reader->Update();
vtkSmartPointer<vtkImageData> image = vtkSmartPointer<vtkImageData>::New();
image = reader->GetOutput();
vtkSmartPointer<vtkImageActor> actor = vtkSmartPointer<vtkImageActor>::New();
actor->SetInput(image);
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->SetBackground(0.1,0.2,0.4);
renderer->AddActor(actor);
vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
renWin->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(renWin);
renWin->SetSize(640,480);
splineWidget->SetInteractor(iren);
iren->Initialize();
renWin->Render();
splineWidget->On();
iren->Start();
运行结果:
为什么呢?
2016年07月19日 09点07分 6
图不错[吐舌]
2016年07月20日 04点07分
我猜你的vtkSplineWidget藏在了图像的后面看不到
2016年07月20日 04点07分
@rabbitbride 应该是的,不显示图片的时候可以显示splineWidget
2016年07月20日 04点07分
楼主你好,最近压在用vtksplinewidget,请问这个这个问题最后怎么解决的。如何在图片上显示widget?
2018年03月29日 14点03分
level 12
我想你需要的是这个:vtkContourWidget
试试看[正Music]
2016年07月20日 04点07分 7
好,待我午睡起来就试~~~
2016年07月20日 04点07分
不知道怎么把选中的区域复制出来。。[委屈]
2016年07月20日 07点07分
@慢半拍白羊 [滑稽] ctrl + c ,ctrl + v
2016年07月20日 08点07分
@rabbitbride [黑线]我读书少,你不要骗我哦~~~
2016年07月20日 09点07分
level 1
时过一年 ..
请问楼主 SCurve样条的二次或者三次曲线 如何设置..
CardinalSpline和 kochanekspline 又是啥啊..
2017年08月07日 06点08分 8
然而我在一年之前就不玩这个了。。。估计最近又要捡起来,还要重新开始
2017年08月09日 07点08分
1