计算化学公社

标题: VMD初始化文件(vmd.rc)我的推荐设置 [打印本页]

作者
Author:
sobereva    时间: 2020-4-1 01:47
标题: VMD初始化文件(vmd.rc)我的推荐设置
VMD初始化文件(vmd.rc)我的推荐设置
My recommended settings of VMD initialization file (vmd.rc)

文/Sobereva@北京科音
First release: 2020-Apr-1   Last update: 2023-Apr-4


VMD(http://www.ks.uiuc.edu/Research/vmd/)是用得极为广泛的化学体系可视化程序,由于其极度灵活,有很多技巧可以使其用起来更方便。

VMD启动时会先用初始化文件对一些设置进行初始化,即执行里面的各种命令,用户也可以往里添加额外的命令。对于Windows版来说,这个文件就是VMD目录下的vmd.rc。对于Linux版来说,这个文件叫.vmdrc,VMD会先在当前目录下搜索,没有的话就去找~/.vmdrc,还没有的话去找$VMDDIR/.vmdrc(这里$VMDDIR环境变量是没有预先定义的),如果还找不到此文件,就会用默认设置。
注:Linux下的.vmdrc文件默认出现在安装目录下,比如以默认路径安装会出现为/usr/local/lib/vmd/.vmdrc,但如果不配置VMDDIR环境变量的话这个文件并不会被VMD在启动时自动载入。Linux下.vmdrc一般都是自行在用户主目录下创建。

在此我将我自己的初始化文件里的设置进行分享,其中额外添加的内容如下(放到原有内容后头即可)。下文的叙述是对撰文时最新版本VMD 1.9.3而言的。

mol default style {Lines 2.0}
display depthcue off
#color Display Background white
#axes location Off
display rendermode GLSL
display distance -8.0

proc bw {} {color Display Background white}
proc bb {} {color Display Background black}

user add key Right {animate next}
user add key Left {animate prev}
user add key Up {animate goto [expr $vmd_frame([molinfo top])+10]}
user add key Down {animate goto [expr $vmd_frame([molinfo top])-10]}
user add key b {mol bondsrecalc all; topo retypebonds}

proc bt {} {
global vmd_frame
trace variable vmd_frame([molinfo top]) w updatebond
}
proc updatebond {args} {
mol bondsrecalc all
topo retypebonds
}
proc bn {} {
global vmd_frame
trace vdelete vmd_frame([molinfo top]) w updatebond
}

proc fog {} {
display depthcue on
display cuemode Linear
display cuestart 1.75
display cueend 2.5
}

下面解释一下做这些设置有什么好处。

程序默认的显示方式是Lines,但是线的粗细太细,往往看不清楚,所以用mol default style {Lines 2.0}将默认的显示方式改为两倍粗细的Lines。

程序默认开着雾化,即让距离镜头越远的物体的颜色混入越多的背景色。这会导致在黑色背景下物体的颜色显得不够鲜艳,而在白色背景下物体又显得有点雾蒙蒙,因此用display depthcue off将雾化效果关掉。

#color Display Background white这行是被注释掉的。如果你想让VMD启动后默认就用白背景,就把#去掉。

#axes location Off这行也是被注释掉的,如果你想让VMD默认不显示坐标轴,就把#去掉。

VMD默认用称作Normal的Rendermode,但此时有些材质的显示效果很差,甚至Transparent材质根本没法正确显示出透明效果。因此通过display rendermode GLSL将默认的Rendermode设为效果好得多的GLSL。

有很多人肯定早已发现画面边缘的物体畸变得特别厉害,很难看。通过display distance -8.0语句可以充分避免。但导致一个问题就是原本在窗口左下方的坐标轴看不到了,需要坐标轴的时候可以选Display - Axes - Origin让坐标轴显示在窗口中央。

下面这两行是自定义命令。在VMD的文本窗口里输入bw(意为background white)就可以令背景立刻变为白的,输入bb就可以令背景立刻变为黑的,非常方便。
proc bw {} {color Display Background white}
proc bb {} {color Display Background black}


下面的内容是设置用户自定义快捷键。载入轨迹后,在图形窗口处于被激活的状态时(激活窗口就是鼠标点击这个窗口的意思),按左、右键就可以分别后退1帧、向前1帧,按上、下键就可以分别增加10帧、后退10帧。这使得观看轨迹方便很多。
user add key Right {animate next}
user add key Left {animate prev}
user add key Up {animate goto [expr $vmd_frame([molinfo top])+10]}
user add key Down {animate goto [expr $vmd_frame([molinfo top])-10]}


关于VMD判断原子间连接关系的问题我在《谈谈VMD可视化程序的连接关系的判断和设置问题》(http://sobereva.com/534)里有非常详细的说明。为了能很方便地让VMD对当前帧根据当前结构重新判断连接关系,增加了下面这句。图形窗口处于激活状态时按b键(意为bond)就能重新判断连接关系。
user add key b {mol bondsrecalc all; topo retypebonds}

如果想播放的时候实时自动更新连接关系,而不需要每次都按b键,靠以下语句可以实现。也就是定义了一个bt命令,如果在命令行窗口输入了bt,那么每当当前top体系的帧号发生了变化,就会调用updatebond命令自动来更新连接关系。这样做的代价就是对较大体系,每播放一帧都要根据距离重新判断连接关系,播放时会比较卡。
proc bt {} {
global vmd_frame
trace variable vmd_frame([molinfo top]) w updatebond
}
proc updatebond {args} {
mol bondsrecalc all
topo retypebonds
}


下面的内容定义bn命令。如果不想自动更新成键方式了,可以输入bn命令取消掉对帧号的跟踪即可。
proc bn {} {
global vmd_frame
trace vdelete vmd_frame([molinfo top]) w updatebond
}


雾化效果绝非毫无意义。只要恰当使用,就可以让近距离的物体完全不受影响,而让偏远的原子恰当地雾化,避免扰乱视觉、妨碍清楚地观看近距离的物体。下面的语句是自定义命令,只要在文本窗口输入fog,就可以打开雾化并且使用在我来看比较合适的雾化设置。如果觉得实际效果不好,需要进一步调节,可以用Display - Display Settings,修改里面的Cue Start和Cue End。
proc fog {} {
display depthcue on
display cuemode Linear
display cuestart 1.75
display cueend 2.5
}

作者
Author:
liyuanhe211    时间: 2020-4-1 02:57
咦?两个同名的bb命令会冲突吗?
作者
Author:
sobereva    时间: 2020-4-1 03:13
liyuanhe211 发表于 2020-4-1 02:57
咦?两个同名的bb命令会冲突吗?

是个bug,已改
作者
Author:
snljty    时间: 2020-4-1 10:27
本帖最后由 snljty 于 2022-9-11 11:22 编辑

我的rc里面加了这样几个内容。
从Multiwfn里面提供的Tachyon渲染高质量图片的命令直接加到了vmd里。
比如
  1. proc Tach_MidShad {{graph_name vmdscene}} {
  2.     render Tachyon ${graph_name}.dat \
  3.     tachyon_WIN32.exe ${graph_name}.dat -format BMP -o ${graph_name}.bmp \
  4.     -trans_raster3d -res 1500 1500 -mediumshade -aasamples 24 -numthreads 2
  5. }
复制代码

然后用Tach_MidShad name就可以渲染成name.bmp。
加入了下列代码,在需要的时候用dump_view导出当前视图平移、旋转和缩放矩阵,然后拷贝下来,之后需要的时候用load_view再读取这个视图状态。
这对一系列相似结构,比如对于IRC每个点计算了某实空间函数的格点,想要批量作图,可以选择一个有代表性的结构,摆成合适的样子,导出视图状态,
自己保存下来,加入脚本,让vmd载入每一个文件时候都转成这个视图。
  1. set current_view {
  2.     {{1 0 0 0} {0 1 0 0} {0 0 1 0} {0 0 0 1}}
  3.     {{1 0 0 0} {0 1 0 0} {0 0 1 0} {0 0 0 1}}
  4.     {{0.322699 0 0 0} {0 0.322699 0 0} {0 0 0.322699 0} {0 0 0 1}}
  5. }

  6. proc dump_view {} {
  7.     global current_view
  8.     set current_view [molinfo top get {center_matrix rotate_matrix scale_matrix}]
  9.     puts $current_view
  10. }

  11. proc set_view {view} {
  12.     molinfo top set {center_matrix rotate_matrix scale_matrix} $view
  13. }

  14. proc body_diagonal_view {} {
  15.     # The rotation matrix is
  16.     # 1/sqrt(2)      0      1/sqrt(2)
  17.     # 1/sqrt(6)  2/sqrt(6) -1/sqrt(6)
  18.     # 1/sqrt(3)  1/sqrt(3)  1/sqrt(3)
  19.     display resetview
  20.     rotate x by 45
  21.     rotate y by [expr asin(sqrt(3)/3)/atan(1)*45]
  22.     rotate z by 30
  23. }
复制代码


后面加了两个命令,用来设置视角,以及在转成体对角线视角的。
作者
Author:
wanlichuan    时间: 2020-4-1 18:43
SOB老师,有没有办法在vmd.rc文件里加入一些指令,使得三个窗口的初始大小和位置可以按需要设置呢?现在能查到的命令是诸如下面的:
display resize  500 500
display reposition  10  900
但是这两个命令设置的分别是OpenGL Display 窗口的大小和位置,其他两个窗口,尤其是Console窗口,完全没法自动设置(通过extensions - VMD Preference也没办法调节Console窗口)。现在只好每次打开程序都得手动调一调。
不知道SOB老师有没有办法。谢谢。

作者
Author:
sobereva    时间: 2020-4-4 05:13
wanlichuan 发表于 2020-4-1 18:43
SOB老师,有没有办法在vmd.rc文件里加入一些指令,使得三个窗口的初始大小和位置可以按需要设置呢?现在能 ...

从原理上来说,貌似不可能有办法
作者
Author:
wanlichuan    时间: 2020-4-4 11:00
谢谢社长答复。为什么从原理上来说不可能通过vmd.rc来设置呢?
作者
Author:
sobereva    时间: 2020-4-6 20:30
wanlichuan 发表于 2020-4-4 11:00
谢谢社长答复。为什么从原理上来说不可能通过vmd.rc来设置呢?

那个窗口是windows创建的,而VMD Main、OpenGL窗口是VMD程序创建的
作者
Author:
wanlichuan    时间: 2020-4-7 06:07
明白了,谢谢社长。
作者
Author:
annaqz    时间: 2021-1-6 19:09
社长,这个设置对VMD1.9.4也是一样的吗?为什么修改了以后,输入相关命令都是invalid呢?
作者
Author:
sobereva    时间: 2021-1-7 00:24
annaqz 发表于 2021-1-6 19:09
社长,这个设置对VMD1.9.4也是一样的吗?为什么修改了以后,输入相关命令都是invalid呢?

1.9.4根本都没正式发布,不要拿非正式版本说事
作者
Author:
annaqz    时间: 2021-1-7 09:57
好滴,明白啦。谢谢社长。
作者
Author:
gcsun    时间: 2021-2-11 14:48
annaqz 发表于 2021-1-6 19:09
社长,这个设置对VMD1.9.4也是一样的吗?为什么修改了以后,输入相关命令都是invalid呢?

1.9.4也是有效的,我用着没问题
仔细读“对于Linux版来说,这个文件叫.vmdrc,VMD会先在当前目录下搜索,没有的话就去找~/.vmdrc,还没有的话去找$VMDDIR/.vmdrc(这里$VMDDIR环境变量是没有预先定义的),如果还找不到此文件,就会用默认设置。Linux下的.vmdrc文件是事先不存在的,一般都是在用户目录下自行创建。“
作者
Author:
annaqz    时间: 2021-2-21 15:29
gcsun 发表于 2021-2-11 14:48
1.9.4也是有效的,我用着没问题
仔细读“对于Linux版来说,这个文件叫.vmdrc,VMD会先在当前目录下搜索 ...

好的,我再看一下。谢谢
作者
Author:
lonemen    时间: 2021-7-15 16:00
snljty 发表于 2020-4-1 10:27
我的rc里面加了这样几个内容。
从Multiwfn里面提供的Tachyon渲染高质量图片的命令直接加到了vmd里。
比如 ...

太强了,非常感谢!
作者
Author:
lonicera    时间: 2021-12-24 23:43
感觉
  1. display distance -8.0
复制代码
提到的问题可以用
  1. display projection orthographic
复制代码
解决, 似乎是透视模式导致的边缘畸变. 改成正交模式后就没有畸变了.
作者
Author:
sobereva    时间: 2021-12-25 18:31
lonicera 发表于 2021-12-24 23:43
感觉
提到的问题可以用
解决, 似乎是透视模式导致的边缘畸变. 改成正交模式后就没有畸变了.

正交模式通常太丑,违背近大远小的视觉习俗,所以一般我是不用的。仅对于观看诸如磷脂膜等体系需要远近一样大使得观看不容易有视觉判断误差的时候我才用。正交视角可以视为距离屏幕无限远时候的透视情况的极限。
作者
Author:
丁越    时间: 2022-4-25 23:32
vmd.rc中还可以加入下面的命令来批量渲染用于制作MD轨迹动画的图片,movier定义了三个参数,所要渲染的图片数目、起始帧(默认第一帧)、结束帧(默认最后一帧)。假如你想在300~1000帧的范围内渲染出30张图片用于制作轨迹动画,那么就输入 movier 30 300 1000,所有渲染完的图片都被放在了rendered_pictures目录下。动画制作用ffmpeg合成就行。
  1. proc movier {Num {beg 0} {end -1}} {
  2.         file mkdir rendered_pictures
  3.         cd rendered_pictures
  4.         if { $end == -1 } {
  5.                 set end [molinfo top get numframes]
  6.         }
  7.         set tau_frame [expr int([expr floor([expr 1.0*($end - $beg)/($Num-1)])])]
  8.         for {set i 1} {$i <= $Num} {incr i} {
  9.                 set iframe [expr ($i-1)*${tau_frame}+$beg]
  10.                 animate goto $iframe
  11.                 puts "Now is rendering ${iframe}_th frame...."
  12.                 rd [format %05i $i]
  13.         }
  14.         cd ..
  15. }
复制代码
  1. proc rd {{graph_name vmdscene}} {
  2.     render Tachyon ${graph_name}.dat \
  3.     tachyon_WIN64.exe ${graph_name}.dat -format BMP -o ${graph_name}.bmp \
  4.     -trans_raster3d -res 2400 1500  -aasamples 24 -numthreads 4
  5.         file delete ${graph_name}.dat
  6. }
复制代码



作者
Author:
bxc    时间: 2022-5-19 19:38
如果有人跟我一样使用了设置文件后vmd main就没了的话,就在设置文件里开头加一句menu main on即可
作者
Author:
牧生    时间: 2022-8-28 21:31
本帖最后由 牧生 于 2022-8-29 21:24 编辑
snljty 发表于 2020-4-1 10:27
我的rc里面加了这样几个内容。
从Multiwfn里面提供的Tachyon渲染高质量图片的命令直接加到了vmd里。
比如 ...

非常非常好用的脚本,但有一个需要请教的地方,如果我载入一个有1000帧的gro文件,有什么办法去实现每一帧进行一次Tach_MidShad呢?

是我疏忽了,原来18楼已经给出了方法。讲义里面也都有,,看来我还是太懒了
补充一下,在18楼里面,针对VMD1.9.3, win下,tachyon_WIN64.exe”应该为“tachyon_WIN32.exe”  


以前都是播放轨迹时,用软件录屏,质量一般。今天按照18楼的做法搞了一天,终于可以做出清晰度很高的视频了,数千帧的轨迹,截出来的图片文件夹总共都有10多G。

作者
Author:
yjb    时间: 2022-9-1 20:28
老师,我用的Linux下的1.9.3版本的vmd,进行初始化文件里的设置,修改完之后会发现只有可视化界面,其它两个窗口不弹出来的情况。请问这个应该如何解决呢?
作者
Author:
牧生    时间: 2022-9-1 20:59
yjb 发表于 2022-9-1 20:28
老师,我用的Linux下的1.9.3版本的vmd,进行初始化文件里的设置,修改完之后会发现只有可视化界面,其它两 ...

第19楼

  1. 如果有人跟我一样使用了设置文件后vmd main就没了的话,就在设置文件里开头加一句menu main on即可
复制代码

作者
Author:
yjb    时间: 2022-9-1 21:18
牧生 发表于 2022-9-1 20:59
第19楼

谢谢老师
作者
Author:
护卫天使    时间: 2022-9-23 10:12
老师好,请问mol default style能更改为 {CPK}吗?我只是加入了这个命令mol default style{CPK},并不可以。
作者
Author:
牧生    时间: 2022-9-23 10:33
护卫天使 发表于 2022-9-23 10:12
老师好,请问mol default style能更改为 {CPK}吗?我只是加入了这个命令mol default style{CPK},并不可以 ...

mol default style[空格]{CPK}    试试这个呢
作者
Author:
护卫天使    时间: 2022-9-23 11:33
牧生 发表于 2022-9-23 10:33
mol default style[空格]{CPK}    试试这个呢

谢谢。还是不可以。
作者
Author:
sobereva    时间: 2022-9-24 00:52
护卫天使 发表于 2022-9-23 10:12
老师好,请问mol default style能更改为 {CPK}吗?我只是加入了这个命令mol default style{CPK},并不可以 ...

mol default style CPK

作者
Author:
丁越    时间: 2022-12-27 10:28
本帖最后由 丁越 于 2022-12-27 10:32 编辑
牧生 发表于 2022-8-28 21:31
非常非常好用的脚本,但有一个需要请教的地方,如果我载入一个有1000帧的gro文件,有什么办法去实现每一 ...

论坛里有64位的VMD,我是用的那个。如果是Linux下渲染的话把rd命令中改成这样:
/opt/vmd/lib/vmd/tachyon_LINUXAMD64 ${graph_name}.dat -format BMP -o ${graph_name}.bmp \
    -mediumshade -res 2000 1500 -aasamples 24 -numthreads 6
把tachyon_LINUXAMD64的位置改成自己机子的实际路径。如果最终得到的渲染图片太大的话可以降低图片的分辨率,2000 1500 可以改低一点。


作者
Author:
huhq    时间: 2022-12-27 17:04
gcsun 发表于 2021-2-11 14:48
1.9.4也是有效的,我用着没问题
仔细读“对于Linux版来说,这个文件叫.vmdrc,VMD会先在当前目录下搜索 ...

您好,我在台式机上用1.9.4没有问题,但笔记本上不行。请问,笔记本上需要特别设置吗?
作者
Author:
牧生    时间: 2023-2-6 11:48
本帖最后由 牧生 于 2023-2-6 13:50 编辑

proc bb {} {color Display Background black}

这个命令可以将VMD的背景变成黑色,我将 black改成yellow,那么可以把背景色变成黄色。

那如果我要改成别的任意颜色,不是corlorID中的那32种颜色,比如浅灰色,或者浅蓝色,或者[191,166,166]这样的数值表示的颜色,我该怎么弄呢
作者
Author:
likejade    时间: 2023-2-6 13:35
太好啦,谢谢分享!
作者
Author:
乐平    时间: 2023-4-3 18:53
本帖最后由 乐平 于 2023-4-3 19:00 编辑

Sob 老师这句话需要更正
Linux下的.vmdrc文件是事先不存在的,一般都是在用户目录下自行创建。

Linux 下安装 VMD 也是存在 .vmdrc 文件的。

比如,如果是默认安装,那么可以在下面的路径里找到
  1. /usr/local/lib/vmd/.vmdrc
复制代码


如果自定了安装路径,比如指定 VMD 安装到  ~/tools/vmd 路径下,那么可以在下面的路径找到
  1. ~/tools/vmd/lib/vmd/.vmdrc
复制代码



作者
Author:
sobereva    时间: 2023-4-4 06:10
乐平 发表于 2023-4-3 18:53
Sob 老师这句话需要更正

Linux 下安装 VMD 也是存在 .vmdrc 文件的。

改了
作者
Author:
乐平    时间: 2023-4-4 11:48
sobereva 发表于 2023-4-4 06:10
改了

赞!
作者
Author:
bxc    时间: 2023-11-25 11:47
老师,这些可以直接在hotkeys.tcl里添加吗
作者
Author:
sobereva    时间: 2023-11-26 02:23
bxc 发表于 2023-11-25 11:47
老师,这些可以直接在hotkeys.tcl里添加吗

这个文件专门定义快捷键的,快捷键的那些自定义命令可以加入这里
作者
Author:
diyimin10234    时间: 2024-3-21 12:01
老师,给绘制出的结构加标尺的时候,它的字体及字号可以改吗?
作者
Author:
sobereva    时间: 2024-3-21 21:40
diyimin10234 发表于 2024-3-21 12:01
老师,给绘制出的结构加标尺的时候,它的字体及字号可以改吗?

应该不能
作者
Author:
diyimin10234    时间: 2024-3-22 16:22
sobereva 发表于 2024-3-21 21:40
应该不能

好的老师,我决定把这些文字部分都直接p上去了
作者
Author:
Uus/pMeC6H4-/キ    时间: 2024-10-21 17:26
sobereva 发表于 2020-4-1 01:47:08
有很多人肯定早已发现画面边缘的物体畸变得特别厉害,很难看。通过display distance -8.0语句可以充分避免。但导致一个问题就是原本在窗口左下方的坐标轴看不到了,需要坐标轴的时候可以选Display - Axes - Origin让坐标轴显示在窗口中央。

最近刚发现透视视角下把坐标轴调回画面内显示的另一个方法,即设置display distance的同时适当调整display height,比如display distance -8.0搭配display height 13.0。

对窗口左下角显示坐标轴的情况,经过尝试感觉可以的(distance, height)的搭配包括(-7.0, 12.0), (-6.0, 10.8),(-5.0, 9.4),(-4.0, 8.0),(-2.5, 6.0)等,结合鼠标滚轮缩放把边缘显示畸变范围排除出视野。

正交视角下display distance不再影响画面,而display height仍能调节坐标轴(以及体系)显示的大小和位置。



作者
Author:
Uus/pMeC6H4-/キ    时间: 2024-10-31 13:41
在设置VMD初始化时,遇到几个关于HBonds的小问题:

1.能否在vmd.rc里写语句,使得每加载一个体系都同时默认产生VDW和HBonds两个显示方式?mol default style只能设置一个显示方式及其参数,如果写了两行mol default style的话第二行会覆盖第一行的。

2.如果不行,能否修改文件,使得Graphical Representations窗口里点Create Rep再切换Drawing Method到HBonds时默认的阈值不是3.0埃和20°?

3.如果不行,还可在vmd.rc里自定义快捷键执行mol addrep top ; mol modstyle rep_number top HBonds 3.5 43.1 2,但此处显示方式的序号rep_number能否通过自定义变量的方式设置,免得查看Graphical Representations窗口?由于mol addrep top并不返回任何东西,像set x [mol addrep top] ; mol modstyle $x top HBonds 3.5 43.1 2这样写并不能管用。

4.上面3.5和43.1两个阈值是从分子动力学与GROMACS培训班的讲义里看到的,讲义介绍氢键D-H··A的统计时说:GROMACS的判据为氢键给体D与受体A之间距离要求小于3.5埃(对应于SPC水O-O rdf第一个极小点)、H-D键和D..A连线夹角小于30°;但VMD用的氢键键角判据为D-H··A的补角,GROMACS默认的键角判据30°对应VMD键角43.1°。但是这个43.1°是如何推导的?
若在一个O-H··O的氢键模型中用上述3.5埃和30°的数据,再取SPC刚性水O-H键长1.0000埃,则用余弦定理计算的H··O距离为d=sqrt(1^2+3.5^2-2*1*3.5*cos(30°))=2.681埃,D-H··A的钝角余弦为(1^2+2.681^2-3.5^2)/(2*1*2.681)=-0.7576,相应于139.3°,这样补角只有40.7°,比43.1°要严一点。
作者
Author:
sobereva    时间: 2024-10-31 15:56
Uus/pMeC6H4-/キ 发表于 2024-10-31 13:41
在设置VMD初始化时,遇到几个关于HBonds的小问题:

1.能否在vmd.rc里写语句,使得每加载一个体系都同时 ...

1 没办法

2 不行

3 利用molinfo查询当前的显示设置情况

4 O-H键长取不同的值算出来的不一样
作者
Author:
Uus/pMeC6H4-/キ    时间: 2024-11-13 13:38
能否在vmd.rc里写语句,使得每加载一个体系都同时默认产生VDW和HBonds两个显示方式?

今天的VMD-l邮件列表里正好有个解决方案,不过是谷歌的网站,为方便大家而转载如下。这里的关键技巧是利用tcl函数after idle把执行指令的时间推迟到其他事件(比如刚打开VMD时加载vmd.rc/.vmdrc或者刚载入新分子)执行完毕后。
Dr. Axel Kohlmeyer wrote in
VMD Init Script/Custom Actions at Molecule Load:

Occasionally people ask about having performing custom actions, like having a different visualization than the default, whenever a molecule is loaded. Now several defaults can be changed, but the following scheme goes far beyond that and allows adding multiple representations and performing other scripted actions. In order for this to work, we have to put a trace on the variable vmd_initialize_structure, but calling actions right away at that point would not work. We'll rather have to just schedule a call to a script whenever the main event handler is idle again. Here the procedure reset_viz does the work, but rather than calling it directly in the variable trace, we use a proxy function reset_viz_proxy that generates an after idle {} request to call reset_viz with the specific molecule id to operate on as argument. The final line makes sure that this is also applied to molecules loaded from the command line, i.e. which are initialized before the .vmdrc file is processed and thus before the variable trace is defined.
  1. proc reset_viz {molid} {
  2.   # operate only on existing molecules
  3.   if {[lsearch [molinfo list] $molid] >= 0} {
  4.     # delete all representations
  5.     set numrep [molinfo $molid get numreps]
  6.     for {set i 0} {$i < $numrep} {incr i} {
  7.       mol delrep $i $molid
  8.     }
  9.     # add new representations
  10.     mol color Name
  11.     mol representation VDW 0.3 15.0
  12.     mol selection all
  13.     mol material Opaque
  14.     mol addrep $molid
  15.     mol representation DynamicBonds 1.6 0.3 6.0
  16.     mol selection {name C}
  17.     mol addrep $molid
  18.     mol representation DynamicBonds 1.2 0.3 6.0
  19.     mol selection {name C H}
  20.     mol addrep $molid
  21.   }
  22. }
  23. proc reset_viz_proxy {args} {
  24.   foreach {fname molid rw} $args {}
  25.   eval "after idle {reset_viz $molid}"
  26. }
  27. ## hook up the function.
  28. trace variable vmd_initialize_structure w reset_viz_proxy
  29. # take care of molecule loaded at start.
  30. after idle { reset_viz 0 }
复制代码





欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3