首页 > 其他分享 >在博客园随笔中插入3D分子模型

在博客园随笔中插入3D分子模型

时间:2022-11-21 23:45:52浏览次数:70  
标签:container viewer 博客园 let https 随笔 com 3Dmol 3D

技术背景

博主对前端技术不甚了解,只是想在博客中直接展示一些已有的分子结构,而且需要是可以交互的。而我们了解到通过3Dmol这样的前端工具可以实现,通过在博客园随笔中直接引入3Dmol的js最新脚本,然后在当前页构建一个容器,最后在容器中以字符串的形式填进去分子结构,比如可以填充一个xyz文件所定义的3D分子结构。由于不需要安装什么特定的软件(假设你已经生成好了一系列的分子模型用于展示,否则可以参考前面这篇博客用openbabel去生成一些特定的分子结构),我们直接上前端代码吧。

解决方案

解决方案主要参考了参考链接1文章中的内容,非常简单,只需三步走。首先,我们直接在Markdown模式的编辑器下直接引入3Dmol的最新js脚本:

<script src="https://3Dmol.csb.pitt.edu/build/3Dmol-min.js"></script>

然后创建一个容器,这里我们设定了大小和居中:

<div id="container-01" class="mol-container"></div>
<style>
.mol-container {
  width:    75%;
  height:   400px;
  position: relative;
  margin: 0 auto;
}
</style>

最后,我们再写一个js:

<script>
$(function() {
	let element = $('#container-01');
	let config = { backgroundColor : 'white' };
	let viewer = $3Dmol.createViewer( element, config );
	viewer.addModel("3\n\nC 0 0 0\nO 1.16 0 0\nO -1.16 0 0", "xyz");
	viewer.addUnitCell();
	viewer.setStyle({}, {sphere : {}});
	viewer.zoomTo();
	viewer.render();
});
</script>

这样我们就完成了一个二氧化碳\(CO_2\)的结构展示,实现效果如下所示:

当然,类似的我们还可以修改显示效果,比如把背景改成黑色,然后改成一个棍子模型:

<div id="container-02" class="mol-container"></div>
<style>
.mol-container {
  width:    75%;
  height:   400px;
  position: relative;
  margin: 0 auto;
}
</style>

<script>
$(function() {
	let element = $('#container-02');
	let config = { backgroundColor : 'black' };
	let viewer = $3Dmol.createViewer( element, config );
	viewer.addModel("3\n\nC 0 0 0\nO 1.16 0 0\nO -1.16 0 0", "xyz");
	viewer.addUnitCell();
	viewer.setStyle({stick:{}});
	viewer.zoomTo();
	viewer.render();
});
</script>

比较神奇的是,虽然3Dmol没有直接支持球棍模型,但是如果我们把球模型和棍子模型一结合,就自然产生了一个球棍模型:

<div id="container-03" class="mol-container"></div>
<style>
.mol-container {
  width:    75%;
  height:   400px;
  position: relative;
  margin: 0 auto;
}
</style>

<script>
$(function() {
	let element = $('#container-03');
	let config = { backgroundColor : 'black' };
	let viewer = $3Dmol.createViewer( element, config );
	viewer.addModel("3\n\nC 0 0 0\nO 1.16 0 0\nO -1.16 0 0", "xyz");
	viewer.addUnitCell();
	viewer.setStyle({stick:{radius:0.1},sphere:{radius:0.45}});
	viewer.zoomTo();
	viewer.render();
});
</script>

当然,加载普通的蛋白质结构,更是不在话下:

<div id="container-04" class="mol-container"></div>
<style>
.mol-container {
  width:    75%;
  height:   400px;
  position: relative;
  margin: 0 auto;
}
</style>

<script>
$(function() {
	let element = $('#container-04');
	let config = { backgroundColor : 'black' };
	let viewer = $3Dmol.createViewer( element, config );
  let pdbUri = 'https://files-cdn.cnblogs.com/files/dechinphy/protein.sh?t=1669043795';
  jQuery.ajax( pdbUri, { 
    success: function(data) {
      let v = viewer;
      v.addModel( data, "pdb" );                       /* load data */
      v.setStyle({}, {cartoon: {color: 'spectrum'}});  /* style all atoms */
      v.zoomTo();                                      /* set camera */
      v.render();                                      /* render scene */
      v.zoom(1.2, 1000);                               /* slight zoom */
    },
    error: function(hdr, status, err) {
      console.error( "Failed to load PDB " + pdbUri + ": " + err );
    },
  });
});
</script>

值得注意的是,3Dmol使用jQuery.ajax从外部去读取文件时,只能加载同域名下的文件,正如原文所说:

