コード例 #1
0
ファイル: LoxodromeForm.cs プロジェクト: andybak/Form3D
    public void mutateTrunk(List <Branch> branches,
                            FormBounds formBounds,
                            IFormConfiguration formConfig,
                            ColourConfiguration colourConfig)
    {
        int offset = (formConfig.getTrunkIterations() * formConfig.getStackIterations() / 2) * -1;

        Vector3 branchStartPosition = formConfig.getStartPosition();

        branchStartPosition.y = branchStartPosition.y + 10;

        Vector3 branchStartTwist  = formConfig.getStartRotation();
        Vector3 branchStartOrigin = formConfig.getStartPosition();

        foreach (Branch branch in branches)
        {
            formBounds.calculateNewBounds(branchStartPosition);

            branch.mutate(offset,
                          formConfig,
                          colourConfig,
                          branchStartPosition,
                          branchStartTwist,
                          branchStartOrigin,
                          formBounds);

            offset += formConfig.getStackIterations();
        }
    }
コード例 #2
0
ファイル: LoxodromeForm.cs プロジェクト: andybak/Form3D
    public void mutateBranch(List <IStack> stacks,
                             int offset,
                             IFormConfiguration formConfig,
                             ColourConfiguration colourConfig,
                             Vector3 branchStartPosition,
                             Vector3 branchStartTwist,
                             Vector3 origin,
                             FormBounds formBounds)
    {
        Vector3 position   = origin;
        Vector3 stackTwist = formConfig.getStackStartTwist();

        float radius     = formConfig.getBranchPositionDelta().x * 20;
        float rhumbAngle = formConfig.getStartRotation().x * 0.032f;

        //colour stuff
        int   iterations  = formConfig.getStackIterations();
        Color modelColour = new Color(colourConfig.getBaseRed(),
                                      colourConfig.getBaseGreen(),
                                      colourConfig.getBaseBlue(),
                                      1);

        //if cycling override base colour
        if (colourConfig.getCycle())
        {
            modelColour = colourConfig.getCycleColour();
        }

        int i = offset;

        foreach (IStack stack in stacks)
        {
            position.x = formConfig.getStartPosition().x + (radius * (float)Math.Cos(i) / (float)Math.Cosh(Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));
            position.y = formConfig.getStartPosition().y + (radius * (float)Math.Sin(i) / (float)Math.Cosh(Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));
            position.z = formConfig.getStartPosition().z + (radius * (float)Math.Tanh(Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));

            formBounds.calculateNewBounds(position);

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour())
            {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i - offset);
            }
            if (colourConfig.getPulse())
            {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i - offset);
            }

            stack.mutateTo(position, stackTwist, 0.5f, stackColour);

            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());

            i++;
        }
    }
コード例 #3
0
    public static void saveConfiguration(IFormConfiguration formConfiguration)
    {
        string fileSavePath = Application.persistentDataPath + "/FormConfigSlot" + (formConfiguration.getIndex() + 1) + ".xml";

        Debug.Log("Save:" + fileSavePath);

        XmlDocument xmlDoc = new XmlDocument();
        XmlElement  root   = xmlDoc.CreateElement("", "form", "");

        //save data
        root.SetAttribute("branchPositionDeltaX", formConfiguration.getBranchPositionDelta().x.ToString());
        root.SetAttribute("branchPositionDeltaY", formConfiguration.getBranchPositionDelta().y.ToString());
        root.SetAttribute("branchPositionDeltaZ", formConfiguration.getBranchPositionDelta().z.ToString());

        root.SetAttribute("branchTwistDeltaX", formConfiguration.getBranchTwistDelta().x.ToString());
        root.SetAttribute("branchTwistDeltaY", formConfiguration.getBranchTwistDelta().y.ToString());
        root.SetAttribute("branchTwistDeltaZ", formConfiguration.getBranchTwistDelta().z.ToString());

        root.SetAttribute("index", formConfiguration.getIndex().ToString());
        root.SetAttribute("mutationStrength", formConfiguration.getMutationStrength().ToString());
        root.SetAttribute("scaleBranch", formConfiguration.getScaleBranch().ToString());
        root.SetAttribute("scaleDelta", formConfiguration.getScaleDelta().ToString());
        root.SetAttribute("scaleTrunk", formConfiguration.getScaleTrunk().ToString());
        root.SetAttribute("stackIterations", formConfiguration.getStackIterations().ToString());
        root.SetAttribute("stackShapeIndex", formConfiguration.getStackShapeIndex().ToString());

        root.SetAttribute("stackStartTwistX", formConfiguration.getStackStartTwist().x.ToString());
        root.SetAttribute("stackStartTwistY", formConfiguration.getStackStartTwist().y.ToString());
        root.SetAttribute("stackStartTwistZ", formConfiguration.getStackStartTwist().z.ToString());

        root.SetAttribute("stackTwistDeltaX", formConfiguration.getStackTwistDelta().x.ToString());
        root.SetAttribute("stackTwistDeltaY", formConfiguration.getStackTwistDelta().y.ToString());
        root.SetAttribute("stackTwistDeltaZ", formConfiguration.getStackTwistDelta().z.ToString());

        root.SetAttribute("startPositionX", formConfiguration.getStartPosition().x.ToString());
        root.SetAttribute("startPositionY", formConfiguration.getStartPosition().y.ToString());
        root.SetAttribute("startPositionZ", formConfiguration.getStartPosition().z.ToString());

        root.SetAttribute("startRotationX", formConfiguration.getStartRotation().x.ToString());
        root.SetAttribute("startRotationY", formConfiguration.getStartRotation().y.ToString());
        root.SetAttribute("startRotationZ", formConfiguration.getStartRotation().z.ToString());

        root.SetAttribute("startScale", formConfiguration.getStartScale().ToString());
        root.SetAttribute("trunkIterations", formConfiguration.getTrunkIterations().ToString());

        root.SetAttribute("trunkPositionDeltaX", formConfiguration.getTrunkPositionDelta().x.ToString());
        root.SetAttribute("trunkPositionDeltaY", formConfiguration.getTrunkPositionDelta().y.ToString());
        root.SetAttribute("trunkPositionDeltaZ", formConfiguration.getTrunkPositionDelta().z.ToString());

        root.SetAttribute("trunklRotationDeltaX", formConfiguration.getTrunkRotationDelta().x.ToString());
        root.SetAttribute("trunklRotationDeltaY", formConfiguration.getTrunkRotationDelta().y.ToString());
        root.SetAttribute("trunklRotationDeltaZ", formConfiguration.getTrunkRotationDelta().z.ToString());

        xmlDoc.AppendChild(root);
        //save
        xmlDoc.Save(fileSavePath);
    }
コード例 #4
0
 public IFormConfiguration(IFormConfiguration config)
 {
     this.index = config.getIndex ();
     this.startPosition = config.getStartPosition ();
     this.startRotation = config.getStartRotation ();
     this.trunkPositionDelta = config.getTrunkPositionDelta ();
     this.trunkRotationDelta = config.getTrunkRotationDelta ();
     this.trunkIterations = config.getTrunkIterations ();
     this.scaleTrunk = config.getScaleTrunk ();
     this.branchPositionDelta = config.getBranchPositionDelta ();
     this.branchTwistDelta = config.getBranchTwistDelta ();
     this.stackIterations = config.getStackIterations ();
     this.startScale = config.getStartScale ();
     this.scaleDelta = config.getScaleDelta ();
     this.scaleBranch = config.getScaleBranch ();
     this.stackStartTwist = config.getStackStartTwist ();
     this.stackTwistDelta = config.getStackTwistDelta ();
     this.stackShape = config.getStackShape ();
     this.mutationStrength = config.getMutationStrength ();
 }
コード例 #5
0
 public IFormConfiguration(IFormConfiguration config)
 {
     this.index               = config.getIndex();
     this.startPosition       = config.getStartPosition();
     this.startRotation       = config.getStartRotation();
     this.trunkPositionDelta  = config.getTrunkPositionDelta();
     this.trunkRotationDelta  = config.getTrunkRotationDelta();
     this.trunkIterations     = config.getTrunkIterations();
     this.scaleTrunk          = config.getScaleTrunk();
     this.branchPositionDelta = config.getBranchPositionDelta();
     this.branchTwistDelta    = config.getBranchTwistDelta();
     this.stackIterations     = config.getStackIterations();
     this.startScale          = config.getStartScale();
     this.scaleDelta          = config.getScaleDelta();
     this.scaleBranch         = config.getScaleBranch();
     this.stackStartTwist     = config.getStackStartTwist();
     this.stackTwistDelta     = config.getStackTwistDelta();
     this.stackShape          = config.getStackShape();
     this.mutationStrength    = config.getMutationStrength();
 }
