vtk实战(十九)——读取 PDB数据
来源:互联网 发布:雷迪尊者 知乎 编辑:程序博客网 时间:2024/05/16 05:26
本例主要采用vtkPDBReader()读取PDB数据文件。
#include <vtkSmartPointer.h>#include <cmath>#include <vtkGlyph3D.h>#include <vtkLODActor.h>#include <vtkLODActor.h>#include <vtkPDBReader.h>#include <vtkPolyDataMapper.h>#include <vtkPolyDataMapper.h>#include <vtkProperty.h>#include <vtkRenderWindow.h>#include <vtkRenderWindowInteractor.h>#include <vtkRenderer.h>#include <vtkSphereSource.h>#include <vtkTubeFilter.h>int main(){ vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); renderer->SetBackground(.1, .2, .3); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer(renderer); renderWindow->SetSize(300, 300); vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); interactor->SetRenderWindow(renderWindow); vtkSmartPointer<vtkPDBReader> pdb = vtkSmartPointer<vtkPDBReader>::New(); char * fileName = "caffeine.pdb"; pdb->SetFileName(fileName); pdb->SetHBScale(1.0); pdb->SetBScale(1.0); pdb->Update(); std::cout << "# of atoms is: " << pdb->GetNumberOfAtoms() << std::endl; double resolution = std::sqrt(300000.0 / pdb->GetNumberOfAtoms()); if (resolution > 20) { resolution = 20; } if (resolution < 4) { resolution = 4; } std::cout << "Resolution is: " << resolution << std::endl; vtkSmartPointer<vtkSphereSource> sphere = vtkSmartPointer<vtkSphereSource>::New(); sphere->SetCenter(0, 0, 0); sphere->SetRadius(1); sphere->SetThetaResolution(static_cast<int>(resolution)); sphere->SetPhiResolution(static_cast<int>(resolution)); vtkSmartPointer<vtkGlyph3D> glyph = vtkSmartPointer<vtkGlyph3D>::New(); glyph->SetInputConnection(pdb->GetOutputPort()); glyph->SetOrient(1); glyph->SetColorMode(1); glyph->SetScaleMode(2); glyph->SetScaleFactor(.25); glyph->SetSourceConnection(sphere->GetOutputPort()); vtkSmartPointer<vtkPolyDataMapper> atomMapper = vtkSmartPointer<vtkPolyDataMapper>::New(); atomMapper->SetInputConnection(glyph->GetOutputPort()); atomMapper->ImmediateModeRenderingOn(); atomMapper->UseLookupTableScalarRangeOff(); atomMapper->ScalarVisibilityOn(); atomMapper->SetScalarModeToDefault(); vtkSmartPointer<vtkLODActor> atom = vtkSmartPointer<vtkLODActor>::New(); atom->SetMapper(atomMapper); atom->GetProperty()->SetRepresentationToSurface(); atom->GetProperty()->SetInterpolationToGouraud(); atom->GetProperty()->SetAmbient(0.15); atom->GetProperty()->SetDiffuse(0.85); atom->GetProperty()->SetSpecular(0.1); atom->GetProperty()->SetSpecularPower(30); atom->GetProperty()->SetSpecularColor(1, 1, 1); atom->SetNumberOfCloudPoints(30000); renderer->AddActor(atom); vtkSmartPointer<vtkTubeFilter> tube = vtkSmartPointer<vtkTubeFilter>::New(); tube->SetInputConnection(pdb->GetOutputPort()); tube->SetNumberOfSides(static_cast<int>(resolution)); tube->CappingOff(); tube->SetRadius(0.2); tube->SetVaryRadius(0); tube->SetRadiusFactor(10); vtkSmartPointer<vtkPolyDataMapper> bondMapper = vtkSmartPointer<vtkPolyDataMapper>::New(); bondMapper->SetInputConnection(tube->GetOutputPort()); bondMapper->ImmediateModeRenderingOn(); bondMapper->UseLookupTableScalarRangeOff(); bondMapper->ScalarVisibilityOff(); bondMapper->SetScalarModeToDefault(); vtkSmartPointer<vtkLODActor> bond = vtkSmartPointer<vtkLODActor>::New(); bond->SetMapper(bondMapper); bond->GetProperty()->SetRepresentationToSurface(); bond->GetProperty()->SetInterpolationToGouraud(); bond->GetProperty()->SetAmbient(0.15); bond->GetProperty()->SetDiffuse(0.85); bond->GetProperty()->SetSpecular(0.1); bond->GetProperty()->SetSpecularPower(30); bond->GetProperty()->SetSpecularColor(1, 1, 1); bond->GetProperty()->SetDiffuseColor(1.0000, 0.8941, 0.70981); renderer->AddActor(bond); interactor->Initialize(); interactor->Start(); return 0;}
0 0
- vtk实战(十九)——读取 PDB数据
- vtk实战(三十五)——读取结构化格网数据
- vtk实战(三十六)——读取结构化点云数据
- vtk实战(三十七)——读取bmp数据
- vtk实战(三十八)——读取jpg数据(有问题)
- vtk实战(三十九)——读取PNG数据
- vtk实战(四十一)——读取tif数据
- vtk实战(二十九)——读入未知格式XMLFile数据
- vtk实战(六)—读取".gml"文件
- vtk实战(八)—读取.raw文件
- vtk实战(十二)——读取.obj文件
- vtk实战(十三)——读取DICOM影像文件
- vtk实战(七)—读取三维点坐标
- vtk实战(九)—读取三维点坐标2
- vtk实战(十一)—自定义分隔符读取文本
- vtk实战(二十二)——写入PLY数据
- vtk实战(二十四)——读入vtu数据
- vtk实战(二十三)——写入vtktable数据
- 习题三1011
- leetcode-easy OJ感想
- Bootstrap Multiselect中文api
- 小细节:margin:0 auto 与 text-align:center 的区别
- Ubuntu安装ss-qt5
- vtk实战(十九)——读取 PDB数据
- Qjump implementation
- C++ deques
- java_程序结构、数组
- 归并排序
- 聊聊Socket、TCP/IP、HTTP、FTP及网络编程
- 使用xutils实现多线程下载
- myibatis中出现“@P0' 附近有语法错误。”
- 基类RecyclerViewAdapter以及BaseViewHolder。减少适配器的重复代码量