vtk实战(十九)——读取 PDB数据
2016-04-28 11:42
309 查看
本例主要采用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; }
相关文章推荐
- Macosx 安装 ionic 成功教程
- 图解CSS中position属性的定位用法
- limits.conf配置详解
- vlc-android(1.9.1) 移到android studio
- 用dos命令实现导入、导出windows计划任务详解
- 自定义App头像背景圆框
- Material Design: NavigationView FlaotingActionBar SnackBar的使用,navigationview
- vtk实战(十六)——解析STL文件
- ZeroMQ研究与应用分析
- Caused by: android.content.res.Resources$NotFoundException: File res/drawable/main_tab_conversation_
- 目标检测“Exploit All the Layers: Fast and Accurate CNN Object Detector with Scale Dependent Pooling and”
- [openvc]4.创建一张图片并保存到本地
- php开启openssl的方法
- firstobjet free xml的格式化
- 磊科路由器动态获取IP模式下不显示DNS设置的问题
- 从java到初学javaweb,所遇问题
- 构造函数&拷贝构造函数&赋值构造函数
- UI测试导入Espresso时的冲突
- 移动统计工具Flurry
- 一些经典面试题的思考与解析