public void Interpolate(List <Vector2> segmentPoints, float curvatureScale) { ControlPoints.Clear(); if (segmentPoints.Count == 0) { segmentPoints.Add(Vector2.zero); } if (segmentPoints.Count == 1) { segmentPoints.Add(segmentPoints[0]); } Vector3 p0; Vector3 p1; Vector3 p2; Vector3 q0; Vector3 q1; Vector3 tangent; for (int i = 0; i < segmentPoints.Count; i++) { if (i == 0) { p1 = segmentPoints[i]; p2 = segmentPoints[i + 1]; tangent = (p2 - p1); q1 = p1 + curvatureScale * tangent; ControlPoints.Add(p1); ControlPoints.Add(q1); } else if (i == segmentPoints.Count - 1) { p0 = segmentPoints[i - 1]; p1 = segmentPoints[i]; tangent = (p1 - p0); q0 = p1 - curvatureScale * tangent; ControlPoints.Add(q0); ControlPoints.Add(p1); } else { p0 = segmentPoints[i - 1]; p1 = segmentPoints[i]; p2 = segmentPoints[i + 1]; tangent = (p2 - p0).normalized; q0 = p1 - curvatureScale * tangent * (p1 - p0).magnitude; q1 = p1 + curvatureScale * tangent * (p2 - p1).magnitude; ControlPoints.Add(q0); ControlPoints.Add(p1); ControlPoints.Add(q1); } } CurveCount = (ControlPoints.Count - 1) / 3; }
private void LoadButton_Click(object sender, EventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "XML file | *.xml"; if (dialog.ShowDialog() == DialogResult.OK) { var serializer = new XmlSerializer(typeof(List <Point>)); using (var stream = File.OpenRead(dialog.FileName)) { var points = (List <Point>)(serializer.Deserialize(stream)); ControlPoints.Clear(); foreach (Point p in points) { ControlPoints.Add(new Vertex(p.X, p.Y)); } Start = ControlPoints[0]; End = ControlPoints[ControlPoints.Count - 1]; Start.Size = 11; End.Size = 11; Start.Color = Color.DarkRed; End.Color = Color.DarkRed; RefreshCanvas(); } } }
public void FromX(XElement xe) { Closed = bool.Parse(xe.Attribute("Closed").Value); Degree = 3; ControlPoints.Clear(); foreach (var pt in xe.Element("ControlPoints").Elements()) { ControlPoints.Add(XParser.Parse <Point2D>(pt)); } Knots.FromX(xe.Element("Knots")); }
/// <summary> /// Places the shape into the editing mode where the user can adjust the individual data points /// that define the shape. /// </summary> public override void StartEditing() { base.StartEditing(); // Add the required control points ControlPoints.Clear(); for (int n = 0; n < Points.Count; ++n) { AddHandlesForPoint(n, Points[n]); } }
/// <summary> /// Re-creates the control points of the scene view and references their /// drag point data. /// </summary> private void RebuildControlPoints() { ControlPoints.Clear(); for (var i = 0; i < DragPointEditable.GetDragPoints().Length; ++i) { var cp = new ControlPoint( DragPointEditable.GetDragPoints()[i], GUIUtility.GetControlID(FocusType.Passive), i, DragPointEditable.GetDragPoints().Length >= 2 ? (float)i / (DragPointEditable.GetDragPoints().Length - 1) : 0.0f ); ControlPoints.Add(cp); } CurveTravellerControlId = GUIUtility.GetControlID(FocusType.Passive); }
/// <summary> /// Places the shape into the editing mode where the user can adjust the individual data points /// that define the shape. /// </summary> public override void StartEditing() { base.StartEditing(); // Add the required control points ControlPoints.Clear(); for (int n = 0; n < Points.Count; ++n) { var point = Points[n]; var handle = new KimonoHandle(point.X - KimonoHandle.DrawOffset, point.Y - KimonoHandle.DrawOffset); handle.Index = n; handle.Moved += (pt) => { // Move attached point Points[handle.Index] = pt; }; ControlPoints.Add(handle); } }
/*! \cond UNITY */ void OnDestroy() { bool realDestroy = true; #if UNITY_EDITOR if (EditorApplication.isPlayingOrWillChangePlaymode && !EditorApplication.isPlaying) { realDestroy = false; } #endif if (realDestroy) { foreach (var cp in ControlPoints) { cp.Connection = null; cp.Disconnect(); } ControlPoints.Clear(); } }
private void GeneratePoints(object sender, EventArgs e) { int count = (int)PointCounter.Value; float hx = (End.X - Start.X) / (float)(count - 1); float hy = (End.Y - Start.Y) / (float)(count - 1); float X = Start.X; float Y = Start.Y; ControlPoints.Clear(); ControlPoints.Add(Start); for (int i = 1; i < count - 1; i++) { X += hx; Y += hy; ControlPoints.Add(new Vertex((int)X, (int)Y)); } ControlPoints.Add(End); CalculateBezier(); RefreshCanvas(); }
/// <summary> /// Re-creates the control points of the scene view and references their /// drag point data. /// </summary> private void RebuildControlPoints() { ControlPoints.Clear(); var dragPoints = DragPointInspector.DragPoints; for (var i = 0; i < dragPoints.Length; ++i) { var cp = new ControlPoint( dragPoints[i], GUIUtility.GetControlID(FocusType.Passive), i, dragPoints.Length > 1 ? (float)i / (dragPoints.Length - 1) : 0.0f ); ControlPoints.Add(cp); } CurveTravellerControlId = GUIUtility.GetControlID(FocusType.Passive); // persist prefab changes EditorUtility.SetDirty(MainComponent.gameObject); PrefabUtility.RecordPrefabInstancePropertyModifications(MainComponent as Object); }
/// <summary> /// Ends the editing mode. /// </summary> public virtual void EndEditing() { // Exit the editing state ControlPoints.Clear(); Select(); }
/// <summary> /// Clears the control points. /// </summary> public void Clear() { ControlPoints.Clear(); }
public void Clear() { ControlPoints.Clear(); BezierPoints = null; }
public void SetPatternType(int size, Size count, int[] xList, bool keepCorners) { _patternSize = size; _patternCount = count; var eckenVorher = ControlPoints.Where(c => c.ControlPointType == ControlPointType.IsEcke).ToArray(); ControlPoints.Clear(); BoundingControlPoints.Clear(); Enumerable.Range(0, count.Width * count.Height).ToList().ForEach(p => ControlPoints.Add(new ControlPoint())); var dy = _resolution.Height / (count.Height - 1); var y = 0; for (var i = 0; i < ControlPoints.Count; i++) { if (i > 0 && i % count.Width == 0) { y += dy; if (y >= _resolution.Height) { y = _resolution.Height - 1; } } ControlPoints[i].Y = ControlPoints[i].V = y; } for (var iy = 0; iy < count.Height; iy++) { for (var ix = 0; ix < count.Width; ix++) { var index = iy * count.Width + ix; ControlPoints[index].X = ControlPoints[index].U = xList[ix]; } } BoundingControlPoints.AddRange(ControlPoints.Take(count.Width)); for (var iy = 1; iy < count.Height; iy++) { BoundingControlPoints.Add(ControlPoints[iy * count.Width + (count.Width - 1)]); } for (var ix = 1; ix < count.Width - 1; ix++) { BoundingControlPoints.Add(ControlPoints[count.Height * count.Width - ix - 1]); } for (var iy = count.Height - 1; iy > 0; iy--) { BoundingControlPoints.Add(ControlPoints[iy * count.Width]); } ControlPoints[0].ControlPointType = ControlPointType.IsEcke; ControlPoints[count.Width - 1].ControlPointType = ControlPointType.IsEcke; ControlPoints[count.Width * (count.Height - 1)].ControlPointType = ControlPointType.IsEcke; ControlPoints[count.Width * count.Height - 1].ControlPointType = ControlPointType.IsEcke; foreach (var cp in BlacklevelControlPoints) { cp.X = cp.U; cp.Y = cp.V; } if (keepCorners && eckenVorher.Any()) { var ecken = ControlPoints.Where(c => c.ControlPointType == ControlPointType.IsEcke).ToArray(); for (var i = 0; i < eckenVorher.Length; i++) { ecken[i].X = eckenVorher[i].X; ecken[i].Y = eckenVorher[i].Y; } } Interpolate(ControlPoints); MakeTriangleStrip(); DetermineControlPointDirections(); }