コード例 #6
0
ファイル: LoxodromeForm.cs プロジェクト: shausoftware/Form3D
    public void createTrunk(List<Branch> branches, 
	                 FormBounds formBounds, 
	                 IFormConfiguration formConfig, 
	                 ColourConfiguration colourConfig)
    {
        int offset = (formConfig.getTrunkIterations() * formConfig.getStackIterations() / 2) * -1;

        Vector3 branchStartPosition = formConfig.getStartPosition();
        branchStartPosition.y = branchStartPosition.y + 10;

        Vector3 branchStartTwist = formConfig.getStartRotation();
        Vector3 branchStartOrigin = formConfig.getStartPosition();

        for (int i = 0; i < formConfig.getTrunkIterations(); i++) {

            formBounds.calculateNewBounds(branchStartPosition);

            Branch branch = new Branch (offset,
                                        formConfig,
                                        colourConfig,
                                        branchStartPosition,
                                        branchStartTwist,
                                        branchStartOrigin,
                                        formBounds);
            branches.Add(branch);

            offset += formConfig.getStackIterations();
        }
    }
コード例 #7
0
ファイル: LoxodromeForm.cs プロジェクト: shausoftware/Form3D
    public void mutateBranch(List<IStack> stacks,
	                  int offset,
	                  IFormConfiguration formConfig, 
	                  ColourConfiguration colourConfig, 
	                  Vector3 branchStartPosition, 
	                  Vector3 branchStartTwist,
	                  Vector3 origin,
	                  FormBounds formBounds)
    {
        Vector3 position = origin;
        Vector3 stackTwist = formConfig.getStackStartTwist();

        float radius = formConfig.getBranchPositionDelta ().x * 20;
        float rhumbAngle = formConfig.getStartRotation().x * 0.032f;

        //colour stuff
        int iterations = formConfig.getStackIterations();
        Color modelColour = new Color (colourConfig.getBaseRed(),
                                       colourConfig.getBaseGreen(),
                                       colourConfig.getBaseBlue(),
                                       1);
        //if cycling override base colour
        if (colourConfig.getCycle ()) {
            modelColour = colourConfig.getCycleColour();
        }

        int i = offset;
        foreach (IStack stack in stacks) {

            position.x = formConfig.getStartPosition().x + (radius * (float) Math.Cos(i) / (float) Math.Cosh (Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));
            position.y = formConfig.getStartPosition().y + (radius * (float) Math.Sin(i) / (float) Math.Cosh (Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));
            position.z = formConfig.getStartPosition().z + (radius * (float) Math.Tanh(Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));

            formBounds.calculateNewBounds(position);

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour()) {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i - offset);
            }
            if (colourConfig.getPulse()) {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i - offset);
            }

            stack.mutateTo(position, stackTwist, 0.5f, stackColour);

            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());

            i++;
        }
    }
コード例 #8
0
ファイル: LoxodromeForm.cs プロジェクト: shausoftware/Form3D
    public void createBranch(List<IStack> stacks,
	                  int offset,
	                  IFormConfiguration formConfig, 
	                  ColourConfiguration colourConfig, 
	                  Vector3 branchStartPosition, 
	                  Vector3 branchStartTwist,
	                  Vector3 origin,
	                  FormBounds formBounds)
    {
        Vector3 position = origin;
        Vector3 stackTwist = formConfig.getStackStartTwist();

        float radius = formConfig.getBranchPositionDelta ().x * 20;
        float rhumbAngle = formConfig.getStartRotation().x * 0.032f;

        //colour stuff
        int iterations = formConfig.getStackIterations();
        Color modelColour = new Color (colourConfig.getBaseRed(),
                                       colourConfig.getBaseGreen(),
                                       colourConfig.getBaseBlue(),
                                       1);
        //if cycling override base colour
        if (colourConfig.getCycle ()) {
            modelColour = colourConfig.getCycleColour();
        }

        for (int i = offset; i < offset + iterations; i++) {

            position.x = formConfig.getStartPosition().x + (radius * (float) Math.Cos(i) / (float) Math.Cosh (Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));
            position.y = formConfig.getStartPosition().y + (radius * (float) Math.Sin(i) / (float) Math.Cosh (Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));
            position.z = formConfig.getStartPosition().z + (radius * (float) Math.Tanh(Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));

            formBounds.calculateNewBounds(position);

            //Stack Shape
            IStack stack = new SimpleStack(); //default
            if (formConfig.getStackShape() == IFormConfiguration.StackShape.Sphere) {
                //spehere
                stack = new SimpleStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Box) {
                //box
                stack = new SimpleBoxStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex1) {
                //complex 1
                stack = new ComplexStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex2) {
                //complex 2
                stack = new ComplexStack2();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.SimpleTorus) {
                //simple Torus
                stack = new SimpleTorusStack();
            }

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour()) {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse()) {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.initialise(position, stackTwist, 0.5f, stackColour);
            stacks.Add(stack);

            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
        }
    }
コード例 #9
0
    public void createBranch(List <IStack> stacks,
                             int offset,
                             IFormConfiguration formConfig,
                             ColourConfiguration colourConfig,
                             Vector3 branchStartPosition,
                             Vector3 branchStartTwist,
                             Vector3 origin,
                             FormBounds formBounds)
    {
        int iterations = formConfig.getStackIterations();

        float scale = formConfig.getStartScale();

        for (int o = 0; o < offset; o++)
        {
            scale *= formConfig.getScaleDelta();
        }

        //centre of ring
        Vector3 position = branchStartPosition;

        //add radius of ring
        float ringRadius = formConfig.getBranchPositionDelta().x * 10 * scale;

        //angle to calculate ring
        float zAngle           = branchStartTwist.z * Mathf.Deg2Rad;
        float yAngle           = branchStartTwist.y * Mathf.Deg2Rad;
        float ringSegmentAngle = 360 / iterations * Mathf.Deg2Rad;

        Vector3 stackTwist = formConfig.getStackStartTwist();

        //colour stuff
        Color modelColour = new Color(colourConfig.getBaseRed(),
                                      colourConfig.getBaseGreen(),
                                      colourConfig.getBaseBlue(),
                                      1);

        //if cycling override base colour
        if (colourConfig.getCycle())
        {
            modelColour = colourConfig.getCycleColour();
        }

        for (int i = offset; i < offset + iterations; i++)
        {
            position.x = (ringRadius * Mathf.Cos(zAngle) * Mathf.Sin(yAngle)) + branchStartPosition.x;
            position.y = (ringRadius * Mathf.Sin(zAngle) * Mathf.Sin(yAngle)) + branchStartPosition.y;
            position.z = (ringRadius * Mathf.Cos(yAngle)) + branchStartPosition.z;

            formBounds.calculateNewBounds(position);

            //Stack Shape
            IStack stack = new SimpleStack();             //default
            if (formConfig.getStackShape() == IFormConfiguration.StackShape.Sphere)
            {
                //spehere
                stack = new SimpleStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Box)
            {
                //box
                stack = new SimpleBoxStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex1)
            {
                //complex 1
                stack = new ComplexStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex2)
            {
                //complex 2
                stack = new ComplexStack2();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.SimpleTorus)
            {
                //simple Torus
                stack = new SimpleTorusStack();
            }

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour())
            {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse())
            {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.initialise(position, stackTwist, 0.5f * scale, stackColour);
            stacks.Add(stack);

            yAngle    += ringSegmentAngle;
            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
        }
    }
