用vtk画抛物面

来源:互联网 发布:演唱会望远镜 知乎 编辑:程序博客网 时间:2024/06/05 15:07

主要运用vtk中vtkQuadric函数

伪代码

void ModleData::drawParaboloid(){float radius = data[7];float temp = -4 * data[8]; // data[7] 表示焦距vtkSmartPointer<vtkQuadric>quadric = vtkSmartPointer<vtkQuadric>::New();quadric->SetCoefficients(1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, temp, 0.0);//二次函数采样分辨率vtkSmartPointer<vtkSampleFunction>sample = vtkSmartPointer<vtkSampleFunction>::New();sample->SetSampleDimensions(40, 40, 20);sample->SetImplicitFunction(quadric);double xmin = -radius, xmax = radius,zmin = 1.0f / temp, zmax = - radius * radius / temp + zmin;sample->SetModelBounds(xmin, xmax, xmin, xmax, zmin, zmax);vtkSmartPointer<vtkContourFilter> contourFilter = vtkSmartPointer<vtkContourFilter>::New();contourFilter->SetInputConnection(sample->GetOutputPort());contourFilter->GenerateValues(1, 1, 1);contourFilter->Update();vtkSmartPointer<vtkPolyData> polyData = contourFilter->GetOutput();vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();// 用户自定义平移旋转 (先移动后旋转)transform->Translate(data[0], data[1], data[2]);transform->Translate(0, 0, -zmin);    transform->RotateWXYZ(data[6], data[3], data[4], data[5]);vtkSmartPointer<vtkTransformPolyDataFilter> TransFilter = vtkSmartPointer<vtkTransformPolyDataFilter>::New();     TransFilter->SetInputData(polyData);     TransFilter->SetTransform(transform); //use vtkTransform (or maybe vtkLinearTransform)     TransFilter->Update(); polyData = TransFilter->GetOutput();//可视化,设置mapper、actorvtkSmartPointer<vtkPolyDataMapper>mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputData(polyData);actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);}
运行效果


0 0
原创粉丝点击