Beispiel #1
0
    private ConwayPoly MakeAntenna(ConwayPoly spaceship)
    {
        var allNew   = spaceship.FaceselToFaceFilterFunc(FaceSelections.AllNew);
        var facingUp = spaceship.FaceselToFaceFilterFunc(FaceSelections.FacingUp);
        Func <FilterParams, bool> newAndFacingUp = x => allNew(x) && facingUp(x);
        var topSurfaces = spaceship.FaceKeep(new OpParams {
            filterFunc = newAndFacingUp
        });

        var antennaGroup = new ConwayPoly();
        var antenna      = JohnsonPoly.Pyramid(4);

        foreach (var face in topSurfaces.Faces)
        {
            float radius = Random.Range(0.01f, 0.05f);
            float height = Random.Range(0.25f, 2f);
            float offset = Random.value < .5 ? 0 : Random.value < 0.5 ? .5f : -.5f;
            antennaGroup.Append(antenna.Transform(
                                    face.GetPolarPoint(90, offset),
                                    Vector3.zero,
                                    new Vector3(radius, height, radius)
                                    ));
        }
        return(antennaGroup);
    }
Beispiel #2
0
    public void Generate()
    {
        poly = JohnsonPoly.Build(JohnsonPolyType, sides);


        Face face;
        var  sidesFilter = poly.FaceselToFaceFilterFunc(FaceSelections.FourSided);
        var  roleFilter  = poly.FaceselToFaceFilterFunc(FaceSelections.New);
        Func <FilterParams, bool> filterFunc = x => sidesFilter(x);

        for (int i = 0; i < splits; i++)
        {
            face = poly.GetFace(new OpParams(filterFunc), 0);
            if (face != null)
            {
                var edges = face.GetHalfedges();
                poly = poly.SplitLoop(poly.GetFaceLoop(edges[edgeIndex % edges.Count]), splitRatio);
            }
            // Change the filter after the first loop iteration as we can
            // ensure we get the right face based on it's role
            filterFunc = x => sidesFilter(x) && roleFilter(x);
        }

        if (ApplyOp)
        {
            var o1 = new OpParams(op1Amount1, op1Amount2, op1Facesel);
            poly = poly.ApplyOp(op1, o1);

            var o2 = new OpParams(op2Amount1, op2Amount2, op2Facesel);
            poly = poly.ApplyOp(op2, o2);
        }

        if (Canonicalize)
        {
            poly = poly.Canonicalize(0.1, 0.1);
        }

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

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

        GetComponent <MeshFilter>().mesh = mesh;
    }