public static bool CalculateDescriptorInSpecificValue(Cl3DModel.Cl3DModelPointIterator p_Point, ref string descriptor)
        {
            descriptor +=   p_Point.X.ToString(System.Globalization.CultureInfo.InvariantCulture) + " " +
                            p_Point.Y.ToString(System.Globalization.CultureInfo.InvariantCulture) + " " +
                            p_Point.Z.ToString(System.Globalization.CultureInfo.InvariantCulture) + " " +
                            p_Point.GetSpecificValue(Cl3DModel.Cl3DModelPointIterator.eSpecificValues.Mean_25).ToString(System.Globalization.CultureInfo.InvariantCulture) + " " +
                            p_Point.GetSpecificValue(Cl3DModel.Cl3DModelPointIterator.eSpecificValues.Gaussian_25).ToString(System.Globalization.CultureInfo.InvariantCulture) + " " +
                            p_Point.GetSpecificValue(Cl3DModel.Cl3DModelPointIterator.eSpecificValues.ShapeIndex_25).ToString(System.Globalization.CultureInfo.InvariantCulture) + " " +
                            p_Point.GetSpecificValue(Cl3DModel.Cl3DModelPointIterator.eSpecificValues.CurvednessIndex_25).ToString(System.Globalization.CultureInfo.InvariantCulture) + " ";

            bool ret = true;
            List<Cl3DModel.Cl3DModelPointIterator> neighborhood = null;
            for (int i = 5; i <= 10; i += 5)
            {
                ClTools.GetNeighborhoodWithGeodesicDistance(out neighborhood, p_Point, i);
                double Mean = 0;
                double Gaussian = 0;
                double SI = 0;
                double Curvadness = 0;
                int count = 0;
                double[] Histogram = new double[10];
                foreach (Cl3DModel.Cl3DModelPointIterator point in neighborhood)
                {
                    if (!point.GetFlag(0))
                    {
                        try
                        {
                            double SITemp = point.GetSpecificValue(Cl3DModel.Cl3DModelPointIterator.eSpecificValues.ShapeIndex_25);
                            Histogram[(int)(SITemp * 9)]++;
                            Mean += point.GetSpecificValue(Cl3DModel.Cl3DModelPointIterator.eSpecificValues.Mean_25);
                            Gaussian += point.GetSpecificValue(Cl3DModel.Cl3DModelPointIterator.eSpecificValues.Gaussian_25);
                            SI += SITemp;
                            Curvadness += point.GetSpecificValue(Cl3DModel.Cl3DModelPointIterator.eSpecificValues.CurvednessIndex_25);
                            count++;
                        }
                        catch (Exception)
                        { }
                        point.SetFlag(0, true);
                       // point.Color = ClTools.GetColorRGB(((float)i) / 25, 1f);
                    }
                }
                if (count == 0)
                {
                    ret = false;
                }
                else
                {
                    descriptor += (Mean /= count).ToString(System.Globalization.CultureInfo.InvariantCulture) + " ";
                    descriptor += (Gaussian /= count).ToString(System.Globalization.CultureInfo.InvariantCulture) + " ";
                    descriptor += (SI /= count).ToString(System.Globalization.CultureInfo.InvariantCulture) + " ";
                    descriptor += (Curvadness /= count).ToString(System.Globalization.CultureInfo.InvariantCulture) + " ";
                    for (int j = 0; j < 10; j++)
                    {
                        descriptor += (Histogram[j] /= count).ToString(System.Globalization.CultureInfo.InvariantCulture) + " ";
                    }

                }
            }
            foreach (Cl3DModel.Cl3DModelPointIterator point in neighborhood)
            {
                point.SetFlag(0, false);
            }

            return ret;
        }