Subversion Repositories wimsdev

Rev

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

Rev Author Line No. Line
4731 bpr 1
!if $wims_read_parm!=slib_header
13593 bpr 2
  !goto proc
4731 bpr 3
!endif
4
 
5
slib_author=Bernadette, Perrin-Riou
8418 bpr 6
slib_example=[0,0,0;0,0,2;0,0,3;1,1,2]\
7
[0,0,0;0,0,1;0,0,2;0,1,2],,,[blue,blue],[0.01,0.01]\
8417 bpr 8
[0,0,0;0,1,0;0,1,0;2,0,0],300,300,[red,red]\
9
[0,0,0,2,3,3;1,3,1,1,1,1;1,3,3,3,1,1],300,300,[blue,green],,p\
10
[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]\
11
[0,0,0;0,0,1;0,0,2;1,0,2;2,0,2],300,300,[blue,green]\
4731 bpr 12
[0,0,0;0,1,0;0,1,1;1,1,0;1,1,1;1,2,0]\
8417 bpr 13
[0,0,0,2,2,4;1,1,4,5,2,1],300,300,[violet,purple],,p\
14
[0,0,0,2,2,4;0,0,3,-5,-2,-3;1,1,4,1,2,1],300,300,,,p
15
[0,0,0,5,4,4;2,4,2,1,5,3],300,300,,,p\
16
[0,0,0,5,4,4;2,4,2,1,5,1],500,500,,,p
4731 bpr 17
 
18
!exit
19
 
20
:proc
8417 bpr 21
!reset slib_out slib_data slib_color
22
!distribute items $wims_read_parm into slib_d,slib_sizex,slib_sizey, slib_color,slib_width
23
slib_d=!declosing $slib_d
4731 bpr 24
slib_d=!rows2lines $slib_d
25
slib_dcnt=!linecnt $slib_d
26
slib_d=!lines2rows $slib_d
8417 bpr 27
 
28
!default slib_color=[red,red]
29
!default slib_width=[0.01,0.03]
8418 bpr 30
!default slib_sizex=300
31
!default slib_sizey=300
4731 bpr 32
slib_bondcnt=0
8417 bpr 33
slib_data=ATOM
4731 bpr 34
slib_b=!linecnt $slib_data
35
slib_cnt=0
8417 bpr 36
!if $slib_id!=
37
  !increase slib_id
4731 bpr 38
!endif
8417 bpr 39
!if $(wims_read_parm[7])!=$empty
40
  slib_id=$(wims_read_parm[7])
41
!endif
42
!if $slib_id=
43
  slib_id=0
44
!endif
4731 bpr 45
 
8417 bpr 46
!if p iswordof $(wims_read_parm[6])
47
  !goto parallepipede
48
!endif
4731 bpr 49
 
50
!for slib_n = 1 to $slib_dcnt
13593 bpr 51
  slib_cube=$(slib_d[$slib_n;])
52
  slib_cube1=!items2words $slib_cube
53
  slib_cube=!words2items $slib_cube1
54
  slib_cube=!nospace $slib_cube
55
  slib_list=$(slib_data[;1])
56
  slib_new0=!positionof item c $slib_cube1 in $slib_list
57
  !if $slib_new0=
58
    slib_data=!append line c $slib_cube1 to $slib_data
59
    slib_list=$(slib_data[;1])
60
    !increase slib_cnt
61
    slib_new0=$slib_cnt
8417 bpr 62
  !else
13593 bpr 63
    slib_new0=$[$slib_new0-$slib_b]
8417 bpr 64
  !endif
13593 bpr 65
  slib_pos=$[$(slib_cube[1])+1] $[$(slib_cube[2])] $[$(slib_cube[3])]
66
  slib_new1=!positionof item c $slib_pos in $slib_list
67
  !if $slib_new1=
68
    slib_data=!append line c $slib_pos,$slib_new0 to $slib_data
69
    slib_list=$(slib_data[;1])
70
    !increase slib_cnt
71
    slib_new1=$slib_cnt
72
    !increase slib_bondcnt
73
  !else
74
    slib_new1=$[$slib_new1-$slib_b]
75
  !endif
76
  slib_pos=$[$(slib_cube[1])] $[$(slib_cube[2])+1] $[$(slib_cube[3])]
77
  slib_new2=!positionof item c $slib_pos in $slib_list
78
  !if $slib_new2=
79
    slib_data=!append line c $slib_pos,$slib_new0 to $slib_data
80
    slib_list=$(slib_data[;1])
81
    !increase slib_cnt
82
    slib_new2=$slib_cnt
