public static List <List <List <Curve> > > GenerateCroSecs(Curve baseline, List <Curve> startCroSec, List <Curve> endCroSec, int nCroSecsInter, double tol, double ang_tol, out List <Curve> segments)
        {
            var loft_crvs = new List <List <List <Curve> > >(); // this includes also the original sections: Number segments - Number Cross Sections - NUmber stations :D
            var t_list    = new List <double>();

            //var segments = new List<Curve>();
            segments = new List <Curve>();
            // nCroSecsInter = 2;
            //nCroSecsInter = 2;

            if (baseline.Degree <= 1)
            {
                if (baseline.SpanCount > 1)
                {
                    segments = baseline.DuplicateSegments().ToList();
                }
                else
                {
                    segments.Add(baseline);
                }
                t_list.Add(baseline.Domain.T0);
                t_list.Add(baseline.Domain.T1);
                var normalized_parameter = 0.0;
                foreach (var line in segments)
                {
                    var curves_in_segment = new List <List <Curve> >();
                    var domain            = line.Domain;
                    var crosecs_original  = nCroSecsInter;
                    //var length1 = line.GetLength();
                    //var length2 = baseline.GetLength();
                    //var crosecs2 = (int)(nCroSecsInter * line.GetLength() / baseline.GetLength());
                    nCroSecsInter = Math.Max((int)(nCroSecsInter * line.GetLength() / baseline.GetLength()), 2);
                    for (int i = 0; i < startCroSec.Count; i++)
                    {
                        var crvs = new List <Curve>();
                        for (int j = 0; j < nCroSecsInter; j++)
                        {
                            //normalized_parameter += (double)j / (double)(nCroSecsInter-1) * (domain.T1 - domain.T0) + domain.T0;
                            normalized_parameter = (domain.T0 + (double)j / (double)(nCroSecsInter - 1) * (domain.T1 - domain.T0)) / (t_list[1] - t_list[0]);
                            crvs.Add(Component_ExtrudeMembers.CreateTweenCurve(startCroSec[i], endCroSec[i], normalized_parameter, tol, ang_tol));
                        }
                        //curves_in_segment.Add(crvs);
                        //var crvs = new List<Curve>();
                        //crvs.Add(startCroSec[i]);
                        //crvs.AddRange();
                        //crvs.Add(endCroSec[i]);
                        curves_in_segment.Add(crvs);
                    }
                    loft_crvs.Add(curves_in_segment);
                    nCroSecsInter = crosecs_original; // So it works for next segment as well
                }
            }
            else
            {
                segments.Add(baseline);
                var curves_in_segment = new List <List <Curve> >();
                for (int i = 0; i < startCroSec.Count; i++)
                {
                    curves_in_segment.Add(Component_ExtrudeMembers.CreateTweenCurves(startCroSec[i], endCroSec[i], nCroSecsInter, tol, ang_tol).ToList());
                }
                loft_crvs.Add(curves_in_segment);
            }
            return(loft_crvs);
        }