Changeset 1958 for branches/blt4/gui


Ignore:
Timestamp:
Nov 17, 2010, 7:52:26 AM (14 years ago)
Author:
gah
Message:

add unit cell to molvisviewer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/blt4/gui/scripts/molvisviewer.tcl

    r1955 r1958  
    876876        if { $vector != "" } {
    877877            set vertices [ComputeParallelepipedVertices $dataobj]
    878     puts stderr "vertices=$vertices"
    879878            SendCmd "raw -defer {verts = \[$vertices\]\n}"
    880879            SendCmd "raw -defer {run \$PYMOL_PATH/rappture/box.py\n}"
     
    20422041}
    20432042
     2043# FIXME: Handle 2D vectors
    20442044itcl::body Rappture::MolvisViewer::ComputeParallelepipedVertices { dataobj } {
    20452045    # Create a vector for every 3D point
    2046     blt::vector p0(3) p1(3) p2(3) p3(3) p4(3) p5(3) p6(3) p7(3)
     2046    blt::vector point0(3) point1(3) point2(3) point3(3) point4(3) point5(3) \
     2047        point6(3) point7(3) origin(3) scale(3)
    20472048
    20482049    set count 0
    20492050    set parent [$dataobj element -as object "components.parallelepiped"]
    2050  puts stderr "parent=$parent"
    20512051    foreach child [$parent children] {
    2052  puts stderr "child=$child"
    20532052        if { ![string match "vector*" $child] } {
    20542053            continue
     
    20572056        set vector  [$parent get $child]
    20582057        regexp -all {,} $vector {} vector
    2059         p$count set $vector
    2060     }
     2058        point$count set $vector
     2059    }
     2060    itcl::delete object $parent
    20612061    if { $count < 1 || $count > 3 } {
    2062         error "bad number of vectors supplied to paralledepiped"
    2063     }
    2064 
    2065     set scale [$dataobj get components.parallelepiped.scale]
    2066     set n [llength $scale]
    2067     set sx 1.0
    2068     set sy 1.0
    2069     set sz 1.0
     2062        error "bad number of vectors supplied to parallelepiped"
     2063    }
     2064    set values [$dataobj get components.parallelepiped.scale]
     2065    set n [llength $values]
     2066    scale set { 1.0 1.0 1.0 }
    20702067    if { $n == 1 } {
    2071         set sx [lindex $scale 0]
    2072         set sy [lindex $scale 0]
    2073         set sz [lindex $scale 0]
     2068        set scale(0:2) [lindex $values 0]
    20742069    } elseif { $n == 2 } {
    2075         set sx [lindex $scale 0]
    2076         set sy [lindex $scale 1]
     2070        set scale(0:1) [lindex $values 0]
    20772071    } elseif { $n == 3 } {
    2078         set sx [lindex $scale 0]
    2079         set sy [lindex $scale 1]
    2080         set sz [lindex $scale 2]
    2081     }
    2082     set origin [$dataobj get components.parallelepiped.origin]
    2083     set n [llength $origin]
    2084     p0 set { 0.0 0.0 0.0 }
     2072        scale set $values
     2073    }
     2074    set values [$dataobj get components.parallelepiped.origin]
     2075    set n [llength $values]
     2076    origin set { 0.0 0.0 0.0 }
    20852077    if { $n == 1 } {
    2086         set p0(0) [lindex $origin 0]
     2078        set origin(0) [lindex $values 0]
    20872079    } elseif { $n == 2 } {
    2088         set p0(0) [lindex $origin 0]
    2089         set p0(1) [lindex $origin 1]
     2080        set origin(0) [lindex $values 0]
     2081        set origin(1) [lindex $values 1]
    20902082    } elseif { $n == 3 } {
    2091         set p0(0) [lindex $origin 0]
    2092         set p0(1) [lindex $origin 1]
    2093         set p0(2) [lindex $origin 2]
    2094     }
    2095     p1 expr {p1 + p0}
    2096     p2 expr {p2 + p0}
    2097     p3 expr {p3 + p0}
    2098     p4 expr {p2 + p1}
    2099     p5 expr {p4 + p3}
    2100     p6 expr {p2 + p3}
    2101     p7 expr {p1 + p3}
     2083        origin set $values
     2084    }
     2085    point0 set { 0.0 0.0 0.0 }
     2086    point4 expr {point2 + point1}
     2087    point5 expr {point4 + point3}
     2088    point6 expr {point2 + point3}
     2089    point7 expr {point1 + point3}
    21022090
    21032091    # Generate vertices as a string for PyMOL
    2104     set s ""
     2092    set vertices ""
    21052093    blt::vector x
    2106     foreach vertex { 0 1 0 2 0 3 1 4 2 4 2 6 1 7 3 7 5 7 4 5 3 6 5 } {
    2107         x expr "p$vertex * $sx"
     2094    foreach n { 0 1 0 2 0 3 1 4 2 4 2 6 1 7 3 7 5 7 4 5 3 6 5 } {
     2095        x expr "(point${n} * scale) + origin"
    21082096        set values [x values]
    2109         append s "\[ [join $values {, }] \], \\\n"
    2110     }
    2111     x expr "p6 * $sx"
     2097        append vertices "\[ [join $values {, }] \], \\\n"
     2098    }
     2099    x expr "(point6 * scale) + origin"
    21122100    set values [x values]
    2113     append s "\[ [join $values {, }] \]  \\\n"
    2114     blt::vector destroy p0 p1 p2 p3 p4 p5 p6 p7 x
    2115     return $s
    2116 }
     2101    append vertices "\[ [join $values {, }] \]  \\\n"
     2102    blt::vector destroy point0 point1 point2 point3 point4 point5 point6 \
     2103        point7 x origin scale
     2104    return $vertices
     2105}
Note: See TracChangeset for help on using the changeset viewer.