public override MeshDraft Construct(Vector2 parentLayoutOrigin) { List <Vector2> roofPolygon2; List <Vector3> roofPolygon3; var roofDraft = ConstructRoofBase(out roofPolygon2, out roofPolygon3); var skeletonGenerator = new StraightSkeletonGenerator(); var skeleton = skeletonGenerator.Generate(roofPolygon2); var roofTop = new MeshDraft(); foreach (var skeletonPolygon2 in skeleton.polygons) { if (skeletonPolygon2.Count == 3) { roofTop.Add(ConstructGableDraft(skeletonPolygon2, RoofPitch)); } else { roofTop.Add(ConstructContourDraft(skeletonPolygon2, RoofPitch)); } } roofTop.Move(Vector3.up * roofConfig.thickness); roofDraft.Add(roofTop) .Paint(roofColor); return(roofDraft); }
private static void TestEquality(List <Vector2> vertices, List <List <Vector2> > expectedSkeleton) { var generator = new StraightSkeletonGenerator(); var skeleton = generator.Generate(vertices); Assert.AreEqual(expectedSkeleton.Count, skeleton.polygons.Count); for (int polygonIndex = 0; polygonIndex < expectedSkeleton.Count; polygonIndex++) { var expectedPolygon = expectedSkeleton[polygonIndex]; var polygon = skeleton.polygons[polygonIndex]; Assert.AreEqual(expectedPolygon.Count, polygon.Count); for (int vertexIndex = 0; vertexIndex < expectedPolygon.Count; vertexIndex++) { Vector2 expectedVertex = expectedPolygon[vertexIndex]; Vector2 vertex = polygon[vertexIndex]; AreEqual(vertex, expectedVertex); } } }