Rev 16886 | Rev 16907 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
!if $wims_read_parm!=slib_header
!goto proc
!endif
slib_title=Conversion d'un dessin 2D codé dans la syntaxe off en canvasdraw
slib_author=Bernadette, Perrin-Riou
slib_parms=3\
,coordonnées des sommets : [coord,legende;...;coord,legende]\
,liste des faces: [nombre de sommets, liste des sommets,legende],...,[nombre de sommets, liste des sommets,legende]\
size=500,option (mots) : size= color=[couleur générale;numero d'une face, couleur;...] vertex_legend face_legend pour afficher les légendes\
slib_out=dessin donné par un fichier de type presque off (en dimension 2)\
(version préliminaire, la syntaxe peut changer).
slib_comment=si une seule couleur, la même couleur pour toutes les faces.\
la taille est prise pour la hauteur en pixels
ce n'est pas tout à fait off: rajouter un 0 pour avoir trois composantes dans les points
Il manque aussi la ligne sur le nombre de sommets faces aretes
slib_example=[0,0,S1;1,1,S2;1,0,S3;2,1,S4],[[3,1,2,3,A1],[3,2,3,4,A2]], vertex_legend size=200 color=[red;1,blue]\
[0,0,V1;1,1,V2;1,0;2,1,V4],[[3,1,2,3,B1],[3,2,3,4]],face_legend\
[0,0,11;1,1,22;1,0,33;2,1,44],[[3,1,2,3,B1],[3,2,3,4]],vertex_legend face_legend\
[0,0,S1;1,1,S2;1,0,S3;2,1,S4],[[3,1,2,3,A1],[3,2,3,4,A2]]\
[0,0,S1;1,1,S2;1,0,S3;2,0,S4;1,-1,S5],[[3,1,2,3,A1],[3,2,3,4,A2],[3,1,3,5,A3],[3,4,3,5,A4]],face_legend color=[red;2,green;3,blue]\
[-0.707,-0.408,7;0.707,-0.408,8;0.E-19,0.816,11;-1.93,0.299,3;-1.22,1.52,6;-1.93,-1.12,0;-3.35,0.299,2;-3.35,-1.12,1;-1.22,-2.34,4;5.42 E-20,-1.63,8;-1.36 E-19,2.23,10;-1.93,2.75,2;-0.707,3.46,5;-1.93,4.16,1;1.63 E-19,4.68,9;-1.22,5.39,4;2.17 E-19,6.09,8;1.41,4.68,10;1.41,6.09,11;-2.64,-2.34,4;-2.64,1.52,2;0.707,3.46,5],[[4,4,7,8,6],[4,6,9,10,1],[4,14,13,15,16],[4,12,5,11,13],[4,4,1,3,5],[4,17,15,18,19],[3,6,8,20],[3,14,12,13],[3,21,4,5],[3,4,6,1],[3,16,15,17],[3,22,18,15],[3,5,3,11],[3,1,2,3]],vertex_legend\
[-0.707,-0.408,7;0.707,-0.408,8;0.E-19,0.816,11;-1.93,0.299,3;-1.22,1.52,6;-1.93,-1.12,0;-3.35,0.299,2;-3.35,-1.12,1;-1.22,-2.34,4;5.42 E-20,-1.63,8;-1.36 E-19,2.23,10;-1.93,2.75,2;-0.707,3.46,5;-1.93,4.16,1;1.63 E-19,4.68,9;-1.22,5.39,4;2.17 E-19,6.09,8;1.41,4.68,10;1.41,6.09,11;-2.64,-2.34,4;-2.64,1.52,2;0.707,3.46,5],[[4,4,7,8,6],[4,6,9,10,1],[4,14,13,15,16],[4,12,5,11,13],[4,4,1,3,5],[4,17,15,18,19],[3,6,8,20],[3,14,12,13],[3,21,4,5],[3,4,6,1],[3,16,15,17],[3,22,18,15],[3,5,3,11],[3,1,2,3]],color=[grey;2,red;7,blue]\
[-0.707,-0.408,7;0.707,-0.408,8;0.E-19,0.816,11;-1.93,0.299,3;-1.22,1.52,6;-1.93,-1.12,0;-3.35,0.299,2;-3.35,-1.12,1;-1.22,-2.34,4;5.42 E-20,-1.63,8;-1.36 E-19,2.23,10;-1.93,2.75,2;-0.707,3.46,5;-1.93,4.16,1;1.63 E-19,4.68,9;-1.22,5.39,4;2.17 E-19,6.09,8;1.41,4.68,10;1.41,6.09,11;-2.64,-2.34,4;-2.64,1.52,2;0.707,3.46,5],[[4,4,7,8,6],[4,6,9,10,1],[4,14,13,15,16],[4,12,5,11,13],[4,4,1,3,5],[4,17,15,18,19],[3,6,8,20],[3,14,12,13],[3,21,4,5],[3,4,6,1],[3,16,15,17],[3,22,18,15],[3,5,3,11],[3,1,2,3]],color=[yellow;1 3 4 5 6,red]
!exit
:proc
!set wims_multiexec=$wims_multiexec pari
!reset slib_option_som slib_option_face slib_vertex_legend slib_face_legend slib_dessin slib_som slib_face
!distribute items $wims_read_parm into slib_som, slib_face, slib_option
!distribute items 0,0,0,0 into slib_xrange1,slib_xrange2,slib_yrange1,slib_yrange2
!set slib_size=!getopt size in $slib_option
!default slib_size=500
!set slib_color=!getopt color in $slib_option
!set slib_som=!declosing $slib_som
!set slib_somcnt=!itemcnt $(slib_som[;1])
!if vertex_legend isin $slib_option
slib_option_som=1
!endif
!if face_legend isin $slib_option
slib_option_face=1
!endif
!set slib_face=!declosing $slib_face
!set slib_facecnt=!itemcnt $(slib_face)
!for slib_j=1 to $slib_somcnt
!set slib_xrange1=$[min($slib_xrange1,$(slib_som[$slib_j;1]))]
!set slib_xrange2=$[max($slib_xrange2,$(slib_som[$slib_j;1]))]
!set slib_yrange1=$[min($slib_yrange1,$(slib_som[$slib_j;2]))]
!set slib_yrange2=$[max($slib_yrange2,$(slib_som[$slib_j;2]))]
!if $slib_option_som=1
!if $(slib_som[$slib_j;3])!=$empty
!set slib_vertex_legend=!append line centered\
text black,$(slib_som[$slib_j;1,2]),large,$(slib_som[$slib_j;3])\
to $slib_vertex_legend
!endif
!endif
!next
!for slib_j=1 to $slib_facecnt
!reset slib_coord
!set slib_jj=!declosing $(slib_face[$slib_j])
!for slib_t=2 to $(slib_jj[1])+1
!set slib_coord=!append item $(slib_som[$(slib_jj[$slib_t]);1,2]) to $slib_coord
!next
!set slib_coord=!replace internal ; by , in $slib_coord
!if $slib_option_face=1
!set slib_facemid=!exec pari v=[$slib_coord];[sum(j=1,#v/2,v[2*j-1]),sum(j=1,#v/2,v[2*j])]/#v*2
!if $(slib_jj[$(slib_jj[1])+2])!=$empty
!set slib_face_legend=!append line text black,$slib_facemid,large,$(slib_jj[$(slib_jj[1])+2]) \
to $slib_face_legend
!endif
!endif
!set slib_tmp=!select $slib_color where $slib_j iswordof column 1
!if $slib_tmp=$empty
!set slib_tmp=$(slib_color[1;])
!else
!set slib_tmp=$(slib_tmp[2])
!endif
!set slib_dessin=!append line polygon black, $slib_coord,$(slib_coord[1,2])\
$slib_type $slib_tmp, $slib_coord,$(slib_coord[1,2])\
to $slib_dessin
!if $slib_tmp!=$empty
!set slib_dessin=!append line fpolygon $slib_tmp, $slib_coord,$(slib_coord[1,2])\
to $slib_dessin
!endif
!next
!set slib_xrange1=$[$slib_xrange1-0.5]
!set slib_xrange2=$[$slib_xrange2+0.5]
!set slib_yrange1=$[$slib_yrange1-0.5]
!set slib_yrange2=$[$slib_yrange2+0.5]
!set slib_ratio=$[($slib_yrange2-$slib_yrange1)/($slib_xrange2-$slib_xrange1)]
!!!if $slib_ratio>1
!!!set insdraw_size=$slib_size,$[rint($slib_size*$slib_ratio)]
!!!else
!set insdraw_size=$[rint($slib_size/$slib_ratio)],$slib_size
!!!endif
slib_dessin=xrange $slib_xrange1,$slib_xrange2\
yrange $slib_yrange1,$slib_yrange2\
$slib_dessin\
fontsize 7\
$slib_vertex_legend\
$slib_face_legend
slib_out=!exec canvasdraw size $insdraw_size\
$slib_dessin
!!slib_out=$ins_url
!!slib_out=<img src="$ins_url" alt="" />\
!!$slib_dessin