public MeshOutline Init()
    {
        if (inited )
            return this;
        inited = true;
        mf = GetComponentInChildren<MeshFilter>();
        if (mf == null)
            return this;

        var m = mf.sharedMesh;
        vert = mf.sharedMesh.vertices;

        if (!res.outlines.TryGetValue(name, out outline))
        {
            res.outlines[name] = outline = new List<int>();
            //res.outlineDict.Add(new OutlineDict() { Name = name, outlineValues = outline });
            var cnt = new Dictionary<Vector3, MyStruct>();
            for (int i = 0; i < m.triangles.Length; i++)
            {
                var vector3 = m.vertices[m.triangles[i]];

                MyStruct myStruct;
                if (!cnt.TryGetValue(vector3, out myStruct))
                    myStruct = cnt[vector3] = new MyStruct();
                myStruct.id.Add(m.triangles[i]);
                myStruct.cnt++;
            }

            foreach (var a in cnt)
                if (a.Value.cnt < 4)
                    outline.AddRange(a.Value.id);
        }

        meshFilter = new MeshFilter2() { m = mf, verts = mf.sharedMesh.vertices };
        foreach (int b in this.outline)
        {
            if (meshFilter.verts.Length <= b)
                continue;
            meshFilter.myVerts.Add(new MyVert() { m = meshFilter, i = b });
        }
        return this;
    }
Ejemplo n.º 2
0
    public MeshOutline Init()
    {
        if (inited)
        {
            return(this);
        }
        inited = true;
        mf     = GetComponentInChildren <MeshFilter>();
        if (mf == null)
        {
            return(this);
        }

        var m = mf.sharedMesh;

        vert = mf.sharedMesh.vertices;

        if (!res.outlines.TryGetValue(name, out outline))
        {
            res.outlines[name] = outline = new List <int>();
            //res.outlineDict.Add(new OutlineDict() { Name = name, outlineValues = outline });
            var cnt = new Dictionary <Vector3, MyStruct>();
            for (int i = 0; i < m.triangles.Length; i++)
            {
                var vector3 = m.vertices[m.triangles[i]];

                MyStruct myStruct;
                if (!cnt.TryGetValue(vector3, out myStruct))
                {
                    myStruct = cnt[vector3] = new MyStruct();
                }
                myStruct.id.Add(m.triangles[i]);
                myStruct.cnt++;
            }

            foreach (var a in cnt)
            {
                if (a.Value.cnt < 4)
                {
                    outline.AddRange(a.Value.id);
                }
            }
        }

        meshFilter = new MeshFilter2()
        {
            m = mf, verts = mf.sharedMesh.vertices
        };
        foreach (int b in this.outline)
        {
            if (meshFilter.verts.Length <= b)
            {
                continue;
            }
            meshFilter.myVerts.Add(new MyVert()
            {
                m = meshFilter, i = b
            });
        }
        return(this);
    }