private static Vector3 CalcAdvancedCenterPrim(this ObjectPart.PrimitiveShape.Decoded shape, double twistBegin, double twistEnd, double cut) { double twist; double angle = 0.0.Lerp(shape.Revolutions * 2 * Math.PI, cut); var taper = new Vector3(); double radiusOffset; twist = twistBegin.Lerp(twistEnd, cut); #region taper taper.X = shape.Taper.X < 0f ? 1.0.Lerp(1 + shape.Taper.X, 1f - cut) : 1.0.Lerp(1 - shape.Taper.X, cut); taper.Y = shape.Taper.Y < 0f ? 1.0.Lerp(1 + shape.Taper.Y, 1f - cut) : 1.0.Lerp(1 - shape.Taper.Y, cut); #endregion #region radius offset radiusOffset = shape.RadiusOffset > 0f ? 1.0.Lerp(1 - shape.RadiusOffset, 1f - cut) : 1.0.Lerp(1 + shape.RadiusOffset, cut); #endregion /* generate extrusions */ return(shape.CalcAdvVertex(Vector3.Zero, angle, twist, cut, taper, radiusOffset)); }
private static List <Vector3> ExtrudeAdvanced(this ProfileDetails path, ObjectPart.PrimitiveShape.Decoded shape, double twistBegin, double twistEnd, double cut) { var extrusionPath = new List <Vector3>(); double twist; double angle = 0.0.Lerp(shape.Revolutions * 2 * Math.PI, cut); var taper = new Vector3(); double radiusOffset; twist = twistBegin.Lerp(twistEnd, cut); #region taper taper.X = shape.Taper.X < 0f ? 1.0.Lerp(1 + shape.Taper.X, 1f - cut) : 1.0.Lerp(1 - shape.Taper.X, cut); taper.Y = shape.Taper.Y < 0f ? 1.0.Lerp(1 + shape.Taper.Y, 1f - cut) : 1.0.Lerp(1 - shape.Taper.Y, cut); #endregion #region radius offset radiusOffset = shape.RadiusOffset > 0f ? 1.0.Lerp(1 - shape.RadiusOffset, 1f - cut) : 1.0.Lerp(1 + shape.RadiusOffset, cut); #endregion /* generate extrusions */ foreach (var vertex in path.Vertices) { extrusionPath.Add(shape.CalcAdvVertex(vertex, angle, twist, cut, taper, radiusOffset)); } return(extrusionPath); }