Example #1
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);
    }