#include \ #include \ #include \ #include
void main() {
double x,y,z; int i;
for(i=0;i x = (float)rand()/(float)RAND_MAX; y = (float)rand()/(float)RAND_MAX; z = (float)rand()/(float)RAND_MAX; printf(\,x,y,z); aSplineX->AddPoint(i, x); aSplineY->AddPoint(i, y); aSplineZ->AddPoint(i, z); inputPoints->InsertPoint(i, x, y, z); vtkPoints *inputPoints = vtkPoints::New(); vtkCardinalSpline *aSplineX = vtkCardinalSpline::New(); vtkCardinalSpline *aSplineY = vtkCardinalSpline::New(); vtkCardinalSpline *aSplineZ = vtkCardinalSpline::New(); int numberOfInputPoints = 30; vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); iren->SetRenderWindow(renWindow); // rand()/RAND_MAX;// 0 - RAND_MAX vtkRenderer *ren = vtkRenderer::New(); vtkRenderWindow *renWindow = vtkRenderWindow::New(); renWindow->AddRenderer(ren); renWindow->SetSize( 600, 600 ); srand(time(NULL)) ; } 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 vtkCellArray *lines = vtkCellArray::New(); int a=lines->InsertNextCell(numberOfOutputPoints); for(i=0;i t = (numberOfInputPoints-1.0)/(numberOfOutputPoints-1.0)*i; points->InsertPoint(i, aSplineX->Evaluate(t), aSplineY->Evaluate(t), aSplineZ->Evaluate(t)); points->GetPoint(i)[1],points->GetPoint(i)[2]); printf(\,points->GetPoint(i)[0], } } 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(); 4、图形切割 #include \ #include \ #include \ #include \ #include \ #include \ #include \ #include \ #include \ #include \ #include \ #include \ int main() { vtkQuadric *quadric = vtkQuadric::New(); vtkSampleFunction *sample = vtkSampleFunction::New(); vtkExtractVOI *extract = vtkExtractVOI::New(); sample->SetSampleDimensions(30, 30, 30); sample->SetImplicitFunction(quadric); sample->ComputeNormalsOff(); quadric->SetCoefficients(.5, 1, .2, 0, .1, 0, 0, .2, 0, 0); extract->SetInputConnection(sample->GetOutputPort()); extract->SetVOI(0, 29, 0, 29, 5, 25); //**********调整三维切割 // extract->SetSampleRate(1, 2, 3); vtkContourFilter *contours = vtkContourFilter::New(); vtkPolyDataMapper *contMapper = vtkPolyDataMapper::New(); vtkActor *contActor = vtkActor::New(); vtkOutlineFilter *outline = vtkOutlineFilter::New(); vtkPolyDataMapper *outlineMapper = vtkPolyDataMapper::New(); vtkActor *outlineActor = vtkActor::New(); vtkRenderer *ren1 = vtkRenderer::New(); vtkRenderWindow *renWin = vtkRenderWindow::New(); } return 0; ren1->ResetCamera(); ren1->GetActiveCamera()->Zoom( 1.5 ); renWin->Render(); iren->Initialize(); iren->Start(); ren1->SetBackground(1, 1, 1); ren1->AddActor(contActor); ren1->AddActor(outlineActor); renWin->AddRenderer(ren1); iren->SetRenderWindow(renWin); vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); outlineActor->SetMapper(outlineMapper); outlineActor->GetProperty()->SetColor(0, 0, 0); outlineMapper->SetInputConnection(outline->GetOutputPort()); outline->SetInputConnection(sample->GetOutputPort()); contActor->SetMapper(contMapper); contMapper->SetInputConnection(contours->GetOutputPort()); contMapper->SetScalarRange(0.0, 1.2); contours->SetInputConnection(extract->GetOutputPort()); contours->GenerateValues(13, 0.0, 1.2);