Issue with filleting surface in Rhino Common

I have a capped sweep surface to form a prong for jewelry. I want to fillet the surface in Rhino Common. I was able to get the fillet to work, for the underside, but still. However, the fillet is returning two objects, the fillet surface and the original sweep. I need to return one brep, where the sweep is trimmed with the fillet surface, and joined to it, and the rest discarded.

There is a Point2d that is required. I don’t understand what it is for. I create a Point3d and move it around to control the controlPoint (2 dimensions). Doesn’t seem to do anything.
Here is the relevant code:

        private void MakeProngs()
        {

            //create a circle at the table
            RG.Circle prongTop = new RG.Circle(this.stone.table + new Vector3d(0,0, heightAboveTable ), this.prongDiameter);
            //create another circle at the floor
            RG.Circle prongBottom = new RG.Circle(this.stone.floor, this.prongDiameter);
            //create the rail
            var prongCenterline = new RG.Line(prongTop.Center, prongBottom.Center);
            //sweep 1 rail
            var sweep = new SweepOneRail();
            Curve centerlineCurve = prongCenterline.ToNurbsCurve();
            var prongTopCurve = prongTop.ToNurbsCurve();
            var prongBottomCurve = prongBottom.ToNurbsCurve();
            Brep[] thisProng = sweep.PerformSweep(centerlineCurve, new Curve[] {prongBottomCurve, prongTopCurve});
            //cap the ends
            prongs = new List<Brep>();
            foreach (RG.Brep b in thisProng)
            {
                Brep cappedBrep = b.CapPlanarHoles(0.1);
                if (cappedBrep != null)
                {
                    prongs.Add(cappedBrep);
                }
                else 
                {
                   prongs.Add(b);
                }
            }
            //round the ends
            // there are 3 faces. I tried different combinations but only faces 0 and 1 fillet.
            var face1 = prongs[0].Faces[0];
            var face2 = prongs[0].Faces[1];
            
            //what does the control point do and how does it work?
            var controlPoint = new Point2d(filletPoint.X,filletPoint.Z);

            //fillet the surface
            Brep[] filletSurface = RG.Brep.CreateFilletSurface(face1, controlPoint, face2, controlPoint, this.prongDiameter / 4.0, true, 0.1);
            
            //split the faces
            Brep brep1 = filletSurface[0];
            Brep brep2 = prongs[0];
            Brep[] split1 = brep1.Split(brep2, 0.1 );
            Brep[] split2 = brep2.Split(brep1, 0.1);
            
            //join the breps
            List<Brep> brepsToJoin = new List<Brep>();
            brepsToJoin.AddRange(split1);
            brepsToJoin.AddRange(split2);
            Brep[] joinedBreps = Brep.JoinBreps(brepsToJoin, 0.01);
            foreach(Brep b in joinedBreps)
            {
                this.prongs.Add(b);
            }
            //to do: polar array.

        }
    }

filleting-prongs.gh (94.4 KB)