예제 #1
0
 /// <summary>
 /// Main constructor
 /// </summary>
 public BiomorpherReader()
     : base("BiomorpherReader", "BiomorpherReader", "Uses Biomorpher data to display paramter states", "Params", "Util")
 {
     canvas = Instances.ActiveCanvas;
     this.IconDisplayMode = GH_IconDisplayMode.icon;
     isActive             = true;
 }
예제 #2
0
        private void Canvas_CanvasPrePaintObjects(Grasshopper.GUI.Canvas.GH_Canvas sender)
        {
            if (!sender.IsDocument || !Settings.DisplayNames)
            {
                return;
            }

            _visibleObjects  = null;
            _filteredObjects = null;

            if (!Settings.DisplayNames && !Settings.DisplayRichedCapsules || !sender.IsDocument)
            {
                return;
            }
            _visibleObjects = Drawing.GetVisibleObjects(sender, sender.Document.Objects).ToArray();
            if (_visibleObjects == null || _visibleObjects.Length == 0)
            {
                return;
            }

            _filteredObjects = _visibleObjects.Where(obj => ObjectFilter(obj)).ToArray();

            if (_filteredObjects == null || _visibleObjects.Length == 0)
            {
                return;
            }
            Drawing.PaintNames(sender.Graphics, _filteredObjects);
        }
 /// <summary>
 /// Main constructor
 /// </summary>
 public BiomorpherComponent()
     : base("Biomorpher", "Biomorpher", "Interactive Genetic Algorithms for Grasshopper", "Params", "Util")
 {
     solveinstanceCounter = 0;
     canvas = Instances.ActiveCanvas;
     this.IconDisplayMode = GH_IconDisplayMode.icon;
 }
예제 #4
0
 private void Canvas_CanvasPostPaintObjects(Grasshopper.GUI.Canvas.GH_Canvas sender)
 {
     if (!Settings.DisplayRichedCapsules || !sender.IsDocument)
     {
         return;
     }
     if (_visibleObjects == null || _visibleObjects.Length == 0)
     {
         return;
     }
     Drawing.PaintRichedCapsules(sender, _visibleObjects);
 }
예제 #5
0
        private BiomorpherData localSolutionData; // Monitor if it has changed

        /// <summary>
        /// Main constructor
        /// </summary>
        public BiomorpherReader()
            : base("BiomorpherReader", "BiomorpherReader", "Uses Biomorpher data to display paramter states", "Params", "Util")
        {
            canvas = Instances.ActiveCanvas;
            this.IconDisplayMode = GH_IconDisplayMode.icon;

            active            = false;
            localBranch       = -1;
            localGeneration   = -1;
            localDesign       = -1;
            localSolutionData = null;
        }
예제 #6
0
        public TetrisBoard(Grasshopper.GUI.Canvas.GH_Canvas canvas_, int rows_, int columns_, int cellSize_)
        {
            insertionPoint = new PointF(0, 0);
            canvas         = canvas_;
            rows           = rows_;
            columns        = columns_;
            cellSize       = cellSize_;

            //Set timer

            timer           = new Timer(650);
            timer.AutoReset = true;
            timer.Elapsed  += OnElapsed;
            timer.Enabled   = true;

            //Create color pallete

            colorPalette = new List <Color>
            {
                Color.FromArgb(255, 144, 203, 209),
                Color.FromArgb(255, 97, 180, 188),
                Color.FromArgb(255, 255, 123, 104),
                Color.FromArgb(255, 255, 85, 59),
                Color.FromArgb(255, 255, 219, 97),
                Color.FromArgb(255, 255, 203, 31),
                Color.FromArgb(255, 251, 173, 90),
                Color.FromArgb(255, 250, 150, 39),
                Color.FromArgb(255, 134, 190, 81),
                Color.FromArgb(255, 100, 171, 33),
                Color.FromArgb(255, 242, 130, 170),
                Color.FromArgb(255, 240, 97, 151),
                Color.FromArgb(255, 97, 153, 204),
                Color.FromArgb(255, 50, 124, 187),
            };

            cells = new List <List <BoardCell> >();

            //Initialize board
            for (int i = 0; i < rows; i++)
            {
                List <BoardCell> row = new List <BoardCell>();

                for (int u = 0; u < columns; u++)
                {
                    BoardCell cell = new BoardCell(this, i, u, cellSize);
                    row.Add(cell);
                }

                cells.Add(row);
            }
        }
예제 #7
0
        private void Instances_CanvasCreated(Grasshopper.GUI.Canvas.GH_Canvas canvas)
        {
            Grasshopper.Instances.CanvasCreated -= Instances_CanvasCreated;

            var editor = Grasshopper.Instances.DocumentEditor;

            if (editor == null)
            {
                return;
            }
            var menu = editor.MainMenuStrip.Items.Find("mnuDisplay", false);

            if (menu == null)
            {
                Rhino.RhinoApp.WriteLine("Sunglasses cannot find Display menu.");
                return;
            }
            ((ToolStripMenuItem)menu[0]).DropDownItems.Insert(3, new SunglassesMenuItem());
        }
