public static Curve filletKfactorOffsetFilletBounding(Curve Polyline, double Thickness, double FilletRadius, double kFactor,double side)
 {
     Curve sheetCurves = null;
     List<Curve> tangantLines = new List<Curve>();
     List<Curve> finalArcs = new List<Curve>();
     Curve pLine = Polyline.ToNurbsCurve().DuplicateCurve();
     double tolerance = Math.Round(RhinoDoc.ActiveDoc.ModelAbsoluteTolerance, 3);
     var activePlane = RhinoDoc.ActiveDoc.Views.ActiveView.ActiveViewport.ConstructionPlane();
    //the magick number 0.25 is to offset in the middle of composite thickness
     Curve offsetCurve = pLine.Offset(activePlane, 0.25*side, RhinoDoc.ActiveDoc.ModelAbsoluteTolerance, CurveOffsetCornerStyle.Sharp)[0];
     //Curve FilletBounding = Curve.CreateFilletCornersCurve(offsetCurve, 2, tolerance, tolerance);
     Polyline pLine1;
     Polyline pLine2;
     var segments = offsetCurve.DuplicateSegments();
     foreach (var segment in segments)
     {
         if(segment.Degree == 1) tangantLines.Add(segment.ToNurbsCurve());
         else if (segment.Degree > 1)
         {
             double mid = segment.Domain.Mid;
             var fff = segment.Split(mid);
             //var ttt = Curve.JoinCurves(fff)[0].ToNurbsCurve();
             finalArcs.AddRange(fff);
             fff.BakeObject();
         }
     }
     //pLine.ToNurbsCurve().TryGetPolyline(out pLine1);
     //offsetCurve.ToNurbsCurve().TryGetPolyline(out pLine2);

     //var startLine = new Line(pLine1.ToNurbsCurve().PointAtStart, pLine2.ToNurbsCurve().PointAtStart);
     //var EndLine = new Line(pLine1.ToNurbsCurve().PointAtEnd, pLine2.ToNurbsCurve().PointAtEnd);
     ////create total boundaey curves collection and join them to get a single curve**//
     //var segments1 = new List<Curve>();
     //var ArcCurves = new List<Arc>();
     //var ArcCurvesToOffset = new List<Arc>();
     //// store pline segments in 2 lists of curves**//
     //for (var i = 0; i < pLine1.SegmentCount; i++)
     //{
     //    segments1.Add(pLine2.SegmentAt(i).ToNurbsCurve());
     //}
     //for (var i = 0; i < segments1.Count - 1; i++)
     //{
     //    //segm_n::>> m:if 1: original curve segment if 2: offset curve segment//// n: if 1 first picked segment for fillet, if 2: second picked segment for fillet**//
     //    var seg1_1 = segments1[i];
     //    var seg1_2 = segments1[i + 1];
         
     //    //create fillet arcs in loop//
     //    var crv1 = Curve.CreateFillet(seg1_1, seg1_2, FilletRadius, 1.0, 1.0);
     //    //create a list for fillet arcs of original curve: to use the further in create axis curve//
     //    finalArcs.Add(crv1.ToNurbsCurve());
     //}


     if (finalArcs.Count > 0)
     {
         //Point3d startPoint = startLine.ClosestPoint(finalArcs[0].PointAtStart, false);
         //EndLine.ToNurbsCurve().ClosestPoint(finalArcs[0].PointAtStart, out var e1);
         //startLine.ToNurbsCurve().ClosestPoint(finalArcs[finalArcs.Count - 1].PointAtEnd, out var s2);
         //Point3d EndPoint = EndLine.ClosestPoint(finalArcs[finalArcs.Count - 1].PointAtEnd, false);
         //Line midStartLine = new Line(finalArcs[0].PointAtStart, startPoint);
         //Line midEndLine = new Line(finalArcs[finalArcs.Count - 1].PointAtEnd, EndPoint);
         //tangantLines.Add(midStartLine.ToNurbsCurve());
         //for (int i = 0; i < finalArcs.Count - 1; i++)
         //{
         //    tangantLines.Add(EICurveTI.TangantLinebetweenCurve(finalArcs[i], finalArcs[i + 1]).ToNurbsCurve());
         //}
         //tangantLines.Add(midEndLine.ToNurbsCurve());
         //for (int i = 0; i < finalArcs.Count; i++)
         //{
         //    tangantLines.Add(TrimCurveWithMidelAndTangant(finalArcs[i], tangantLines));
         //}
         var finalAxix2 = Curve.JoinCurves(segments);
         sheetCurves = finalAxix2[0];
     }
     return sheetCurves;
 }

I want to add a kink point at the middle of shhet curve