protected override void Algorithm(ref Cl3DModel p_Model)
        {
            string name = p_Model.ModelFileFolder + p_Model.ModelFileName + m_sFilePostFix+ ".crr";

            List<KeyValuePair<string,Cl3DModel.Cl3DModelPointIterator>> specPoints = p_Model.GetAllSpecificPoints();
            using (TextWriter tw = new StreamWriter(name, false))
            {
                tw.WriteLine("@----------------------------------------");
                tw.WriteLine("@      Przemyslaw Szeptycki LIRIS 2008");
                tw.WriteLine("@ Automatic Model Specific Points Coordinates");
                tw.WriteLine("@   Model name: " + p_Model.ModelFileName);
                tw.WriteLine("@----------------------------------------");
                foreach(KeyValuePair<string,Cl3DModel.Cl3DModelPointIterator> point in specPoints)
                {
                    string line = point.Key + " X: " + point.Value.X.ToString(System.Globalization.CultureInfo.InvariantCulture) + " Y: " + point.Value.Y.ToString(System.Globalization.CultureInfo.InvariantCulture) + " Z: " + point.Value.Z.ToString(System.Globalization.CultureInfo.InvariantCulture);
                    tw.WriteLine(line);
                }
                tw.Close();
            }
        }
        protected override void Algorithm(ref Cl3DModel p_Model)
        {
            string name = p_Model.ModelFileFolder + p_Model.ModelFileName + m_sFilePostFix+ ".cor";

            List<KeyValuePair<string,Cl3DModel.Cl3DModelPointIterator>> specPoints = p_Model.GetAllSpecificPoints();
            using (TextWriter tw = new StreamWriter(name, false))
            {
                tw.WriteLine("@----------------------------------------");
                tw.WriteLine("@           3DModelsPreprocessing");
                tw.WriteLine("@      Przemyslaw Szeptycki LIRIS 2008");
                tw.WriteLine("@ Manual landmarks fo:");
                tw.WriteLine("@   Model name: " + p_Model.ModelFileName);
                tw.WriteLine("@----------------------------------------");
                tw.WriteLine("@ Model landmarked by: 3DModelsPreprocessing_application");
                tw.WriteLine("@ File Version 1.1 generated: " + DateTime.Now.ToString());

                foreach(KeyValuePair<string,Cl3DModel.Cl3DModelPointIterator> point in specPoints)
                {
                    string line = point.Key;

                    line += " X: " + point.Value.X.ToString(System.Globalization.CultureInfo.InvariantCulture) + " Y: " + point.Value.Y.ToString(System.Globalization.CultureInfo.InvariantCulture) + " Z: " + point.Value.Z.ToString(System.Globalization.CultureInfo.InvariantCulture);
                    tw.WriteLine(line);
                }
                tw.Close();
            }
        }
        protected override void Algorithm(ref Cl3DModel p_Model)
        {
            string name = p_Model.ModelFileFolder + p_Model.ModelFileName + m_sFilePostFix;

            if (m_bBinaryMode)
            {
                p_Model.SaveModel(name);
            }
            else
            {
                name += ".model";
                Cl3DModel.Cl3DModelPointIterator iter = p_Model.GetIterator();
                if (!iter.IsValid())
                    throw new Exception("Iterator in the model is not valid");

                using (TextWriter tw = new StreamWriter(name, false))
                {
                    tw.WriteLine("@----------------------------------------");
                    tw.WriteLine("@     Przemyslaw Szeptycki LIRIS 2008");
                    tw.WriteLine("@                Face model");
                    tw.WriteLine("@  Model name: " + p_Model.ModelFileName);
                    tw.WriteLine("@----------------------------------------");
                    tw.WriteLine("@ PointID X Y Z (TextureX TextureY) (Neighbors PointID)");
                    do
                    {
                        string line = iter.PointID.ToString(System.Globalization.CultureInfo.InvariantCulture) + " " + iter.X.ToString(System.Globalization.CultureInfo.InvariantCulture) + " " + iter.Y.ToString(System.Globalization.CultureInfo.InvariantCulture) + " " + iter.Z.ToString(System.Globalization.CultureInfo.InvariantCulture) + " ( " + iter.RangeImageX.ToString(System.Globalization.CultureInfo.InvariantCulture) + " " + iter.RangeImageY.ToString(System.Globalization.CultureInfo.InvariantCulture) + " ) ( ";
                        List<Cl3DModel.Cl3DModelPointIterator> neighbors = iter.GetListOfNeighbors();
                        foreach (Cl3DModel.Cl3DModelPointIterator neighbor in neighbors)
                            line += neighbor.PointID.ToString(System.Globalization.CultureInfo.InvariantCulture) + " ";
                        line += ")";

                        tw.WriteLine(line);

                    } while (iter.MoveToNext());

                    int nop = p_Model.GetAllSpecificPoints().Count;
                    if(nop != 0)
                    {
                        tw.WriteLine("Landmark points (ptID): "+nop.ToString());
                        foreach (KeyValuePair<string, Cl3DModel.Cl3DModelPointIterator> specificPoint in p_Model.GetAllSpecificPoints())
                        {
                            tw.WriteLine(specificPoint.Key + " " + specificPoint.Value.PointID.ToString());
                        }
                    }

                    tw.Close();
                }
            }
        }
        protected override void Algorithm(ref Cl3DModel p_Model)
        {
            string name = p_Model.ModelFileFolder + p_Model.ModelFileName + m_sFilePostFix;

            if (!OnlyIDs)
            {
                name += ".pts";
                List<KeyValuePair<string, Cl3DModel.Cl3DModelPointIterator>> specPoints = p_Model.GetAllSpecificPoints();
                using (TextWriter tw = new StreamWriter(name, false))
                {
                    tw.WriteLine("@----------------------------------------");
                    tw.WriteLine("@      Przemyslaw Szeptycki LIRIS 2009");
                    tw.WriteLine("@           [email protected]");
                    tw.WriteLine("@     Model Specific Points Coordinates");
                    tw.WriteLine("@    ID = ID + 1 the same like in M file");
                    tw.WriteLine("@   Model name: " + p_Model.ModelFileName);
                    tw.WriteLine("@----------------------------------------");
                    tw.WriteLine("@ Name Id X Y Z");
                    foreach (KeyValuePair<string, Cl3DModel.Cl3DModelPointIterator> point in specPoints)
                    {
                        uint ID = point.Value.PointID + 1; // in the M  file all IDs starts from 1 and in our case from 0
                        string line = point.Key + " " + ID.ToString(System.Globalization.CultureInfo.InvariantCulture) + " " + point.Value.X.ToString(System.Globalization.CultureInfo.InvariantCulture) + " " + point.Value.Y.ToString(System.Globalization.CultureInfo.InvariantCulture) + " " + point.Value.Z.ToString(System.Globalization.CultureInfo.InvariantCulture);
                        tw.WriteLine(line);
                    }
                    tw.Close();
                }
            }
            else
            {
                List<Cl3DModel.Cl3DModelPointIterator> PointsToSave = new List<Cl3DModel.Cl3DModelPointIterator>();
                PointsToSave.Add(p_Model.GetSpecificPoint(Cl3DModel.eSpecificPoints.NoseTip));
                PointsToSave.Add(p_Model.GetSpecificPoint(Cl3DModel.eSpecificPoints.LeftEyeRightCorner));
                PointsToSave.Add(p_Model.GetSpecificPoint(Cl3DModel.eSpecificPoints.RightEyeLeftCorner));

                string nameID = name + ".ptsID";
                using (TextWriter tw = new StreamWriter(nameID, false))
                {
                    tw.WriteLine(PointsToSave.Count.ToString());
                    foreach (Cl3DModel.Cl3DModelPointIterator point in PointsToSave)
                    {
                        uint ID = point.PointID + 1;
                        tw.WriteLine(ID.ToString());
                    }
                    tw.Close();
                }
            }
        }
        protected override void Algorithm(ref Cl3DModel p_Model)
        {
            Cl3DModel.Cl3DModelPointIterator iter = p_Model.GetIterator();

            List<KeyValuePair<string, Cl3DModel.Cl3DModelPointIterator>> list = p_Model.GetAllSpecificPoints();
            foreach (KeyValuePair<string, Cl3DModel.Cl3DModelPointIterator> point in list)
            {
                List<Cl3DModel.Cl3DModelPointIterator> NeighborhoodList = null;
                ClTools.GetNeighborhoodWithEuclideanDistanceCheckNeighborhood(out NeighborhoodList, point.Value, 2.0f);
                foreach (Cl3DModel.Cl3DModelPointIterator ppoint in NeighborhoodList)
                    ppoint.Color = Color.Red;
            }
        }