public override Brep GetBoundingBrep(double offset = 0.0) { /* * int N = Math.Max(Data.Samples, 6); * * GenerateCrossSectionPlanes(N, out Plane[] frames, out double[] parameters, Data.InterpolationType); * * int numCorners = 4; * GenerateCorners(offset); * * List<Point3d>[] crvPts = new List<Point3d>[numCorners]; * for (int i = 0; i < numCorners; ++i) * { * crvPts[i] = new List<Point3d>(); * } * * Transform xform; * Point3d temp; * * for (int i = 0; i < parameters.Length; ++i) * { * //frames[i] = frames[i].FlipAroundYAxis(); * xform = Rhino.Geometry.Transform.PlaneToPlane(Plane.WorldXY, frames[i]); * * for (int j = 0; j < numCorners; ++j) * { * temp = new Point3d(m_section_corners[j]); * temp.Transform(xform); * crvPts[j].Add(temp); * } * } */ var edge_points = GetEdgePoints(offset); int numCorners = m_section_corners.Length; var num_points = edge_points[0].Count; NurbsCurve[] edges = new NurbsCurve[numCorners + 4]; var edge_parameters = new List <double> [numCorners]; double t; for (int i = 0; i < numCorners; ++i) { //edges[i] = NurbsCurve.CreateInterpolatedCurve(edge_points[i], 3, CurveKnotStyle.Chord, Centreline.TangentAtStart, Centreline.TangentAtEnd); edges[i] = NurbsCurve.Create(false, 3, edge_points[i]); edge_parameters[i] = new List <double>(); foreach (Point3d pt in edge_points[i]) { edges[i].ClosestPoint(pt, out t); edge_parameters[i].Add(t); } } edges[numCorners + 0] = new Line(edge_points[3].First(), edge_points[0].First()).ToNurbsCurve(); edges[numCorners + 1] = new Line(edge_points[2].First(), edge_points[1].First()).ToNurbsCurve(); edges[numCorners + 2] = new Line(edge_points[2].Last(), edge_points[1].Last()).ToNurbsCurve(); edges[numCorners + 3] = new Line(edge_points[3].Last(), edge_points[0].Last()).ToNurbsCurve(); Brep[] sides = new Brep[numCorners + 2]; int ii = 0; for (int i = 0; i < numCorners; ++i) { ii = (i + 1).Modulus(numCorners); List <Point2d> rulings = new List <Point2d>(); for (int j = 0; j < num_points; ++j) { rulings.Add(new Point2d(edge_parameters[i][j], edge_parameters[ii][j])); } sides[i] = Brep.CreateDevelopableLoft(edges[i], edges[ii], rulings).First(); //sides[i] = Brep.CreateFromLoft( // new Curve[] { edges[i], edges[ii] }, // Point3d.Unset, Point3d.Unset, LoftType.Normal, false)[0]; } // Make ends sides[numCorners + 0] = Brep.CreateFromLoft( new Curve[] { edges[numCorners + 0], edges[numCorners + 1] }, Point3d.Unset, Point3d.Unset, LoftType.Straight, false)[0]; sides[numCorners + 1] = Brep.CreateFromLoft( new Curve[] { edges[numCorners + 2], edges[numCorners + 3] }, Point3d.Unset, Point3d.Unset, LoftType.Straight, false)[0]; // Join Breps Brep brep = Brep.JoinBreps( sides, Tolerance )[0]; //brep.UserDictionary.Set("glulam", GetArchivableDictionary()); return(brep); }