예제 #8
0
        // This method draws the moving images on the background
        public void canvasPaintHandler(Grasshopper.GUI.Canvas.GH_Canvas canvas)
        {
            if (random.NextDouble() > 0.95)
            {
                MovingImage newImage = new MovingImage();
                activeImages.Add(newImage);

                if (activeImages.Count > 10)
                {
                    activeImages.RemoveAt(0);
                }
            }

            foreach (MovingImage img in activeImages)
            {
                img.Update();
                img.Draw();
            }
        }
예제 #9
0
        private void Canvas_CanvasPostPaintObjects(Grasshopper.GUI.Canvas.GH_Canvas sender)
        {
            if (!sender.IsDocument || _visibleObjects == null || _visibleObjects.Length == 0)
            {
                return;
            }
            if (Settings.GroupsOnLowZoom && sender.Viewport.Zoom <= 0.5f)
            {
                var groups = _visibleObjects.OfType <GH_Group>();
                if (Settings.IsFilterCustomEnabled)
                {
                    groups = groups.Where(g => !Settings.ShouldExcludeObject(g));
                }
                Drawing.PaintGroupNickname(sender, groups);
            }

            if (Settings.DisplayRichedCapsules)
            {
                Drawing.PaintRichedCapsules(sender, _visibleObjects);
            }
        }
        public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e)
        {
            MyComponent.WriterDone = true;


            Grasshopper.Instances.ActiveCanvas.Document.NewSolution(true);

            return(base.RespondToMouseDoubleClick(sender, e));
        }
