private void RenderNormalConnectLine(RenderManager.CameraInfo cameraInfo) { var pointPair = new MarkupPointPair(SelectPoint, HoverPoint); var color = Tool.Markup.ExistLine(pointPair) ? (Utility.OnlyCtrlIsPressed ? Colors.Yellow : Colors.Red) : Colors.Purple; var lineBezier = new Bezier3() { a = SelectPoint.Position, b = HoverPoint.Position, c = SelectPoint.Position, d = HoverPoint.Position, }; lineBezier.RenderBezier(new OverlayData(cameraInfo) { Color = color }); var normal = SelectPoint.Direction.Turn90(false); var normalBezier = new Bezier3 { a = SelectPoint.Position + SelectPoint.Direction, d = SelectPoint.Position + normal }; normalBezier.b = normalBezier.a + normal / 2; normalBezier.c = normalBezier.d + SelectPoint.Direction / 2; normalBezier.RenderBezier(new OverlayData(cameraInfo) { Color = color, Width = 2f, Cut = true }); }
public static void RenderAngle(this Vector3 position, OverlayData data, Vector3 startDir, Vector3 endDir, float innerRadius, float outterRadius) { var startNormal = startDir.Turn90(true); var endNormal = endDir.Turn90(false); var invert = Vector3.Dot(startNormal, endDir) < 0f; if (invert) { startNormal = -startNormal; endNormal = -endNormal; } var shift = (outterRadius + innerRadius) / 2; var bezier = new Bezier3() { a = position + startDir * shift, d = position + endDir * shift, }; var angle = Mathf.Acos(Mathf.Clamp(startDir.x * endDir.x + startDir.z * endDir.z, -1f, 1f)); float d = Mathf.Tan(angle * 0.5f) * shift * 0.5522848f; bezier.b = bezier.a + startNormal * d; bezier.c = bezier.d + endNormal * d; data.Width = outterRadius - innerRadius; data.Cut = true; bezier.RenderBezier(data); }
private void RenderRegularConnectLine(RenderManager.CameraInfo cameraInfo) { var bezier = new Bezier3() { a = SelectPoint.Position, b = HoverPoint.Enter == SelectPoint.Enter ? HoverPoint.Position - SelectPoint.Position : SelectPoint.Direction, c = HoverPoint.Enter == SelectPoint.Enter ? SelectPoint.Position - HoverPoint.Position : HoverPoint.Direction, d = HoverPoint.Position, }; var pointPair = new MarkupPointPair(SelectPoint, HoverPoint); var color = Tool.Markup.ExistLine(pointPair) ? (Utility.OnlyCtrlIsPressed ? Colors.Yellow : Colors.Red) : Colors.Green; NetSegment.CalculateMiddlePoints(bezier.a, bezier.b, bezier.d, bezier.c, true, true, out bezier.b, out bezier.c); bezier.RenderBezier(new OverlayData(cameraInfo) { Color = color }); }
private void RenderNotConnectLine(RenderManager.CameraInfo cameraInfo) { var bezier = new Bezier3() { a = SelectPoint.Position, b = SelectPoint.Direction, c = SelectPoint.Direction.Turn90(true), d = NodeMarkupTool.Ray.GetRayPosition(Markup.Position.y, out _), }; Line2.Intersect(VectorUtils.XZ(bezier.a), VectorUtils.XZ(bezier.a + bezier.b), VectorUtils.XZ(bezier.d), VectorUtils.XZ(bezier.d + bezier.c), out _, out float v); bezier.c = v >= 0 ? bezier.c : -bezier.c; NetSegment.CalculateMiddlePoints(bezier.a, bezier.b, bezier.d, bezier.c, true, true, out bezier.b, out bezier.c); bezier.RenderBezier(new OverlayData(cameraInfo) { Color = Colors.Hover }); }