コード例 #10
0
ファイル: RingForm.cs プロジェクト: shausoftware/Form3D
    public void createBranch(List<IStack> stacks,
	                         int offset,
	                         IFormConfiguration formConfig, 
	                         ColourConfiguration colourConfig, 
	                         Vector3 branchStartPosition, 
	                         Vector3 branchStartTwist,
	                         Vector3 origin,
	                         FormBounds formBounds)
    {
        int iterations = formConfig.getStackIterations();

        float scale = formConfig.getStartScale();
        for (int o = 0; o < offset; o++) {
            scale *= formConfig.getScaleDelta();
        }

        //centre of ring
        Vector3 position = branchStartPosition;

        //add radius of ring
        float ringRadius = formConfig.getBranchPositionDelta().x * 10 * scale;

        //angle to calculate ring
        float zAngle = branchStartTwist.z * Mathf.Deg2Rad;
        float yAngle = branchStartTwist.y * Mathf.Deg2Rad;
        float ringSegmentAngle = 360 / iterations * Mathf.Deg2Rad;

        Vector3 stackTwist = formConfig.getStackStartTwist();

        //colour stuff
        Color modelColour = new Color (colourConfig.getBaseRed(),
                                       colourConfig.getBaseGreen(),
                                       colourConfig.getBaseBlue(),
                                       1);
        //if cycling override base colour
        if (colourConfig.getCycle ()) {
            modelColour = colourConfig.getCycleColour();
        }

        for (int i = offset; i < offset + iterations; i++) {

            position.x = (ringRadius * Mathf.Cos(zAngle) * Mathf.Sin(yAngle)) + branchStartPosition.x;
            position.y = (ringRadius * Mathf.Sin(zAngle) * Mathf.Sin(yAngle)) + branchStartPosition.y;
            position.z = (ringRadius * Mathf.Cos(yAngle)) + branchStartPosition.z;

            formBounds.calculateNewBounds(position);

            //Stack Shape
            IStack stack = new SimpleStack(); //default
            if (formConfig.getStackShape() == IFormConfiguration.StackShape.Sphere) {
                //spehere
                stack = new SimpleStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Box) {
                //box
                stack = new SimpleBoxStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex1) {
                //complex 1
                stack = new ComplexStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex2) {
                //complex 2
                stack = new ComplexStack2();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.SimpleTorus) {
                //simple Torus
                stack = new SimpleTorusStack();
            }

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour()) {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse()) {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.initialise(position, stackTwist, 0.5f * scale, stackColour);
            stacks.Add(stack);

            yAngle += ringSegmentAngle;
            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
        }
    }
コード例 #11
0
ファイル: StarfishForm.cs プロジェクト: andybak/Form3D
    public void mutateBranch(List <IStack> stacks,
                             int offset,
                             IFormConfiguration formConfig,
                             ColourConfiguration colourConfig,
                             Vector3 branchStartPosition,
                             Vector3 branchStartTwist,
                             Vector3 origin,
                             FormBounds formBounds)
    {
        float   scale      = formConfig.getStartScale();
        Vector3 stackTwist = formConfig.getStackStartTwist();
        Vector3 position   = branchStartPosition;
        Vector3 twist      = branchStartTwist;

        //rotate position araound previous branch start position
        position = GeometryUtility.rotateCoordinateAboutPoint(origin,
                                                              position,
                                                              branchStartTwist);

        //colour stuff
        int   iterations  = formConfig.getStackIterations();
        Color modelColour = new Color(colourConfig.getBaseRed(),
                                      colourConfig.getBaseGreen(),
                                      colourConfig.getBaseBlue(),
                                      1);

        //if cycling override base colour
        if (colourConfig.getCycle())
        {
            modelColour = colourConfig.getCycleColour();
        }

        int i = 0;

        foreach (IStack stack in stacks)
        {
            formBounds.calculateNewBounds(position);

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour())
            {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse())
            {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.mutateTo(position, stackTwist, scale, stackColour);

            scale = scale * formConfig.getScaleDelta();

            float positionScale = scale;
            if (!formConfig.getScaleBranch())
            {
                //ignore scale
                positionScale = 1;
            }
            Vector3 newPosition = GeometryUtility.addDeltaToPosition(position,
                                                                     formConfig.getBranchPositionDelta(),
                                                                     positionScale);
            position   = GeometryUtility.rotateCoordinateAboutPoint(position, newPosition, twist);
            twist      = GeometryUtility.addDeltaToRotation(twist, formConfig.getBranchTwistDelta());
            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
            i++;
        }
    }
