Subversion Repositories wimsdev

Rev

Rev 13593 | Blame | Compare with Previous | Last modification | View Log | RSS feed

!if $wims_read_parm!=slib_header
  !goto proc
!endif

slib_author=Bernadette, Perrin-Riou
slib_example=[0,0,0;0,0,2;0,0,3;1,1,2]\
[0,0,0;0,0,1;0,0,2;0,1,2],,,[blue,blue],[0.01,0.01]\
[0,0,0;0,1,0;0,1,0;2,0,0],300,300,[red,red]\
[0,0,0,2,3,3;1,3,1,1,1,1;1,3,3,3,1,1],300,300,[blue,green],,p\
[0,0,0;0,0,1;0,0,2;1,0,2;2,0,2;0,1,2;0,1,3],300,300,[blue,green]\
[0,0,0;0,0,1;0,0,2;1,0,2;2,0,2],300,300,[blue,green]\
[0,0,0;0,1,0;0,1,1;1,1,0;1,1,1;1,2,0]\
[0,0,0,2,2,4;1,1,4,5,2,1],300,300,[violet,purple],,p\
[0,0,0,2,2,4;0,0,3,-5,-2,-3;1,1,4,1,2,1],300,300,,,p
[0,0,0,5,4,4;2,4,2,1,5,3],300,300,,,p\
[0,0,0,5,4,4;2,4,2,1,5,1],500,500,,,p

!exit

:proc
!reset slib_out slib_data slib_color
!distribute items $wims_read_parm into slib_d,slib_sizex,slib_sizey, slib_color,slib_width
slib_d=!declosing $slib_d
slib_d=!rows2lines $slib_d
slib_dcnt=!linecnt $slib_d
slib_d=!lines2rows $slib_d

!default slib_color=[red,red]
!default slib_width=[0.01,0.03]
!default slib_sizex=300
!default slib_sizey=300
slib_bondcnt=0
slib_data=ATOM
slib_b=!linecnt $slib_data
slib_cnt=0
!if $slib_id!=
  !increase slib_id
!endif
!if $(wims_read_parm[7])!=$empty
  slib_id=$(wims_read_parm[7])
!endif
!if $slib_id=
  slib_id=0
!endif

!if p iswordof $(wims_read_parm[6])
  !goto parallepipede
!endif

