医站点医维基

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1126|回复: 8

[VTK] VTK例子6-样条曲线KSpline

[复制链接]

336

主题

410

回帖

2806

积分

管理员

积分
2806

热心会员推广达人优秀版主荣誉管理论坛元老

发表于 2015-12-4 22:26:47 | 显示全部楼层 |阅读模式
样条曲线KSpline
#include "stdafx.h"
#include "vtkSphereSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkCamera.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkPolyData.h"
#include "vtkBoxWidget.h"
#include "vtkKochanekSpline.h"
#include "vtkPoints.h"
#include "stdio.h"
#include <time.h>
#include <vtkGlyph3D.h>
#include <vtkProperty.h>
#include <vtkCellArray.h>
#include <vtkTubeFilter.h>
#include <vtkPolyLine.h>
void main()
{
  srand(time(NULL)) ;
//  rand()/RAND_MAX;//    0 - RAND_MAX
  vtkRenderer *ren = vtkRenderer::New();
  vtkRenderWindow *renWindow = vtkRenderWindow::New();
    renWindow->AddRenderer(ren);
  renWindow->SetSize( 600, 600 );
    vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
    iren->SetRenderWindow(renWindow);
  int numberOfInputPoints = 10;
vtkKochanekSpline  *aSplineX = vtkKochanekSpline ::New();
vtkKochanekSpline  *aSplineY = vtkKochanekSpline ::New();
vtkKochanekSpline  *aSplineZ = vtkKochanekSpline ::New();
  aSplineX-> SetDefaultBias(0);
  aSplineX-> SetDefaultTension(0);
  aSplineX-> SetDefaultContinuity(0);
  aSplineY-> SetDefaultBias(0);
  aSplineY-> SetDefaultTension(0);
  aSplineY-> SetDefaultContinuity(0);
  aSplineZ-> SetDefaultBias(0);
  aSplineZ-> SetDefaultTension(0);
  aSplineZ-> SetDefaultContinuity(0);
vtkPoints *inputPoints = vtkPoints::New();
double x,y,z;
int i;
for(i=0;i<numberOfInputPoints;i++)
{
    x = (float)rand()/(float)RAND_MAX;
    y = (float)rand()/(float)RAND_MAX;
    z = (float)rand()/(float)RAND_MAX;
    printf(" x:%f,y:%f,z:%f\n",x,y,z);
    aSplineX->AddPoint(i, x);
    aSplineY->AddPoint(i, y);
    aSplineZ->AddPoint(i, z);
    inputPoints->InsertPoint(i, x, y, z);
}
vtkPolyData *inputData =vtkPolyData::New();
inputData->SetPoints(inputPoints);
vtkSphereSource *balls =vtkSphereSource::New();
balls->SetRadius(.01);
balls->SetPhiResolution(10);
balls->SetThetaResolution(10);
vtkGlyph3D *glyphPoints =vtkGlyph3D::New();
glyphPoints->SetInput(inputData);
glyphPoints->SetSource(balls->GetOutput());
vtkPolyDataMapper *glyphMapper = vtkPolyDataMapper::New();
glyphMapper->SetInputConnection(glyphPoints->GetOutputPort());
vtkActor *glyph = vtkActor::New();
glyph->SetMapper(glyphMapper);
glyph->GetProperty()->SetDiffuseColor(1,0,0);
glyph->GetProperty()->SetSpecular(.3);
glyph->GetProperty()->SetSpecularPower(30);
///////////////
vtkPoints *points = vtkPoints::New();
// Number of points on the spline
int numberOfOutputPoints = 400;
float t;
for(i=0;i<numberOfOutputPoints;i++)
{
    t = (numberOfInputPoints-1.0)/(numberOfOutputPoints-1.0)*i;
    points->InsertPoint(i, aSplineX->Evaluate(t), aSplineY->Evaluate(t),
                       aSplineZ->Evaluate(t));
    printf(" point:%f, %f, %f; \n",points->GetPoint(i)[0],
                                    points->GetPoint(i)[1],points->GetPoint(i)[2]);
}
vtkCellArray *lines = vtkCellArray::New();
    int a=lines->InsertNextCell(numberOfOutputPoints);
    for(i=0;i<numberOfOutputPoints;i++)
    {
         lines->InsertCellPoint(i);
    }
vtkPolyData *profileData = vtkPolyData::New();
profileData->SetPoints(points);
profileData->SetLines(lines);
// Add thickness to the resulting line.
vtkTubeFilter *profileTubes = vtkTubeFilter::New();
profileTubes->SetNumberOfSides(8);
profileTubes->SetInput(profileData);
profileTubes->SetRadius(0.005);
vtkPolyDataMapper *profileMapper = vtkPolyDataMapper::New();
profileMapper->SetInputConnection(profileTubes->GetOutputPort());
vtkActor *profile = vtkActor::New();
profile->SetMapper(profileMapper);
profile->GetProperty()->SetDiffuseColor(1,1,0);
profile->GetProperty()->SetSpecular(0.3);
profile->GetProperty()->SetSpecularPower(30);
//////////////
ren->AddActor(glyph);
ren->AddActor(profile);
iren->Initialize();
renWindow->Render();
iren->Start();
}

样条曲线KSpline

样条曲线KSpline
回复

使用道具 举报

0

主题

421

回帖

841

积分

高级会员

积分
841

最佳新人

发表于 2016-5-10 17:23:53 | 显示全部楼层
一直在摸索,还是楼主厉害!
回复

使用道具 举报

21

主题

420

回帖

1127

积分

版主

积分
1127

热心会员推广达人优秀版主荣誉管理论坛元老

发表于 2016-5-12 18:26:06 | 显示全部楼层
想看看 啊    想学学啊
回复

使用道具 举报

1

主题

441

回帖

1100

积分

版主

积分
1100

热心会员推广达人优秀版主荣誉管理论坛元老

发表于 2016-5-13 22:02:30 | 显示全部楼层
谢谢楼主!
回复

使用道具 举报

0

主题

421

回帖

841

积分

高级会员

积分
841

最佳新人

发表于 2016-5-14 04:16:01 | 显示全部楼层
正需要,学习学习,谢谢楼主!
回复

使用道具 举报

0

主题

399

回帖

804

积分

高级会员

积分
804

最佳新人

发表于 2016-5-14 18:22:15 | 显示全部楼层
这个有用了
回复

使用道具 举报

119

主题

457

回帖

1524

积分

版主

积分
1524

热心会员推广达人优秀版主荣誉管理论坛元老

发表于 2016-5-16 02:49:17 | 显示全部楼层
正需要,学习学习,谢谢楼主!
回复

使用道具 举报

0

主题

396

回帖

791

积分

高级会员

积分
791

最佳新人

发表于 2016-5-21 13:30:17 | 显示全部楼层
回复看下,!!
回复

使用道具 举报

13

主题

398

回帖

1051

积分

版主

积分
1051

热心会员推广达人优秀版主荣誉管理论坛元老

发表于 2016-5-24 06:50:37 | 显示全部楼层
高手,厉害,向你学习。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|关于我们|医维基|网站地图|Archiver|手机版|医疗之家 ( 沪ICP备2023001278号-1 )  

GMT+8, 2024-5-2 18:20 , Processed in 0.194990 second(s), 31 queries .

Designed by Medical BBS

快速回复 返回顶部 返回列表