/// <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; }
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; }
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); }
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; }
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); } }
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()); }
// 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(); } }
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)); }
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)); }
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)); }
public override Grasshopper.GUI.Canvas.GH_ObjectResponse RespondToMouseDoubleClick(Grasshopper.GUI.Canvas.GH_Canvas sender, Grasshopper.GUI.GH_CanvasMouseEvent e) { return(c.SelectFolderDialog()); }
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)); }
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)); }
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)); }
// 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; }
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)); }
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)); }
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)); }