コード例 #12
0
    public void displayFormBuilderPalette(IFormConfiguration formConfig)
    {
        // Make a background box
        GUI.Box(new Rect(10, 10, 700, 590), "Builder Palette");

        bool displayStarfishControls = false;
        bool displayLoxodromeControls = false;
        bool displayRingControls = false;
        if (formConfig.getFormProcessor ().GetType () == typeof(StarfishForm)) {
            displayStarfishControls = true;
        } else if (formConfig.getFormProcessor ().GetType () == typeof(LoxodromeForm)) {
            displayLoxodromeControls = true;
        } else if (formConfig.getFormProcessor().GetType() == typeof(RingForm)) {
            displayRingControls = true;
        }

        /* TRUNK */

        //start position
        Vector3 startPosition = formConfig.getStartPosition ();
        startPositionX = startPosition.x;
        startPositionY = startPosition.y;
        startPositionZ = startPosition.z;

        GUI.Label (new Rect (20, 40, 150, 20), "Trunk Start Position X");
        startPositionX = GUI.HorizontalSlider (new Rect (180, 45, 180, 20), startPositionX, -5, 5);

        GUI.Label (new Rect (20, 70, 150, 20), "Trunk Start Position Y");
        startPositionY = GUI.HorizontalSlider (new Rect (180, 75, 180, 20), startPositionY, -5, 5);

        GUI.Label (new Rect (20, 100, 150, 20), "Trunk Start Position Z");
        startPositionZ = GUI.HorizontalSlider (new Rect (180, 105, 180, 20), startPositionZ, -5, 5);

        startPosition.x = startPositionX;
        startPosition.y = startPositionY;
        startPosition.z = startPositionZ;
        formConfig.setStartPosition (startPosition);

        // start rotation
        Vector3 startRotation = formConfig.getStartRotation ();
        startRotationX = startRotation.x;
        startRotationY = startRotation.y;
        startRotationZ = startRotation.z;

        if (displayLoxodromeControls) {
            GUI.Label (new Rect (370, 40, 150, 20), "Rhumb Angle");
            //startRotationX = GUI.HorizontalSlider (new Rect (520, 45, 180, 20), startRotationX, 0.1f, 2f);
            startRotationX = GUI.HorizontalSlider (new Rect (520, 45, 180, 20), startRotationX, 0, 2f);
        }
        if (displayStarfishControls) {
            GUI.Label (new Rect (370, 40, 150, 20), "Trunk Start Rotation X");
            startRotationX = GUI.HorizontalSlider (new Rect (520, 45, 180, 20), startRotationX, 0, 360);
        }
        if (displayStarfishControls || displayRingControls) {
            GUI.Label (new Rect (370, 70, 150, 20), "Trunk Start Rotation Y");
            startRotationY = GUI.HorizontalSlider (new Rect (520, 75, 180, 20), startRotationY, 0, 360);

            GUI.Label (new Rect (370, 100, 150, 20), "Trunk Start Rotation Z");
            startRotationZ = GUI.HorizontalSlider (new Rect (520, 105, 180, 20), startRotationZ, 0, 360);
        }

        startRotation.x = startRotationX;
        startRotation.y = startRotationY;
        startRotation.z = startRotationZ;
        formConfig.setStartRotation (startRotation);

        //trunk position delta
        Vector3 trunkPositionDelta = formConfig.getTrunkPositionDelta ();
        trunkPositionDeltaX = trunkPositionDelta.x;
        trunkPositionDeltaY = trunkPositionDelta.y;
        trunkPositionDeltaZ = trunkPositionDelta.z;

        if (displayStarfishControls || displayRingControls) {
            GUI.Label (new Rect (20, 130, 150, 20), "Trunk Position Delta X");
            trunkPositionDeltaX = GUI.HorizontalSlider (new Rect (180, 135, 180, 20), trunkPositionDeltaX, -1, 1);

            GUI.Label (new Rect (20, 160, 150, 20), "Trunk Position Delta Y");
            trunkPositionDeltaY = GUI.HorizontalSlider (new Rect (180, 165, 180, 20), trunkPositionDeltaY, -1, 1);

            GUI.Label (new Rect (20, 190, 150, 20), "Trunk Position Delta Z");
            trunkPositionDeltaZ = GUI.HorizontalSlider (new Rect (180, 195, 180, 20), trunkPositionDeltaZ, -1, 1);
        }

        trunkPositionDelta.x = trunkPositionDeltaX;
        trunkPositionDelta.y = trunkPositionDeltaY;
        trunkPositionDelta.z = trunkPositionDeltaZ;
        formConfig.setTrunkPositionDelta (trunkPositionDelta);

        //trunk rotation delta
        Vector3 trunkRotatiomnDelta = formConfig.getTrunkRotationDelta ();
        trunkRotationDeltaX = trunkRotatiomnDelta.x;
        trunkRotationDeltaY = trunkRotatiomnDelta.y;
        trunkRotationDeltaZ = trunkRotatiomnDelta.z;

        if (displayStarfishControls) {
            GUI.Label (new Rect (20, 220, 150, 20), "Trunk Rotation Delta X");
            trunkRotationDeltaX = GUI.HorizontalSlider (new Rect (180, 225, 180, 20), trunkRotationDeltaX, -60, 60);
        }
        if (displayStarfishControls || displayRingControls) {
            GUI.Label (new Rect (20, 250, 150, 20), "Trunk Rotation Delta Y");
            trunkRotationDeltaY = GUI.HorizontalSlider (new Rect (180, 255, 180, 20), trunkRotationDeltaY, -60, 60);

            GUI.Label (new Rect (20, 280, 150, 20), "Trunk Rotation Delta Z");
            trunkRotationDeltaZ = GUI.HorizontalSlider (new Rect (180, 285, 180, 20), trunkRotationDeltaZ, -60, 60);
        }

        trunkRotatiomnDelta.x = trunkRotationDeltaX;
        trunkRotatiomnDelta.y = trunkRotationDeltaY;
        trunkRotatiomnDelta.z = trunkRotationDeltaZ;
        formConfig.setTrunkRotationDelta (trunkRotatiomnDelta);

        //trunk iterations
        trunkIterations = formConfig.getTrunkIterations ();

        GUI.Label (new Rect (20, 310, 150, 20), "Trunk Iterations *");
        trunkIterations = GUI.HorizontalSlider (new Rect (180, 315, 180, 20), trunkIterations, 1, 24);

        formConfig.setTrunkIterations ((int)trunkIterations);

        /* BRANCH */

        //branch position delta
        Vector3 branchPositionDelta = formConfig.getBranchPositionDelta ();
        branchPositionDeltaX = branchPositionDelta.x;
        branchPositionDeltaY = branchPositionDelta.y;
        branchPositionDeltaZ = branchPositionDelta.z;

        if (displayRingControls || displayLoxodromeControls) {
            GUI.Label (new Rect (370, 130, 150, 20), "Radius");
            branchPositionDeltaX = GUI.HorizontalSlider (new Rect (520, 135, 180, 20), branchPositionDeltaX, 0.2f, 1);
        }
        if (displayStarfishControls) {
            GUI.Label (new Rect (370, 130, 150, 20), "Branch Position Delta X");
            branchPositionDeltaX = GUI.HorizontalSlider (new Rect (520, 135, 180, 20), branchPositionDeltaX, -1, 1);

            GUI.Label (new Rect (370, 160, 150, 20), "Branch Position Delta Y");
            branchPositionDeltaY = GUI.HorizontalSlider (new Rect (520, 165, 180, 20), branchPositionDeltaY, -1, 1);

            GUI.Label (new Rect (370, 190, 150, 20), "Branch Position Delta Z");
            branchPositionDeltaZ = GUI.HorizontalSlider (new Rect (520, 195, 180, 20), branchPositionDeltaZ, -1, 1);
        }

        branchPositionDelta.x = branchPositionDeltaX;
        branchPositionDelta.y = branchPositionDeltaY;
        branchPositionDelta.z = branchPositionDeltaZ;
        formConfig.setBranchPositionDelta (branchPositionDelta);

        //branch rotation delta
        Vector3 branchRotationDelta = formConfig.getBranchTwistDelta ();
        branchRotationDeltaX = branchRotationDelta.x;
        branchRotationDeltaY = branchRotationDelta.y;
        branchRotationDeltaZ = branchRotationDelta.z;

        if (displayStarfishControls) {
            GUI.Label (new Rect (370, 220, 150, 20), "Branch Rotation Delta X");
            branchRotationDeltaX = GUI.HorizontalSlider (new Rect (520, 225, 180, 20), branchRotationDeltaX, -30, 30);

            GUI.Label (new Rect (370, 250, 150, 20), "Branch Rotation Delta Y");
            branchRotationDeltaY = GUI.HorizontalSlider (new Rect (520, 255, 180, 20), branchRotationDeltaY, -30, 30);

            GUI.Label (new Rect (370, 280, 150, 20), "Branch Rotation Delta Z");
            branchRotationDeltaZ = GUI.HorizontalSlider (new Rect (520, 285, 180, 20), branchRotationDeltaZ, -30, 30);
        }

        branchRotationDelta.x = branchRotationDeltaX;
        branchRotationDelta.y = branchRotationDeltaY;
        branchRotationDelta.z = branchRotationDeltaZ;
        formConfig.setBranchTwistDelta (branchRotationDelta);

        //branch iterations
        branchIterations = formConfig.getStackIterations ();

        GUI.Label (new Rect (370, 310, 150, 20), "Branch Iterations *");
        branchIterations = GUI.HorizontalSlider (new Rect (520, 315, 180, 20), branchIterations, 1, 60);

        formConfig.setStackIterations ((int)branchIterations);

        /* STACK */

        //stack start rotation
        Vector3 stackStartRotation = formConfig.getStackStartTwist ();
        stackStartRotationX = stackStartRotation.x;
        stackStartRotationY = stackStartRotation.y;
        stackStartRotationZ = stackStartRotation.z;

        GUI.Label (new Rect (20, 340, 150, 20), "Stack Start Rotation X");
        stackStartRotationX = GUI.HorizontalSlider (new Rect (180, 345, 180, 20), stackStartRotationX, 0, 360);

        GUI.Label (new Rect (20, 370, 150, 20), "Stack Start Rotation Y");
        stackStartRotationY = GUI.HorizontalSlider (new Rect (180, 375, 180, 20), stackStartRotationY, 0, 360);

        GUI.Label (new Rect (20, 400, 150, 20), "Stack Start Rotation Z");
        stackStartRotationZ = GUI.HorizontalSlider (new Rect (180, 405, 180, 20), stackStartRotationZ, 0, 360);

        stackStartRotation.x = stackStartRotationX;
        stackStartRotation.y = stackStartRotationY;
        stackStartRotation.z = stackStartRotationZ;
        formConfig.setStackStartTwist (stackStartRotation);

        //stack rotation delta
        Vector3 stackRotationDelta = formConfig.getStackTwistDelta ();
        stackRotationDeltaX = stackRotationDelta.x;
        stackRotationDeltaY = stackRotationDelta.y;
        stackRotationDeltaZ = stackRotationDelta.z;

        GUI.Label (new Rect (370, 340, 150, 20), "Stack Rotation Delta X");
        stackRotationDeltaX = GUI.HorizontalSlider (new Rect (520, 345, 180, 20), stackRotationDeltaX, -30, 30);

        GUI.Label (new Rect (370, 370, 150, 20), "Stack Rotation Delta Y");
        stackRotationDeltaY = GUI.HorizontalSlider (new Rect (520, 375, 180, 20), stackRotationDeltaY, -30, 30);

        GUI.Label (new Rect (370, 400, 150, 20), "Stack Rotation Delta Z");
        stackRotationDeltaZ = GUI.HorizontalSlider (new Rect (520, 405, 180, 20), stackRotationDeltaZ, -30, 30);

        stackRotationDelta.x = stackRotationDeltaX;
        stackRotationDelta.y = stackRotationDeltaY;
        stackRotationDelta.z = stackRotationDeltaZ;
        formConfig.setStackTwistDelta (stackRotationDelta);

        /* MUTATION STRENGTH */
        mutationStrength = formConfig.getMutationStrength ();

        GUI.Label (new Rect (20, 430, 150, 20), "Mutation Strength");
        mutationStrength = GUI.HorizontalSlider (new Rect (180, 435, 180, 20), mutationStrength, 0.5f, 3.5f);

        formConfig.setMutationStrength (mutationStrength);

        /* SCALING */
        scaling = formConfig.getScaleDelta ();

        GUI.Label (new Rect (370, 430, 150, 20), "Scaling *");
        scaling = GUI.HorizontalSlider (new Rect (520, 435, 180, 20), scaling, 0.9f, 1.1f);

        formConfig.setScaleDelta (scaling);

        /* STACK SHAPE */

        selectedShape = formConfig.getStackShapeIndex ();
        selectedShape = GUI.SelectionGrid (new Rect (20, 460, 200, 60), selectedShape, shapeGridStrings, 2);
        formConfig.setStackShape (selectedShape);

        /* Form Processor */
        if (formConfig.getFormProcessor().GetType() == typeof(StarfishForm)) {
            selectedFormProcessor = 0;
        } else if (formConfig.getFormProcessor().GetType() == typeof(LoxodromeForm)) {
            selectedFormProcessor = 1;
        } else if (formConfig.getFormProcessor().GetType() == typeof(RingForm)) {
            selectedFormProcessor = 2;
        }
        selectedFormProcessor = GUI.SelectionGrid (new Rect (20, 525, 200, 60), selectedFormProcessor, formProcessorStrings, 2);
        if (selectedFormProcessor == 0) {
            formConfig.setFormProcessor(new StarfishForm());
        } else if (selectedFormProcessor == 1) {
            formConfig.setFormProcessor(new LoxodromeForm());
        } else if (selectedFormProcessor == 2) {
            formConfig.setFormProcessor(new RingForm());
        }

        /* Configurations */

        selectedConfiguration = formConfig.getIndex ();
        selectedConfiguration = GUI.SelectionGrid (new Rect (230, 460, 300, 90), selectedConfiguration, configurationGridStrings, 3);
        if (selectedConfiguration != formConfig.getIndex ()) {
            //selected configuration changed
            callback.changeSelectedFormConfig(selectedConfiguration);
        }

        /* Control buttons */

        if (GUI.Button(new Rect(540, 460, 160, 26), "Reset Config")) {
            formConfig.reset();
        }
        if (GUI.Button(new Rect(540, 490, 160, 26), "Create Form")) {
            callback.createNewBrush();
        }
        if (GUI.Button(new Rect(540, 520, 160, 26), "Clear Brush")) {
            callback.clearBrush();
        }

        /* Load and Save buttons */
        if (GUI.Button(new Rect(230, 560, 147, 26), "Load")) {
            ConfigXML.loadConfiguration(formConfig);
        }
        if (GUI.Button(new Rect(383, 560, 147, 26), "Save")) {
            ConfigXML.saveConfiguration(formConfig);
        }
    }
