Subversion Repositories wimsdev

Rev

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

Rev Author Line No. Line
20 reyssat 1
!if $wims_read_parm!=slib_header
13587 bpr 2
  !goto proc
20 reyssat 3
!endif
4351 bpr 4
slib_author=Bernadette, Perrin-Riou
4158 bpr 5
 
18428 bpr 6
slib_example=[1,2,3;2,4,5;3,6,7],[[A,B,C],[a,b,c,d,e,f]],middle point\
7
[1,2,3;2,4,5;3,6,7],[[A,B,C],[a,b,c,d,e]],middle point html
7692 bpr 8
 
20 reyssat 9
!exit
10
 
11
:proc
12
 
17944 bpr 13
!reset slib_segments slib_texts slib_circles slib_disks
20 reyssat 14
!distribute item $wims_read_parm into slib_G,slib_text
4172 bpr 15
slib_doption=!item 3 to -1 of $wims_read_parm
16
slib_option=$slib_doption
20 reyssat 17
!default slib_color1=blue
18426 bpr 18
!default slib_color2=lightgreen
19
!default slib_color3=lightyellow
20 reyssat 20
slib_text=!declosing $slib_text
21
!if [ isin $slib_text
12676 bpr 22
  !distribute item $slib_text into slib_textp, slib_textm
20 reyssat 23
!else
12676 bpr 24
  slib_textp=$slib_text
20 reyssat 25
!endif
26
slib_textp=!declosing $slib_textp
27
slib_textm=!declosing $slib_textm
28
slib_G=!declosing $slib_G
17944 bpr 29
slib_G=!translate internal ; to $\
20 reyssat 30
$ in $slib_G
31
slib_col=!column 1 of $slib_G
32
slib_NG=!linecnt $slib_G
33
slib_n=!lines2items $slib_G
34
slib_n=!listuniq $slib_n
17944 bpr 35
## slib_n=!item -1 of $slib_n
20 reyssat 36
slib_complement=!listcomplement $slib_col in $slib_n
37
!for slib_i in $slib_complement
12676 bpr 38
  slib_G=!append line $slib_i to $slib_G
20 reyssat 39
!next slib_i
40
!read slib/data/columnsort 1,numeric, $slib_G
41
slib_G=$slib_out
42
slib_n=!linecnt $slib_G
17944 bpr 43
slib_A1=0
44
slib_height1=1
45
slib_sizey=1
46
slib_cnt1=0
20 reyssat 47
slib_cnt=1
17944 bpr 48
slib_width1=15
20 reyssat 49
slib_Sizey=0
17944 bpr 50
slib_position=$empty
20 reyssat 51
 
17944 bpr 52
slib_milieu=0,-1
53
!for slib_k=1 to $slib_n
54
  slib_L=!line $slib_k of $slib_G
12676 bpr 55
  slib_i=!item 1 of $slib_L
56
  slib_position_prov=$(slib_A$slib_i),$[-$(slib_height$slib_i)]
17944 bpr 57
  slib_position=!append line $slib_position_prov to $slib_position
12676 bpr 58
  slib_a=!item 2 to -1 of $slib_L
59
  slib_ss=!itemcnt $slib_L
60
  !for slib_b in $slib_a
61
    slib_j=!positionof $slib_b in $slib_a
62
    !if $slib_b <> 0 and $slib_b<>$empty
17944 bpr 63
      slib_jj=$[$slib_cnt+1]
12676 bpr 64
      #sa hauteur
17944 bpr 65
      slib_height$slib_jj=$[$(slib_height$slib_i)+1]
12676 bpr 66
      #la hauteur de l'arbre
67
      slib_sizey=$[max($slib_sizey, $(slib_height$slib_jj))]
68
      # Ne sert à rien ?
69
      slib_cnt$(slib_height$slib_jj)=$[$(slib_cnt$(slib_height$slib_jj))+1]
70
      #nombre de sommets
17944 bpr 71
      slib_cnt=$[$slib_cnt +1]
12676 bpr 72
      #position
73
      slib_test=$[($slib_ss)%2]
17944 bpr 74
      !ifval $slib_test=1
12676 bpr 75
        slib_A$slib_jj=$[$(slib_A$slib_i)+($slib_j-($slib_ss)/2)*$(slib_width$slib_i)]
76
      !else
77
        slib_A$slib_jj=$[$(slib_A$slib_i)+($slib_j-($slib_ss)/2-1)*$(slib_width$slib_i)]
78
      !endif
79
      #calcul de la largeur donnée au sommet $slib_jj pour ses fils éventuels
80
      slib_width$slib_jj=$[$(slib_width$slib_i)/($slib_ss-0.5)]
17944 bpr 81
      slib_milieu_prov=$[($(slib_A$slib_i)+2*$(slib_A$slib_jj))/3],$[-($(slib_height$slib_i)+2*$(slib_height$slib_jj))/3]
82
      slib_milieu=!append line $slib_milieu_prov to $slib_milieu
12676 bpr 83
    !endif
84
  !next slib_b
20 reyssat 85
!next slib_k
86
slib_s=!line -1 of $slib_position
17944 bpr 87
slib_s=!item 1 of $slib_s
20 reyssat 88
 
89
#Trace du dessin
17944 bpr 90
slib_dessin=xrange $[-($slib_s)-5], $[$slib_s+5]\
162 bpr 91
yrange $[-($slib_sizey)-0.5],-0.5\
20 reyssat 92
linewidth 2
17944 bpr 93
slib_cnt=!linecnt $slib_G
94
!for slib_k=1 to $slib_cnt
95
  slib_u=!line $slib_k of $slib_G
12676 bpr 96
  slib_i=!item 1 of $slib_u
97
  slib_u=!item 2 to -1 of $slib_u
98
  slib_position_prov=!line $slib_k of $slib_position
99
  !for slib_j in $slib_u
100
    !if $slib_j notsametext sentinelle
101
      #trace de la droite
102
      slib_position_prov1=!line $slib_j of $slib_position
17944 bpr 103
      slib_segments=!append item $slib_position_prov,$slib_position_prov1 to $slib_segments
12676 bpr 104
      #on coupe les segments au milieu pour mettre un cercle et éventuellement du texte
7692 bpr 105
 
12676 bpr 106
      !if middle iswordof $slib_doption
107
        slib_milieu_prov=!line $slib_j of $slib_milieu
17944 bpr 108
        slib_disks=!append line disk $slib_milieu_prov,30,white to $slib_disk
18426 bpr 109
        slib_circles=!append line fcircle $slib_milieu_prov, 30,$slib_color3 to $slib_circles
12676 bpr 110
        !if $slib_textm <> $empty
111
          slib_textk=!item $slib_j of $slib_textm
112
          slib_milieu_prov1=!item 1 of $slib_milieu_prov
113
          slib_milieu_prov2=!item 2 of $slib_milieu_prov
114
          slib_milieu_prov=$[$slib_milieu_prov1-0.9], $[$slib_milieu_prov2+0.1]
17944 bpr 115
          slib_texts=!append line text black,$slib_milieu_prov, large,$slib_textk to $slib_texts
8321 bpr 116
        !endif
12676 bpr 117
      !endif
118
    !endif
119
  !next slib_j
120
  !if point iswordof $slib_doption
17944 bpr 121
    slib_disks=!append line disk $slib_position_prov,30,white to $slib_disks
18426 bpr 122
    slib_circles=!append line fcircle $slib_position_prov,30,$slib_color2 to $slib_circles
12676 bpr 123
  !endif
17944 bpr 124
  !if $(slib_textp[$slib_k]) <> $empty
12676 bpr 125
    slib_position_prov1=!item 1 of $slib_position_prov
126
    slib_position_prov2=!item 2 of $slib_position_prov
127
    slib_position_prov=$[$slib_position_prov1-0.9], $[$slib_position_prov2+0.1]
17944 bpr 128
    slib_texts=!append line text black,$slib_position_prov, large,$(slib_textp[$slib_k]) to $slib_texts
12676 bpr 129
  !endif
7692 bpr 130
!next slib_k
17944 bpr 131
slib_dessin=xrange $[-($slib_s)-5], $[$slib_s+5]\
132
yrange $[-($slib_sizey)-0.5],-0.5\
133
linewidth 2\
134
segments $slib_color1, $slib_segments\
135
$slib_disks\
136
$slib_circles\
137
$slib_texts
7692 bpr 138
 
17944 bpr 139
slib_out=$slib_dessin
4172 bpr 140
!if url iswordof $slib_doption or html iswordof $slib_doption
141
  insdraw_size=300,300
142
  !insdraw $slib_out
143
  slib_out=$ins_url
144
  !if html iswordof $slib_doption
17173 bpr 145
    slib_out=<img src="$ins_url" alt="">
4908 bpr 146
  !else
12676 bpr 147
    slib_out=$slib_out,[$slib_G],[$slib_position],[$slib_milieu],$insdraw_size
4172 bpr 148
  !endif
12676 bpr 149
!else
4194 bpr 150
   slib_out=[$slib_dessin],[$slib_G],[$slib_position],[$slib_milieu]
4172 bpr 151
!endif