anchor.diff:              else
                   Bezier3Seg(p0, p1, p2, p3) |> Some
   
  -    let private createArc (p0 : V2d) (p1 : V2d) (alpha0 : float) (dAlpha : float) (ellipse : Ellipse2d) =
  +    let private createArc (force : bool) (p0 : V2d) (p1 : V2d) (alpha0 : float) (dAlpha : float) (ellipse : Ellipse2d) =
           let newEllipse = createEllipse ellipse.Center ellipse.Axis0 ellipse.Axis1
           let a0 = newEllipse.GetAlpha p0
           let da =
  
positive.code:         else
              let p0 = ellipse.GetPoint alpha0
              let p1 = ellipse.GetPoint (alpha0 + dAlpha)
              createArc p0 p1 alpha0 dAlpha ellipse
              
      /// creates an arc using the an angle alpha0 and a (signed) dAlpha
      let arc (alpha0 : float) (dAlpha : float) (ellipse : Ellipse2d) =
  
negative.code:         if Fun.ApproximateEquals(p0, p1, epsilon) then
              None
          elif Fun.ApproximateEquals(p0, ellipse.GetPoint alpha0, epsilon) && Fun.ApproximateEquals(p1, ellipse.GetPoint (alpha0 + dAlpha), epsilon) then
              createArc false p0 p1 alpha0 dAlpha ellipse
          else
              None
      /// creates an arc using the an angle alpha0 and a (signed) dAlpha.
      /// in order to avoid precision issues p0,p1 users may redundantly supply p0 and p1.
      /// the implementation validates that p0~ellipse.GetPoint(alpha0) and p1~ellipse.GetPoint(alpha0+dAlpha) respectively.
      let arcWithPoints (p0 : V2d) (p1 : V2d) (alpha0 : float) (dAlpha : float) (ellipse : Ellipse2d) =
          if Fun.ApproximateEquals(p0, ellipse.GetPoint alpha0, epsilon) && Fun.ApproximateEquals(p1, ellipse.GetPoint (alpha0 + dAlpha), epsilon) then
              createArc true p0 p1 alpha0 dAlpha ellipse |> Option.get
          else
              failwith "bad points for arc"
  
      /// creates an arc using the an angle alpha0 and a (signed) dAlpha
      let tryArc (alpha0 : float) (dAlpha : float) (ellipse : Ellipse2d) =
  