コード例 #13
0
ファイル: ConfigXML.cs プロジェクト: shausoftware/Form3D
    public static void saveConfiguration(IFormConfiguration formConfiguration)
    {
        string fileSavePath = Application.persistentDataPath + "/FormConfigSlot" + (formConfiguration.getIndex() + 1) + ".xml";

        Debug.Log ("Save:" + fileSavePath);

        XmlDocument xmlDoc = new XmlDocument();
        XmlElement root = xmlDoc.CreateElement("", "form", "");

        //save data
        root.SetAttribute("branchPositionDeltaX", formConfiguration.getBranchPositionDelta().x.ToString());
        root.SetAttribute("branchPositionDeltaY", formConfiguration.getBranchPositionDelta().y.ToString());
        root.SetAttribute("branchPositionDeltaZ", formConfiguration.getBranchPositionDelta().z.ToString());

        root.SetAttribute("branchTwistDeltaX", formConfiguration.getBranchTwistDelta().x.ToString());
        root.SetAttribute("branchTwistDeltaY", formConfiguration.getBranchTwistDelta().y.ToString());
        root.SetAttribute("branchTwistDeltaZ", formConfiguration.getBranchTwistDelta().z.ToString());

        root.SetAttribute("index", formConfiguration.getIndex().ToString());
        root.SetAttribute("mutationStrength", formConfiguration.getMutationStrength().ToString());
        root.SetAttribute("scaleBranch", formConfiguration.getScaleBranch().ToString());
        root.SetAttribute("scaleDelta", formConfiguration.getScaleDelta().ToString());
        root.SetAttribute("scaleTrunk", formConfiguration.getScaleTrunk().ToString());
        root.SetAttribute("stackIterations", formConfiguration.getStackIterations().ToString());
        root.SetAttribute("stackShapeIndex", formConfiguration.getStackShapeIndex().ToString());

        root.SetAttribute("stackStartTwistX", formConfiguration.getStackStartTwist().x.ToString());
        root.SetAttribute("stackStartTwistY", formConfiguration.getStackStartTwist().y.ToString());
        root.SetAttribute("stackStartTwistZ", formConfiguration.getStackStartTwist().z.ToString());

        root.SetAttribute("stackTwistDeltaX", formConfiguration.getStackTwistDelta().x.ToString());
        root.SetAttribute("stackTwistDeltaY", formConfiguration.getStackTwistDelta().y.ToString());
        root.SetAttribute("stackTwistDeltaZ", formConfiguration.getStackTwistDelta().z.ToString());

        root.SetAttribute("startPositionX", formConfiguration.getStartPosition().x.ToString());
        root.SetAttribute("startPositionY", formConfiguration.getStartPosition().y.ToString());
        root.SetAttribute("startPositionZ", formConfiguration.getStartPosition().z.ToString());

        root.SetAttribute("startRotationX", formConfiguration.getStartRotation().x.ToString());
        root.SetAttribute("startRotationY", formConfiguration.getStartRotation().y.ToString());
        root.SetAttribute("startRotationZ", formConfiguration.getStartRotation().z.ToString());

        root.SetAttribute("startScale", formConfiguration.getStartScale().ToString());
        root.SetAttribute("trunkIterations", formConfiguration.getTrunkIterations().ToString());

        root.SetAttribute("trunkPositionDeltaX", formConfiguration.getTrunkPositionDelta().x.ToString());
        root.SetAttribute("trunkPositionDeltaY", formConfiguration.getTrunkPositionDelta().y.ToString());
        root.SetAttribute("trunkPositionDeltaZ", formConfiguration.getTrunkPositionDelta().z.ToString());

        root.SetAttribute("trunklRotationDeltaX", formConfiguration.getTrunkRotationDelta().x.ToString());
        root.SetAttribute("trunklRotationDeltaY", formConfiguration.getTrunkRotationDelta().y.ToString());
        root.SetAttribute("trunklRotationDeltaZ", formConfiguration.getTrunkRotationDelta().z.ToString());

        xmlDoc.AppendChild(root);
        //save
        xmlDoc.Save(fileSavePath);
    }
コード例 #14
0
ファイル: StarfishForm.cs プロジェクト: shausoftware/Form3D
    public void createBranch(List<IStack> stacks, 
	                  int offset,
	                  IFormConfiguration formConfig, 
	                  ColourConfiguration colourConfig, 
	                  Vector3 branchStartPosition, 
	                  Vector3 branchStartTwist,
	                  Vector3 origin,
	                  FormBounds formBounds)
    {
        float scale = formConfig.getStartScale();
        Vector3 stackTwist = formConfig.getStackStartTwist();
        Vector3 position = branchStartPosition;
        Vector3 twist = branchStartTwist;
        //rotate position araound previous branch start position
        position = GeometryUtility.rotateCoordinateAboutPoint(origin,
                                                              position,
                                                              branchStartTwist);

        //colour stuff
        int iterations = formConfig.getStackIterations();
        Color modelColour = new Color (colourConfig.getBaseRed(),
                                       colourConfig.getBaseGreen(),
                                       colourConfig.getBaseBlue(),
                                       1);
        //if cycling override base colour
        if (colourConfig.getCycle ()) {
            modelColour = colourConfig.getCycleColour();
        }

        for (int i = 0; i < iterations; i++) {

            formBounds.calculateNewBounds(position);

            //Stack Shape
            IStack stack = new SimpleStack(); //default
            if (formConfig.getStackShape() == IFormConfiguration.StackShape.Sphere) {
                //spehere
                stack = new SimpleStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Box) {
                //box
                stack = new SimpleBoxStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex1) {
                //complex 1
                stack = new ComplexStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex2) {
                //complex 2
                stack = new ComplexStack2();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.SimpleTorus) {
                //simple Torus
                stack = new SimpleTorusStack();
            }

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour()) {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse()) {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.initialise(position, stackTwist, scale, stackColour);
            stacks.Add(stack);

            scale = scale * formConfig.getScaleDelta();
            Vector3 newPosition = GeometryUtility.addDeltaToPosition(position, formConfig.getBranchPositionDelta(), scale);
            position = GeometryUtility.rotateCoordinateAboutPoint(position, newPosition, twist);
            twist = GeometryUtility.addDeltaToRotation(twist, formConfig.getBranchTwistDelta());
            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
        }
    }