예제 #11
0
 public void canvasPaintHandler(Grasshopper.GUI.Canvas.GH_Canvas canvas)
 {
     board.Draw();
 }
        public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e)
        {
            // Convert orthogonal matrix to list
            numLevels = MyComponent.numLevels;

            numObj = MyComponent.numObjs;



            //Three level matrices
            int[,] EffectIndicesOpt1 = new int[, ] {
                { 0, 0, 0, 0 }, { 0, 1, 1, 1 }, { 0, 2, 2, 2 }, { 1, 0, 1, 2 }, { 1, 1, 2, 0 }, { 1, 2, 0, 1 }, { 2, 0, 2, 1 }, { 2, 1, 0, 2 }, { 2, 2, 1, 0 }
            };
            int[,] EffectIndicesOpt2 = new int[, ] {
                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, { 0, 1, 1, 1, 0, 0, 0, 1, 2, 1, 2, 1, 2 }, { 0, 1, 1, 1, 1, 1, 1, 2, 0, 2, 0, 2, 0 }, { 0, 1, 1, 1, 2, 2, 2, 0, 1, 0, 1, 0, 1 }, { 0, 2, 2, 2, 0, 0, 0, 2, 1, 2, 1, 2, 1 }, { 0, 2, 2, 2, 1, 1, 1, 0, 2, 0, 2, 0, 2 }, { 0, 2, 2, 2, 2, 2, 2, 1, 0, 1, 0, 1, 0 }, { 1, 0, 1, 2, 0, 1, 2, 0, 0, 1, 2, 2, 1 }, { 1, 0, 1, 2, 1, 2, 0, 1, 1, 2, 0, 0, 2 }, { 1, 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 1, 0 }, { 1, 1, 2, 0, 0, 1, 2, 1, 2, 2, 1, 0, 0 }, { 1, 1, 2, 0, 1, 2, 0, 2, 0, 0, 2, 1, 1 }, { 1, 1, 2, 0, 2, 0, 1, 0, 1, 1, 0, 2, 2 }, { 1, 2, 0, 1, 0, 1, 2, 2, 1, 0, 0, 1, 2 }, { 1, 2, 0, 1, 1, 2, 0, 0, 2, 1, 1, 2, 0 }, { 1, 2, 0, 1, 2, 0, 1, 1, 0, 2, 2, 0, 1 }, { 2, 0, 2, 1, 0, 2, 1, 0, 0, 2, 1, 1, 2 }, { 2, 0, 2, 1, 1, 0, 2, 1, 1, 0, 2, 2, 0 }, { 2, 0, 2, 1, 2, 1, 0, 2, 2, 1, 0, 0, 1 }, { 2, 1, 0, 2, 0, 2, 1, 1, 2, 0, 0, 2, 1 }, { 2, 1, 0, 2, 1, 0, 2, 2, 0, 1, 1, 0, 2 }, { 2, 1, 0, 2, 2, 1, 0, 0, 1, 2, 2, 1, 0 }, { 2, 2, 1, 0, 0, 2, 1, 2, 1, 1, 2, 0, 0 }, { 2, 2, 1, 0, 1, 0, 2, 0, 2, 2, 0, 1, 1 }, { 2, 2, 1, 0, 2, 1, 0, 1, 0, 0, 1, 2, 2 }
            };


            //2 level matrices
            int[,] EffectIndicesOpt3 = new int[, ] {
                { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1 }, { 0, 1, 1, 0, 0, 1, 1 }, { 0, 1, 1, 1, 1, 0, 0 }, { 1, 0, 1, 0, 1, 0, 1 }, { 1, 0, 1, 1, 0, 1, 0 }, { 1, 1, 0, 0, 1, 1, 0 }, { 1, 1, 0, 1, 0, 0, 1 }
            };
            int[,] EffectIndicesOpt4 = new int[, ] {
                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 }, { 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, { 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, { 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0 }, { 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0 }, { 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1 }, { 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 }, { 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0 }, { 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0 }, { 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 }, { 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0 }, { 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1 }, { 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1 }, { 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 }
            };



            if (MyComponent.numLevels == 2)
            {
                if (MyComponent.numVars < 7)
                {
                    EffectIndices = EffectIndicesOpt3;
                    numFactors    = MyComponent.numVars;
                    numRows       = 8;
                }
                else
                {
                    EffectIndices = EffectIndicesOpt4;
                    numFactors    = MyComponent.numVars;
                    numRows       = 16;
                }
            }

            if (MyComponent.numLevels == 3)
            {
                if (MyComponent.numVars < 5)
                {
                    EffectIndices = EffectIndicesOpt1;
                    numFactors    = MyComponent.numVars;
                    numRows       = 9;
                }
                else
                {
                    EffectIndices = EffectIndicesOpt2;
                    numFactors    = MyComponent.numVars;
                    numRows       = 27;
                }
            }

            for (int i = 0; i < numRows; i++)
            {
                EffectIndicesList.Add(new List <int>());
            }

            for (int i = 1; i < numRows + 1; i++)
            {
                for (int j = 1; j < numFactors + 1; j++)
                {
                    EffectIndicesList[i - 1].Add(EffectIndices[i - 1, j - 1]);
                }
            }

            // Create Design Map of levels samples
            for (int i = 0; i < numRows; i++)
            {
                DesignMapEffects.Add(new List <double>());
            }

            for (int k = 0; k < numRows; k++)
            {
                for (int j = 0; j < MyComponent.numVars; j++)
                {
                    double setting = MyComponent.MinVals[j] + (MyComponent.LevelSettings[EffectIndices[k, j]] * (MyComponent.MaxVals[j] - MyComponent.MinVals[j]));
                    DesignMapEffects[k].Add(setting);
                }
            }


            // Reset list of objective values
            MyComponent.ObjValues = new List <List <double> >();

            MyComponent.Iterating = true;
            this.Iterate();
            MyComponent.Iterating = false;


            // Calculate overall averages
            for (int i = 0; i < numObj; i++)
            {
                double objSum = 0;
                int    count  = 0;

                for (int j = 0; j < numRows; j++)
                {
                    objSum = objSum + MyComponent.ObjValues[j][i];
                    count++;
                }
                OverallAvg.Add(objSum / (double)count);
            }



            // Calculate effects averages for each variable
            for (int i = 0; i < MyComponent.numObjs; i++)
            {
                IndEffectsSum.Add(new List <List <List <double> > >());

                for (int j = 0; j < MyComponent.numVars; j++)
                {
                    IndEffectsSum[i].Add(new List <List <double> >());

                    for (int k = 0; k < MyComponent.numLevels; k++)
                    {
                        IndEffectsSum[i][j].Add(new List <double>());
                    }
                }
            }


            // Create list of objective values for each variable level
            for (int l = 0; l < MyComponent.numObjs; l++)
            {
                for (int i = 0; i < MyComponent.numVars; i++)
                {
                    for (int j = 0; j < numLevels; j++)
                    {
                        for (int k = 0; k < numRows; k++)
                        {
                            if (EffectIndices[k, i] == j)
                            {
                                IndEffectsSum[l][i][j].Add(MyComponent.ObjValues[k][l]);
                            }
                            else
                            {
                            };
                        }
                    }
                }
            }

            // Calculate raw effects
            // Create list of objective values for each variable level
            for (int l = 0; l < MyComponent.numObjs; l++)
            {
                IndEffectsAvg.Add(new List <List <double> >());

                for (int i = 0; i < MyComponent.numVars; i++)
                {
                    IndEffectsAvg[l].Add(new List <double>());
                }
            }


            for (int l = 0; l < MyComponent.numObjs; l++)
            {
                for (int i = 0; i < MyComponent.numVars; i++)
                {
                    for (int j = 0; j < numLevels; j++)
                    {
                        IndEffectsAvg[l][i].Add(IndEffectsSum[l][i][j].Average() - OverallAvg[l]);
                    }
                }
            }


            //Calculate Average effect of each variable
            for (int i = 0; i < MyComponent.numObjs; i++)
            {
                OverallEff.Add(new List <double>());
            }

            for (int i = 0; i < MyComponent.numObjs; i++)
            {
                for (int j = 0; j < MyComponent.numVars; j++)
                {
                    double effsum = 0;
                    int    count  = 0;

                    for (int k = 0; k < IndEffectsAvg[i][j].Count; k++)
                    {
                        effsum = effsum + Math.Abs(IndEffectsAvg[i][j][k]);
                        count++;
                    }
                    OverallEff[i].Add(effsum / (double)count);
                }
            }



            MyComponent.EffectsDone = true;
            Grasshopper.Instances.ActiveCanvas.Document.NewSolution(true);

            return(base.RespondToMouseDoubleClick(sender, e));
        }
예제 #13
0
        public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e)
        {
            if (MyComponent.Seed != 0)
            {
                MyComponent.MyRand = new Random(MyComponent.Seed);
            }                                                                                 // reset Random to give same result each time.
            MyComponent.Util.Sample();

            if (MyComponent.Dir != "None")

            {
                PrintAllSolutions();
                MyComponent.FilesWritten = "Yes";
            }
            Grasshopper.Instances.ActiveCanvas.Document.NewSolution(true);
            return(base.RespondToMouseDoubleClick(sender, e));
        }
        public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e)
        {
            // Read in Cluster number slider
            List <IGH_Param> sliderListClust = new List <IGH_Param>();

            foreach (IGH_Param src2 in MyComponent.Params.Input[4].Sources)
            {
                sliderListClust.Add(src2);
            }
            Grasshopper.Kernel.Special.GH_NumberSlider clusterSlider = (Grasshopper.Kernel.Special.GH_NumberSlider)sliderListClust[0];

            //Set all cluster values
            if (MyComponent.ClusterDone)

            {
                DesignMapSorted   = MyComponent.DesignMapSorted;
                ClusterAves       = MyComponent.ClusterAves;
                ClusterMaxs       = MyComponent.ClusterMaxs;
                ClusterMins       = MyComponent.ClusterMins;
                ClusterLabelsList = MyComponent.ClusterLabelsList;
                int numVars = MyComponent.numVars;

                List <IGH_Param> sliderList = new List <IGH_Param>();

                foreach (IGH_Param src in MyComponent.Params.Input[0].Sources)
                {
                    sliderList.Add(src);
                }

                for (int i = 0; i < numVars; i++)
                {
                    // if input is not zero, reset sliders based on clusters properties
                    if (MyComponent.index != 0)
                    {
                        Grasshopper.Kernel.Special.GH_NumberSlider nslider = (Grasshopper.Kernel.Special.GH_NumberSlider)sliderList[i];

                        double adjmin = ClusterMins[MyComponent.index][i] + (1 - MyComponent.flexibility) * (ClusterAves[MyComponent.index][i] - ClusterMins[MyComponent.index][i]);
                        double adjmax = ClusterMaxs[MyComponent.index][i] - (1 - MyComponent.flexibility) * (ClusterMaxs[MyComponent.index][i] - ClusterAves[MyComponent.index][i]);

                        nslider.Slider.Minimum = ((decimal)adjmin);
                        nslider.Slider.Maximum = ((decimal)adjmax);
                        nslider.TrySetSliderValue((decimal)ClusterAves[MyComponent.index][i]);
                    }
                    else
                    {
                        Grasshopper.Kernel.Special.GH_NumberSlider nslider = (Grasshopper.Kernel.Special.GH_NumberSlider)sliderList[i];

                        nslider.Slider.Minimum = ((decimal)ClusterMins[MyComponent.index][i]);
                        nslider.Slider.Maximum = ((decimal)ClusterMaxs[MyComponent.index][i]);
                        nslider.TrySetSliderValue((decimal)ClusterAves[MyComponent.index][i]);
                    }
                }
            }

            Grasshopper.Instances.ActiveCanvas.Document.NewSolution(true);

            return(base.RespondToMouseDoubleClick(sender, e));
        }
