public bool ClosestPointOnSurf

            (

            FeatureUpdateContext updateContext,
            [DefaultExpression("baseCS")]                CoordinateSystem cs,
            [Replicatable]                              IPoint point,
            [Replicatable]                              BSplineSurface surf,
            [DefaultValue(0.01)]                        double tol,
            [Out]                                       ref Point CPpoint,
            [Out]                                       ref double Dist,
            [Out]                                       ref DVector3d Normal


            )
        {

            this.LetConstituentFeaturesBeDirectlyIndexible();
            this.DeleteConstituentFeatures(updateContext);

            Point2d tempPt;

            DPoint3d dp = CerverFunctions.closestPointOnSurf(point.DPoint3d, surf, tol, out Dist, out tempPt, out Normal);

            Point outPt = new Point(this);
            outPt.FromDPoint3d(updateContext, cs, dp);
            outPt.SetSuccess(true);
            AddConstituentFeature(outPt);
            
            CPpoint = outPt;

            return true;
        } 
        public bool MeshConnectedVerticies

            (
            FeatureUpdateContext updateContext,
            [DefaultExpression("baseCS")]                CoordinateSystem cs,
                                                                     Mesh mesh,
            [Replicatable]                                         IPoint SearchPoint,
            [DefaultValue(false)]                                    bool generatePoints,
            [Out]                                       ref int[] ConnectedVtxID,
            [Out]                                       ref Point[] ConnectedVtx,
            [Out]                                       ref DPoint3d[] DConnectedVtx

            )
        {

            this.LetConstituentFeaturesBeDirectlyIndexible();
            this.DeleteConstituentFeatures(updateContext);

            //System.Diagnostics.Stopwatch stp = new Stopwatch();

           // stp.Start();
            DPoint3d[] cntVtx = mesh.ConnectedVtx(SearchPoint.DPoint3d, out ConnectedVtxID);
            DConnectedVtx = cntVtx;
           // Feature.Print("area 1 " + stp.ElapsedMilliseconds.ToString());
           // stp.Reset();

            if (generatePoints)
            {
                List<Point> vtx = new List<Point>(cntVtx.Length);

                foreach (var v in cntVtx)
                {
                    Point p = new Point(this);
                    p.FromDPoint3d(updateContext, cs, v);
                    p.SetSuccess(true);
                    vtx.Add(p);

                }
                this.AddReplicatedChildFeatures(ConnectedVtx);
                ConnectedVtx = vtx.ToArray();
            }
           // Feature.Print("area 2 " + stp.ElapsedMilliseconds.ToString());
           // stp.Stop();

            return true;
        }