private void Awake() { var input = Geometry.StarPolygon2(5, 1, 2); var generator = new StraightSkeletonGenerator(); skeleton = generator.Generate(input); }
private static void DrawSkeleton(StraightSkeleton skeleton) { GL.Color(Color.white); for (var polygonIndex = 0; polygonIndex < skeleton.polygons.Count; polygonIndex++) { Vector3 zOffset = Vector3.back * (skeletonPolygonOffset * polygonIndex); var skeletonPolygon = skeleton.polygons[polygonIndex]; for (int vertexIndex = 0; vertexIndex < skeletonPolygon.Count; vertexIndex++) { Vector2 current = skeletonPolygon[vertexIndex]; Vector2 next = skeletonPolygon.GetLooped(vertexIndex + 1); GLE.DrawLine((Vector3)current + zOffset, (Vector3)next + zOffset); } } }
public StraightSkeleton Generate(IList <Vector2> polygon) { activePlans.Clear(); newPlans.Clear(); var activePlan = new Plan(polygon); activePlans.Add(activePlan); skeleton = new StraightSkeleton(activePlan); foreach (var p in activePlans) { foreach (var vertex in p) { CalculateBisector(vertex); } } int count = 0; while (activePlans.Count > 0) { if (count > polygon.Count) { Debug.LogError("Too many iterations"); break; } bool success = OffsetAndDetectEvents(); if (!success) { return(skeleton); } count++; } return(skeleton); }