83
    !increase slib_bondcnt
84
  !else
85
    slib_new2=$[$slib_new2-$slib_b]
86
  !endif
87
  slib_pos=$[$(slib_cube[1])] $[$(slib_cube[2])] $[$(slib_cube[3])+1]
88
  slib_new3=!positionof item c $slib_pos in $slib_list
89
  !if $slib_new3=
90
    slib_data=!append line c $slib_pos,$slib_new0 to $slib_data
91
    slib_list=$(slib_data[;1])
92
    !increase slib_cnt
93
    slib_new3=$slib_cnt
94
    !increase slib_bondcnt
95
  !else
96
    slib_new3=$[$slib_new3-$slib_b]
97
  !endif
98
  slib_pos=$[$(slib_cube[1])+1] $[$(slib_cube[2])+1] $[$(slib_cube[3])]
99
  slib_new4=!positionof item c $slib_pos in $slib_list
100
  !if $slib_new4=
101
    slib_data=!append line c $slib_pos,$slib_new1,$slib_new2 to $slib_data
102
    slib_list=$(slib_data[;1])
103
    !increase slib_cnt
104
    slib_new4=$slib_cnt
105
    slib_bondcnt=$[$slib_bondcnt+2]
106
  !else
107
    slib_new4=$[$slib_new4-$slib_b]
108
  !endif
109
  slib_pos=$[$(slib_cube[1])] $[$(slib_cube[2])+1] $[$(slib_cube[3])+1]
110
  slib_new5=!positionof item c $slib_pos in $slib_list
111
  !if $slib_new5=
112
    slib_data=!append line c $slib_pos,$slib_new2,$slib_new3 to $slib_data
113
    slib_list=$(slib_data[;1])
114
    !increase slib_cnt
115
    slib_new5=$slib_cnt
116
    slib_bondcnt=$[$slib_bondcnt+2]
117
  !else
118
    slib_new5=$[$slib_new5-$slib_b]
119
  !endif
120
    slib_pos=$[$(slib_cube[1])+1] $[$(slib_cube[2])] $[$(slib_cube[3])+1]
121
    slib_new6=!positionof item c $slib_pos in $slib_list
8417 bpr 122
  !if $slib_new6=
13593 bpr 123
    slib_data=!append line c $slib_pos,$slib_new3,$slib_new1 to $slib_data
124
    slib_list=$(slib_data[;1])
125
    !increase slib_cnt
126
    slib_new6=$slib_cnt
127
    slib_bondcnt=$[$slib_bondcnt+2]
8417 bpr 128
  !else
13593 bpr 129
    slib_new6=$[$slib_new6-$slib_b]
8417 bpr 130
  !endif
131
  slib_pos=$[$(slib_cube[1])+1] $[$(slib_cube[2])+1] $[$(slib_cube[3])+1]
132
  slib_new7=!positionof item c $slib_pos in $slib_list
133
  !if $slib_new7=
13593 bpr 134
    slib_data=!append line c $slib_pos,$slib_new4,$slib_new5,$slib_new6 to $slib_data
135
    slib_list=$(slib_data[;1])
136
    !increase slib_cnt
137
    slib_new7=$slib_cnt
138
    slib_bondcnt=$[$slib_bondcnt+3]
8417 bpr 139
  !else
13593 bpr 140
    slib_new7=$[$slib_new7-$slib_b]
8417 bpr 141
  !endif
4731 bpr 142
!next
143
!goto end
144
:parallepipede
8417 bpr 145
!for slib_n = 1 to $slib_dcnt
4731 bpr 146
  slib_step=$[sign($(slib_d[$slib_n;4]))],$[sign($(slib_d[$slib_n;5]))],$[sign($(slib_d[$slib_n;6]))]
13593 bpr 147
  !for slib_i=0 to $(slib_d[$slib_n;4]) step $(slib_step[1])
148
    !for slib_j = 0 to $(slib_d[$slib_n;5]) step $(slib_step[2])
149
      !for slib_h = 0 to $(slib_d[$slib_n;6]) step $(slib_step[3])
150
        slib_Neig=
151
        slib_list= $(slib_data[;1])
152
        !reset slib_neig
153
        !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
154
          !goto break
155
        !endif
156
        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
157
        !if $slib_neig > $slib_b
158
          slib_Neig=!append item $[$slib_neig-$slib_b] to $slib_Neig
159
        !endif
160
        !reset slib_neig
161
        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
162
        !if $slib_neig > $slib_b
163
          slib_Neig=!append item $[$slib_neig-$slib_b] to $slib_Neig
164
        !endif
