From: Stefan Doerr (stefdoerr_at_gmail.com)
Date: Thu Mar 02 2017 - 08:04:36 CST

Great! That's very helpful.
Thank you very much

On Thu, Mar 2, 2017 at 2:19 PM, Norman Geist <norman.geist_at_uni-greifswald.de
> wrote:

> Regarding the VMD source code, the Display->Resetview function uses the
> zoom calculated from the largest dimension from the molecules bounding box
> as a devider to 1.5 (e.g. 1.8 for a closer zoom). So an autozoom function
> would be easy to write.
>
>
>
> Example derived from my userani movie system which uses everything visible
> to compute the bounding box (except periodic images):
>
>
>
> proc AutoScaleAllVisible {{zoom_factor 1}} {
>
> set prog 1
>
> set me [lindex [info level [info level]] 0]
>
> #----
>
> set minX "false"
>
> set minY "false"
>
> set maxX "false"
>
> set maxY "false"
>
> set zoom [expr 1.8 * $zoom_factor]
>
>
>
> #compute bb for all visible stuff
>
> set mols [molinfo list]
>
> foreach molid $mols {
>
> if {[molinfo $molid get displayed] && [molinfo $molid get numframes] >
> 0} {
>
> set num_reps [molinfo $molid get numreps]
>
> if {$num_reps > 0} {
>
> set seltext ""
>
> for {set i 0} {$i<$num_reps} {incr i} {
>
> if {[mol showrep $molid $i]} {
>
> if {[string length $seltext] > 0} { set seltext "$seltext or " }
>
> set temp [molinfo $molid get "{selection $i}"]
>
> set seltext "${seltext}(${temp})"
>
> }
>
> }
>
> }
>
> if {[string length $seltext] > 0} {
>
> set sel [atomselect $molid ($seltext)]
>
> set mm [measure minmax $sel]
>
> $sel delete
>
> set minXtemp [lindex [lindex $mm 0] 0]
>
> set minYtemp [lindex [lindex $mm 0] 1]
>
> set maxXtemp [lindex [lindex $mm 1] 0]
>
> set maxYtemp [lindex [lindex $mm 1] 1]
>
> set minX [expr $minXtemp < $minX || $minX == "false" ? $minXtemp :
> $minX]
>
> set minY [expr $minYtemp < $minY || $minY == "false" ? $minYtemp :
> $minY]
>
> set maxX [expr $maxXtemp > $maxX || $maxX == "false" ? $maxXtemp :
> $maxX]
>
> set maxY [expr $maxYtemp > $maxY || $maxY == "false" ? $maxYtemp :
> $maxY]
>
> }
>
> }
>
> }
>
> if {$minX != "false"} {#true for 1 true for all
>
> set rangeX [expr $maxX - $minX]
>
> set rangeY [expr $maxY - $minY]
>
> set maxrange [expr max($rangeX,$rangeY)]
>
> set target [expr $zoom/$maxrange]
>
> set cscale [lindex [lindex [lindex [molinfo top get scale_matrix] 0]
> 0] 0]
>
> set nscale [expr $target + (($cscale - $target) *
> pow(abs($prog-1.),$prog))]
>
> eval "scale to $nscale"
>
> } else {
>
> puts "$me: nothing seems to be visible!"
>
> }
>
> }
>
>
>
>
>
> Norman Geist
>
>
>
> *Von:* owner-vmd-l_at_ks.uiuc.edu [mailto:owner-vmd-l_at_ks.uiuc.edu] *Im
> Auftrag von *Stefan Doerr
> *Gesendet:* Donnerstag, 2. März 2017 11:30
> *An:* vmd-l_at_ks.uiuc.edu
> *Betreff:* vmd-l: Zoom-to-fit before rendering
>
>
>
> Hi, I was wondering if there is some functionality in VMD to zoom the
> scene to match the content.
>
>
>
> My problem is the following:
>
> I render automatically through Tachyon multiple molecules but depending on
> their size some of them fill the picture and some are much smaller. I can
> auto-crop the image then with imagemagic but I end up with some pictures
> looking high resolution and others super-low (since I cropped the large
> empty space around them).
>
>
>
> The solution would be to automatically zoom until all molecules fit
> exactly in the rendered image resolution but I don't know how to do that.
>
>
>
>
>
> Greetings,
>
> Stefan
>