# === mkdraw script: construction d'arcs d'ellipse ===
# Application du fichier PDF elliptical_arc de L.Maisonobe
#  JMB 21.11.22



#==================  Arc  ( Ellipse)  ================
# %x0,%y0 is centre
# %rx     is radius x
# %ry     is radius y
# %a0,    is pseudo starting angle in radians
# %da     is pseudo delta from a%
# %n      if set, indicates how many
#         arcs to use
# %teta angle entre axe des x et le grand axe


Define Arc7 {


  # limitation  2Pi
  IFLess %a0 ( 2 * $Pi )
    Else
    Set %a0 ( %a0 - ( 2 * $Pi ) )
  Endif

  IFLess ( Abs %da ) ( 2 * $Pi )
    Else
    Set %da (  2 * $Pi )
  Endif

  IfEqual %da $Pi/2
    Set %n 1
    Else
    Set %n Floor  ( ( ABS %da ) * 2 / $Pi + 1 )
  Endif
  Set %da ( %da / %n )

#------------   construction des arcs successifs ------------
  Set %aa %a0
  For %k 0 %n {
    Set %a %aa            # P1
    Set %aa ( %a + %da )  # P2
    IfLess ( Abs %aa ) ( 2 * $Pi )
      Else
      Set %aa ( %aa - 2 * $Pi )
    Endif

 #Calcul de l'angle d'entre eta1 avec %a
    Set %eta1 %a

 #Calcul de l'angle de sortie eta2 avec %aa = %a + %da
    Set %eta2 %aa

 # calcul du point P1
    Set %P1x  ( %x0 + %rx * (  cos %teta ) * ( cos %eta1 )  - %ry * ( sin %teta )  * ( sin %eta1 ) )
    Set %P1y  ( %y0 + %rx * (  sin %teta ) * ( cos %eta1 )  + %ry * ( cos %teta )  * ( sin %eta1 ) )

 # calcul du point P2
    Set %P2x  ( %x0 + %rx * (  cos %teta ) * ( cos %eta2 )  - %ry * ( sin %teta )  * ( sin %eta2 ) )
    Set %P2y  ( %y0 + %rx * (  sin %teta ) * ( cos %eta2 )  + %ry * ( cos %teta )  * ( sin %eta2 ) )

  #point d'entre
#  IfEqual %k 0
#    Move %P1x %P1y
#  EndIf

#-----------------   #pts de contrle -------------
 #calcul de alpha
   Set %ta  tan ( ( %eta2 - %eta1 ) / 2 )
   Set %ta2 ( %ta * %ta )
   Set %radical ( ( ( sqrt ( 4 + ( 3 * %ta2 ) ) ) - 1 )  / 3 )
   Set %sinus  sin ( %eta2 - %eta1 )
   Set %alpha ( %sinus * %radical )

 # pt de contrle Q1
   Set %dE1x ( ( - %rx * ( cos %teta ) * ( sin %eta1 ) ) - ( %ry  * ( sin %teta )  * ( cos %eta1 ) ) )
   Set %dE1y ( ( - %rx * ( sin %teta ) * ( sin %eta1 ) ) + ( %ry  * ( cos %teta )  * ( cos %eta1 ) ) )
   Set %Q1x (  %P1x + %alpha * %dE1x  )
   Set %Q1y (  %P1y + %alpha * %dE1y  )

  # pt de contrle Q2
   Set %dE2x ( ( - %rx * ( cos %teta ) * ( sin %eta2 ) ) - ( %ry  * ( sin %teta )  * ( cos %eta2 ) ) )
   Set %dE2y ( ( - %rx * ( sin %teta ) * ( sin %eta2 ) ) + ( %ry  * ( cos %teta )  * ( cos %eta2 ) ) )
   Set %Q2x (  %P2x - %alpha * %dE2x  )
   Set %Q2y ( %P2y - %alpha * %dE2y  )

 # curve attend 6 paramtres
   Curve %Q1x %Q1y %Q2x %Q2y %P2x %P2y
  } #fin du for

}
#---------------  fin du trac ellipse  --------------


