// // // public static Mesh BuildCylinder(Axis axis, float radius, float height, int sides) { MeshBuilder builder = new MeshBuilder(); PointList pointsA = CreatePolygon(axis, radius, sides, -0.5f * height); PointList pointsB = pointsA.Translate(height * Vector(axis)); builder.Cap(pointsA.Reverse()); builder.Cap(pointsA.Bridge(pointsB, PointList.BridgeMode.CloseReuse)); builder.Cap(pointsB); return(builder.Build()); }
public void TestReverse() { PointList list0 = new PointList(); list0.Add(0f, 0f, 0f); list0.Add(1f, 1f, 1f); list0.Add(2f, 2f, 2f); PointList list1 = list0.Reverse(); Assert.AreEqual(3, list1.Count); for (int i = 0; i < 3; i++) { Assert.AreEqual(list0.Uid(i), list1.Uid(2 - i)); } }
private GameObject CreatePentagonUp(float x, float z) { GameObject obj = CreateChild(x, z); MeshBuilder builder = new MeshBuilder(); PointList pointsA = PrimitiveBuilder.CreateUnitPolygon(5); PointList pointsB = pointsA.Translate(new Vector3(0f, 1f, 0f)); builder.Cap(pointsA.Bridge(pointsB, PointList.BridgeMode.CloseReuse)); builder.Cap(pointsB); builder.Cap(pointsA.Reverse()); Mesh mesh = builder.Build(); NodeBuilder.SetMesh(obj, mesh); return(obj); }
public static Mesh BuildRoundBox(float xSize, float ySize, float zSize, float radius, int sides) { // Bottom rectangle PointList pointsB = CreateXZRectangle(xSize - 2f * radius, zSize - 2f * radius, AxisSide.Positive, -ySize * 0.5f); // Bottom sides List <PointList> steps = new List <PointList>(); for (int i = 1; i < sides + 1; i++) { float a = -Mathf.PI / 2f + i * Mathf.PI / (2f * sides); float r = radius * Mathf.Cos(a); steps.Add(CreateXZRoundRectangle(xSize - 2f * (radius - r), zSize - 2f * (radius - r), r, sides, AxisSide.Positive, -ySize * 0.5f + radius + radius * Mathf.Sin(a))); } // Top sides for (int i = 0; i < sides; i++) { float a = i * Mathf.PI / (2f * sides); float r = radius * Mathf.Cos(a); steps.Add(CreateXZRoundRectangle(xSize - 2f * (radius - r), zSize - 2f * (radius - r), r, sides, AxisSide.Positive, ySize * 0.5f - radius + radius * Mathf.Sin(a))); } // Top rectangle PointList pointsT = CreateXZRectangle(xSize - 2f * radius, zSize - 2f * radius, AxisSide.Positive, ySize * 0.5f); // Polygons List <PointList> list = new List <PointList>(); for (int i = 0; i < steps.Count - 1; i++) { list.AddRange(steps [i].Bridge(steps [i + 1], PointList.BridgeMode.CloseReuse)); } list.AddRange(BridgeRectangleToRoundRectangle(pointsB, steps [0])); // bottom list.AddRange(BridgeRoundRectangleToRectangle(steps [steps.Count - 1], pointsT)); // top // Create Unity Mesh MeshBuilder builder = new MeshBuilder(); builder.Cap(pointsB.Reverse()); builder.Cap(list); builder.Cap(pointsT); return(builder.Build()); }
// // Axis Aligned Box // public static Mesh BuildBox(float xMin, float xMax, float yMin, float yMax, float zMin, float zMax) { MeshBuilder builder = new MeshBuilder(); PointList pointsA = new PointList(); pointsA.Add(xMin, yMin, zMin); pointsA.Add(xMin, yMin, zMax); pointsA.Add(xMax, yMin, zMax); pointsA.Add(xMax, yMin, zMin); PointList pointsB = pointsA.Translate(new Vector3(0f, yMax - yMin, 0f)); builder.Cap(pointsA.Reverse()); builder.Cap(pointsA.Bridge(pointsB, PointList.BridgeMode.CloseReuse)); builder.Cap(pointsB); return(builder.Build()); }
void Start() { MeshBuilder builder = new MeshBuilder(); PointList pointsZ = PrimitiveBuilder.CreateUnitTile(); PointList pointsA = pointsZ.Translate(new Vector3(0f, -0.5f, 0f)); PointList pointsB = pointsA.Translate(Vector3.up); List <PointList> list = pointsA.Bridge(pointsB, PointList.BridgeMode.CloseReuse); list.Add(pointsA.Reverse()); list.Add(pointsB); foreach (PointList points in list) { SphereSide(points, builder, 5); } Mesh mesh = builder.Build(); NodeBuilder.SetMesh(gameObject, mesh); }
private GameObject CreateUnitTileUp(float x, float z) { GameObject obj = CreateChild(x, z); PointList pointsA = PrimitiveBuilder.CreateUnitTile(); PointList pointsB = pointsA.Translate(Vector3.up); List <PointList> list = pointsA.Bridge(pointsB, PointList.BridgeMode.CloseReuse); MeshBuilder builder = new MeshBuilder(); builder.Cap(list); builder.Cap(pointsB); builder.Cap(pointsA.Reverse()); Mesh mesh = builder.Build(); NodeBuilder.SetMesh(obj, mesh); return(obj); }
void Start() { PointList pointsA = PrimitiveBuilder.CreateUnitTile(); PointList pointsB = pointsA.Translate(0.2f * Vector3.up); List <PointList> list = pointsB.Divide(3, 3); MeshBuilder builder = new MeshBuilder(); builder.Cap(pointsA.Bridge(pointsB, PointList.BridgeMode.CloseReuse)); foreach (PointList points in list) { DigHole(points, builder); } builder.Cap(pointsA.Reverse()); Mesh mesh = builder.Build(); NodeBuilder.SetMesh(gameObject, mesh); }
private GameObject CreatePentagonHop(float x, float z) { GameObject obj = CreateChild(x, z); MeshBuilder builder = new MeshBuilder(); PointList pointsA = PrimitiveBuilder.CreateUnitPolygon(5); PointList pointsB = pointsA.Translate(new Vector3(0f, 1f, 0f)); List <PointList> list = pointsA.Bridge(pointsB, PointList.BridgeMode.CloseReuse); list.Add(pointsB); list.Add(pointsA.Reverse()); foreach (PointList points in list) { Extend(points, builder); } Mesh mesh = builder.Build(); NodeBuilder.SetMesh(obj, mesh); return(obj); }
void Start() { MeshBuilder builder = new MeshBuilder(); // Create a cube PointList pointsA = PrimitiveBuilder.CreateUnitTile(); PointList pointsB = pointsA.Translate(Vector3.up); List <PointList> list = pointsA.Bridge(pointsB, PointList.BridgeMode.CloseReuse); list.Add(pointsA.Reverse()); list.Add(pointsB); // Call Branch() on each face foreach (PointList points in list) { Branch(points, builder, 5); } Mesh mesh = builder.Build(); NodeBuilder.SetMesh(gameObject, mesh); }
private static List <PointList> BridgeRoundRectangleToRectangle(PointList roundRect, PointList rect) { return(BridgeRectangleToRoundRectangle(rect.Reverse(), roundRect.Reverse())); }