Esempio n. 1
0
 private void OnEnable()
 {
     m_target = target as MeshNormalizer;
     SceneView.duringSceneGui += SceneView_duringSceneGui;
 }
Esempio n. 2
0
    public Shape OnConvert(Mesh mesh)
    {
        MeshNormalizer             normalizer = new MeshNormalizer(mesh);
        List <UnityEngine.Vector3> vertices   = normalizer.UniqueVertices;
        List <int> triangles = normalizer.UniqueTriangles;

        List <Subdivision.Core.Point> points = new List <Subdivision.Core.Point>();

        foreach (var v in normalizer.UniqueVertices)
        {
            points.Add(new Subdivision.Core.Point(v.x, v.y, v.z));
        }

        List <Subdivision.Core.Edge> edges = new List <Subdivision.Core.Edge>();

        Shape shape = new Shape();

        for (int i = 0; i < normalizer.UniqueTriangles.Count / 3; i++)
        {
            Subdivision.Core.Point p0 = points[triangles[3 * i]];
            Subdivision.Core.Point p1 = points[triangles[3 * i + 1]];
            Subdivision.Core.Point p2 = points[triangles[3 * i + 2]];

            Subdivision.Core.Edge e0 = new Subdivision.Core.Edge(p0, p1);
            Subdivision.Core.Edge e1 = new Subdivision.Core.Edge(p1, p2);
            Subdivision.Core.Edge e2 = new Subdivision.Core.Edge(p2, p0);

            bool b0 = true;
            bool b1 = true;
            bool b2 = true;
            foreach (Subdivision.Core.Edge ee in edges)
            {
                if (e0.IsMatchFor(ee))
                {
                    e0 = ee; b0 = false;
                }
                if (e1.IsMatchFor(ee))
                {
                    e1 = ee; b1 = false;
                }
                if (e2.IsMatchFor(ee))
                {
                    e2 = ee; b2 = false;
                }
            }

            if (b0)
            {
                edges.Add(e0);
            }
            if (b1)
            {
                edges.Add(e1);
            }
            if (b2)
            {
                edges.Add(e2);
            }

            shape.AddFace(new Face(e0, e1, e2));
        }

        return(shape);
    }