Ejemplo n.º 1
0
        private void _OnImported(object sender, RoutedEventArgs e)
        {
            var meshData = Tests.TestImport();

            _mesh    = MeshUtil.ConvertTo(meshData);
            MeshData = MeshUtil.ConvertTo(_mesh);
        }
        public void AddToPoint(HEMesh mesh, ref Point p0, ref Point p1)
        {
            point0 = p0.id;
            point1 = p1.id;

            if (p0.edgeHead < 0)
            {
                p0.edgeHead = id;
            }
            else
            {
                mesh.m_edges[p0.edgeTail].SetNext(p0.id, id);
            }

            if (p1.edgeHead < 0)
            {
                p1.edgeHead = id;
            }
            else
            {
                mesh.m_edges[p1.edgeTail].SetNext(p1.id, id);
            }

            p0.edgeTail = id;
            p1.edgeTail = id;

            nextEdge0 = p0.edgeHead;
            nextEdge1 = p1.edgeHead;

            p0.faceCount++;
            p1.faceCount++;
        }
Ejemplo n.º 3
0
        public static HEMesh TestCreate()
        {
            var points = new List <Vector3D>()
            {
                new Vector3D(0, 0, 0), new Vector3D(100, 0, 0), new Vector3D(0, 100, 0), new Vector3D(100, 100, 0),
                new Vector3D(0, 0, 100), new Vector3D(100, 0, 100), new Vector3D(0, 100, 100), new Vector3D(100, 100, 100),
            };

            var indice = new List <int>()
            {
                0, 2, 1, 1, 2, 3,
                4, 5, 7, 4, 7, 6,
                0, 4, 2, 4, 6, 2,
                0, 1, 4, 1, 5, 4,
                1, 3, 7, 1, 7, 5,
                3, 2, 7, 2, 6, 7,
            };

            var mesh = new HEMesh();

            foreach (var p in points)
            {
                mesh.AddVertex(p);
            }

            for (int i = 0; i < indice.Count; i += 3)
            {
                mesh.AddFace(new IndexN <int>(indice[i], indice[i + 1], indice[i + 2]));
            }

            mesh.UpdateFaceNormals();
            mesh.UpdateVerticeNormals();
            return(mesh);
        }
        public Vector3 Center(HEMesh mesh)
        {
            var sum = Vector3.zero;

            for (int i = 0; i < faceEdgeCount; i++)
            {
                var fe = mesh.m_faceEdges[faceEdgeStart + i];
                sum += mesh.m_points[fe.point].pos;
            }

            return(sum / faceEdgeCount);
        }
    private void Start()
    {
        Application.targetFrameRate = 60;

        //     4-------5
        //    /|      /|
        //   0-------1 |
        //   | 6-----|-7
        //   |/      |/
        //   2-------3

        mesh.AddPoint(new Vector3(0, 0, 0));
        mesh.AddPoint(new Vector3(0, 1, 0));
        mesh.AddPoint(new Vector3(1, 0, 0));
        mesh.AddPoint(new Vector3(1, 1, 0));

        mesh.AddPoint(new Vector3(0, 0, 1));
        mesh.AddPoint(new Vector3(0, 1, 1));
        mesh.AddPoint(new Vector3(1, 0, 1));
        mesh.AddPoint(new Vector3(1, 1, 1));

        mesh.AddFace(new int[] { 0, 1, 3, 2 });
        mesh.AddFace(new int[] { 1, 5, 7, 3 });
        mesh.AddFace(new int[] { 0, 2, 6, 4 });
        mesh.AddFace(new int[] { 4, 5, 1, 0 });
        mesh.AddFace(new int[] { 7, 6, 2, 3 });
        //		mesh.AddFace(new int[]{5,4,6,7});

        var mf = gameObject.GetComponent <MeshFilter>();

        if (mf)
        {
            mf.sharedMesh = mesh.CreateHullMesh();
        }

        {
            subdiv = new HEMesh[1];
            var srcMesh = mesh;
            for (int i = 0; i < subdiv.Length; i++)
            {
                subdiv[i] = new HEMesh();
                srcMesh.Subdiv(subdiv[i]);
                srcMesh = subdiv[i];
            }

            var subObj = new GameObject("subdiv");
            subObj.transform.SetParent(transform);
            subObj.AddComponent <MeshRenderer>();
            mf      = subObj.AddComponent <MeshFilter>();
            mf.mesh = srcMesh.CreateHullMesh();
        }
    }
Ejemplo n.º 6
0
        public static MeshData ConvertTo(HEMesh mesh)
        {
            var data = new MeshData();

            data.Vertices = mesh.Vertices.Select(v => new VertexData()
            {
                Position = v.Position, Normal = mesh.GetVertexNormal(v.ID)
            }).ToList();
            data.Faces = mesh.Faces.Select(f => new FaceData()
            {
                Vertices = mesh.GetVerticeOfFace(f.ID), Normal = mesh.GetFaceNormal(f.ID)
            }).ToList();
            return(data);
        }
        public void AddFaceEdge(HEMesh mesh, ref FaceEdge faceEdge)
        {
            faceEdge.edge = id;

            if (faceEdgeHead < 0)
            {
                faceEdgeHead      = faceEdge.id;
                faceEdgeTail      = faceEdge.id;
                faceEdge.adjacent = faceEdge.id;
            }
            else
            {
                ref var tail = ref mesh.m_faceEdges[faceEdgeTail];
                tail.adjacent     = faceEdge.id;
                faceEdgeTail      = faceEdge.id;
                faceEdge.adjacent = faceEdgeHead;
            }
Ejemplo n.º 8
0
        public static HEMesh ConvertTo(MeshData data)
        {
            if (data == null)
            {
                return(null);
            }
            var mesh = new HEMesh(data.Vertices.Count);

            foreach (var vertex in data.Vertices)
            {
                mesh.AddVertex(vertex.Position);
            }
            foreach (var face in data.Faces)
            {
                mesh.AddFace(face.Vertices);
            }
            mesh.UpdateFaceNormals();
            mesh.UpdateVerticeNormals();
            return(mesh);
        }
        public Vector3 Center(HEMesh mesh)
        {
            var sum = mesh.m_points[point0].pos + mesh.m_points[point1].pos;

            return(sum / 2);
        }