コード例 #15
0
ファイル: StarfishForm.cs プロジェクト: shausoftware/Form3D
    public void mutateBranch(List<IStack> stacks,
	                  int offset,
	                  IFormConfiguration formConfig, 
	                  ColourConfiguration colourConfig, 
	                  Vector3 branchStartPosition, 
	                  Vector3 branchStartTwist,
	                  Vector3 origin,
	                  FormBounds formBounds)
    {
        float scale = formConfig.getStartScale();
        Vector3 stackTwist = formConfig.getStackStartTwist();
        Vector3 position = branchStartPosition;
        Vector3 twist = branchStartTwist;
        //rotate position araound previous branch start position
        position = GeometryUtility.rotateCoordinateAboutPoint(origin,
                                                              position,
                                                              branchStartTwist);

        //colour stuff
        int iterations = formConfig.getStackIterations();
        Color modelColour = new Color (colourConfig.getBaseRed(),
                                       colourConfig.getBaseGreen(),
                                       colourConfig.getBaseBlue(),
                                       1);
        //if cycling override base colour
        if (colourConfig.getCycle ()) {
            modelColour = colourConfig.getCycleColour();
        }

        int i = 0;
        foreach (IStack stack in stacks) {

            formBounds.calculateNewBounds(position);

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour()) {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse()) {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.mutateTo(position, stackTwist, scale, stackColour);

            scale = scale * formConfig.getScaleDelta();

            float positionScale = scale;
            if (!formConfig.getScaleBranch()) {
                //ignore scale
                positionScale = 1;
            }
            Vector3 newPosition = GeometryUtility.addDeltaToPosition(position,
                                                                     formConfig.getBranchPositionDelta(),
                                                                     positionScale);
            position = GeometryUtility.rotateCoordinateAboutPoint(position, newPosition, twist);
            twist = GeometryUtility.addDeltaToRotation(twist, formConfig.getBranchTwistDelta());
            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
            i++;
        }
    }
