X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=visualize;h=ab6e374ebd551c65074c3bd89b28df2bf9efe36e;hb=422f72e6415c6275f359fd5e462fa232e7dc2e87;hp=f24e7b76490b011ef4766078ab190eaf586f316c;hpb=863fae26146496ac4bc3bc6c95cbffff7bb6eca2;p=physik%2Fposic.git diff --git a/visualize b/visualize index f24e7b7..ab6e374 100755 --- a/visualize +++ b/visualize @@ -5,14 +5,36 @@ # author: frank.zirkelbach@physik.uni-augsburg.de # +# help function +draw_cyl() { + cat >> temp.pov <<-EOF +cylinder { +<$1, $3, $2>, <$4, $6, $5>, 0.05 +pigment { color White } +} +EOF +} +draw_bond() { + cat >> temp.pov <<-EOF +cylinder { +<$1, $3, $2>, <$4, $6, $5>, $7 +pigment { color Blue } +} +EOF +} + directory="doesnt_exist____for_sure" -width="1024" -height="768" +width="640" +height="480" radius="1.0" x0=""; y0=""; z0=""; x1=""; y1=""; z1=""; cx=""; cy=""; cz=""; lx="0"; ly="-100"; lz="100"; +ortographic="" +bx0=""; by0=""; bz0=""; +bx1=""; by1=""; bz1=""; +bcr=""; while [ "$1" ]; do case "$1" in @@ -25,6 +47,9 @@ while [ "$1" ]; do -c) cx=$2; cy=$3; cz=$4; shift 4;; -l) lx=$2; ly=$3; lz=$4; shift 4;; -o) ortographic=1; shift 1;; + -b) bx0=$2; by0=$3; bz0=$4; + bx1=$5; by1=$6; bz1=$7; shift 7;; + -B) bcr=$2; shift 2;; *) echo "options:" echo "########" @@ -35,17 +60,20 @@ while [ "$1" ]; do echo " -h " echo "atom size:" echo " -r " + echo " -B " echo "visualization volume:" echo " -nll (near lower left)" echo " -fur (far upper right)" echo " -o (ortographic)" + echo "bounding box:" + echo " -b " echo "povray:" echo " -c (camera position)" echo " -l (light source)" exit 1;; esac done - + if [ ! -d $directory ] ; then echo "no valid directory" exit 1 @@ -76,8 +104,8 @@ EOF export x0 y0 z0 x1 y1 z1 radius cat $file | grep -v '#' | awk '\ BEGIN { - x0=ENVIRON["x0"]; y0==ENVIRON["y0"]; z0==ENVIRON["z0"]; - x1=ENVIRON["x1"]; y0==ENVIRON["y1"]; z0==ENVIRON["z1"]; + x0=ENVIRON["x0"]; y0=ENVIRON["y0"]; z0=ENVIRON["z0"]; + x1=ENVIRON["x1"]; y1=ENVIRON["y1"]; z1=ENVIRON["z1"]; radius=ENVIRON["radius"]; } { @@ -85,7 +113,7 @@ EOF ($2<=x1)&&($3<=y1)&&($4<=z1)) { print "sphere { <"$2","$4","$3">, "radius" "; print "texture { pigment { color "$5" } "; - print "finish { phong 1, metallic } } }"; + print "finish { phong 1 metallic } } }"; } }' >> temp.pov else @@ -106,17 +134,84 @@ EOF fi # boundaries + if [ -z "$bx0" ]; then + if [ -z "$x0" ]; then + cat $file | grep '# \[D\]' | while read foo bar x1 y1 z1 x2 y2 z2 ; do - cat >> temp.pov <<-EOF -cylinder { -<$x1, $z1, $y1>, <$x2, $z2, $y2>, 0.05 -pigment { color White } -} -EOF + draw_cyl $x1 $z1 $y1 $x2 $z2 $y2 0.05 done + + else + # manually drawing the 3x4 boundaries ... + draw_cyl $x0 $y0 $z0 $x1 $y0 $z0 + draw_cyl $x0 $y0 $z0 $x0 $y1 $z0 + draw_cyl $x1 $y1 $z0 $x1 $y0 $z0 + draw_cyl $x0 $y1 $z0 $x1 $y1 $z0 + + draw_cyl $x0 $y0 $z1 $x1 $y0 $z1 + draw_cyl $x0 $y0 $z1 $x0 $y1 $z1 + draw_cyl $x1 $y1 $z1 $x1 $y0 $z1 + draw_cyl $x0 $y1 $z1 $x1 $y1 $z1 + + draw_cyl $x0 $y0 $z1 $x0 $y0 $z0 + draw_cyl $x0 $y1 $z1 $x0 $y1 $z0 + draw_cyl $x1 $y0 $z1 $x1 $y0 $z0 + draw_cyl $x1 $y1 $z1 $x1 $y1 $z0 fi + else + + # manually drawing the 3x4 boundaries specified by argv ... + draw_cyl $bx0 $by0 $bz0 $bx1 $by0 $bz0 + draw_cyl $bx0 $by0 $bz0 $bx0 $by1 $bz0 + draw_cyl $bx1 $by1 $bz0 $bx1 $by0 $bz0 + draw_cyl $bx0 $by1 $bz0 $bx1 $by1 $bz0 + + draw_cyl $bx0 $by0 $bz1 $bx1 $by0 $bz1 + draw_cyl $bx0 $by0 $bz1 $bx0 $by1 $bz1 + draw_cyl $bx1 $by1 $bz1 $bx1 $by0 $bz1 + draw_cyl $bx0 $by1 $bz1 $bx1 $by1 $bz1 + + draw_cyl $bx0 $by0 $bz1 $bx0 $by0 $bz0 + draw_cyl $bx0 $by1 $bz1 $bx0 $by1 $bz0 + draw_cyl $bx1 $by0 $bz1 $bx1 $by0 $bz0 + draw_cyl $bx1 $by1 $bz1 $bx1 $by1 $bz0 + + fi + + # bonds + if [ -n "$bcr" ]; then + + if [ -z "$x0" ]; then + + cat $file | grep '# \[B\]' | while read foo bar x1 y1 z1 x2 y2 z2 ; do + draw_bond $x1 $z1 $y1 $x2 $z2 $y2 $bcr + done + + else + + export x0 y0 z0 x1 y1 z1 bcr + cat $file | grep '# \[B\]' | awk '\ + BEGIN { + x0=ENVIRON["x0"]; y0=ENVIRON["y0"]; z0=ENVIRON["z0"]; + x1=ENVIRON["x1"]; y1=ENVIRON["y1"]; z1=ENVIRON["z1"]; + bcr=ENVIRON["bcr"]; + } + { + if(($3>=x0)&&($4>=y0)&&($5>=z0)&&\ + ($3<=x1)&&($4<=y1)&&($5<=z1)) { + print "cylinder {"; + print "<"$3","$5","$4">,"; + print "<"$6","$8","$7">, "bcr; + print "pigment { color Blue }"; + print "}"; + } + }' >> temp.pov + + fi + fi + # add camera and light source cat >> temp.pov <<-EOF camera {