public NurbsSurface SurfaceToNative(Surface surface) { var points = new DS.Point[] [] { }; var weights = new double[] [] { }; var controlPoints = surface.GetControlPoints(); points = controlPoints.Select(row => row.Select(p => DS.Point.ByCoordinates( ScaleToNative(p.x, p.units), ScaleToNative(p.y, p.units), ScaleToNative(p.z, p.units))).ToArray()) .ToArray(); weights = controlPoints.Select(row => row.Select(p => p.weight).ToArray()).ToArray(); var knotsU = surface.knotsU; knotsU.Insert(0, knotsU[0]); knotsU.Add(knotsU[knotsU.Count - 1]); var knotsV = surface.knotsV; knotsV.Insert(0, knotsV[0]); knotsV.Add(knotsV[knotsV.Count - 1]); var result = DS.NurbsSurface.ByControlPointsWeightsKnots(points, weights, knotsU.ToArray(), surface.knotsV.ToArray(), surface.degreeU, surface.degreeV); return(result); }
/// <summary> /// DS Point to SpecklePoint /// </summary> /// <param name="pt"></param> /// <returns></returns> public Point PointToSpeckle(DS.Point pt, string units = null) { var point = new Point(pt.X, pt.Y, pt.Z, units ?? ModelUnits); CopyProperties(point, pt); return(point); }
/// <summary> /// DS Point to SpecklePoint /// </summary> /// <param name="pt"></param> /// <returns></returns> public Point PointToSpeckle(DS.Point pt) { var point = new Point(pt.X, pt.Y, pt.Z, ModelUnits); CopyProperties(point, pt); return(point); }
/// <summary> /// SpeckleArc to DS Arc /// </summary> /// <param name="a"></param> /// <returns></returns> public DS.Arc ArcToNative(Arc a) { using (DS.Plane basePlane = PlaneToNative(a.plane)) using (DS.Point startPoint = (DS.Point)basePlane.Origin.Translate(basePlane.XAxis, ScaleToNative(a.radius.Value, a.units))) { var arc = DS.Arc.ByCenterPointStartPointSweepAngle( basePlane.Origin, startPoint, a.angleRadians.Value.ToDegrees(), basePlane.Normal ); return(arc.SetDynamoProperties <DS.Arc>(GetDynamicMembersFromBase(a))); } }
/// <summary> /// Array of point coordinates to array of DS Points /// </summary> /// <param name="arr"></param> /// <returns></returns> public DS.Point[] ArrayToPointList(IEnumerable <double> arr, string units = null) { if (arr.Count() % 3 != 0) { throw new SpeckleException("Array malformed: length%3 != 0."); } DS.Point[] points = new DS.Point[arr.Count() / 3]; var asArray = arr.ToArray(); for (int i = 2, k = 0; i < arr.Count(); i += 3) { points[k++] = DS.Point.ByCoordinates(ScaleToNative(asArray[i - 2], units), ScaleToNative(asArray[i - 1], units), ScaleToNative(asArray[i], units)); } return(points); }
public double[] PointToArray(DS.Point pt) { return(new double[] { pt.X, pt.Y, pt.Z }); }