- Timestamp:
- Nov 16, 2010, 3:25:40 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/blt4/gui/scripts/molvisviewer.tcl
r1948 r1949 135 135 private method Representation {option {model "all"} } 136 136 private method CartoonTrace {option {model "all"}} 137 private method ComputeParallelPipedVertices { dataobj } 137 138 private method Cell {option} 138 139 private method Rock {option} 139 140 140 } 141 141 … … 506 506 "Set cartoon representation of bonds (sticks)." 507 507 508 checkbutton $inner.cell -text " Cell" \508 checkbutton $inner.cell -text "Parallelpiped" \ 509 509 -command [itcl::code $this Cell toggle] \ 510 510 -font "Arial 9 bold" … … 873 873 set _active($model) $dataobj 874 874 } 875 set vectors [$dataobj get components.parallelpiped.vectors] 876 if { $vectors != "" } { 877 set rows [ComputeParellelPiped] 878 regsub -all {,} $vectors { } vectors 879 set rows {} 880 foreach { x y z } $vectors { 881 lappend rows " \[ $x, $y, $z \]" 882 } 883 set rows [join $rows ",\\\n"] 884 SendCmd "raw -defer {verts = \[$rows\]\n}" 875 set vector [$dataobj get components.parallelpiped.vector] 876 if { $vector != "" } { 877 set vertices [ComputeParallelPipedVertices $dataobj] 878 puts stderr "vertices=$vertices" 879 SendCmd "raw -defer {verts = \[$vertices\]\n}" 885 880 SendCmd "raw -defer {run \$PYMOL_PATH/rappture/box.py\n}" 886 881 SendCmd "raw -defer {draw_box(verts)\n}" … … 2047 2042 } 2048 2043 2049 itcl::body Rappture::MolvisViewer::ComputeParallelPiped { dataobj } { 2044 itcl::body Rappture::MolvisViewer::ComputeParallelPipedVertices { dataobj } { 2045 # 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) 2047 2048 set count 0 2049 set parent [$dataobj element -as object "components.parallelpiped"] 2050 puts stderr "parent=$parent" 2051 foreach child [$parent children] { 2052 puts stderr "child=$child" 2053 if { ![string match "vector*" $child] } { 2054 continue 2055 } 2056 incr count 2057 set vector [$parent get $child] 2058 regexp -all {,} $vector {} vector 2059 p$count set $vector 2060 } 2061 if { $count < 1 || $count > 3 } { 2062 error "bad number of vectors supplied to paralledpiped" 2063 } 2064 2050 2065 set scale [$dataobj get components.parallelpiped.scale] 2051 2066 set n [llength $scale] 2067 set sx 1.0 2068 set sy 1.0 2069 set sz 1.0 2052 2070 if { $n == 1 } { 2053 2071 set sx [lindex $scale 0] 2054 2072 set sy [lindex $scale 0] 2055 2073 set sz [lindex $scale 0] 2056 } else { $n == 2 } {2074 } elseif { $n == 2 } { 2057 2075 set sx [lindex $scale 0] 2058 2076 set sy [lindex $scale 1] 2059 set sz 1.0 2060 } else { $n == 3 } { 2077 } elseif { $n == 3 } { 2061 2078 set sx [lindex $scale 0] 2062 2079 set sy [lindex $scale 1] 2063 2080 set sz [lindex $scale 2] 2064 2081 } 2065 set scale[$dataobj get components.parallelpiped.origin]2082 set origin [$dataobj get components.parallelpiped.origin] 2066 2083 set n [llength $origin] 2067 set x0 0.0 2068 set y0 0.0 2069 set z0 0.0 2084 p0 set { 0.0 0.0 0.0 } 2070 2085 if { $n == 1 } { 2071 set x0 [lindex $origin 0] 2072 } else { $n == 2 } { 2073 set x0 [lindex $scale 0] 2074 set y0 [lindex $scale 1] 2075 } else { $n == 3 } { 2076 set x0 [lindex $scale 0] 2077 set y0 [lindex $scale 1] 2078 set z0 [lindex $scale 2] 2079 } 2080 set vectors [$dataobj get components.parallelpiped.vectors] 2081 regexp -all {,} $vectors {} vectors 2082 regexp -all {;} $vectors {\n} vectors 2083 2084 # ----------------------------------------------------------------------------- 2085 # vscale -- 2086 # 2087 # Takes: List a and list b 2088 # Returns: A new list with the components of a scaled by the components of b 2089 # ----------------------------------------------------------------------------- 2090 2091 proc vscale {a b} { 2092 set nl [] 2093 lappend nl [expr [lindex $a 0]*[lindex $b 0]] 2094 lappend nl [expr [lindex $a 1]*[lindex $b 0]] 2095 lappend nl [expr [lindex $a 2]*[lindex $b 0]] 2096 return $nl 2097 } 2098 2099 set v1 [blt::vector create v1] 2100 $v1 length 3 2101 $v1 set [lindex $vectors 1] 2102 $v1 expr v1 * $ 2103 # Scale lattice vectors 2104 set vec1 [vscale $uc(lv1) $uc(alatt)] 2105 set vec2 [vscale $uc(lv2) $uc(alatt)] 2106 set vec3 [vscale $uc(lv3) $uc(alatt)] 2107 # Scale lattice vectors 2108 set vec1 [vscale $uc(lv1) $uc(alatt)] 2109 set vec2 [vscale $uc(lv2) $uc(alatt)] 2110 set vec3 [vscale $uc(lv3) $uc(alatt)] 2111 2112 # Build list of unit cell vertices 2113 set vlist [] 2114 lappend vlist [list 0.0 0.0 0.0] ;# O 2115 lappend vlist $vec1 ;# O+a 2116 lappend vlist $vec2 ;# O+b 2117 lappend vlist $vec3 ;# O+c 2118 lappend vlist [vsum [lindex $vlist 1] $vec2] ;# O+a+b 2119 lappend vlist [vsum [lindex $vlist 4] $vec3] ;# O+a+b+c 2120 lappend vlist [vsum [lindex $vlist 2] $vec3] ;# O+b+c 2121 lappend vlist [vsum [lindex $vlist 1] $vec3] ;# O+a+c 2122 } 2086 set p0(0) [lindex $origin 0] 2087 } elseif { $n == 2 } { 2088 set p0(0) [lindex $origin 0] 2089 set p0(1) [lindex $origin 1] 2090 } 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 p4 expr {p2 + p1} 2096 p5 expr {p4 + p3} 2097 p6 expr {p2 + p3} 2098 p7 expr {p1 + p3} 2099 2100 # Generate vertices as a string for PyMOL 2101 set s "" 2102 blt::vector x 2103 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 } { 2104 x expr "p$vertex * $sx" 2105 set values [x values] 2106 append s "\[ [join $values {, }] \], \\\n" 2107 } 2108 x expr "p6 * $sx" 2109 set values [x values] 2110 append s "\[ [join $values {, }] \] \\\n" 2111 blt::vector destroy p0 p1 p2 p3 p4 p5 p6 p7 x 2112 return $s 2113 }
Note: See TracChangeset
for help on using the changeset viewer.