!for slib_n = 1 to $slib_dcnt
  slib_cube=$(slib_d[$slib_n;])
  slib_cube1=!items2words $slib_cube
  slib_cube=!words2items $slib_cube1
  slib_cube=!nospace $slib_cube
  slib_list=$(slib_data[;1])
  slib_new0=!positionof item c $slib_cube1 in $slib_list
  !if $slib_new0=
    slib_data=!append line c $slib_cube1 to $slib_data
    slib_list=$(slib_data[;1])
    !increase slib_cnt
    slib_new0=$slib_cnt
  !else
    slib_new0=$[$slib_new0-$slib_b]
  !endif
  slib_pos=$[$(slib_cube[1])+1] $[$(slib_cube[2])] $[$(slib_cube[3])]
  slib_new1=!positionof item c $slib_pos in $slib_list
  !if $slib_new1=
    slib_data=!append line c $slib_pos,$slib_new0 to $slib_data
    slib_list=$(slib_data[;1])
    !increase slib_cnt
    slib_new1=$slib_cnt
    !increase slib_bondcnt
  !else
    slib_new1=$[$slib_new1-$slib_b]
  !endif
  slib_pos=$[$(slib_cube[1])] $[$(slib_cube[2])+1] $[$(slib_cube[3])]
  slib_new2=!positionof item c $slib_pos in $slib_list
  !if $slib_new2=
    slib_data=!append line c $slib_pos,$slib_new0 to $slib_data
    slib_list=$(slib_data[;1])
    !increase slib_cnt
    slib_new2=$slib_cnt
    !increase slib_bondcnt
  !else
    slib_new2=$[$slib_new2-$slib_b]
  !endif
  slib_pos=$[$(slib_cube[1])] $[$(slib_cube[2])] $[$(slib_cube[3])+1]
  slib_new3=!positionof item c $slib_pos in $slib_list
  !if $slib_new3=
    slib_data=!append line c $slib_pos,$slib_new0 to $slib_data
    slib_list=$(slib_data[;1])
    !increase slib_cnt
    slib_new3=$slib_cnt
    !increase slib_bondcnt
  !else
    slib_new3=$[$slib_new3-$slib_b]
  !endif
  slib_pos=$[$(slib_cube[1])+1] $[$(slib_cube[2])+1] $[$(slib_cube[3])]
  slib_new4=!positionof item c $slib_pos in $slib_list
  !if $slib_new4=
    slib_data=!append line c $slib_pos,$slib_new1,$slib_new2 to $slib_data
    slib_list=$(slib_data[;1])
    !increase slib_cnt
    slib_new4=$slib_cnt
    slib_bondcnt=$[$slib_bondcnt+2]
  !else
    slib_new4=$[$slib_new4-$slib_b]
  !endif
  slib_pos=$[$(slib_cube[1])] $[$(slib_cube[2])+1] $[$(slib_cube[3])+1]
  slib_new5=!positionof item c $slib_pos in $slib_list
  !if $slib_new5=
    slib_data=!append line c $slib_pos,$slib_new2,$slib_new3 to $slib_data
    slib_list=$(slib_data[;1])
    !increase slib_cnt
    slib_new5=$slib_cnt
    slib_bondcnt=$[$slib_bondcnt+2]
  !else
    slib_new5=$[$slib_new5-$slib_b]
  !endif
    slib_pos=$[$(slib_cube[1])+1] $[$(slib_cube[2])] $[$(slib_cube[3])+1]
    slib_new6=!positionof item c $slib_pos in $slib_list
  !if $slib_new6=
    slib_data=!append line c $slib_pos,$slib_new3,$slib_new1 to $slib_data
    slib_list=$(slib_data[;1])
    !increase slib_cnt
    slib_new6=$slib_cnt
    slib_bondcnt=$[$slib_bondcnt+2]
  !else
    slib_new6=$[$slib_new6-$slib_b]
  !endif
  slib_pos=$[$(slib_cube[1])+1] $[$(slib_cube[2])+1] $[$(slib_cube[3])+1]
  slib_new7=!positionof item c $slib_pos in $slib_list
  !if $slib_new7=
    slib_data=!append line c $slib_pos,$slib_new4,$slib_new5,$slib_new6 to $slib_data
    slib_list=$(slib_data[;1])
    !increase slib_cnt
    slib_new7=$slib_cnt
    slib_bondcnt=$[$slib_bondcnt+3]
  !else
    slib_new7=$[$slib_new7-$slib_b]
  !endif
!next
!goto end
:parallepipede
!for slib_n = 1 to $slib_dcnt
  slib_step=$[sign($(slib_d[$slib_n;4]))],$[sign($(slib_d[$slib_n;5]))],$[sign($(slib_d[$slib_n;6]))]
  !for slib_i=0 to $(slib_d[$slib_n;4]) step $(slib_step[1])
    !for slib_j = 0 to $(slib_d[$slib_n;5]) step $(slib_step[2])
      !for slib_h = 0 to $(slib_d[$slib_n;6]) step $(slib_step[3])
        slib_Neig=
        slib_list= $(slib_data[;1])
        !reset slib_neig
        !if c $[$(slib_d[$slib_n;1])+$slib_i] $[$(slib_d[$slib_n;2])+$slib_j] $[$(slib_d[$slib_n;3])+$slib_h] isitemof $slib_list
          !goto break
        !endif
        slib_neig=!positionof item c $[$(slib_d[$slib_n;1]) + $slib_i] $[$(slib_d[$slib_n;2])+$slib_j] $[$(slib_d[$slib_n;3])+$slib_h+1] in $slib_list
        !if $slib_neig > $slib_b
          slib_Neig=!append item $[$slib_neig-$slib_b] to $slib_Neig
        !endif
        !reset slib_neig
        slib_neig=!positionof item c $[$(slib_d[$slib_n;1]) + $slib_i] $[$(slib_d[$slib_n;2])+$slib_j] $[$(slib_d[$slib_n;3])+$slib_h-1] in $slib_list
        !if $slib_neig > $slib_b
          slib_Neig=!append item $[$slib_neig-$slib_b] to $slib_Neig
        !endif
        !reset slib_neig
        slib_neig=!positionof item c $[$(slib_d[$slib_n;1])+$slib_i-1] $[$(slib_d[$slib_n;2])+$slib_j] $[$(slib_d[$slib_n;3])+$slib_h] in $slib_list
        !ifval $slib_neig > $slib_b
          slib_Neig=!append item $[$slib_neig-$slib_b] to $slib_Neig
        !endif
        !reset slib_neig
        slib_neig=!positionof item c $[$(slib_d[$slib_n;1])+$slib_i +1] $[$(slib_d[$slib_n;2])+$slib_j] $[$(slib_d[$slib_n;3])+$slib_h] in $slib_list
        !ifval $slib_neig > $slib_b
          slib_Neig=!append item $[$slib_neig-$slib_b] to $slib_Neig
        !endif
        !reset slib_neig
        slib_neig=!positionof item c $[$(slib_d[$slib_n;1])+$slib_i] $[$(slib_d[$slib_n;2])+$slib_j+1] $[$(slib_d[$slib_n;3])+$slib_h] in $slib_list
        !ifval $slib_neig > $slib_b
          slib_Neig=!append item $[$slib_neig-$slib_b] to $slib_Neig
        !endif
        !reset slib_neig
          slib_neig=!positionof item c $[$(slib_d[$slib_n;1])+$slib_i] $[$(slib_d[$slib_n;2])+$slib_j-1] $[$(slib_d[$slib_n;3])+$slib_h] in $slib_list
        !ifval $slib_neig > $slib_b
          slib_Neig=!append item $[$slib_neig-$slib_b] to $slib_Neig
        !endif
        slib_Neig=!singlespace $slib_Neig
        slib_Neig=!listuniq $slib_Neig
        slib_data=!append line c $[$(slib_d[$slib_n;1])+$slib_i] $[$(slib_d[$slib_n;2])+$slib_j] $[$(slib_d[$slib_n;3])+$slib_h], $slib_Neig\
          to $slib_data
        slib_cnt=!itemcnt $slib_Neig
        slib_bondcnt=$[$slib_cnt + $slib_bondcnt]
        !reset slib_Neig
        :break
      !next
    !next
  !next
