private LW_Canvas CreateControlPointLine(int pointIndex, int handleIndex) { LW_Point2D point = points[pointIndex]; Vector3 start = (vectorCanvas.transform.localToWorldMatrix * vectorCanvas.scaler).MultiplyPoint3x4(point.position); Vector3 end = start; if (handleIndex < 0) { end += (vectorCanvas.scaler).MultiplyVector(point.handleIn); } else if (handleIndex > 0) { end += (vectorCanvas.scaler).MultiplyVector(point.handleOut); } LW_Canvas canvas = LW_Canvas.Create(vectorCanvas.gameObject, "ControlLine"); LW_Line line = LW_Line.Create(start, end); LW_Stroke stroke = LW_Stroke.Create(Color.red, 2f); line.styles.Add(stroke); canvas.graphic.Add(line); canvas.featureMode = FeatureMode.Advanced; canvas.joinsAndCapsMode = JoinsAndCapsMode.Shader; canvas.gradientsMode = GradientsMode.Shader; canvas.antiAliasingMode = AntiAliasingMode.On; canvas.transform.position = Vector3.zero; //canvas.SetViewBoxToBounds(); canvas.SetRectSizeToViewBox(); //canvas.transform.position = start; return(canvas); }
public void OnDragPoint(int pointIndex, int handleIndex, Vector3 newWorldPosition) { LW_Point2D point = points[pointIndex]; if (handleIndex < 0) { point.handleIn = ((Vector2)(vectorCanvas.transform.localToWorldMatrix * vectorCanvas.scaler).inverse.MultiplyPoint3x4(newWorldPosition)) - point.position; } else if (handleIndex > 0) { point.handleOut = ((Vector2)(vectorCanvas.transform.localToWorldMatrix * vectorCanvas.scaler).inverse.MultiplyPoint3x4(newWorldPosition)) - point.position; } else { point.position = (vectorCanvas.transform.localToWorldMatrix * vectorCanvas.scaler).inverse.MultiplyPoint3x4(newWorldPosition); } points[pointIndex] = point; ControlPoint controlPoint = controlPoints[pointIndex]; Vector3 position = (vectorCanvas.transform.localToWorldMatrix * vectorCanvas.scaler).MultiplyPoint3x4(point.position); if (point.hasHandleIn) { Vector3 handleInPos = position + (vectorCanvas.transform.localToWorldMatrix * vectorCanvas.scaler).MultiplyVector(point.handleIn); //Debug.Log("HandleInPos: " + handleInPos + " newWorldPos: " + newWorldPosition); if (controlPoint.handleInDot != null) { controlPoint.handleInDot.transform.position = handleInPos; } if (controlPoint.handleInLine != null) { LW_Line line = controlPoint.handleInLine.graphic[0] as LW_Line; line.Set(position, handleInPos); } } if (point.hasHandleOut) { Vector3 handleOutPos = position + (vectorCanvas.transform.localToWorldMatrix * vectorCanvas.scaler).MultiplyVector(point.handleOut); if (controlPoint.handleOutDot != null) { controlPoint.handleOutDot.transform.position = handleOutPos; } if (controlPoint.handleOutLine != null) { LW_Line line = controlPoint.handleOutLine.graphic[0] as LW_Line; line.Set(position, handleOutPos); } } if (controlPoint.positionDot != null) { controlPoint.positionDot.transform.position = position; } path.points = points; }