VMD-L Mailing List
From: Norman Geist (norman.geist_at_uni-greifswald.de)
Date: Thu Mar 02 2017 - 07:19:40 CST
- Next message: Norman Geist: "AW: Center camera rotation on a molid"
- Previous message: Greipel.Joachim_at_mh-hannover.de: "AW: Building NAMD 2.12 from Source with IB and CUDA"
- In reply to: Stefan Doerr: "Zoom-to-fit before rendering"
- Next in thread: Stefan Doerr: "Re: Zoom-to-fit before rendering"
- Reply: Stefan Doerr: "Re: Zoom-to-fit before rendering"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ] [ attachment ]
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
- Next message: Norman Geist: "AW: Center camera rotation on a molid"
- Previous message: Greipel.Joachim_at_mh-hannover.de: "AW: Building NAMD 2.12 from Source with IB and CUDA"
- In reply to: Stefan Doerr: "Zoom-to-fit before rendering"
- Next in thread: Stefan Doerr: "Re: Zoom-to-fit before rendering"
- Reply: Stefan Doerr: "Re: Zoom-to-fit before rendering"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ] [ attachment ]