public StraightGlulam(Curve curve, GlulamOrientation orientation, GlulamData data) : base() { Data = data.Duplicate(); Orientation = orientation; Centreline = curve.DuplicateCurve(); //Centreline.Domain.MakeIncreasing(); }
/// <summary> /// Join a glulam onto another one. Returns null if join is not possible. /// </summary> /// <param name="glulam"></param> /// <returns></returns> public Glulam Join(Glulam glulam) { Rhino.Geometry.Intersect.CurveIntersections ci; ci = Rhino.Geometry.Intersect.Intersection.CurveCurve(Centreline, glulam.Centreline, Tolerance, OverlapTolerance); if (ci.Count != 1) { return(null); } if (ci[0].IsOverlap) { return(null); } if (Math.Abs(Centreline.TangentAt(ci[0].ParameterA) * glulam.Centreline.TangentAt(ci[0].ParameterB)) < AngleTolerance) { return(null); } Curve[] NewCentreline = Curve.JoinCurves(new Curve[] { Centreline, glulam.Centreline }); if (NewCentreline.Length != 1) { return(null); } GlulamOrientation NewOrientation = Orientation.Duplicate(); NewOrientation.Join(glulam.Orientation); Glulam new_glulam = CreateGlulam(NewCentreline[0], NewOrientation, Data.Duplicate()); new_glulam.Data.Samples = Data.Samples + glulam.Data.Samples; return(new_glulam); }