By default, Javascript will only be allowed to load data from the same domain as the web page from which it has been invoked (i.e. if your web page is being served from "my.domain.com" then javascript on that web page will only be able to load data from "my.domain.com"). This is a standard security restriction called "Cross-origin resource sharing" CORS - there are ways around this restriction, however for the sake of this tutorial we assume that the external PDB data file resides on your server.

因此,我们需要把pdb文件上传到博客园的文件系统中。而又因为博客园的文件系统仅支持几种特定的文件类型,因此我使用的方法是把pdb文件改名为一个sh文件,再传到博客园的文件系统中。由于读取的时候都是用字符串读取,再转义成pdb文件,所以并不影响执行,最终的效果如下所示:

总结概要

前端作为一项重要技术,其本身就旨在给用户更好的展示效果和更好的交互模式,然而很多时候再博客中我们只能够采用一些截图的方法来保存我们的结果,然后再放到博客的内容中。而这样操作会带来很大程度上的失真,尤其是生物化学中常见的分子结构的展示,如果直接截图则无法更加全面的展示其结构内容。而3Dmol这个工具则使能了我们使用js的技术,将一个分子的3D模型集成到我们的博客内容中,从很大程度上优化了展示的效果。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/3dmol.html

作者ID:DechinPhy

更多原著文章请参考:https://www.cnblogs.com/dechinphy/

打赏专用链接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

腾讯云专栏同步:https://cloud.tencent.com/developer/column/91958

CSDN同步链接:https://blog.csdn.net/baidu_37157624?spm=1008.2028.3001.5343

51CTO同步链接:https://blog.51cto.com/u_15561675

参考链接

  1. https://zhuanlan.zhihu.com/p/293139166
  2. https://3dmol.org/doc/tutorial-code.html

标签:container,viewer,博客园,let,https,随笔,com,3Dmol,3D
From: https://www.cnblogs.com/dechinphy/p/3dmol.html

相关文章

  • Cesium关于3Dtiles的细节分享
    介绍介绍一下Cesium中有关3dTiles的奇淫技巧,存在一些埋坑的地方,以下内容仅为自己摸索的细节和方法,仅供参考,若有更好的办法欢迎讨论通用快速获取feature中包含的属性信息......
  • 服饰3D柔性渲染调研及实践
    服饰3D柔性渲染调研及实践调研背景 当前全球服装制造的产业链中,我国的中小企业的难以参与到其中利润最高的环节比如产品的设计和研发,主要原因就是服装设计的难度......
  • 软件技术基础随笔3
    软件技术基础首页-22软件基础-浙江理工大学-班级博客-博客园本次作业的目标结对任务,简单录制一段电梯演讲小组成员褚原宇——2020330301194陈宇豪——20......
  • 3d产品vr虚拟仿真展示比看真实的产品更加形象生动-深圳华锐视点
    对一个企业来说,盈利是企业创建的目的;同样对于企业营销工作者的最终目的也是卖出产品,获取利润。产品3D展示利用3d虚拟现实仿真技术把企业产品的性能特征、工作原理的实......
  • Unity3D BuildPipeline.BuildPlayer打包后没有.exe文件
    Unity3DBuildPipeline.BuildPlayer打包后没有.exe文件最近在使用代码进行打包,打包成功了,却没有没有可执行文件。官方代码如下BuildPlayerOptionsbuildPlayer......
  • 3d化工实训虚拟仿真软件开发厂商-深圳华锐视点
    化工总控是仪表及自动控制系统将化工单元反映或单元操作进行监控或者调节,最终实现物料制成满足规格的产品。化工总控工在入职和上岗前需要掌握专业的流程图绘制、日常......
  • 30~50k | 仙库科技3D视觉技术总监、三维重建算法工程师等招聘
    公司简介深圳市桔子智能信息科技有限公司是深圳仙库科技有限公司的全资子公司,成立于2016年。以体征数据服务为核心,专注于体征数据采集设备的开发、技术支持、数据服务;在数据......
  • 有关虚拟环境以及包管理器的随笔
    前提在windows系统中安装好AnaConda、CUDA以及对应版本的Pytorch并配置好相应的环境后,便可以在PyCharm平台上开发并运行自己的第一个项目。但是在创建项目的时候,种类众多......
  • 快速构建页面结构的 3D Visualization
    对Chrome扩展功能熟悉的小伙伴,可能都有用过Chrome的3D展示页面层级关系这个功能。可以通过控制台-->右边的三个小点-->MoreTools-->Layers打开。即可以看......
  • 新手随笔java+cpp
    随便写写关于java和cpp感悟·1.初学java(在学ing),学了几个月cpp(也不算熟练,但是目前比java好点)·2.java应该是更灵活的,比如【一些灵活点和区别】,二维数组不是非要矩阵形......