public LinearSegment(Vector2 p0, Vector2 p1, EdgeColor edgeColor = EdgeColor.WHITE) : base(edgeColor) { p = new Vector2[2]; p[0] = p0; p[1] = p1; }
public override void AddItem(string result) { if (!EditMode && bool.Parse(result)) { if (!String.IsNullOrEmpty(GameLocation)) { ContextMenuMap.Add(new ContextMenuItem("Open Directory", Path.GetDirectoryName(GameLocation))); } var game = new VideoGame(Title, Path.GetFileName(ImageLocation), EdgeColor.ToString(), MiddleColor.ToString(), HighlightColor.ToString(), GameLocation, TargetParameters, true); game.ContextMenuMap = this.ContextMenuMap; OnItemAdded?.Invoke(this, new DialogRoutedEventArgs() { Object = game }); } else { OnItemAdded?.Invoke(this, new DialogRoutedEventArgs() { Object = null }); } }
public CubicSegment(Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3, EdgeColor color) : base(color) { this.p0 = p0; this.p1 = p1; this.p2 = p2; this.p3 = p3; }
public CubicSegment(Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3, EdgeColor edgeColor = EdgeColor.WHITE) : base(edgeColor) { _p0 = p0; _p1 = p1; _p2 = p2; _p3 = p3; }
public override void OnInspectorGUI() { m_object.Update(); DrawDefaultInspector(); EdgeColor _2dxScript = (EdgeColor)target; //Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D; //if (icon) //{ // Rect r; // float ih = icon.height; // float iw = icon.width; // float result = ih / iw; // float w = Screen.width; // result = result * w; // r = GUILayoutUtility.GetRect(ih, result); // EditorGUI.DrawTextureTransparent(r, icon); //} EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call")); if (_2dxScript.ForceMaterial == null) { _2dxScript.ActiveChange = true; } else { if (GUILayout.Button("Remove Shared Material")) { _2dxScript.ForceMaterial = null; _2dxScript.ShaderChange = 1; _2dxScript.ActiveChange = true; _2dxScript.CallUpdate(); } EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property")); } if (_2dxScript.ActiveChange) { EditorGUILayout.BeginVertical("Box"); Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D; EditorGUILayout.PropertyField(m_object.FindProperty("_Color"), new GUIContent("Edge Color", icone, "Change the Edge Color")); EditorGUILayout.BeginVertical("Box"); icone = Resources.Load("2dxfx-icon-fade") as Texture2D; EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing")); EditorGUILayout.EndVertical(); EditorGUILayout.EndVertical(); } m_object.ApplyModifiedProperties(); }
/// <summary> /// ハッシュ値を計算します。 /// </summary> public override int GetHashCode() { return( Font.GetHashCode() ^ Color.GetHashCode() ^ EdgeColor.GetHashCode() ^ EdgeLength.GetHashCode() ^ IsStretchSize.GetHashCode()); }
public QuadraticSegment(EdgeColor edgeColor, params Vector2[] p) : base(edgeColor) { if (p[1] == p[0] || p[1] == p[2]) { p[1] = 0.5 * (p[0] + p[2]); } _p = p; }
public CubicSegment(Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3, EdgeColor edgeColor = EdgeColor.WHITE) : base(edgeColor) { p = new Vector2[4]; p[0] = p0; p[1] = p1; p[2] = p2; p[3] = p3; }
public JsonValue ToJson(JsonSerializer serializer) { var obj = new JsonObject(); Name.Serialize(obj, serializer, "name"); EdgeColor.Serialize(obj, serializer, "edgeColor"); Pos.Serialize(obj, serializer, "pos"); return(obj); }
protected override IEnumerator ProcessPayload(VisualPayload payload) { payload.VisualData.Bound.name = "Line Graph Bound"; var lineGraph = VisualizerFactory.InstantiateLineGraph(); lineGraph.Initialize(this, payload); AssignStates(lineGraph); var entries = EntryField.GetLastKeyValue(payload.Data) as IEnumerable <MutableObject>; if (entries == null) { throw new Exception("Illegal mutable field here! " + EntryField.AbsoluteKey + " is not an enumerable of mutables!"); } if (!entries.Any()) { yield return(null); yield break; } foreach (var entry in entries) { Vector3 entryPosition = new Vector3( XAxis.GetLastKeyValue(entry), YAxis.GetLastKeyValue(entry), ZAxis.GetLastKeyValue(entry) ); Color pointColor = PointColor.GetLastKeyValue(entry); lineGraph.AddPoint(entryPosition, pointColor); yield return(null); } yield return(null); lineGraph.SetLineData(MainColor.GetLastKeyValue(payload.Data), LineWidth.GetLastKeyValue(payload.Data), ZDepthOffset.GetLastKeyValue(payload.Data), EdgeColor.GetLastKeyValue(payload.Data), EdgeWidth.GetLastKeyValue(payload.Data), PointWidth.GetLastKeyValue(payload.Data), PulseLine.GetLastKeyValue(payload.Data), PulseWidth.GetLastKeyValue(payload.Data), Wipe.GetLastKeyValue(payload.Data), StartTime.GetLastKeyValue(payload.Data), WipeDuration.GetLastKeyValue(payload.Data) ); lineGraph.ApplyPoints(); }
/// <summary> /// ハッシュ値を計算します。 /// </summary> public override int GetHashCode() { return( FontFamilyName.GetHashCode() ^ FontStyle.GetHashCode() ^ Size.GetHashCode() ^ Color.GetHashCode() ^ EdgeColor.GetHashCode() ^ EdgeLength.GetHashCode() ^ IsStretchSize.GetHashCode()); }
public QuadraticSegment(Vector2 p0, Vector2 p1, Vector2 p2, EdgeColor edgeColor = EdgeColor.WHITE) : base(edgeColor) { if (Vector2.IsEq(p1, p0) || Vector2.IsEq(p1, p2)) { p1 = 0.5 * (p0 + p2); } _p0 = p0; _p1 = p1; _p2 = p2; }
public QuadraticSegment(Vector2 p0, Vector2 p1, Vector2 p2, EdgeColor edgeColor = EdgeColor.WHITE) : base(edgeColor) { p = new Vector2[3]; if (Vector2.IsEq(p1, p0) || Vector2.IsEq(p1, p2)) { p1 = 0.5 * (p0 + p2); } p[0] = p0; p[1] = p1; p[2] = p2; }
static void SwitchColor(ref EdgeColor color, ref ulong seed, EdgeColor banned) { EdgeColor combined = color & banned; if (combined == EdgeColor.Red || combined == EdgeColor.Green || combined == EdgeColor.Blue) { color = combined ^ EdgeColor.White; return; } if (color == EdgeColor.Black || color == EdgeColor.White) { color = switchColors[seed % 3]; seed /= 3; return; } int shifted = (int)color << (int)(1 + (seed & 1)); color = (EdgeColor)((shifted | shifted >> 3) & (int)EdgeColor.White); seed >>= 1; }
private static unsafe void SwitchColor(ref EdgeColor color, ref ulong seed, EdgeColor banned = EdgeColor.Black) { var combined = color & banned; if (combined == EdgeColor.Red || combined == EdgeColor.Green || combined == EdgeColor.Blue) { color = combined ^ EdgeColor.White; return; } if (color == EdgeColor.Black || color == EdgeColor.White) { var start = stackalloc[] { EdgeColor.Cyan, EdgeColor.Magenta, EdgeColor.Yellow }; color = start[seed % 3]; seed /= 3; return; } var shifted = (int)color << (int)(1 + (seed & 1)); color = (EdgeColor)((shifted | (shifted >> 3)) & (int)EdgeColor.White); seed >>= 1; }
static void switchColor(ref EdgeColor color, ref ulong seed, EdgeColor banned = EdgeColor.BLACK) { EdgeColor combined = color & banned; if (combined == EdgeColor.RED || combined == EdgeColor.GREEN || combined == EdgeColor.BLUE) { color = combined ^ EdgeColor.WHITE; return; } if (color == EdgeColor.BLACK || color == EdgeColor.WHITE) { //original code use array //EdgeColor[] start = new EdgeColor[] { EdgeColor.CYAN, EdgeColor.MAGENTA, EdgeColor.YELLOW }; //color = start[seed % 3]; //I don't want to alloc new array=> I use switch switch (seed % 3) { default: throw new NotSupportedException(); case 0: color = EdgeColor.CYAN; break; case 1: color = EdgeColor.MAGENTA; break; case 2: color = EdgeColor.YELLOW; break; } seed /= 3; return; } int shifted = (int)color << (1 + ((int)seed & 1)); color = (EdgeColor)((shifted | shifted >> 3) & (int)EdgeColor.WHITE); seed >>= 1; }
protected EdgeSegment(EdgeColor edgeColor = EdgeColor.White) { Color = edgeColor; }
/// <inheritdoc/> public override int GetHashCode() { return(CenterColor.GetHashCode() ^ (EdgeColor.GetHashCode() << 1) ^ ((Style.GetHashCode() + 1) << 2)); }
public static void EdgeColoringSimple(Shape shape, double angleThreshold, ulong seed) { double crossThreshold = Math.Sin(angleThreshold); List <int> corners = new List <int>(); for (int i = 0; i < shape.Contours.Count; i++) { Contour contour = shape.Contours[i]; corners.Clear(); if (!(contour.Edges.Count == 0)) { Vector2 prevDirection = contour.Edges[contour.Edges.Count - 1].GetDirection(1); for (int j = 0; j < contour.Edges.Count; j++) { EdgeSegment edge = contour.Edges[j]; if (IsCorner(Vector2.Normalize(prevDirection), Vector2.Normalize(edge.GetDirection(0)), crossThreshold)) { corners.Add(j); } prevDirection = edge.GetDirection(1); } } if (corners.Count == 0) { for (int j = 0; j < contour.Edges.Count; j++) { contour.Edges[j].Color = EdgeColor.White; } } else if (corners.Count == 1) { EdgeColor[] colors = { EdgeColor.White, EdgeColor.White, EdgeColor.Black }; SwitchColor(ref colors[0], ref seed, EdgeColor.Black); SwitchColor(ref colors[2], ref seed, EdgeColor.Black); int corner = corners[0]; if (contour.Edges.Count >= 3) { int m = contour.Edges.Count; for (int j = 0; j < m; j++) { int magic = (int)(3 + 2.875f * j / (m - 1) - 1.4375f + 0.5f) - 3; //see edge-coloring.cpp in the original msdfgen contour.Edges[(corner + j) % m].Color = colors[1 + magic]; } } else if (contour.Edges.Count >= 1) { EdgeSegment[] parts = new EdgeSegment[7]; contour.Edges[0].SplitInThirds(out parts[0 + 3 * corner], out parts[1 + 3 * corner], out parts[2 + 3 * corner]); if (contour.Edges.Count >= 2) { contour.Edges[1].SplitInThirds(out parts[3 - 3 * corner], out parts[4 - 3 * corner], out parts[5 - 3 * corner]); parts[0].Color = colors[0]; parts[1].Color = colors[0]; parts[2].Color = colors[1]; parts[3].Color = colors[1]; parts[4].Color = colors[2]; parts[5].Color = colors[2]; } else { parts[0].Color = colors[0]; parts[1].Color = colors[1]; parts[2].Color = colors[2]; } contour.Edges.Clear(); for (int j = 0; parts[j] != null; j++) { contour.Edges.Add(parts[j]); } } } else { int cornerCount = corners.Count; int spline = 0; int start = corners[0]; int m = contour.Edges.Count; EdgeColor color = EdgeColor.White; SwitchColor(ref color, ref seed, EdgeColor.Black); EdgeColor initialColor = color; for (int j = 0; j < m; j++) { int index = (start + j) % m; if (spline + 1 < cornerCount && corners[spline + 1] == index) { spline++; SwitchColor(ref color, ref seed, (EdgeColor)(((spline == cornerCount - 1) ? 1 : 0) * (int)initialColor)); } contour.Edges[index].Color = color; } } } }
public bool HasComponent(EdgeColor c) => (color & c) != 0;
public void AcceptAttributeEdgeColor(EdgeColor edgeColor, PrintContext parameter) { parameter.WriteLine("Edge Color: {0}", edgeColor.Color); }
public QuadraticSegment(Vector2 p0, Vector2 p1, Vector2 p2, EdgeColor color) : base(color) { this.p0 = p0; this.p1 = p1; this.p2 = p2; }
public static void edgeColoringSimple(Shape shape, double angleThreshold, ulong seed = 0) { double crossThreshold = Math.Sin(angleThreshold); List <int> corners = new List <int>(); //TODO: review reusable list // for (std::vector<Contour>::iterator contour = shape.contours.begin(); contour != shape.contours.end(); ++contour) foreach (Contour contour in shape.contours) { // Identify corners corners.Clear(); List <EdgeHolder> edges = contour.edges; int edgeCount = edges.Count; if (edgeCount != 0) { Vector2 prevDirection = edges[edgeCount - 1].direction(1);// (*(contour->edges.end() - 1))->direction(1); for (int i = 0; i < edgeCount; ++i) { EdgeHolder edge = edges[i]; if (isCorner(prevDirection.normalize(), edge.direction(0).normalize(), crossThreshold)) { corners.Add(i); } prevDirection = edge.direction(1); } } // Smooth contour if (corners.Count == 0) //is empty { for (int i = edgeCount - 1; i >= 0; --i) { edges[i].color = EdgeColor.WHITE; } } else if (corners.Count == 1) { // "Teardrop" case EdgeColor[] colors = { EdgeColor.WHITE, EdgeColor.WHITE, EdgeColor.BLACK }; switchColor(ref colors[0], ref seed); colors[2] = colors[0]; switchColor(ref colors[2], ref seed); int corner = corners[0]; if (edgeCount >= 3) { int m = edgeCount; for (int i = 0; i < m; ++i) { //TODO: review here contour.edges[(corner + i) % m].color = colors[((int)(3 + 2.875 * i / (m - 1) - 1.4375 + .5) - 3) + 1]; //(colors + 1)[int(3 + 2.875 * i / (m - 1) - 1.4375 + .5) - 3]; } } else if (edgeCount >= 1) { // Less than three edge segments for three colors => edges must be split EdgeSegment[] parts = new EdgeSegment[7]; //empty array, TODO: review array alloc here edges[0].edgeSegment.splitInThirds( out parts[0 + 3 * corner], out parts[1 + 3 * corner], out parts[2 + 3 * corner]); if (edgeCount >= 2) { edges[1].edgeSegment.splitInThirds( out parts[3 - 3 * corner], out parts[4 - 3 * corner], out parts[5 - 3 * corner] ); parts[0].color = parts[1].color = colors[0]; parts[2].color = parts[3].color = colors[1]; parts[4].color = parts[5].color = colors[2]; } else { parts[0].color = colors[0]; parts[1].color = colors[1]; parts[2].color = colors[2]; } contour.edges.Clear(); for (int i = 0; i < 7; ++i) { edges.Add(new EdgeHolder(parts[i])); } } } // Multiple corners else { int cornerCount = corners.Count; int spline = 0; int start = corners[0]; int m = contour.edges.Count; EdgeColor color = EdgeColor.WHITE; switchColor(ref color, ref seed); EdgeColor initialColor = color; for (int i = 0; i < m; ++i) { int index = (start + i) % m; if (spline + 1 < cornerCount && corners[spline + 1] == index) { ++spline; switchColor(ref color, ref seed, (EdgeColor)(((spline == cornerCount - 1) ? 1 : 0) * (int)initialColor)); } edges[index].color = color; } } } }
public EdgeSegment(EdgeColor edgeColor) { this.color = edgeColor; }
public virtual void AcceptAttributeEdgeColor(EdgeColor edgeColor, T parameter) { // intentionally left blank }
protected override void OnPaintSurface(SKPaintSurfaceEventArgs e) { Trace.WriteLine($"{GetType().Name} OnPaintSurface"); SKImageInfo info = e.Info; SKSurface surface = e.Surface; SKCanvas canvas = surface.Canvas; RadiusDefault = Math.Max(info.Width, info.Height) / 2; if (Radius == 0) { Radius = RadiusDefault; } // 押下状態では影を大きくする var seed = Math.Min(info.Rect.Width, info.Rect.Height); int bodyDelta = seed / 10; var bodyRect = new SKRectI(info.Rect.Left + bodyDelta, info.Rect.Top + bodyDelta, info.Rect.Right - bodyDelta, info.Rect.Bottom - bodyDelta); int shadowDelta = IsPressed ? 0 : seed / 20; var shadowRect = new SKRectI(info.Rect.Left + shadowDelta, info.Rect.Top + shadowDelta, info.Rect.Right - shadowDelta, info.Rect.Bottom - shadowDelta); var shadowColor = SKColors.DarkGray; var sunnyColor = SKColors.Transparent; canvas.Clear(); // 上下の影 using (var paint = new SKPaint()) { float start = (float)(bodyRect.Top - shadowRect.Top) / shadowRect.Height; float end = 1 - start; var rect = new SKRectI(bodyRect.Left, shadowRect.Top, bodyRect.Right, shadowRect.Bottom); paint.Shader = SKShader.CreateLinearGradient( new SKPoint(rect.MidX, rect.Top), new SKPoint(rect.MidX, rect.Bottom), new SKColor[] { sunnyColor, shadowColor, shadowColor, sunnyColor }, new float[] { 0, start, end, 1 }, SKShaderTileMode.Clamp); canvas.DrawRect(rect, paint); } // 左右の影 using (var paint = new SKPaint()) { float start = (float)(bodyRect.Left - shadowRect.Left) / shadowRect.Width; float end = 1 - start; var rect = new SKRectI(shadowRect.Left, bodyRect.Top, shadowRect.Right, bodyRect.Bottom); paint.Shader = SKShader.CreateLinearGradient( new SKPoint(rect.Left, rect.MidY), new SKPoint(rect.Right, rect.MidY), new SKColor[] { sunnyColor, shadowColor, shadowColor, sunnyColor }, new float[] { 0, start, end, 1 }, SKShaderTileMode.Clamp); canvas.DrawRect(rect, paint); } // 四隅 左上 using (var paint = new SKPaint()) { var rect = new SKRectI(shadowRect.Left, shadowRect.Top, bodyRect.Left, bodyRect.Top); paint.Shader = SKShader.CreateRadialGradient( new SKPoint(rect.Right, rect.Bottom), rect.Width, new SKColor[] { shadowColor, sunnyColor }, null, SKShaderTileMode.Clamp); canvas.DrawRect(rect, paint); } // 四隅 右上 using (var paint = new SKPaint()) { var rect = new SKRectI(bodyRect.Right, shadowRect.Top, shadowRect.Right, bodyRect.Top); paint.Shader = SKShader.CreateRadialGradient( new SKPoint(rect.Left, rect.Bottom), rect.Width, new SKColor[] { shadowColor, sunnyColor }, null, SKShaderTileMode.Clamp); canvas.DrawRect(rect, paint); } // 四隅 左下 using (var paint = new SKPaint()) { var rect = new SKRectI(shadowRect.Left, bodyRect.Bottom, bodyRect.Left, shadowRect.Bottom); paint.Shader = SKShader.CreateRadialGradient( new SKPoint(rect.Right, rect.Top), rect.Width, new SKColor[] { shadowColor, sunnyColor }, null, SKShaderTileMode.Clamp); canvas.DrawRect(rect, paint); } // 四隅 右下 using (var paint = new SKPaint()) { var rect = new SKRectI(bodyRect.Right, bodyRect.Bottom, shadowRect.Right, shadowRect.Bottom); paint.Shader = SKShader.CreateRadialGradient( new SKPoint(rect.Left, rect.Top), rect.Width, new SKColor[] { shadowColor, sunnyColor }, null, SKShaderTileMode.Clamp); canvas.DrawRect(rect, paint); } // 本体 using (var paint = new SKPaint()) { // 非活性状態ではグレー var centerColor = IsEnabled ? CenterColor.ToSKColor() : SKColors.WhiteSmoke; var edgeColor = IsEnabled ? EdgeColor.ToSKColor() : SKColors.LightGray; // プラットフォームにより影のサイズが異なるため切れてしまう //var sigma = IsPressed ? 4 : 1; //paint.ImageFilter = SKImageFilter.CreateDropShadow(0, 0, sigma, sigma, SKColors.Black, SKDropShadowImageFilterShadowMode.DrawShadowAndForeground); paint.Shader = SKShader.CreateRadialGradient( new SKPoint(info.Rect.MidX, info.Rect.MidY), Radius, new SKColor[] { centerColor, edgeColor }, null, SKShaderTileMode.Clamp); canvas.DrawRect(bodyRect, paint); } // 文字 using (var paint = new SKPaint()) { paint.Color = IsEnabled ? SKColors.Black : SKColors.Gray; paint.Typeface = SKTypeface.FromFamilyName("Arial", SKTypefaceStyle.Bold); paint.IsAntialias = true; // 見やすくならない //paint.ImageFilter = SKImageFilter.CreateDropShadow(2, 2, 2, 2, SKColors.Black, SKDropShadowImageFilterShadowMode.DrawShadowAndForeground); var textBounds = new SKRect(); paint.MeasureText(Text, ref textBounds); float height = textBounds.Height; paint.TextSize = 0.4f * bodyRect.Height * paint.TextSize / height; paint.MeasureText(Text, ref textBounds); float xText = bodyRect.Width / 2 - textBounds.MidX + bodyDelta; float yText = bodyRect.Height / 2 - textBounds.MidY + bodyDelta; canvas.DrawText(Text, xText, yText, paint); } }
public CubicSegment(EdgeColor edgeColor, params Vector2[] p) : base(edgeColor) { _p = p; }
public bool HasComponent(EdgeColor c) { return((color & c) != 0); }
public LinearSegment(Vector2 p0, Vector2 p1, EdgeColor edgeColor = EdgeColor.White) : base(edgeColor) { _p = new[] { p0, p1 }; }
public LinearSegment(Vector2 p0, Vector2 p1, EdgeColor edgeColor = EdgeColor.WHITE) : base(edgeColor) { _p0 = p0; _p1 = p1; }