首页 > 其他分享 >使用VTK来显示分子结构

使用VTK来显示分子结构

时间:2025-01-10 19:05:36浏览次数:3  
标签:显示 GetProperty 分子结构 VTK atom bond include glyph vtkNew

我们一般是使用VMD来显示分子结构,分子结构或者是DNA结构,我们是从PDB银行下载的。如果我们使用VTK来显示分子结构行不行呢?查阅了资料,发现是可行的。因为在vtk的example中就有这样一个例子。使用pdbreader来读取pdb格式的文件,然后显示。在这里我就抛一块砖头了。
#include <iostream>
#include <cmath>
#include <string>

#include <vtkNew.h>
#include <vtkGlyph3D.h>
#include <vtkNamedColors.h>
#include <vtkLODActor.h>
#include <vtkPDBReader.h> //reader
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkSphereSource.h>
#include <vtkTubeFilter.h>
#include <vtkSmartPointer.h>
#include <vtkInteractorStyleTrackballCamera.h>
//必要的文件头

using namespace std;

int main(int, char**)
{
    string filename="../data/1mbs.pdb"; //这个文件我会放在链接处的。

    vtkNew<vtkNamedColors> colors;
    vtkNew<vtkRenderer> renderer;
    renderer->SetBackground(colors->GetColor3d("SlateGray").GetData());
    vtkNew<vtkRenderWindow> renderWindow;
    renderWindow->AddRenderer(renderer);
    renderWindow->SetSize(1024,1024);
    vtkNew<vtkRenderWindowInteractor> iren;
    iren->SetRenderWindow(renderWindow);


    vtkNew<vtkPDBReader> reader;
    reader->SetFileName(filename.c_str());
    reader->SetHBScale(1.0);
    reader->SetBScale(1.0);
    reader->Update();
    cout<<"# of atoms is: "<<reader->GetNumberOfAtoms()<<endl;

    double resolution=std::sqrt(300000.0/reader->GetNumberOfAtoms());
    if(resolution>20)
        resolution=20;
    if(resolution<4)
        resolution=4;
    cout<<"Resolution is: "<<resolution<<endl;
    vtkNew<vtkSphereSource> sphere;
    sphere->SetCenter(0,0,0);
    sphere->SetRadius(1);
    sphere->SetThetaResolution(static_cast<int>(resolution));
    sphere->SetPhiResolution(static_cast<int>(resolution));

    vtkNew<vtkGlyph3D> glyph;
    glyph->SetInputConnection(reader->GetOutputPort());
    glyph->SetOrient(1);
    glyph->SetColorMode(1);
    glyph->SetScaleMode(2);
    glyph->SetScaleFactor(0.25);
    glyph->SetSourceConnection(sphere->GetOutputPort());

    vtkNew<vtkPolyDataMapper> atomMapper;
    atomMapper->SetInputConnection(glyph->GetOutputPort());
    atomMapper->UseLookupTableScalarRangeOff();
    atomMapper->ScalarVisibilityOn();
    atomMapper->SetScalarModeToDefault();

    vtkNew<vtkLODActor> atom;
    atom->SetMapper(atomMapper);
    atom->GetProperty()->SetRepresentationToSurface();
    atom->GetProperty()->SetInterpolationToGouraud();
    atom->GetProperty()->SetAmbient(0.1);
    atom->GetProperty()->SetDiffuse(0.7);
    atom->GetProperty()->SetSpecular(0.5);
    atom->GetProperty()->SetSpecularPower(80);
    atom->GetProperty()->SetSpecularColor(colors->GetColor3d("White").GetData());
    atom->SetNumberOfCloudPoints(30000);

    renderer->AddActor(atom);

    vtkNew<vtkTubeFilter> tube;
    tube->SetInputConnection(reader->GetOutputPort());
    tube->SetNumberOfSides(static_cast<int>(resolution));
    tube->CappingOff();
    tube->SetRadius(0.2);
    tube->SetVaryRadius(0);
    tube->SetRadiusFactor(10);

    vtkNew<vtkPolyDataMapper> bondMapper;
    bondMapper->SetInputConnection(tube->GetOutputPort());
    bondMapper->UseLookupTableScalarRangeOff();
    bondMapper->ScalarVisibilityOff();
    bondMapper->SetScalarModeToDefault();

    vtkNew<vtkLODActor> bond;
    bond->SetMapper(bondMapper);
    bond->GetProperty()->SetRepresentationToSurface();
    bond->GetProperty()->SetInterpolationToGouraud();
    bond->GetProperty()->SetAmbient(0.1);
    bond->GetProperty()->SetDiffuse(0.7);
    bond->GetProperty()->SetSpecular(0.5);
    bond->GetProperty()->SetSpecularPower(80);
    bond->GetProperty()->SetSpecularColor(colors->GetColor3d("White").GetData());

    vtkNew<vtkInteractorStyleTrackballCamera> style;
    iren->SetInteractorStyle(style);

    renderer->AddActor(bond);
    renderWindow->Render(); //这里必须要渲染一下,数据量太大了。
    iren->Initialize();
    iren->Start();


    return 0;
}

