/// <summary> /// Split glulam into two at parameter t. /// </summary> /// <param name="t">Curve parameter to split glulam at.</param> /// <returns>List of new glulams.</returns> public List <Glulam> Split(double t) { if (!Centreline.Domain.IncludesParameter(t)) { return(null); } double percentage = (t - Centreline.Domain.Min) / (Centreline.Domain.Max - Centreline.Domain.Min); Plane split_plane = GetPlane(t); Curve[] split_curves = Centreline.Split(t); if (split_curves == null || split_curves.Length != 2) { return(null); } GlulamData Data1 = Data.Duplicate(); Data1.Samples = (int)(Data.Samples * percentage); GlulamOrientation[] SplitOrientations = Orientation.Split(new double[] { t }); Glulam Blank1 = CreateGlulam(split_curves[0], SplitOrientations[0], Data1); GlulamData Data2 = Data.Duplicate(); Data2.Samples = (int)(Data.Samples * (1 - percentage)); Glulam Blank2 = CreateGlulam(split_curves[1], SplitOrientations[1], Data2); List <Glulam> blanks = new List <Glulam>() { Blank1, Blank2 }; return(blanks); }
/// <summary> /// Split glulam into two at parameter t, with an overlap of a certain length. /// </summary> /// <param name="t">Curve parameter to split glulam at.</param> /// <param name="overlap">Amount of overlap.</param> /// <returns>List of new glulams.</returns> public List <Glulam> Split(double t, double overlap) { if (overlap < Rhino.RhinoDoc.ActiveDoc.ModelAbsoluteTolerance) { return(Split(t)); } if (!Centreline.Domain.IncludesParameter(t)) { return(null); } double split_length = Centreline.GetLength(new Interval(Centreline.Domain.Min, t)); double t1; double t2; if (!Centreline.LengthParameter(split_length + (overlap / 2), out t1)) { return(null); } if (!Centreline.LengthParameter(split_length - (overlap / 2), out t2)) { return(null); } if (!Centreline.Domain.IncludesParameter(t1) || !Centreline.Domain.IncludesParameter(t2)) { return(null); } Curve[] split_curves; Plane split_plane; double percentage; Glulam Blank1, Blank2; GlulamData Data1, Data2; { percentage = (t1 - Centreline.Domain.Min) / (Centreline.Domain.Max - Centreline.Domain.Min); split_plane = GetPlane(t1); split_curves = Centreline.Split(t1); if (split_curves == null || split_curves.Length != 2) { return(null); } var SplitOrientation = Orientation.Split(new double[] { t1 }); Data1 = Data.Duplicate(); Data1.Samples = Math.Max(2, (int)(Data.Samples * percentage)); Blank1 = CreateGlulam(split_curves[0], SplitOrientation[0], Data1); } { percentage = (t2 - Centreline.Domain.Min) / (Centreline.Domain.Max - Centreline.Domain.Min); split_plane = GetPlane(t2); split_curves = Centreline.Split(t2); if (split_curves == null || split_curves.Length != 2) { return(null); } var SplitOrientation = Orientation.Split(new double[] { t2 }); Data2 = Data.Duplicate(); Data2.Samples = Math.Max(2, (int)(Data.Samples * (1 - percentage))); Blank2 = CreateGlulam(split_curves[1], SplitOrientation[1], Data2); } List <Glulam> blanks = new List <Glulam>() { Blank1, Blank2 }; return(blanks); }