public void Generate()
    {
        var wythoff = new WythoffPoly(PolyType, PrismP, PrismQ);

        wythoff.BuildFaces();
        var        poly = new ConwayPoly(wythoff);
        ConwayPoly d, x, xd, dx, dxd;
        var        o = new OpParams {
            valueA = op1Amount1, valueB = op1Amount2, facesel = op1Facesel
        };

        d = poly.Dual();

        x = poly.ApplyOp(op, o);

        xd = d.ApplyOp(op, o);

        dx = poly.ApplyOp(op, o);
        dx = dx.Dual();

        dxd = d.ApplyOp(op, o);
        dxd = dxd.Dual();

        if (Canonicalize)
        {
            x   = x.Canonicalize(0.01, 0.01);
            dx  = dx.Canonicalize(0.01, 0.01);
            dxd = dxd.Canonicalize(0.01, 0.01);
            xd  = xd.Canonicalize(0.01, 0.01);
        }

        Debug.Log($"x: {x.vef.v},{x.vef.e},{x.vef.f}");
        Debug.Log($"xd: {xd.vef.v},{xd.vef.e},{xd.vef.f}");
        Debug.Log($"dx: {dx.vef.v},{dx.vef.e},{dx.vef.f}");
        Debug.Log($"dxd: {dxd.vef.v},{dxd.vef.e},{dxd.vef.f}");

        var allPoly = new ConwayPoly();

        x   = x.Transform(-Vector3.left);
        xd  = xd.Transform(Vector3.left * 2);
        dx  = dx.Transform(Vector3.left * 4);
        dxd = dxd.Transform(Vector3.left * 6);

        allPoly.Append(x);
        allPoly.Append(xd);
        allPoly.Append(dx);
        allPoly.Append(dxd);
        allPoly.Recenter();

        allPoly = allPoly.Transform(Position, Rotation, Scale);

        var mesh = PolyMeshBuilder.BuildMeshFromConwayPoly(allPoly, false, null, ColorMethod);

        GetComponent <MeshFilter>().mesh = mesh;
    }