예제 #15
0
 public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e)
 {
     return(c.SelectFolderDialog());
 }
예제 #16
0
 private void Instances_CanvasDestroyed(Grasshopper.GUI.Canvas.GH_Canvas canvas)
 {
     Settings.Dispose();
 }
        public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e)
        {
            // Reset list of objective values
            MyComponent.ObjValues      = new List <List <double> >();
            MyComponent.PropertyValues = new List <List <double> >();
            MyComponent.FirstRead      = true;
            MyComponent.Iterating      = true;
            this.Iterate();
            MyComponent.Iterating = false;
            Grasshopper.Instances.ActiveCanvas.Document.NewSolution(true, GH_SolutionMode.Silent);

            return(base.RespondToMouseDoubleClick(sender, e));
        }
        public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e)
        {
            //Prevent opening of multiple windows at once
            if (!MyComponent.IsWindowOpen)
            {
                MyComponent.IsWindowOpen = true;
                StepperVM VM = new StepperVM(this.MyComponent);

                Thread viewerThread = new Thread(delegate()
                {
                    System.Windows.Window viewer = new StepperWindow(VM);
                    viewer.Show();
                    System.Windows.Threading.Dispatcher.Run();
                });

                viewerThread.SetApartmentState(ApartmentState.STA); // needs to be STA or throws exception
                viewerThread.Start();
            }

            //reset relevant lists
            this.Gradient                 = new List <List <double> >();
            this.DifOne                   = new List <List <double> >();
            this.DifTwo                   = new List <List <double> >();
            this.DesignMapStepperOne      = new List <List <double> >();
            this.DesignMapStepperTwo      = new List <List <double> >();
            this.DesignMapStepperCombined = new List <List <double> >();
            this.ObjValsOne               = new List <List <double> >();
            this.ObjValsTwo               = new List <List <double> >();
            this.IsoPerf                  = new List <List <double> >();

            //TO TEST OUTPUTS
            test.Add(new List <double>());
            test[0].Add(248.0);

            numVars = MyComponent.numVars;
            numObjs = MyComponent.numObjs;

            //Set Finite Differences step size
            FDstep = 0.01;


            // create design map stepper, which is the list of new points to be tested
            for (int i = 0; i < numVars; i++)
            {
                DesignMapStepperOne.Add(new List <double>());
                DesignMapStepperTwo.Add(new List <double>());
            }

            for (int i = 0; i < numVars; i++)
            {
                for (int j = 0; j < numVars; j++)
                {
                    DesignMapStepperOne[i].Add(MyComponent.VarsVals[j]);
                    DesignMapStepperTwo[i].Add(MyComponent.VarsVals[j]);
                }
            }

            for (int i = 0; i < numVars; i++)
            {
                double left  = MyComponent.VarsVals[i] - 0.5 * FDstep * (MyComponent.MaxVals[i] - MyComponent.MinVals[i]);
                double right = MyComponent.VarsVals[i] + 0.5 * FDstep * (MyComponent.MaxVals[i] - MyComponent.MinVals[i]);

                DesignMapStepperOne[i][i] = left;
                DesignMapStepperTwo[i][i] = right;
            }

            // combine lists
            DesignMapStepperCombined.AddRange(DesignMapStepperOne);
            DesignMapStepperCombined.AddRange(DesignMapStepperTwo);

            // Add dummy at end to resent sliders
            DesignMapStepperCombined.Add(MyComponent.VarsVals);


            // run through both design maps, gather objective values on left and right for each variable
            MyComponent.ObjValues = new List <List <double> >();

            MyComponent.Iterating = true;
            this.Iterate();
            MyComponent.Iterating = false;

            for (int j = 0; j < numObjs; j++)
            {
                ObjValsOne.AddRange(MyComponent.ObjValues);
            }

            double maxObj = double.MinValue;
            double minObj = double.MaxValue;

            // find the gradient for each objective by taking finite differences of every variable
            for (int j = 0; j < numObjs; j++)
            {
                Gradient.Add(new List <double>());


                for (int i = 0; i < numVars; i++)
                {
                    double left  = ObjValsOne[i][j];
                    double right = ObjValsOne[numVars + i][j];

                    double difference = (right - left) / (FDstep); //* (MyComponent.MaxVals[i] - MyComponent.MinVals[i]));

                    if (difference > maxObj)
                    {
                        maxObj = difference;
                    }
                    if (difference < minObj)
                    {
                        minObj = difference;
                    }

                    Gradient[j].Add((double)difference);

                    //Gradient[j].Add((double) maxObj);
                }

                //Normalize by max/min difference
                double maxAbs    = double.MinValue;
                double vecLength = 0;

                if (Math.Abs(maxObj) > maxAbs)
                {
                    maxAbs = Math.Abs(maxObj);
                }
                if (Math.Abs(minObj) > maxAbs)
                {
                    maxAbs = Math.Abs(minObj);
                }

                for (int i = 0; i < numVars; i++)
                {
                    Gradient[j][i] = (Gradient[j][i] / maxAbs);
                    vecLength      = vecLength + Gradient[j][i] * Gradient[j][i];
                }

                for (int i = 0; i < numVars; i++)
                {
                    Gradient[j][i] = (Gradient[j][i] / Math.Sqrt(vecLength));
                }
            }

            //// FIND THE ORTHOGONAL VECTORS
            ////double[][] gradientArray = Gradient.Select(a => a.ToArray()).ToArray();
            List <List <string> > lst = new List <List <string> >();

            double[,] gradientArray = new double[Gradient.Count, Gradient[0].Count];

            for (int j = 0; j < Gradient.Count; j++)
            {
                for (int i = 0; i < Gradient[j].Count; i++)
                {
                    gradientArray[j, i] = Gradient[j][i];
                }
            }

            var matrixGrad = MathNet.Numerics.LinearAlgebra.Double.DenseMatrix.OfArray(gradientArray);

            //var matrixGrad = MathNet.Numerics.LinearAlgebra.Double.Matrix.Abs(14.0);

            //var matrixGradT = matrixGrad.Transpose();

            var nullspace = matrixGrad.Kernel();

            // Convert array to List of nullspace vectors
            if (numVars > numObjs)
            {
                for (int i = 0; i < numVars - numObjs; i++)
                {
                    IsoPerf.Add(new List <double>());
                    double[] IsoPerfDir = nullspace[i].ToArray();
                    IsoPerf[i].AddRange(IsoPerfDir);
                }
            }

            // Randomly pick an isoperformance direction
            Random rnd      = new Random();
            int    dir      = new int();
            int    testrand = new int();

            testrand = rnd.Next(numVars - numObjs);

            dir = testrand;



            // Ensure that direction is "interesting"

            //for (int i = testrand; i < numVars - numObjs - 1; i++)
            //{

            //    dir = i;
            //    List<double> IsoVecAbs = IsoPerf[i].Select(x => Math.Abs(x)).ToList();
            //    IsoVecAbs.Sort();

            //    double a = IsoVecAbs[numVars - 1];
            //    double b = IsoVecAbs[numVars - 2];
            //    double c = a / b;

            //    if (c < 3) { break; }
            //    else { dir = dir + 1; }

            //}

            //for (int i = 0; i < numVars - numObjs; i++)
            //{
            //    for (int j = 0; j < IsoPerf[i].Count; j++)
            //    {
            //        IsoPerf.Add(new List<double>());
            //        double[] IsoPerfDir = nullspace[i].ToArray();

            //    }
            //}


            List <double> IsoPerfDirList = IsoPerf[dir];


            // step in the right direction based on the gradient vector

            List <IGH_Param> sliderlist = new List <IGH_Param>();

            foreach (IGH_Param src in MyComponent.Params.Input[0].Sources)
            {
                sliderlist.Add(src);
            }

            for (int i = 0; i < numVars; i++)
            {
                if (MyComponent.Direction > 0)
                {
                    Grasshopper.Kernel.Special.GH_NumberSlider nslider = (Grasshopper.Kernel.Special.GH_NumberSlider)sliderlist[i];
                    double SteppedSlider = MyComponent.VarsVals[i] + Gradient[MyComponent.ObjNum][i] * MyComponent.StepSize * (MyComponent.MaxVals[i] - MyComponent.MinVals[i]);
                    nslider.TrySetSliderValue((decimal)SteppedSlider);
                }

                if (MyComponent.Direction < 0)
                {
                    Grasshopper.Kernel.Special.GH_NumberSlider nslider = (Grasshopper.Kernel.Special.GH_NumberSlider)sliderlist[i];
                    double SteppedSlider = MyComponent.VarsVals[i] - Gradient[MyComponent.ObjNum][i] * MyComponent.StepSize * (MyComponent.MaxVals[i] - MyComponent.MinVals[i]);
                    nslider.TrySetSliderValue((decimal)SteppedSlider);
                }

                // TAKE STEP IN ORTHOGONAL DIRECTION
                if (MyComponent.Direction == 0)
                {
                    Grasshopper.Kernel.Special.GH_NumberSlider nslider = (Grasshopper.Kernel.Special.GH_NumberSlider)sliderlist[i];
                    double SteppedSlider = MyComponent.VarsVals[i] + IsoPerfDirList[i] * MyComponent.StepSize * MyComponent.numVars;
                    nslider.TrySetSliderValue((decimal)SteppedSlider);
                }
            }

            stepped = true;
            Grasshopper.Instances.ActiveCanvas.Document.NewSolution(true);

            return(base.RespondToMouseDoubleClick(sender, e));
        }
