示例#1
0
        public void MergeEdgesOnACube()
        {
            Mesh m = PrimitiveShapes.Cube();

            var e = m.HalfEdges.First();
            var a = e.Twin.End;
            var b = e.End;
            var x = m.GetVertex(new Vector3(0, 0, 100));

            Assert.AreEqual(9, m.Vertices.Count());
            Assert.AreEqual(24, m.HalfEdges.Count());
            Assert.AreEqual(6, m.Faces.Count());

            var e2 = e.Split(x);

            foreach (var face in m.Faces)
            {
                foreach (var edge in face.Edges)
                {
                    Assert.AreEqual(edge.End, edge.Next.Twin.End);
                }
            }

            Assert.AreEqual(e.End, b);
            Assert.AreEqual(e.Twin.End, x);
            Assert.AreEqual(e2.End, x);
            Assert.AreEqual(e2.Twin.End, a);

            Assert.AreEqual(9, m.Vertices.Count());
            Assert.AreEqual(26, m.HalfEdges.Count());
            Assert.AreEqual(6, m.Faces.Count());

            e2.Merge();

            foreach (var face in m.Faces)
            {
                foreach (var edge in face.Edges)
                {
                    Assert.AreEqual(edge.End, edge.Next.Twin.End);
                }
            }

            Assert.AreEqual(9, m.Vertices.Count());
            Assert.AreEqual(24, m.HalfEdges.Count());
            Assert.AreEqual(6, m.Faces.Count());

            foreach (var face in m.Faces)
            {
                Assert.AreEqual(4, face.Edges.Count());
                Assert.AreEqual(4, face.Vertices.Count());
                Assert.AreEqual(4, face.Neighbours.Count());
                Assert.IsFalse(face.Vertices.Contains(x));
            }

            m.CleanVertices();

            Assert.AreEqual(8, m.Vertices.Count());
            Assert.AreEqual(24, m.HalfEdges.Count());
            Assert.AreEqual(6, m.Faces.Count());
        }
示例#2
0
        public void Cylinder()
        {
            Mesh m = PrimitiveShapes.Cylinder(5, 2, 10, 10);

            Assert.AreEqual(10, m.Vertices.Count());
            Assert.AreEqual(30, m.HalfEdges.Count());
            Assert.AreEqual(7, m.Faces.Count());
        }
示例#3
0
        public void Draw(SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(this.Background, this.Position, null, Color.White, 0f, Vector2.Zero, this.Dimensions, SpriteEffects.None, 0f);

            PrimitiveShapes.DrawRectangle(spriteBatch, this.rectangle, this.BorderColor, this.BorderWidth);

            this.TextNode?.Draw(spriteBatch);
        }
示例#4
0
        public void MidpointSphere2()
        {
            Mesh m = PrimitiveShapes.Sphere(2, subdivisionOperation: Mesh.SubdivideOperation.Midpoint);

            foreach (var e in m.HalfEdges)
            {
                Assert.IsNotNull(e.Face);
                Assert.IsNotNull(e.Next);
            }

            Assert.AreEqual(92, m.Vertices.Count());
            Assert.AreEqual(180, m.Faces.Count());
        }
示例#5
0
        public void Icosahedron()
        {
            Mesh m = PrimitiveShapes.Icosahedron();

            Assert.AreEqual(12, m.Vertices.Count());
            Assert.AreEqual(20, m.Faces.Count());
            Assert.AreEqual(60, m.HalfEdges.Count());

            foreach (var e in m.HalfEdges)
            {
                Assert.IsNotNull(e.Face);
                Assert.IsNotNull(e.Next);
            }
        }
示例#6
0
        public void InternalFaceSphere2()
        {
            Mesh m = PrimitiveShapes.Sphere(2, subdivisionOperation: Mesh.SubdivideOperation.InternalFace);

            Assert.AreEqual(162, m.Vertices.Count());
            Assert.AreEqual(320, m.Faces.Count());
            Assert.AreEqual(960, m.HalfEdges.Count());

            foreach (var e in m.HalfEdges)
            {
                Assert.IsNotNull(e.Face);
                Assert.IsNotNull(e.Next);
            }
        }
