コード例 #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
ファイル: TextBox.cs プロジェクト: myrp-alexandre/SimpleWars
 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();
    }