コード例 #16
0
    public void displayFormBuilderPalette(IFormConfiguration formConfig)
    {
        // Make a background box
        GUI.Box(new Rect(10, 10, 700, 590), "Builder Palette");

        bool displayStarfishControls  = false;
        bool displayLoxodromeControls = false;
        bool displayRingControls      = false;

        if (formConfig.getFormProcessor().GetType() == typeof(StarfishForm))
        {
            displayStarfishControls = true;
        }
        else if (formConfig.getFormProcessor().GetType() == typeof(LoxodromeForm))
        {
            displayLoxodromeControls = true;
        }
        else if (formConfig.getFormProcessor().GetType() == typeof(RingForm))
        {
            displayRingControls = true;
        }

        /* TRUNK */

        //start position
        Vector3 startPosition = formConfig.getStartPosition();

        startPositionX = startPosition.x;
        startPositionY = startPosition.y;
        startPositionZ = startPosition.z;

        GUI.Label(new Rect(20, 40, 150, 20), "Trunk Start Position X");
        startPositionX = GUI.HorizontalSlider(new Rect(180, 45, 180, 20), startPositionX, -5, 5);

        GUI.Label(new Rect(20, 70, 150, 20), "Trunk Start Position Y");
        startPositionY = GUI.HorizontalSlider(new Rect(180, 75, 180, 20), startPositionY, -5, 5);

        GUI.Label(new Rect(20, 100, 150, 20), "Trunk Start Position Z");
        startPositionZ = GUI.HorizontalSlider(new Rect(180, 105, 180, 20), startPositionZ, -5, 5);

        startPosition.x = startPositionX;
        startPosition.y = startPositionY;
        startPosition.z = startPositionZ;
        formConfig.setStartPosition(startPosition);

        // start rotation
        Vector3 startRotation = formConfig.getStartRotation();

        startRotationX = startRotation.x;
        startRotationY = startRotation.y;
        startRotationZ = startRotation.z;

        if (displayLoxodromeControls)
        {
            GUI.Label(new Rect(370, 40, 150, 20), "Rhumb Angle");
            //startRotationX = GUI.HorizontalSlider (new Rect (520, 45, 180, 20), startRotationX, 0.1f, 2f);
            startRotationX = GUI.HorizontalSlider(new Rect(520, 45, 180, 20), startRotationX, 0, 2f);
        }
        if (displayStarfishControls)
        {
            GUI.Label(new Rect(370, 40, 150, 20), "Trunk Start Rotation X");
            startRotationX = GUI.HorizontalSlider(new Rect(520, 45, 180, 20), startRotationX, 0, 360);
        }
        if (displayStarfishControls || displayRingControls)
        {
            GUI.Label(new Rect(370, 70, 150, 20), "Trunk Start Rotation Y");
            startRotationY = GUI.HorizontalSlider(new Rect(520, 75, 180, 20), startRotationY, 0, 360);

            GUI.Label(new Rect(370, 100, 150, 20), "Trunk Start Rotation Z");
            startRotationZ = GUI.HorizontalSlider(new Rect(520, 105, 180, 20), startRotationZ, 0, 360);
        }

        startRotation.x = startRotationX;
        startRotation.y = startRotationY;
        startRotation.z = startRotationZ;
        formConfig.setStartRotation(startRotation);

        //trunk position delta
        Vector3 trunkPositionDelta = formConfig.getTrunkPositionDelta();

        trunkPositionDeltaX = trunkPositionDelta.x;
        trunkPositionDeltaY = trunkPositionDelta.y;
        trunkPositionDeltaZ = trunkPositionDelta.z;

        if (displayStarfishControls || displayRingControls)
        {
            GUI.Label(new Rect(20, 130, 150, 20), "Trunk Position Delta X");
            trunkPositionDeltaX = GUI.HorizontalSlider(new Rect(180, 135, 180, 20), trunkPositionDeltaX, -1, 1);

            GUI.Label(new Rect(20, 160, 150, 20), "Trunk Position Delta Y");
            trunkPositionDeltaY = GUI.HorizontalSlider(new Rect(180, 165, 180, 20), trunkPositionDeltaY, -1, 1);

            GUI.Label(new Rect(20, 190, 150, 20), "Trunk Position Delta Z");
            trunkPositionDeltaZ = GUI.HorizontalSlider(new Rect(180, 195, 180, 20), trunkPositionDeltaZ, -1, 1);
        }

        trunkPositionDelta.x = trunkPositionDeltaX;
        trunkPositionDelta.y = trunkPositionDeltaY;
        trunkPositionDelta.z = trunkPositionDeltaZ;
        formConfig.setTrunkPositionDelta(trunkPositionDelta);

        //trunk rotation delta
        Vector3 trunkRotatiomnDelta = formConfig.getTrunkRotationDelta();

        trunkRotationDeltaX = trunkRotatiomnDelta.x;
        trunkRotationDeltaY = trunkRotatiomnDelta.y;
        trunkRotationDeltaZ = trunkRotatiomnDelta.z;

        if (displayStarfishControls)
        {
            GUI.Label(new Rect(20, 220, 150, 20), "Trunk Rotation Delta X");
            trunkRotationDeltaX = GUI.HorizontalSlider(new Rect(180, 225, 180, 20), trunkRotationDeltaX, -60, 60);
        }
        if (displayStarfishControls || displayRingControls)
        {
            GUI.Label(new Rect(20, 250, 150, 20), "Trunk Rotation Delta Y");
            trunkRotationDeltaY = GUI.HorizontalSlider(new Rect(180, 255, 180, 20), trunkRotationDeltaY, -60, 60);

            GUI.Label(new Rect(20, 280, 150, 20), "Trunk Rotation Delta Z");
            trunkRotationDeltaZ = GUI.HorizontalSlider(new Rect(180, 285, 180, 20), trunkRotationDeltaZ, -60, 60);
        }

        trunkRotatiomnDelta.x = trunkRotationDeltaX;
        trunkRotatiomnDelta.y = trunkRotationDeltaY;
        trunkRotatiomnDelta.z = trunkRotationDeltaZ;
        formConfig.setTrunkRotationDelta(trunkRotatiomnDelta);

        //trunk iterations
        trunkIterations = formConfig.getTrunkIterations();

        GUI.Label(new Rect(20, 310, 150, 20), "Trunk Iterations *");
        trunkIterations = GUI.HorizontalSlider(new Rect(180, 315, 180, 20), trunkIterations, 1, 24);

        formConfig.setTrunkIterations((int)trunkIterations);

        /* BRANCH */

        //branch position delta
        Vector3 branchPositionDelta = formConfig.getBranchPositionDelta();

        branchPositionDeltaX = branchPositionDelta.x;
        branchPositionDeltaY = branchPositionDelta.y;
        branchPositionDeltaZ = branchPositionDelta.z;

        if (displayRingControls || displayLoxodromeControls)
        {
            GUI.Label(new Rect(370, 130, 150, 20), "Radius");
            branchPositionDeltaX = GUI.HorizontalSlider(new Rect(520, 135, 180, 20), branchPositionDeltaX, 0.2f, 1);
        }
        if (displayStarfishControls)
        {
            GUI.Label(new Rect(370, 130, 150, 20), "Branch Position Delta X");
            branchPositionDeltaX = GUI.HorizontalSlider(new Rect(520, 135, 180, 20), branchPositionDeltaX, -1, 1);

            GUI.Label(new Rect(370, 160, 150, 20), "Branch Position Delta Y");
            branchPositionDeltaY = GUI.HorizontalSlider(new Rect(520, 165, 180, 20), branchPositionDeltaY, -1, 1);

            GUI.Label(new Rect(370, 190, 150, 20), "Branch Position Delta Z");
            branchPositionDeltaZ = GUI.HorizontalSlider(new Rect(520, 195, 180, 20), branchPositionDeltaZ, -1, 1);
        }

        branchPositionDelta.x = branchPositionDeltaX;
        branchPositionDelta.y = branchPositionDeltaY;
        branchPositionDelta.z = branchPositionDeltaZ;
        formConfig.setBranchPositionDelta(branchPositionDelta);

        //branch rotation delta
        Vector3 branchRotationDelta = formConfig.getBranchTwistDelta();

        branchRotationDeltaX = branchRotationDelta.x;
        branchRotationDeltaY = branchRotationDelta.y;
        branchRotationDeltaZ = branchRotationDelta.z;

        if (displayStarfishControls)
        {
            GUI.Label(new Rect(370, 220, 150, 20), "Branch Rotation Delta X");
            branchRotationDeltaX = GUI.HorizontalSlider(new Rect(520, 225, 180, 20), branchRotationDeltaX, -30, 30);

            GUI.Label(new Rect(370, 250, 150, 20), "Branch Rotation Delta Y");
            branchRotationDeltaY = GUI.HorizontalSlider(new Rect(520, 255, 180, 20), branchRotationDeltaY, -30, 30);

            GUI.Label(new Rect(370, 280, 150, 20), "Branch Rotation Delta Z");
            branchRotationDeltaZ = GUI.HorizontalSlider(new Rect(520, 285, 180, 20), branchRotationDeltaZ, -30, 30);
        }

        branchRotationDelta.x = branchRotationDeltaX;
        branchRotationDelta.y = branchRotationDeltaY;
        branchRotationDelta.z = branchRotationDeltaZ;
        formConfig.setBranchTwistDelta(branchRotationDelta);

        //branch iterations
        branchIterations = formConfig.getStackIterations();

        GUI.Label(new Rect(370, 310, 150, 20), "Branch Iterations *");
        branchIterations = GUI.HorizontalSlider(new Rect(520, 315, 180, 20), branchIterations, 1, 60);

        formConfig.setStackIterations((int)branchIterations);

        /* STACK */

        //stack start rotation
        Vector3 stackStartRotation = formConfig.getStackStartTwist();

        stackStartRotationX = stackStartRotation.x;
        stackStartRotationY = stackStartRotation.y;
        stackStartRotationZ = stackStartRotation.z;

        GUI.Label(new Rect(20, 340, 150, 20), "Stack Start Rotation X");
        stackStartRotationX = GUI.HorizontalSlider(new Rect(180, 345, 180, 20), stackStartRotationX, 0, 360);

        GUI.Label(new Rect(20, 370, 150, 20), "Stack Start Rotation Y");
        stackStartRotationY = GUI.HorizontalSlider(new Rect(180, 375, 180, 20), stackStartRotationY, 0, 360);

        GUI.Label(new Rect(20, 400, 150, 20), "Stack Start Rotation Z");
        stackStartRotationZ = GUI.HorizontalSlider(new Rect(180, 405, 180, 20), stackStartRotationZ, 0, 360);

        stackStartRotation.x = stackStartRotationX;
        stackStartRotation.y = stackStartRotationY;
        stackStartRotation.z = stackStartRotationZ;
        formConfig.setStackStartTwist(stackStartRotation);

        //stack rotation delta
        Vector3 stackRotationDelta = formConfig.getStackTwistDelta();

        stackRotationDeltaX = stackRotationDelta.x;
        stackRotationDeltaY = stackRotationDelta.y;
        stackRotationDeltaZ = stackRotationDelta.z;

        GUI.Label(new Rect(370, 340, 150, 20), "Stack Rotation Delta X");
        stackRotationDeltaX = GUI.HorizontalSlider(new Rect(520, 345, 180, 20), stackRotationDeltaX, -30, 30);

        GUI.Label(new Rect(370, 370, 150, 20), "Stack Rotation Delta Y");
        stackRotationDeltaY = GUI.HorizontalSlider(new Rect(520, 375, 180, 20), stackRotationDeltaY, -30, 30);

        GUI.Label(new Rect(370, 400, 150, 20), "Stack Rotation Delta Z");
        stackRotationDeltaZ = GUI.HorizontalSlider(new Rect(520, 405, 180, 20), stackRotationDeltaZ, -30, 30);

        stackRotationDelta.x = stackRotationDeltaX;
        stackRotationDelta.y = stackRotationDeltaY;
        stackRotationDelta.z = stackRotationDeltaZ;
        formConfig.setStackTwistDelta(stackRotationDelta);

        /* MUTATION STRENGTH */
        mutationStrength = formConfig.getMutationStrength();

        GUI.Label(new Rect(20, 430, 150, 20), "Mutation Strength");
        mutationStrength = GUI.HorizontalSlider(new Rect(180, 435, 180, 20), mutationStrength, 0.5f, 3.5f);

        formConfig.setMutationStrength(mutationStrength);

        /* SCALING */
        scaling = formConfig.getScaleDelta();

        GUI.Label(new Rect(370, 430, 150, 20), "Scaling *");
        scaling = GUI.HorizontalSlider(new Rect(520, 435, 180, 20), scaling, 0.9f, 1.1f);

        formConfig.setScaleDelta(scaling);

        /* STACK SHAPE */

        selectedShape = formConfig.getStackShapeIndex();
        selectedShape = GUI.SelectionGrid(new Rect(20, 460, 200, 60), selectedShape, shapeGridStrings, 2);
        formConfig.setStackShape(selectedShape);

        /* Form Processor */
        if (formConfig.getFormProcessor().GetType() == typeof(StarfishForm))
        {
            selectedFormProcessor = 0;
        }
        else if (formConfig.getFormProcessor().GetType() == typeof(LoxodromeForm))
        {
            selectedFormProcessor = 1;
        }
        else if (formConfig.getFormProcessor().GetType() == typeof(RingForm))
        {
            selectedFormProcessor = 2;
        }
        selectedFormProcessor = GUI.SelectionGrid(new Rect(20, 525, 200, 60), selectedFormProcessor, formProcessorStrings, 2);
        if (selectedFormProcessor == 0)
        {
            formConfig.setFormProcessor(new StarfishForm());
        }
        else if (selectedFormProcessor == 1)
        {
            formConfig.setFormProcessor(new LoxodromeForm());
        }
        else if (selectedFormProcessor == 2)
        {
            formConfig.setFormProcessor(new RingForm());
        }

        /* Configurations */

        selectedConfiguration = formConfig.getIndex();
        selectedConfiguration = GUI.SelectionGrid(new Rect(230, 460, 300, 90), selectedConfiguration, configurationGridStrings, 3);
        if (selectedConfiguration != formConfig.getIndex())
        {
            //selected configuration changed
            callback.changeSelectedFormConfig(selectedConfiguration);
        }

        /* Control buttons */

        if (GUI.Button(new Rect(540, 460, 160, 26), "Reset Config"))
        {
            formConfig.reset();
        }
        if (GUI.Button(new Rect(540, 490, 160, 26), "Create Form"))
        {
            callback.createNewBrush();
        }
        if (GUI.Button(new Rect(540, 520, 160, 26), "Clear Brush"))
        {
            callback.clearBrush();
        }

        /* Load and Save buttons */
        if (GUI.Button(new Rect(230, 560, 147, 26), "Load"))
        {
            ConfigXML.loadConfiguration(formConfig);
        }
        if (GUI.Button(new Rect(383, 560, 147, 26), "Save"))
        {
            ConfigXML.saveConfiguration(formConfig);
        }
    }
