medimage 发表于 2015-12-4 22:28:56

VTK例子7-样条曲线KclosedSplines

样条曲线KclosedSplines#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 "vtkCardinalSpline.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_MAXvtkRenderer *ren = vtkRenderer::New();vtkRenderWindow *renWindow = vtkRenderWindow::New();    renWindow->AddRenderer(ren);renWindow->SetSize( 600, 600 );
    vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();    iren->SetRenderWindow(renWindow);
int numberOfInputPoints = 30;
vtkKochanekSpline *aKSplineX=vtkKochanekSpline::New();aKSplineX-> ClosedOn();vtkKochanekSpline *aKSplineY=vtkKochanekSpline::New();aKSplineY-> ClosedOn();vtkKochanekSpline *aKSplineZ=vtkKochanekSpline::New();aKSplineZ-> ClosedOn();
vtkCardinalSpline *aCSplineX=vtkCardinalSpline::New();aCSplineX-> ClosedOn();vtkCardinalSpline *aCSplineY=vtkCardinalSpline::New();aCSplineY-> ClosedOn();vtkCardinalSpline *aCSplineZ=vtkCardinalSpline::New();aCSplineZ-> ClosedOn();
//# add some pointsvtkPoints *inputPoints=vtkPoints::New();//float x -1.0; set y -1.0; set z 0.0aKSplineX-> AddPoint (0 ,-1.0);aKSplineY-> AddPoint (0 ,-1.0);aKSplineZ-> AddPoint (0 ,0.0);aCSplineX-> AddPoint (0 ,-1.0);aCSplineY-> AddPoint (0 ,-1.0);aCSplineZ-> AddPoint (0 ,0.0);inputPoints-> InsertPoint (0, -1.0,-1.0,0);
//set x 1.0; set y -1.0; set z 0.0aKSplineX-> AddPoint (1 ,1.0);aKSplineY-> AddPoint (1 ,-1.0);aKSplineZ-> AddPoint (1 ,0.0);aCSplineX-> AddPoint (1 ,1.0);aCSplineY-> AddPoint (1 ,-1.0);aCSplineZ-> AddPoint (1 ,0.0);inputPoints-> InsertPoint (1, 1.0,-1.0,0);
//set x 1.0; set y 1.0; set z 0.0aKSplineX-> AddPoint (2 ,1.0);aKSplineY-> AddPoint (2 ,1.0);aKSplineZ-> AddPoint (2 ,0.0);aCSplineX-> AddPoint (2 ,1.0);aCSplineY-> AddPoint (2 ,1.0);aCSplineZ-> AddPoint (2 ,0.0);inputPoints-> InsertPoint (2, 1.0,1.0,0);
//set x -1.0; set y 1.0; set z 0.0aKSplineX-> AddPoint (3 ,-1.0);aKSplineY-> AddPoint (3 ,1.0);aKSplineZ-> AddPoint (3 ,0.0);aCSplineX-> AddPoint (3 ,-1.0);aCSplineY-> AddPoint (3 ,1.0);aCSplineZ-> AddPoint (3 ,0.0);inputPoints-> InsertPoint (3, -1.0,1.0,0);
vtkPolyData *inputData =vtkPolyData::New();inputData->SetPoints(inputPoints);
vtkSphereSource *balls =vtkSphereSource::New();balls->SetRadius(.04);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 *Kpoints = vtkPoints::New();vtkPoints *Cpoints = vtkPoints::New();
Kpoints ->Reset();Cpoints ->Reset();
vtkPolyData *profileKData=vtkPolyData::New();vtkPolyData *profileCData=vtkPolyData::New();
numberOfInputPoints=5;int numberOfOutputPoints=100;
float t;int i;for(i=0;i<numberOfOutputPoints;i++){    t = (numberOfInputPoints-1.0)/(numberOfOutputPoints-1.0)*i;    Kpoints->InsertPoint(i, aKSplineX->Evaluate(t), aKSplineY->Evaluate(t),                     aKSplineZ->Evaluate(t));    Cpoints->InsertPoint(i, aCSplineX->Evaluate(t), aCSplineY->Evaluate(t),                     aCSplineZ->Evaluate(t));

}
vtkCellArray *lines = vtkCellArray::New();    int a=lines->InsertNextCell(numberOfOutputPoints);    for(i=0;i<numberOfOutputPoints;i++)    {         lines->InsertCellPoint(i);    }
profileKData->SetPoints(Kpoints);profileKData->SetLines(lines);
profileCData->SetPoints(Cpoints);profileCData->SetLines(lines);
// Add thickness to the resulting line.vtkTubeFilter *profileKTubes = vtkTubeFilter::New();profileKTubes->SetNumberOfSides(8);profileKTubes->SetInput(profileKData);profileKTubes->SetRadius(0.01);
vtkTubeFilter *profileCTubes = vtkTubeFilter::New();profileCTubes->SetNumberOfSides(8);profileCTubes->SetInput(profileCData);profileCTubes->SetRadius(0.01);
vtkPolyDataMapper *profileKMapper = vtkPolyDataMapper::New();profileKMapper->SetInputConnection(profileKTubes->GetOutputPort());
vtkActor *profileK = vtkActor::New();profileK->SetMapper(profileKMapper);profileK->GetProperty()->SetDiffuseColor(1,1,0);profileK->GetProperty()->SetSpecular(0.3);profileK->GetProperty()->SetSpecularPower(30);
vtkPolyDataMapper *profileCMapper = vtkPolyDataMapper::New();profileCMapper->SetInputConnection(profileCTubes->GetOutputPort());
vtkActor *profileC = vtkActor::New();profileC->SetMapper(profileCMapper);profileC->GetProperty()->SetDiffuseColor(0,0,1);profileC->GetProperty()->SetSpecular(0.3);profileC->GetProperty()->SetSpecularPower(30);
//////////////

ren->AddActor(glyph);ren->AddActor(profileC);ren->AddActor(profileK);
iren->Initialize();renWindow->Render();
iren->Start();}

devstd 发表于 2016-5-12 17:02:49

先看看先。。。

proton 发表于 2016-5-13 02:34:45

谢谢你的辛苦劳动了!!!

江西丁工 发表于 2016-5-14 14:09:34

一刀杨幂上床,二刀上海买房。三刀台湾归降,四刀美帝叫娘。五刀星河翱翔,六刀宇宙称王。七刀女人长屌,八刀汉子变娘。九刀完爆山东蓝翔——切糕!

13636600011 发表于 2016-5-18 00:23:26

有吸引力,回复看看

medstd 发表于 2016-5-21 09:33:56

goooood 顶起
页: [1]
查看完整版本: VTK例子7-样条曲线KclosedSplines