图 显示渲染的3D图像

文件链接:https://download.csdn.net/download/kangdehua/90250402

标签:显示,GetProperty,分子结构,VTK,atom,bond,include,glyph,vtkNew
From: https://blog.csdn.net/kangdehua/article/details/145060522

相关文章

  • C#实战|人员管理系统[27]:双击列表显示详细人员信息
    哈喽,你好啊,我是雷工!前面实现了通过编号查询详细的人员信息,但使用中可能不知道人员编号,需要先通过所属组织查询人员列表,根据列表中的编号查询详细的人员信息;这时使用起来不太友好,输入编号比较麻烦,是否可以优化一下,在查询列表中双击某行,直接弹出显示该行对应人员的详细信息界面......
  • Win电脑日历、日程表怎么固定到桌面显示?
    使用Win电脑办公,想要随时查看今天的待办任务怎么办?如何快速记录临时安排的工作事项呢?如果能够把日历、日程表固定到电脑桌面上显示就很方便了!那么Win电脑桌面日历/日程表,怎么固定到桌面显示呢?其实用敬业签就可以轻松实现!它是一款能一直悬挂在Win桌面上显示的便签+待办工具,并且有......
  • 使用Typora+Gitee+PicGo解决.md文件发给别人时无法显示图片的问题【2025最新超详细】
    下面是一个关于如何使用Typora、Gitee和PicGo解决.md文件发送给别人时无法显示图片的详细教程。在撰写.md文件时,通常会嵌入一些图片,尤其是在使用Typora进行编辑时。然而,当你将包含图片的.md文件发送给他人时,如果图片没有正确上传到公共的图片服务器,接收方往往......
  • PbootCMS 的 {pboot:link} 标签,您可以轻松地在网站的任意位置调取和显示友情链接列表
    PbootCMS的 {pboot:link} 标签,您可以轻松地在网站的任意位置调取和显示友情链接列表。确保正确设置 gid 和 num 参数,并根据需要调整模板和样式,以实现最佳的用户体验。假设您有一个友情链接分组,其ID为1,并且您希望输出15个友情链接,可以使用以下代码:{pboot:linkgid......
  • VTK库Windows环境安装
     VTK(VisualizationToolkit)是一款用于三维计算机图形学、图像处理和可视化的开源软件系统。本文介绍windows系统下,从通过命令行从源码编译VTK库的过程。 1.准备工作安装好cmake,因为后续需要使用QT,所以也安装好QT环境 2.源码下载从VTK官网下载源码压纹包,解压到本地目录......
  • 在Windows操作系统中,有时会需要查找隐藏的用户账户名称。这些用户账户可能是由系统创
    编辑Windows注册表来隐藏用户账户的技巧实际上是对Windows登录过程的深度定制。通过修改注册表,系统可以控制哪些账户在登录界面显示或隐藏。这种方法并不修改用户账户本身的存在,而是通过修改系统设置使得账户在图形用户界面(GUI)上不可见。底层原理:Windows登录与账户显示机制......
  • salesforce零基础学习(一百四十二)在Formula字段中如何通过Datetime字段显示Local Time(
    背景:我们需求是显示DateTime类型的Time信息,比如我们想要在report中基于HourOfCreatedDate进行分组,从而想要了解到一段时间内什么时间是数据创建的高峰期,不同的runninguser可能时区不同,比如中国时区是GMT+8,日本的时区是GMT+9,美国可能不同的州对应的时区也不同,而且涉及到冬令......
  • matplotlib显示中文乱码问题
    一背景最近使用matplotlib,画图时候,出现中文乱码,在此记录解决方案。二bug现象三解决方案在代码中添加如下importmatplotlibasmplfont_path='/home/xx/Downloads/chinese.simhei.ttf'mpl.font_manager.fontManager.addfont(font_path)mpl.rc('font',famil......
  • 身份证实名认证接口核验显示库无原因?Java身份认证API
    随着信息技术的日新月异,互联网已经深深融入了我们生活的方方面面。从购物、娱乐到工作学习,互联网平台的便捷性为我们的生活带来了前所未有的改变。然而,伴随着这种迅猛发展的是一些不可忽视的安全隐患。为了构建更加健康、安全、可信的网络环境,越来越多的互联网平台开始推行......
  • [rustGUI][iced]基于rust的GUI库iced(0.13)的部件学习(03):图像的导入、显示、调整(暨image
    前言本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发。iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动。本合集是基于新版本的关于分部件(widget)的使用介绍,包括源代码介绍、实例使用等。环境配置系统:window10平台:visualstudiocode语言:rust......