Example #1
0
    public void MakeMesh()
    {
        var mesh = new Mesh();

        if (BypassOps)
        {
            _polyhedron.BuildMesh();
            mesh = _polyhedron.mesh;
            mesh.RecalculateNormals();
        }
        else
        {
            if (ConwayOperators != null)
            {
                conway = new ConwayPoly(_polyhedron);
                foreach (var c in ConwayOperators)
                {
                    switch (c.op)
                    {
                    case Ops.Identity:
                        break;

                    case Ops.Scale:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Foo(c.amount);
                        break;

                    case Ops.Kis:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Kis(c.amount);
                        break;

                    case Ops.Kis3:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.KisN(c.amount, 3);
                        break;

                    case Ops.Kis4:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.KisN(c.amount, 4);
                        break;

                    case Ops.Kis5:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.KisN(c.amount, 5);
                        break;

                    case Ops.Kis6:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.KisN(c.amount, 6);
                        break;

                    case Ops.Kis8:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.KisN(c.amount, 8);
                        break;

                    case Ops.Dual:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Dual();
                        break;

                    case Ops.Ambo:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Ambo();
                        break;

                    case Ops.Zip:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Kis(c.amount);
                        conway = conway.Dual();
                        break;

                    case Ops.Expand:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Ambo();
                        conway = conway.Ambo();
                        break;

                    case Ops.Bevel:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Ambo();
                        conway = conway.Dual();
                        conway = conway.Kis(c.amount);
                        conway = conway.Dual();
                        break;

                    case Ops.Join:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Ambo();
                        conway = conway.Dual();
                        break;

                    case Ops.Needle:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Dual();
                        conway = conway.Kis(c.amount);
                        break;

                    case Ops.Ortho:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Ambo();
                        conway = conway.Ambo();
                        conway = conway.Dual();
                        break;

                    case Ops.Meta:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Ambo();
                        conway = conway.Dual();
                        conway = conway.Kis(c.amount);
                        break;

                    case Ops.Truncate:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Dual();
                        conway = conway.Kis(c.amount);
                        conway = conway.Dual();
                        break;

                    case Ops.Gyro:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Gyro(0.3333333f, c.amount);
                        break;

                    case Ops.Snub:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Gyro(0.3333333f, c.amount);
                        conway = conway.Dual();
                        break;



                    case Ops.Exalt:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Dual();
                        conway = conway.Kis(c.amount);
                        conway = conway.Dual();
                        conway = conway.Kis(c.amount);
                        break;

                    case Ops.Yank:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Kis(c.amount);
                        conway = conway.Dual();
                        conway = conway.Kis(c.amount);
                        conway = conway.Dual();
                        break;

                    case Ops.Subdivide:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Subdivide();
                        break;

                    case Ops.Chamfer:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Chamfer();
                        break;


                    case Ops.Offset:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Offset(c.amount);
                        break;

                    case Ops.Extrude:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Extrude(c.amount, false);
                        break;

                    case Ops.Ribbon:
                        if (c.disabled)
                        {
                            break;
                        }
                        conway = conway.Ribbon(c.amount, false, 0.1f);
                        break;

                    case Ops.Test:
                        if (c.disabled)
                        {
                            break;
                        }

                        break;
                    }
                }
            }

            conway.ScaleToUnitSphere();

            // If we Kis we don't need fan triangulation (which breaks on non-convex faces)
            conway = conway.Kis(0, true);
            mesh   = conway.ToUnityMesh(forceTwosided: TwoSided);
        }

        //_polyhedron.CreateBlendShapes();

        mesh.RecalculateTangents();
        mesh.RecalculateBounds();
        if (meshFilter != null)
        {
            meshFilter.mesh = mesh;
        }
    }