Exemple #2
0
    public static ConwayPoly ApplyOp(ConwayPoly conway, ConwayOperator op)
    {
        switch (op.opType)
        {
        case Ops.Identity:
            break;

        case Ops.Kis:
            conway = conway.Kis(op.amount, op.faceSelections, op.randomize);
            break;

        case Ops.Dual:
            conway = conway.Dual();
            break;

        case Ops.Ambo:
            conway = conway.Ambo();
            break;

        case Ops.Zip:
            conway = conway.Kis(op.amount, op.faceSelections, op.randomize);
            conway = conway.Dual();
            break;

        case Ops.Expand:
            conway = conway.Ambo();
            conway = conway.Ambo();
            break;

        case Ops.Bevel:
            conway = conway.Ambo();
            conway = conway.Dual();
            conway = conway.Kis(op.amount, op.faceSelections, op.randomize);
            conway = conway.Dual();
            break;

        case Ops.Join:
            // conway = conway.Join(op.amount);  // Not currently used as it results in non-coplanar faces
            conway = conway.Ambo();
            conway = conway.Dual();
            break;

        case Ops.Needle:
            conway = conway.Dual();
            conway = conway.Kis(op.amount, op.faceSelections, op.randomize);
            break;

        case Ops.Ortho:
            conway = conway.Ambo();
            conway = conway.Ambo();
            conway = conway.Dual();
            break;

        case Ops.Meta:
            conway = conway.Ambo();
            conway = conway.Dual();
            conway = conway.Kis(op.amount, op.faceSelections, op.randomize);
            break;

        case Ops.Truncate:
            conway = conway.Dual();
            conway = conway.Kis(op.amount, op.faceSelections, op.randomize);
            conway = conway.Dual();
            break;

        case Ops.Gyro:
            conway = conway.Gyro(op.amount);
            break;

        case Ops.Snub:
            conway = conway.Gyro(op.amount);
            conway = conway.Dual();
            break;

        case Ops.Exalt:
            conway = conway.Dual();
            conway = conway.Kis(op.amount, op.faceSelections, op.randomize);
            conway = conway.Dual();
            conway = conway.Kis(op.amount, op.faceSelections, op.randomize);
            break;

        case Ops.Yank:
            conway = conway.Kis(op.amount, op.faceSelections, op.randomize);
            conway = conway.Dual();
            conway = conway.Kis(op.amount, op.faceSelections, op.randomize);
            conway = conway.Dual();
            break;

        case Ops.Subdivide:
            conway = conway.Subdivide();
            break;

        case Ops.Loft:
            conway = conway.Loft(op.amount, op.faceSelections);
            break;

        case Ops.Quinto:
            conway = conway.Quinto(op.amount);
            break;

        case Ops.JoinedLace:
            conway = conway.JoinedLace(op.amount);
            break;

        case Ops.Lace:
            conway = conway.Lace(op.amount, op.faceSelections);
            break;

        case Ops.Stake:
            conway = conway.Stake(op.amount, op.faceSelections);
            break;

//					case Ops.Medial:
//						conway = conway.Medial((int)op.amount);
//						break;
//					case Ops.EdgeMedial:
//						conway = conway.EdgeMedial((int)op.amount);
//						break;
//					case Ops.JoinedMedial:
//						conway = conway.JoinedMedial();
//						break;
        case Ops.Propeller:
            conway = conway.Propeller(op.amount);
            break;

        case Ops.Whirl:
            conway = conway.Whirl(op.amount);
            break;

        case Ops.Volute:
            conway = conway.Volute(op.amount);
            break;

        case Ops.Extrude:
            // Split faces
            conway = conway.FaceScale(0, ConwayPoly.FaceSelections.All, false);
            conway = conway.Extrude(op.amount, false, op.randomize);
            break;

        case Ops.VertexScale:
            conway = conway.VertexScale(op.amount, op.faceSelections, op.randomize);
            break;

        case Ops.FaceOffset:
            // Split faces
            var origRoles = conway.FaceRoles;
            conway           = conway.FaceScale(0, ConwayPoly.FaceSelections.All, false);
            conway.FaceRoles = origRoles;
            conway           = conway.Offset(op.amount, op.faceSelections, op.randomize);
            break;

        case Ops.FaceScale:
            conway = conway.FaceScale(op.amount, op.faceSelections, op.randomize);
            break;

        case Ops.FaceRotate:
            conway = conway.FaceRotate(op.amount, op.faceSelections, 0, op.randomize);
            break;

//					case Ops.Chamfer:
//						conway = conway.Chamfer();
//						break;
//					case Ops.Ribbon:
//						conway = conway.Ribbon(op.amount, false, 0.1f);
//						break;
//					case Ops.FaceTranslate:
//						conway = conway.FaceTranslate(op.amount, op.faceSelections);
//						break;
//					case Ops.FaceRotateX:
//						conway = conway.FaceRotate(op.amount, op.faceSelections, 1);
//						break;
//					case Ops.FaceRotateY:
//						conway = conway.FaceRotate(op.amount, op.faceSelections, 2);
//						break;
        case Ops.FaceRemove:
            conway = conway.FaceRemove(op.faceSelections, false);
            break;

        case Ops.FaceKeep:
            conway = conway.FaceRemove(op.faceSelections, true);
            break;

        case Ops.AddDual:
            conway = conway.AddDual(op.amount);
            break;

        case Ops.Canonicalize:
            conway = conway.Canonicalize(op.amount, op.amount);
            break;

        case Ops.CanonicalizeI:
            conway = conway.Canonicalize((int)op.amount, (int)op.amount);
            break;
        }

        return(conway);
    }
Exemple #3
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;
        }
    }