165
        !reset slib_neig
166
        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
167
        !ifval $slib_neig > $slib_b
14624 bpr 168
          slib_Neig=!append item $[$slib_neig-$slib_b] to $slib_Neig
13593 bpr 169
        !endif
170
        !reset slib_neig
4731 bpr 171
        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
172
        !ifval $slib_neig > $slib_b
13593 bpr 173
          slib_Neig=!append item $[$slib_neig-$slib_b] to $slib_Neig
174
        !endif
4731 bpr 175
        !reset slib_neig
176
        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
177
        !ifval $slib_neig > $slib_b
14624 bpr 178
          slib_Neig=!append item $[$slib_neig-$slib_b] to $slib_Neig
13593 bpr 179
        !endif
180
        !reset slib_neig
14624 bpr 181
          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
13593 bpr 182
        !ifval $slib_neig > $slib_b
183
          slib_Neig=!append item $[$slib_neig-$slib_b] to $slib_Neig
184
        !endif
185
        slib_Neig=!singlespace $slib_Neig
186
        slib_Neig=!listuniq $slib_Neig
187
        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\
14624 bpr 188
          to $slib_data
13593 bpr 189
        slib_cnt=!itemcnt $slib_Neig
190
        slib_bondcnt=$[$slib_cnt + $slib_bondcnt]
191
        !reset slib_Neig
192
        :break
193
      !next
4731 bpr 194
    !next
195
  !next
196
!next
197
:end
198
!if $slib_bondcnt >= 500
199
  slib_out=too_big
200
  !exit
201
!endif
202
 
203
slib_data=!items2words $slib_data
8417 bpr 204
slib_data_cnt=!linecnt $slib_data
205
!reset slib_vertex slib_edge slib_edge_cnt slib_face slib_face_cnt slib_arete slib_vertex_cnt
206
slib_vertex_cnt=0
4731 bpr 207
 
8417 bpr 208
!for slib_j=2 to $slib_data_cnt
13593 bpr 209
  slib_line=!line $slib_j of $slib_data
210
  slib_point=!word 2 to 4 of $slib_line
211
  slib_vertex=!append line $slib_point to $slib_vertex
212
  slib_e=!word 5 to -1 of $slib_line
213
  slib_e=!words2items $slib_e
214
  slib_n=!itemcnt $slib_e
215
  !if $slib_n>0
216
    slib_e=!exec pari [$slib_e]-vector($slib_n,i,1)
217
  !endif
218
  !if $slib_e!=
219
    slib_face=!append line $[$slib_n+1] $slib_vertex_cnt $slib_e to $slib_face
220
    !increase slib_face_cnt
8417 bpr 221
    slib_e=!words2items $slib_e
13593 bpr 222
    !for slib_m=1 to $[$slib_n]
223
      slib_edge=!append line $slib_vertex_cnt $[$(slib_e[$[$slib_m]])] to $slib_edge
224
      !increase slib_edge_cnt
225
    !next
226
  !endif
227
  !increase slib_vertex_cnt
8417 bpr 228
!next
229
slib_edge=!replace internal , by $ $ in $slib_edge
230
slib_face=!replace internal , by $ $ in $slib_face
231
slib_vertex=!nonempty lines $slib_vertex
232
slib_data=$[$slib_vertex_cnt] 0 $[$slib_edge_cnt]\
233
$slib_vertex\
234
$slib_edge
4731 bpr 235
 
8417 bpr 236
!readproc slib/geo3D/off2jmol $slib_data,[S$slib_id,A$slib_id],$slib_color,$slib_width,url $slib_id
237
slib_out2=$slib_out
14624 bpr 238
!readproc oef/togetfile.proc tmp2_$slib_id new\
8417 bpr 239
$slib_out
240
 
8462 bpr 241
!!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;
8417 bpr 242
 
243
!reset slib_vertex slib_edge slib_edge_cnt slib_face slib_face_cnt slib_arete slib_vertex_cnt slib_data slib_out
8462 bpr 244
!readproc slib/chemistry/jmolshow $(slib_out2[2]),$slib_sizex,$slib_sizey,white,script "$(slib_out2[1])";zoom 120;$slib_rotation,$slib_id
245
 
246
!exit
247
 
248
moveto /* time, axisAngle */ 0.0 { 722 -692 2 36.12} /* zoom, translation
249
*/  100.0 0.0 0.0  /* center, rotationRadius */ {0 0 0} 3.08 /* navigation
250
center, translation, depth */ {0 0 0} 0 0 0 /* cameraDepth, cameraX,
251
cameraY */  3.0 0.0 0.0;