|
draw时间:2025-04-26 VMD提供了一种方式来显示由图形原语(如点、线、圆柱体、锥体、球体、三角形和文本)构建的用户定义对象。因为这些都是在场景中显示的,就像所有其他图形一样,它们也可以导出到各种光线追踪格式,3d打印机等。 用户定义的图形可以用来在分子周围画一个框,在两个原子之间画一个箭头,在空间的某个地方放置一个文本标签,或者测试一种可视化分子的新方法。 draw命令是一个直接的Tcl函数,它旨在简化图形命令的接口,并为扩展标准图形原语提供基础。 draw command [arguments] draw命令(在大多数情况下)等同于graphics top command [arguments],因为它只是将图形原语添加到顶部分子,从而省去了输入额外参数的麻烦。然而,draw以两种方式扩展图形。首先,如果没有分子存在,draw会自动为你创建一个。其次,draw可以通过用户定义的绘图命令进行扩展。这是通过定义vmd draw $command形式的函数来完成的。如果函数存在,则调用第一个参数作为分子索引,其余参数作为原始draw调用的参数。下面是一个扩展了draw命令以包含“arrow”原语的示例。 proc vmd_draw_arrow {mol start end} { set middle [vecadd $start [vecscale 0.9 [vecsub $end $start]]] graphics $mol cylinder $start $middle radius 0.15 graphics $mol cone $middle $end radius 0.25 } # 箭头是由圆柱体和圆锥体组成的 在VMD中输入该命令后,可以使用draw arrow{0 0 0} {1 11 1}等命令绘制箭头。除了定义新命令外,用户定义的绘图命令还可以用于覆盖现有命令。例如,如果您定义vmd绘制球体,那么绘制球体{0 0 0}将调用您的球体例程,而不是图形中的例程。 这里有一个快速的方法来添加你自己的标签原子选择。这个函数接受选择文本和给定字符串中原子(在最上面的分子中)的标签。如果选择了除一个原子以外的其他元素,则返回错误。 proc label_atom {selection_string label_string} { set sel [atomselect top $selection_string] if {[$sel num] != 1} { error "label_atom: ’$selection_string’ must select 1 atom" } # get the coordinates of the atom lassign [$sel get {x y z}] coord # and draw the text draw text $coord $label_string } |