예제 #19
0
 public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e)
 {
     ((MaterialEditor)Owner).ShowEditor();
     return(Grasshopper.GUI.Canvas.GH_ObjectResponse.Handled);
 }
        //[STAThread]
        public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e)
        {
            //Prevent opening of multiple windows at once
            if (!MyComponent.IsWindowOpen && MyComponent.InputsSatisfied)
            {
                MyComponent.IsWindowOpen = true;

                Design design = new Design(MyComponent);

                Thread viewerThread = new Thread(delegate()
                {
                    RadicalVM radVM = new RadicalVM(design, this.MyComponent);
                    Window viewer   = new RadicalWindow(radVM);
                    viewer.Show();
                    System.Windows.Threading.Dispatcher.Run();
                });

                viewerThread.SetApartmentState(ApartmentState.STA); // needs to be STA or throws exception
                viewerThread.Start();
            }
            return(base.RespondToMouseDoubleClick(sender, e));
        }
예제 #21
0
        public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e)
        {
            if (MyComponent.SlidersList.Count != MyComponent.DesignMap[MyComponent.Index].Count)
            {
                throw new Exception("Error: Number of sliders and number of target values must be equal.");
            }

            for (int i = 0; i < MyComponent.SlidersList.Count; i++)
            {
                Grasshopper.Kernel.Special.GH_NumberSlider s = MyComponent.SlidersList[i];
                double d = MyComponent.DesignMap[MyComponent.Index][i];
                s.SetSliderValue((decimal)d);
            }

            Grasshopper.Instances.ActiveCanvas.Document.NewSolution(false, GH_SolutionMode.Default);

            //Grasshopper.Instances.ActiveCanvas.Document.NewSolution(false);
            return(base.RespondToMouseDoubleClick(sender, e));
        }
