!if $wims_read_parm!=slib_header
!goto proc
!endif
slib_title=Regular polygon
slib_parms=3\
5,number of vertices\
,list of colors\
vertex,option
slib_author=Bernadette PERRIN-RIOU
slib_out= flydraw code for a regular polygon with rays
slib_comment=colors can be in RGB (inside brackets) ; rays from the vertex\ 
(option <tt>edge</tt>) or from the middle of the edges (option <tt>vertex</tt>) or both. \
There is an option "circle", in this cas, a disk is drawn (not a polygon!)
slib_require=pari
slib_example=
!exit

:proc
slib_out=
!distribute items $wims_read_parm into slib_n,slib_color,slib_option
slib : en entre n, liste de couleurs , sommets, arete ...
!default slib_n=5
!default slib_option=edge
slib_color=!declosing $slib_color
slib_vertex = !exec pari concat(vector($slib_n,i,[ cos(2*i*pi/$slib_n),sin(2*i*pi/$slib_n)]))
slib_arete= !exec pari cos(pi/$slib_n)*concat(vector($slib_n,i,[ cos(2*i*pi/$slib_n+pi/$slib_n),sin(2*i*pi/$slib_n+pi/$slib_n)]))
!if vertex iswordof $slib_option
  slib_points_s = !exec pari 0.4*concat(vector($slib_n,i,[ cos(2*i*pi/$slib_n+pi/(2*$slib_n)),sin(2*i*pi/$slib_n+pi/(2*$slib_n))]))
!endif
!if edge iswordof $slib_option
  slib_points_c= !exec pari 0.4*concat(vector($slib_n,i,[ cos(2*i*pi/$slib_n+3*pi/(2*$slib_n)),sin(2*i*pi/$slib_n+3*pi/(2*$slib_n))]))
!endif
!if vertex iswordof $slib_option and edge iswordof $slib_option
  slib_points_cs=!exec pari 0.4*concat(vector($slib_n,i,[ cos(2*i*pi/$slib_n+pi/(2*$slib_n)),sin(2*i*pi/$slib_n+pi/(2*$slib_n)),cos(2*i*pi/$slib_n+3*pi/(2*$slib_n)),sin(2*i*pi/$slib_n+3*pi/(2*$slib_n))]))
!endif

slib_lignec=
slib_lignecs=
slib_lignes=

!for slib_i=1 to $slib_n
  slib_lignec=!append line line 0,0,$(slib_vertex[2*$slib_i-1,2*$slib_i]),black to $slib_lignec
  slib_lignes=!append line line 0,0,$(slib_arete[2*$slib_i-1,2*$slib_i]),black to $slib_lignes
  slib_lignesc=$slib_lignesc\
    line 0,0,$(slib_vertex[2*$slib_i-1,2*$slib_i]),black\
    line 0,0,$(slib_arete[2*$slib_i-1,2*$slib_i]),black  
!next

slib_fills=
slib_fillc=
slib_fillcs=


!for slib_i=1 to $slib_n
  slib_color_=!declosing $(slib_color[$slib_i])
  slib_fills=$slib_fills\
    fill $(slib_points_s[2*$slib_i-1,2*$slib_i]),$slib_color_
  slib_fillc=$slib_fillc\
    fill $(slib_points_c[2*$slib_i-1,2*$slib_i]),$slib_color_
 slib_color__=$(slib_color[2*$slib_i-1])
  slib_fillcs=$slib_fillcs\
    fill $(slib_points_cs[4*$slib_i-3,4*$slib_i-2]),$slib_color__\
    fill $(slib_points_cs[4*$slib_i-1,4*$slib_i]),$slib_color_
!next
!if $slib_option issametext
  slib_out=\
   xrange -1.5,1.5\
   yrange -1.5,1.5\
  polygon black,$slib_vertex
!endif
!if circle iswordof $slib_option
  slib_o= trange 0,2*pi\
  plot black,sin(t),cos(t)
!else
  slib_o=polygon black,$slib_vertex
!endif

!if vertex iswordof $slib_option and edge notwordof $slib_option
  slib_out=\
  xrange -1.5,1.5\
  yrange -1.5,1.5\
  $slib_o\
  $slib_lignes\
  $slib_fills
!endif

!if vertex notwordof $slib_option and edge iswordof $slib_option
 slib_out=\
  xrange -1.5,1.5\
  yrange -1.5,1.5\
  $slib_o\
  $slib_lignec\
  $slib_fillc
!endif

!if vertex iswordof $slib_option and edge iswordof $slib_option
 slib_out=\
xrange -1.5,1.5\
yrange -1.5,1.5\
$slib_o\
$slib_lignes\
$slib_lignec\
$slib_fillcs
!endif
