Patch title: Release 94 bulk changes
Abstract:
File: /pliant/math/curve.pli
Key:
    Removed line
    Added line
   
# Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
#
# This program is free software; you can redistribute it and
# modify it under the terms of the GNU General Public Licens
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be us
# but WITHOUT ANY WARRANTY; without even the implied warrant
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See 
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public 
# version 2 along with this program; if not, write to the Fr
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 


method c pos param0 -> point
  arg Curve c ; arg Float param0 ; arg Point2 point
  check (c:status .and. is_ready)<>0
  var CBool ol := (c:status .and. outline)<>0
# Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx
#
# This program is free software; you can redistribute it and
# modify it under the terms of the GNU General Public Licens
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be us
# but WITHOUT ANY WARRANTY; without even the implied warrant
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See 
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public 
# version 2 along with this program; if not, write to the Fr
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 


method c pos param0 -> point
  arg Curve c ; arg Float param0 ; arg Point2 point
  check (c:status .and. is_ready)<>0
  var CBool ol := (c:status .and. outline)<>0
  if (c:status .and. bezier)=0
    var Float param := param0 * (shunt ol c:pts:size c:pts:s
    var Int i := bound (cast param-0.5 Int) 0 (shunt ol c:pt
    param -= i
  var Float param := param0 * (shunt ol c:pts:size c:pts:size-1)
  var Int i := bound (cast param-0.5 Int) 0 (shunt ol c:pts:size-1 c:pts:size-2)
  param -= i
  var Pointer:CurvePoint p0 :> c:pts i
  var Pointer:CurvePoint p1 :> c:pts (i+1)%c:pts:size
  if (c:status .and. bezier)<>0
    var Float x0 := p0 x
    var Float x1 := p0:out_x+p0:x
    var Float x2 := p1:in_x+p1:x
    var Float x3 := p1 x
    point x := (x3-3*x2+3*x1-x0)*param*param*param+3*(x2-2*x1+x0)*param*param+3*(x1-x0)*param+x0
    var Float y0 := p0 y
    var Float y1 := p0:out_y+p0:y
    var Float y2 := p1:in_y+p1:y
    var Float y3 := p1 y
    point y := (y3-3*y2+3*y1-y0)*param*param*param+3*(y2-2*y1+y0)*param*param+3*(y1-y0)*param+y0
  eif (c:status .and. conic)<>0
    var Float x0 := p0 x
    var Float x1 := ( p0:out_x+p0:x + p1:in_x+p1:x )/2
    var Float x2 := p1 x
    point x := (1-param)*(1-param)*x0 + 2*param*(1-param)*x1 + param*param*x2
    var Float y0 := p0 y
    var Float y1 := (p0:out_y+p0:y + p1:in_y+p1:y )/2
    var Float y2 := p1 y
    point y := (1-param)*(1-param)*y0 + 2*param*(1-param)*y1 + param*param*y2
  else
    var Float w0 w1
    if c:pts:size=2 and not ol
      w0 := 0 ; w1 := 0
    eif i=0 and not ol and c:pts:0:out_mode=automatic
      w0 := 0 ; w1 := param
    eif i=c:pts:size-2 and not ol and c:pts:(c:pts:size-1):i
      w0 := 1-param ; w1 := 0
    else
      w0 := weigh 1-param ; w1 := weigh param
    var Float w0 w1
    if c:pts:size=2 and not ol
      w0 := 0 ; w1 := 0
    eif i=0 and not ol and c:pts:0:out_mode=automatic
      w0 := 0 ; w1 := param
    eif i=c:pts:size-2 and not ol and c:pts:(c:pts:size-1):i
      w0 := 1-param ; w1 := 0
    else
      w0 := weigh 1-param ; w1 := weigh param
    var Pointer:CurvePoint p0 :> c:pts i
    var Pointer:CurvePoint p1 :> c:pts (i+1)%c:pts:size
    point x := w0*(p0:x+param*sqrt2*p0:out_x) + w1*(p1:x+(1-
    point y := w0*(p0:y+param*sqrt2*p0:out_y) + w1*(p1:y+(1-
    check point:x=defined and point:y=defined
    point x := w0*(p0:x+param*sqrt2*p0:out_x) + w1*(p1:x+(1-
    point y := w0*(p0:y+param*sqrt2*p0:out_y) + w1*(p1:y+(1-
    check point:x=defined and point:y=defined
  else
    var Float param := param0 * (shunt ol c:pts:size c:pts:s
    var Int i := bound (cast param-0.5 Int) 0 c:pts:size-2
    param -= i
    var Pointer:CurvePoint p0 :> c:pts i
    var Pointer:CurvePoint p1 :> c:pts (i+1)%c:pts:size
    var Float x0 := p0:x
    var Float x1 := p0:out_x+p0:x
    var Float x2 := p1:in_x+p1:x
    var Float x3 := p1:x
    point x := (x3-3*x2+3*x1-x0)*param*param*param+3*(x2-2*x
    var Float y0 := p0:y
    var Float y1 := p0:out_y+p0:y
    var Float y2 := p1:in_y+p1:y
    var Float y3 := p1:y
    point y := (y3-3*y2+3*y1-y0)*param*param*param+3*(y2-2*y
  check point:x=defined and point:y=defined



  check point:x=defined and point:y=defined