!next
:end
!if $slib_bondcnt >= 500
  slib_out=too_big
  !exit
!endif

slib_data=!items2words $slib_data
slib_data_cnt=!linecnt $slib_data
!reset slib_vertex slib_edge slib_edge_cnt slib_face slib_face_cnt slib_arete slib_vertex_cnt
slib_vertex_cnt=0

!for slib_j=2 to $slib_data_cnt
  slib_line=!line $slib_j of $slib_data
  slib_point=!word 2 to 4 of $slib_line
  slib_vertex=!append line $slib_point to $slib_vertex
  slib_e=!word 5 to -1 of $slib_line
  slib_e=!words2items $slib_e
  slib_n=!itemcnt $slib_e
  !if $slib_n>0
    slib_e=!exec pari [$slib_e]-vector($slib_n,i,1)
  !endif
  !if $slib_e!=
    slib_face=!append line $[$slib_n+1] $slib_vertex_cnt $slib_e to $slib_face
    !increase slib_face_cnt
    slib_e=!words2items $slib_e
    !for slib_m=1 to $[$slib_n]
      slib_edge=!append line $slib_vertex_cnt $[$(slib_e[$[$slib_m]])] to $slib_edge
      !increase slib_edge_cnt
    !next
  !endif
  !increase slib_vertex_cnt
!next
slib_edge=!replace internal , by $ $ in $slib_edge
slib_face=!replace internal , by $ $ in $slib_face
slib_vertex=!nonempty lines $slib_vertex
slib_data=$[$slib_vertex_cnt] 0 $[$slib_edge_cnt]\
$slib_vertex\
$slib_edge

!readproc slib/geo3D/off2jmol $slib_data,[S$slib_id,A$slib_id],$slib_color,$slib_width,url $slib_id
slib_out2=$slib_out
!readproc oef/togetfile.proc tmp2_$slib_id new\
$slib_out

!!slib_rotation=moveto 0.0 { 722 -692 2 36.12}  100.0 0.0 0.0  {0 0 0} 3.08 {0 0 0} 0 0 0 3.0 0.0 0.0;

!reset slib_vertex slib_edge slib_edge_cnt slib_face slib_face_cnt slib_arete slib_vertex_cnt slib_data slib_out
!readproc slib/chemistry/jmolshow $(slib_out2[2]),$slib_sizex,$slib_sizey,white,script "$(slib_out2[1])";zoom 120;$slib_rotation,$slib_id

!exit

moveto /* time, axisAngle */ 0.0 { 722 -692 2 36.12} /* zoom, translation
*/  100.0 0.0 0.0  /* center, rotationRadius */ {0 0 0} 3.08 /* navigation
center, translation, depth */ {0 0 0} 0 0 0 /* cameraDepth, cameraX,
cameraY */  3.0 0.0 0.0;