예제 #22
0
        // Event Handlers

        private void ActiveCanvas_DocumentChanged(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.Canvas.GH_CanvasDocumentChangedEventArgs e)
        {
            Debug.WriteLine("GH: Doc Changed");
            definition              = e.NewDocument;
            definition.SolutionEnd += Definition_SolutionEnd;
        }
예제 #23
0
        public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e)
        {
            // Read in Cluster number slider
            List <IGH_Param> sliderListClust = new List <IGH_Param>();

            foreach (IGH_Param src2 in MyComponent.Params.Input[4].Sources)
            {
                sliderListClust.Add(src2);
            }
            Grasshopper.Kernel.Special.GH_NumberSlider clusterSlider = (Grasshopper.Kernel.Special.GH_NumberSlider)sliderListClust[0];



            if (!MyComponent.ClusterDone)

            {
                //run clustering process
                KMeans kmeans = new KMeans(MyComponent.numClusters);


                double[][] data    = MyComponent.DesignMap.Select(a => a.ToArray()).ToArray();
                double[]   weights = null;

                // int[] labels = kmeans.Learn(data,weights);

                for (int i = 0; i < data.Count(); i++)
                {
                    data[i] = data[i].Take(data[i].Count() - MyComponent.numObjs).ToArray();
                }


                int[] labels = kmeans.Compute(data);

                LabelsList = labels.OfType <int>().ToList();


                // Set cluster slider bounds, values to default while clustering is run
                clusterSlider.TrySetSliderValue((decimal)0);
                clusterSlider.Slider.Minimum = ((decimal)0);
                clusterSlider.Slider.Maximum = ((decimal)MyComponent.numClusters);


                // list management
                this.DesignMap = MyComponent.DesignMap;
                this.numVars   = MyComponent.numVars;

                // create Sorted list
                for (int i = 0; i < MyComponent.numClusters; i++)
                {
                    DesignMapSorted.Add(new List <List <double> >());
                    for (int j = 0; j < DesignMap.Count; j++)
                    {
                        if (LabelsList[j] == i)
                        {
                            DesignMapSorted[i].Add(DesignMap[j]);
                        }
                    }
                }

                for (int i = 0; i < MyComponent.numClusters; i++)
                {
                    ClusterAves.Add(new List <double>());
                    ClusterMaxs.Add(new List <double>());
                    ClusterMins.Add(new List <double>());

                    double[] sum     = new double[numVars];
                    double[] average = new double[numVars];
                    double[] max     = new double[numVars];
                    double[] min     = new double[numVars];

                    for (int l = 0; l < numVars; l++)

                    {
                        sum[l] = 0;
                        max[l] = double.MinValue;
                        min[l] = double.MaxValue;
                    }

                    for (int j = 0; j < DesignMapSorted[i].Count; j++)

                    {
                        for (int k = 0; k < numVars; k++)

                        {
                            sum[k] = sum[k] + DesignMapSorted[i][j][k];

                            if (DesignMapSorted[i][j][k] > max[k])

                            {
                                max[k] = DesignMapSorted[i][j][k];
                            }
                            else if (DesignMapSorted[i][j][k] < min[k])

                            {
                                min[k] = DesignMapSorted[i][j][k];
                            }

                            average[k] = sum[k] / DesignMapSorted[i].Count;
                        }
                    }

                    for (int k = 0; k < numVars; k++)
                    {
                        ClusterAves[i].Add(average[k]);
                        ClusterMaxs[i].Add(max[k]);
                        ClusterMins[i].Add(min[k]);
                    }
                }


                ClusterAves.Insert(0, MyComponent.VarsVals);
                ClusterMaxs.Insert(0, MyComponent.MaxVals);
                ClusterMins.Insert(0, MyComponent.MinVals);


                //for (int i = 0; i < DesignMapSorted.Count; i++)

                //{
                //LabelsList[i] = LabelsList[i] + 1;
                //}
            }



            List <IGH_Param> sliderList = new List <IGH_Param>();

            foreach (IGH_Param src in MyComponent.Params.Input[0].Sources)
            {
                sliderList.Add(src);
            }

            for (int i = 0; i < numVars; i++)
            {
                if (MyComponent.index != 0)

                {
                    Grasshopper.Kernel.Special.GH_NumberSlider nslider = (Grasshopper.Kernel.Special.GH_NumberSlider)sliderList[i];

                    double adjmin = ClusterMins[MyComponent.index][i] + (1 - MyComponent.flexibility) * (ClusterAves[MyComponent.index][i] - ClusterMins[MyComponent.index][i]);
                    double adjmax = ClusterMaxs[MyComponent.index][i] - (1 - MyComponent.flexibility) * (ClusterMaxs[MyComponent.index][i] - ClusterAves[MyComponent.index][i]);

                    nslider.TrySetSliderValue((decimal)ClusterAves[MyComponent.index][i]);
                    nslider.Slider.Minimum = ((decimal)adjmin);
                    nslider.Slider.Maximum = ((decimal)adjmax);
                }
                else
                {
                    Grasshopper.Kernel.Special.GH_NumberSlider nslider = (Grasshopper.Kernel.Special.GH_NumberSlider)sliderList[i];

                    nslider.TrySetSliderValue((decimal)ClusterAves[MyComponent.index][i]);
                    nslider.Slider.Minimum = ((decimal)ClusterMins[MyComponent.index][i]);
                    nslider.Slider.Maximum = ((decimal)ClusterMaxs[MyComponent.index][i]);
                }
            }

            MyComponent.ClusterDone = true;
            Grasshopper.Instances.ActiveCanvas.Document.NewSolution(true);

            return(base.RespondToMouseDoubleClick(sender, e));
        }
 public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e)
 {
     this.MyComponent.modelType = "Test";
     this.buildModel();
     this.MyComponent.modelCreated = true;
     Grasshopper.Instances.ActiveCanvas.Document.NewSolution(true);
     return(base.RespondToMouseDoubleClick(sender, e));
 }