コード例 #17
0
ファイル: LoxodromeForm.cs プロジェクト: andybak/Form3D
    public void createBranch(List <IStack> stacks,
                             int offset,
                             IFormConfiguration formConfig,
                             ColourConfiguration colourConfig,
                             Vector3 branchStartPosition,
                             Vector3 branchStartTwist,
                             Vector3 origin,
                             FormBounds formBounds)
    {
        Vector3 position   = origin;
        Vector3 stackTwist = formConfig.getStackStartTwist();

        float radius     = formConfig.getBranchPositionDelta().x * 20;
        float rhumbAngle = formConfig.getStartRotation().x * 0.032f;

        //colour stuff
        int   iterations  = formConfig.getStackIterations();
        Color modelColour = new Color(colourConfig.getBaseRed(),
                                      colourConfig.getBaseGreen(),
                                      colourConfig.getBaseBlue(),
                                      1);

        //if cycling override base colour
        if (colourConfig.getCycle())
        {
            modelColour = colourConfig.getCycleColour();
        }

        for (int i = offset; i < offset + iterations; i++)
        {
            position.x = formConfig.getStartPosition().x + (radius * (float)Math.Cos(i) / (float)Math.Cosh(Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));
            position.y = formConfig.getStartPosition().y + (radius * (float)Math.Sin(i) / (float)Math.Cosh(Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));
            position.z = formConfig.getStartPosition().z + (radius * (float)Math.Tanh(Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));

            formBounds.calculateNewBounds(position);

            //Stack Shape
            IStack stack = new SimpleStack();             //default
            if (formConfig.getStackShape() == IFormConfiguration.StackShape.Sphere)
            {
                //spehere
                stack = new SimpleStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Box)
            {
                //box
                stack = new SimpleBoxStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex1)
            {
                //complex 1
                stack = new ComplexStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex2)
            {
                //complex 2
                stack = new ComplexStack2();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.SimpleTorus)
            {
                //simple Torus
                stack = new SimpleTorusStack();
            }

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour())
            {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse())
            {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.initialise(position, stackTwist, 0.5f, stackColour);
            stacks.Add(stack);

            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
        }
    }
コード例 #18
0
    public void mutateBranch(List <IStack> stacks,
                             int offset,
                             IFormConfiguration formConfig,
                             ColourConfiguration colourConfig,
                             Vector3 branchStartPosition,
                             Vector3 branchStartTwist,
                             Vector3 origin,
                             FormBounds formBounds)
    {
        int iterations = formConfig.getStackIterations();

        float scale = formConfig.getStartScale();

        for (int o = 0; o < offset; o++)
        {
            scale *= formConfig.getScaleDelta();
        }

        //centre of ring
        Vector3 position = branchStartPosition;

        //add radius of ring
        float ringRadius = formConfig.getBranchPositionDelta().x * 10 * scale;

        //first element of ring on radius
        float zAngle = branchStartTwist.z * Mathf.Deg2Rad;
        float yAngle = branchStartTwist.y * Mathf.Deg2Rad;

        float ringSegmentAngle = 360 / iterations * Mathf.Deg2Rad;

        Vector3 stackTwist = formConfig.getStackStartTwist();

        //colour stuff
        Color modelColour = new Color(colourConfig.getBaseRed(),
                                      colourConfig.getBaseGreen(),
                                      colourConfig.getBaseBlue(),
                                      1);

        //if cycling override base colour
        if (colourConfig.getCycle())
        {
            modelColour = colourConfig.getCycleColour();
        }

        int i = 0;

        foreach (IStack stack in stacks)
        {
            position.x = (ringRadius * Mathf.Cos(zAngle) * Mathf.Sin(yAngle)) + branchStartPosition.x;
            position.y = (ringRadius * Mathf.Sin(zAngle) * Mathf.Sin(yAngle)) + branchStartPosition.y;
            position.z = (ringRadius * Mathf.Cos(yAngle)) + branchStartPosition.z;

            formBounds.calculateNewBounds(position);

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour())
            {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse())
            {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.mutateTo(position, stackTwist, 0.5f * scale, stackColour);

            yAngle += ringSegmentAngle;

            yAngle    += ringSegmentAngle;
            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
            i++;
        }
    }
コード例 #19
0
ファイル: StarfishForm.cs プロジェクト: andybak/Form3D
    public void createBranch(List <IStack> stacks,
                             int offset,
                             IFormConfiguration formConfig,
                             ColourConfiguration colourConfig,
                             Vector3 branchStartPosition,
                             Vector3 branchStartTwist,
                             Vector3 origin,
                             FormBounds formBounds)
    {
        float   scale      = formConfig.getStartScale();
        Vector3 stackTwist = formConfig.getStackStartTwist();
        Vector3 position   = branchStartPosition;
        Vector3 twist      = branchStartTwist;

        //rotate position araound previous branch start position
        position = GeometryUtility.rotateCoordinateAboutPoint(origin,
                                                              position,
                                                              branchStartTwist);

        //colour stuff
        int   iterations  = formConfig.getStackIterations();
        Color modelColour = new Color(colourConfig.getBaseRed(),
                                      colourConfig.getBaseGreen(),
                                      colourConfig.getBaseBlue(),
                                      1);

        //if cycling override base colour
        if (colourConfig.getCycle())
        {
            modelColour = colourConfig.getCycleColour();
        }

        for (int i = 0; i < iterations; i++)
        {
            formBounds.calculateNewBounds(position);

            //Stack Shape
            IStack stack = new SimpleStack();             //default
            if (formConfig.getStackShape() == IFormConfiguration.StackShape.Sphere)
            {
                //spehere
                stack = new SimpleStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Box)
            {
                //box
                stack = new SimpleBoxStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex1)
            {
                //complex 1
                stack = new ComplexStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex2)
            {
                //complex 2
                stack = new ComplexStack2();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.SimpleTorus)
            {
                //simple Torus
                stack = new SimpleTorusStack();
            }

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour())
            {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse())
            {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.initialise(position, stackTwist, scale, stackColour);
            stacks.Add(stack);

            scale = scale * formConfig.getScaleDelta();
            Vector3 newPosition = GeometryUtility.addDeltaToPosition(position, formConfig.getBranchPositionDelta(), scale);
            position   = GeometryUtility.rotateCoordinateAboutPoint(position, newPosition, twist);
            twist      = GeometryUtility.addDeltaToRotation(twist, formConfig.getBranchTwistDelta());
            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
        }
    }
コード例 #20
0
ファイル: RingForm.cs プロジェクト: shausoftware/Form3D
    public void mutateBranch(List<IStack> stacks,
	                         int offset,
	                         IFormConfiguration formConfig, 
	                         ColourConfiguration colourConfig, 
	                         Vector3 branchStartPosition, 
	                         Vector3 branchStartTwist,
	                         Vector3 origin,
	                         FormBounds formBounds)
    {
        int iterations = formConfig.getStackIterations();

        float scale = formConfig.getStartScale();
        for (int o = 0; o < offset; o++) {
            scale *= formConfig.getScaleDelta();
        }

        //centre of ring
        Vector3 position = branchStartPosition;

        //add radius of ring
        float ringRadius = formConfig.getBranchPositionDelta().x * 10 * scale;

        //first element of ring on radius
        float zAngle = branchStartTwist.z * Mathf.Deg2Rad;
        float yAngle = branchStartTwist.y * Mathf.Deg2Rad;

        float ringSegmentAngle = 360 / iterations * Mathf.Deg2Rad;

        Vector3 stackTwist = formConfig.getStackStartTwist();

        //colour stuff
        Color modelColour = new Color (colourConfig.getBaseRed(),
                                       colourConfig.getBaseGreen(),
                                       colourConfig.getBaseBlue(),
                                       1);

        //if cycling override base colour
        if (colourConfig.getCycle ()) {
            modelColour = colourConfig.getCycleColour();
        }

        int i = 0;
        foreach (IStack stack in stacks) {

            position.x = (ringRadius * Mathf.Cos(zAngle) * Mathf.Sin(yAngle)) + branchStartPosition.x;
            position.y = (ringRadius * Mathf.Sin(zAngle) * Mathf.Sin(yAngle)) + branchStartPosition.y;
            position.z = (ringRadius * Mathf.Cos(yAngle)) + branchStartPosition.z;

            formBounds.calculateNewBounds(position);

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour()) {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse()) {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.mutateTo(position, stackTwist, 0.5f * scale, stackColour);

            yAngle += ringSegmentAngle;

            yAngle += ringSegmentAngle;
            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
            i++;
        }
    }