示例#7
0
        public void DegenerateCuboid()
        {
            Mesh m = PrimitiveShapes.Cuboid(
                new Vector3(0, 0, 0),
                new Vector3(0, 0, 0),
                new Vector3(0, 0, 0),
                new Vector3(0, 0, 0),
                new Vector3(0, 0, 0),
                new Vector3(0, 0, 0),
                new Vector3(0, 0, 0),
                new Vector3(0, 0, 0));

            Assert.AreEqual(8, m.Vertices.Count());
            Assert.AreEqual(24, m.HalfEdges.Count());
            Assert.AreEqual(6, m.Faces.Count());
        }
示例#8
0
        public void Cuboid()
        {
            Mesh m = PrimitiveShapes.Cuboid(
                new Vector3(1, 0, 0),
                new Vector3(2, 0, 0),
                new Vector3(3, 0, 0),
                new Vector3(4, 0, 0),
                new Vector3(5, 0, 0),
                new Vector3(6, 0, 0),
                new Vector3(7, 0, 0),
                new Vector3(8, 0, 0));

            Assert.AreEqual(8, m.Vertices.Count());
            Assert.AreEqual(24, m.HalfEdges.Count());
            Assert.AreEqual(6, m.Faces.Count());
        }
示例#9
0
        public void TriangulateCuboid()
        {
            Mesh m = PrimitiveShapes.Cuboid(
                new Vector3(1, 0, 0),
                new Vector3(2, 0, 0),
                new Vector3(3, 0, 0),
                new Vector3(4, 0, 0),
                new Vector3(5, 0, 0),
                new Vector3(6, 0, 0),
                new Vector3(7, 0, 0),
                new Vector3(8, 0, 0));

            m.SubdivideAllFaces(Mesh.SubdivideOperation.Triangulate);

            Assert.AreEqual(8, m.Vertices.Count());
            Assert.AreEqual(36, m.HalfEdges.Count());
            Assert.AreEqual(12, m.Faces.Count());
        }
示例#10
0
        /// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override void Initialize()
        {
            IsMouseVisible = true;

            mesh = PrimitiveShapes.Cuboid(5, 2, 3, new Mesh(null, a => new ProceduralFace(a)));

            projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver2, GraphicsDevice.Viewport.AspectRatio, 0.1f, 100);
            view       = Matrix.CreateLookAt(new Vector3(0, 0, -15), Vector3.Zero, Vector3.Up);
            world      = Matrix.CreateScale(1);

            graphics.PreferredBackBufferWidth  = 1280;
            graphics.PreferredBackBufferHeight = 800;
            graphics.ApplyChanges();

            //mesh.Faces.Skip(2).Cast<ProceduralFace>().First().Development = new GableRoof(mesh, null);
            mesh.Faces.Skip(5).Cast <ProceduralFace>().First().Development = new HouseWall(mesh, null);

            base.Initialize();
        }
示例#11
0
        public void VertexIndicesPreserved()
        {
            Mesh m = PrimitiveShapes.Cube();

            Face f = m.Faces.First();

            Vertex[] v1 = f.Vertices.ToArray();

            f.Delete();
            Face f2 = m.GetFace(v1);

            Vertex[] v2 = f2.Vertices.ToArray();

            Assert.AreEqual(v1.Length, v2.Length);

            for (int i = 0; i < v1.Length; i++)
            {
                Assert.AreEqual(v1[i], v2[i]);
            }
        }