예제 #25
0
        public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e)
        {
            MyComponent.DesignView.InitialDesign = new DesignVM(MyComponent.DesignLines, MyComponent.DesignCurves, MyComponent.DesignMeshes, MyComponent.DesignBreps, false, true, MyComponent.Score, MyComponent.Design);
            Window w = new StormCloudWindow(MyComponent.DesignView, MyComponent);

            w.Show();
            return(base.RespondToMouseDoubleClick(sender, e));
        }
예제 #26
0
 protected override void Render(Grasshopper.GUI.Canvas.GH_Canvas canvas, Graphics graphics, Grasshopper.GUI.Canvas.GH_CanvasChannel channel)
 {
     AddParamMarkers();
     base.Render(canvas, graphics, channel);
     RemoveParamMarkers();
 }
 public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e)
 {
     ((ToObjTextComponent)Owner).OnExport(this, EventArgs.Empty);
     return(base.RespondToMouseDoubleClick(sender, e));
 }
        public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e)
        {
            if (MyComponent.Seed != 0)
            {
                MyComponent.MyRand = new Random(MyComponent.Seed);
            }                                                                                 // reset Random to give same result each time.

            // Reset list of objective values
            MyComponent.ObjValues = new List <List <double> >();
            MyComponent.ObjValues = new List <List <double> >();



            variablesSliders = MyComponent.readSlidersList();
            NSGAIIProblem problem = new NSGAIIProblem("ArrayReal", MyComponent, solutionsCounter);
            NSGAIIRunner  runner  = new NSGAIIRunner(null, problem, null, MyComponent);

            allSolutionsTrack = problem.allSolutions;
            problem.PrintAllSolutions();
            problem.PrintLogFile();
            solutionsCounter++;


            MyComponent.MooDone = true;
            Grasshopper.Instances.ActiveCanvas.Document.NewSolution(true);
            MessageBox.Show("Finished");

            //System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\New folder\123d.txt");
            //file.WriteLine("" + problem.allSolutions.Count);
            //file.Close();

            return(base.RespondToMouseDoubleClick(sender, e));
        }
 public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e)
 {
     GHUtilities.ChangeSliders(MyComponent.SlidersList, MyComponent.DesignMap[MyComponent.Index]);
     Grasshopper.Instances.ActiveCanvas.Document.NewSolution(true);
     return(base.RespondToMouseDoubleClick(sender, e));
 }