Patch title: Release 90 bulk changes
Abstract:
File: /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 bbox x0 y0 x1 y1
  arg Curve c ; arg_w Float x0 y0 x1 y1
  check (c:status .and. is_ready)<>0
  x0 := maximum ; y0 := maximum
  x1 := -maximum ; y1 := -maximum
  for (var Int i) 0 c:pts:size-1
    var Pointer:CurvePoint p :> c:pts i
    x0 := min x0 (min p:x p:x+p:in_x p:x+p:out_x)
    y0 := min y0 (min p:y p:y+p:in_y p:y+p:out_y)
    x1 := max x1 (max p:x p:x+p:in_x p:x+p:out_x)
    y1 := max y1 (max p:y p:y+p:in_y p:y+p:out_y)
# 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 bbox x0 y0 x1 y1
  arg Curve c ; arg_w Float x0 y0 x1 y1
  check (c:status .and. is_ready)<>0
  x0 := maximum ; y0 := maximum
  x1 := -maximum ; y1 := -maximum
  for (var Int i) 0 c:pts:size-1
    var Pointer:CurvePoint p :> c:pts i
    x0 := min x0 (min p:x p:x+p:in_x p:x+p:out_x)
    y0 := min y0 (min p:y p:y+p:in_y p:y+p:out_y)
    x1 := max x1 (max p:x p:x+p:in_x p:x+p:out_x)
    y1 := max y1 (max p:y p:y+p:in_y p:y+p:out_y)
  if x0=maximum
    x0 := undefined ; y0 := undefined ; x1 := undefined ; y1 := undefined



method c polyline m epsilon -> table
  arg Curve c ; arg Transform2 m ; arg Float epsilon ; arg A
  check (c:status .and. is_ready)<>0



method c polyline m epsilon -> table
  arg Curve c ; arg Transform2 m ; arg Float epsilon ; arg A
  check (c:status .and. is_ready)<>0
  check epsilon>0
  table size := 1 ; table 0 := m (c pos 0)
  var Int n := shunt (c:status .and. outline)<>0 c:pts:size 
  for (var Int i) 0 n-1
    var Pointer:CurvePoint cp0 :> c:pts i
    var Pointer:CurvePoint cp1 :> c:pts (i+1)%c:pts:size
    if cp0:out_x=0 and cp0:out_y=0 and cp1:in_x=0 and cp1:in
      table += m (point cp1:x cp1:y)
    else
      var Float t0 := i/n ; var Point2 p0 := table table:siz
      var Float t05 := (i+0.5)/n ; var Point2 p05 := m (c po
      var Float t1 := (i+1)/n ; var Point2 p1 := m (c pos t1
      c polyline table  t0 p0  t05 p05 m epsilon
      c polyline table  t05 p05 t1 p1 m epsilon



method c polyline3 m epsilon -> table
  arg Curve c ; arg Transform2 m ; arg Float epsilon ; arg A
  check (c:status .and. is_ready)<>0
  table size := 1 ; table 0 := m (c pos 0)
  var Int n := shunt (c:status .and. outline)<>0 c:pts:size 
  for (var Int i) 0 n-1
    var Pointer:CurvePoint cp0 :> c:pts i
    var Pointer:CurvePoint cp1 :> c:pts (i+1)%c:pts:size
    if cp0:out_x=0 and cp0:out_y=0 and cp1:in_x=0 and cp1:in
      table += m (point cp1:x cp1:y)
    else
      var Float t0 := i/n ; var Point2 p0 := table table:siz
      var Float t05 := (i+0.5)/n ; var Point2 p05 := m (c po
      var Float t1 := (i+1)/n ; var Point2 p1 := m (c pos t1
      c polyline table  t0 p0  t05 p05 m epsilon
      c polyline table  t05 p05 t1 p1 m epsilon



method c polyline3 m epsilon -> table
  arg Curve c ; arg Transform2 m ; arg Float epsilon ; arg A
  check (c:status .and. is_ready)<>0
  check epsilon>0
  table size := 1 ; table:0 z := 0 ; (addressof table:0) map
  var Int n := shunt (c:status .and. outline)<>0 c:pts:size 
  for (var Int i) 0 n-1
    var Pointer:CurvePoint cp0 :> c:pts i
    var Pointer:CurvePoint cp1 :> c:pts (i+1)%c:pts:size
    if cp0:out_x=0 and cp0:out_y=0 and cp1:in_x=0 and cp1:in
      var Point3 p1 ; p1 z := (i+1)/n ; addressof:p1 map Poi
      table += p1
    else
      var Point3 p0 := table table:size-1
      var Point3 p05 ; p05 z := (i+0.5)/n ; addressof:p05 ma
      var Point3 p1 ; p1 z := (i+1)/n ; addressof:p1 map Poi
      c polyline table p0 p05 m epsilon
      c polyline table p05 p1 m epsilon



  table size := 1 ; table:0 z := 0 ; (addressof table:0) map
  var Int n := shunt (c:status .and. outline)<>0 c:pts:size 
  for (var Int i) 0 n-1
    var Pointer:CurvePoint cp0 :> c:pts i
    var Pointer:CurvePoint cp1 :> c:pts (i+1)%c:pts:size
    if cp0:out_x=0 and cp0:out_y=0 and cp1:in_x=0 and cp1:in
      var Point3 p1 ; p1 z := (i+1)/n ; addressof:p1 map Poi
      table += p1
    else
      var Point3 p0 := table table:size-1
      var Point3 p05 ; p05 z := (i+0.5)/n ; addressof:p05 ma
      var Point3 p1 ; p1 z := (i+1)/n ; addressof:p1 map Poi
      c polyline table p0 p05 m epsilon
      c polyline table p05 p1 m epsilon