Пример #1
0
        //
        //
        //
        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());
        }
Пример #2
0
        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));
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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());
        }
Пример #5
0
        //
        // 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());
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
 private static List <PointList> BridgeRoundRectangleToRectangle(PointList roundRect, PointList rect)
 {
     return(BridgeRectangleToRoundRectangle(rect.Reverse(), roundRect.Reverse()));
 }