示例#12
0
    void SpawnEnemyPrim(int index, Color col, PrimitiveShapes primShape)
    {
        GameObject buff;

        switch (primShape)
        {
        case PrimitiveShapes.CUBE:
            buff = GameObject.CreatePrimitive(PrimitiveType.Cube);
            //buff = Instantiate(buff);
            buff.transform.parent = instance.enemyTypes[index].transform;
            break;

        case PrimitiveShapes.SPHERE:
            buff = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            //buff = Instantiate(buff);
            buff.transform.parent = instance.enemyTypes[index].transform;
            break;

        case PrimitiveShapes.PLANE:
            buff = GameObject.CreatePrimitive(PrimitiveType.Plane);
            //buff = Instantiate(buff);
            buff.transform.parent = instance.enemyTypes[index].transform;
            break;

        case PrimitiveShapes.CAPSULE:
            buff = GameObject.CreatePrimitive(PrimitiveType.Capsule);
            //buff = Instantiate(buff);
            buff.transform.parent = instance.enemyTypes[index].transform;
            break;

        case PrimitiveShapes.CYLINDER:
            buff = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
            //buff = Instantiate(buff);
            buff.transform.parent = instance.enemyTypes[index].transform;
            break;

        default:
            Debug.LogError("Primitive Load Error, Unidentified Shape");
            break;
        }
    }
示例#13
0
 private void DrawBorder(SpriteBatch spriteBatch)
 {
     PrimitiveShapes.DrawRectangle(spriteBatch, this.rectangle, this.BorderColor, this.BorderWidth);
 }
示例#14
0
    public override void OnInspectorGUI()
    {
        instance = (EditorBase)target;
        EditorGUILayout.LabelField("", "Hi");
        EditorGUILayout.Space();

        GUILayout.BeginVertical("box");
        GUILayout.Space(5);
        GUILayout.BeginHorizontal();
        //GUILayout.Space(10);

        EditorGUILayout.LabelField("Total Enemy Types: " + instance.enemyTypes.Count, GUILayout.MaxWidth(140));
        if (GUILayout.Button("Create New Enemy Type"))
        {
            AddNewEnemyType();
        }
        GUILayout.Space(10);
        EditorGUILayout.EndHorizontal();
        GUILayout.Space(5);
        GUILayout.EndVertical();
        GUILayout.Space(20);
        PrimsOrAssets = EditorGUILayout.Toggle("Spawn Primitive", PrimsOrAssets);
        if (PrimsOrAssets)
        {
            shapeChoose = (PrimitiveShapes)EditorGUILayout.EnumPopup("Primitive to Spawn", shapeChoose);
        }
        else
        {
            assetNamesSelect = EditorGUILayout.Popup(assetNamesSelect, assetNames.ToArray());
        }
        if (instance.enemyTypes.Count > 0)
        {
            GUIStyle style = new GUIStyle();
            //style.fontSize = 30;
            style.normal.textColor = Color.white;
            style.contentOffset    = new Vector2(120, 0);
            EditorGUILayout.LabelField("Created Objects", style);
        }
        EditorGUILayout.BeginVertical();
        for (int i = 0; i < instance.enemyTypes.Count; i++)
        {
            EditorGUILayout.BeginHorizontal();

            Color col = new Color(0, 0, 0);
            col = EditorGUILayout.ColorField(col);
            if (GUILayout.Button("Spawn"))
            {
                if (PrimsOrAssets)
                {
                    SpawnEnemyPrim(i, col, shapeChoose);
                }
                else
                {
                    SpawnEnemyAsset(col, assetNamesSelect);
                }
            }
            if (GUILayout.Button("Despawn"))
            {
                DeleteEnemy(i);
            }
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginVertical();
            for (int k = 0; k < instance.enemyTypes[i].transform.childCount; k++)
            {
                EditorGUILayout.BeginHorizontal();
                instance.enemyTypes[i].transform.GetChild(k).name = GUILayout.TextField(instance.enemyTypes[i].transform.GetChild(k).name);
                if (GUILayout.Button("Despawn"))
                {
                    DestroyImmediate(instance.enemyTypes[i].transform.GetChild(k).gameObject);
                }
                EditorGUILayout.EndHorizontal();
            }
            EditorGUILayout.EndVertical();
        }
        EditorGUILayout.EndVertical();
    }