private static DataGridViewColumn GetColumnForRule(DataGridView grd, GridRule rule) { foreach (DataGridViewColumn item in grd.Columns) { if (item.HeaderText == rule.GridColumnHeaderText) { return(item); } } return(null); }
private static bool DoValuesMatch(GridRule rule, object cellValue) { if (rule.Value.GetType() == cellValue.GetType()) { return(DovaluesMatchExactly(rule.Value, cellValue, rule.Operator)); } else { Type t = cellValue.GetType(); if (cellValue is string) { rule.Value = rule.Value.ToString(); return(DoValuesMatch(rule, cellValue)); } else if (cellValue is int) { int?nv = TryConvertToInt(rule.Value); if (nv == null) { return(false); } rule.Value = nv; return(DoValuesMatch(rule, cellValue)); } else if (cellValue is double) { double?nv = TryConvertToDouble(rule.Value); if (nv == null) { return(false); } rule.Value = nv; return(DoValuesMatch(rule, cellValue)); } else if (cellValue is Time) { Time?nv = TryConvertToTime(rule.Value); if (nv == null) { return(false); } rule.Value = nv; return(DoValuesMatch(rule, cellValue)); } else { throw new NotSupportedException("This datatype in data grid view column is not supported yet."); } } }
private static void ApplyGridRules(DataGridView grd) { GridRuleCollection rules = Program.GridRules; GridRuleCollection rls = rules.GetRulesFor(grd.GetType().Name, null, null); foreach (DataGridViewRow row in grd.Rows) { GridRule gr = GetRuleApplicableForRow(rls, grd, row); if (gr == null) { SetRowBackColor(row, grd.DefaultCellStyle.BackColor); } else { SetRowBackColor(row, gr.Color); } } }
private static bool RuleCheck(GridRule ar, Strategy str) { GridRule sr; double min = Double.MaxValue; for (int i = 0; i < str.GStrategy.Rules.Count; i++) { sr = str.GStrategy.Rules[i]; double ballRuleSize = ar.Ball.DistanceFrom(sr.Ball); double mineSize = 0; for (int j = 0; j < ar.Mine.Length; j++) { mineSize += ar.Mine[ar.ZMine[j]].DistanceFrom(sr.Mine[sr.ZMine[j]]); } double oppntSize = 0; for (int j = 0; j < ar.Oppnt.Length; j++) { oppntSize += ar.Oppnt[ar.ZOppnt[j]].DistanceFrom(sr.Oppnt[sr.ZOppnt[j]]); } if (ballRuleSize + mineSize + oppntSize < min) { min = ballRuleSize + mineSize + oppntSize; } } Debug.Log("Min dist: " + min); if (min < distTreshold) { return(true); } else { return(false); } }
private static GridRule GetRuleApplicableForRow(GridRuleCollection rls, DataGridView grd, DataGridViewRow row) { GridRule ret = null; foreach (var rule in rls) { DataGridViewColumn column = GetColumnForRule(grd, rule); if (column == null) { continue; } object ruleValue = rule.Value; object cellValue = row.Cells[column.Index].Value; if (DoValuesMatch(rule, cellValue)) { ret = rule; break; } } return(ret); }
public List <object> AdaptStrategy(object log, object strategy) { //clean rules discardedDefrules = 0; discardedOffrules = 0; adaptationDefRules.Clear(); adaptationOffRules.Clear(); var o = strategy as Strategy; ruleNum = o.GStrategy.Rules.Count; //def adapt try { AdaptDefRules((LogHolder)log, (Strategy)strategy); } catch (Exception e) { } //off adapt try { AdaptOffRules((LogHolder)log, (Strategy)strategy); } catch (Exception e) { } //complete list List <object> adaptedRules = new List <object>(); //convert def rules foreach (Rule r in adaptationDefRules) { GridRule gr = new GridRule(); gr.Number = r.ruleNum; gr.Type = GridRule.RuleType.Deffense; gr.Name = "AdaptedDef"; Vector2D[] vmine = new Vector2D[] { new Vector2D(Convert.ToDouble(r.lr0x), Convert.ToDouble(r.lr0y)), new Vector2D(Convert.ToDouble(r.lr1x), Convert.ToDouble(r.lr1y)), new Vector2D(Convert.ToDouble(r.lr2x), Convert.ToDouble(r.lr2y)), new Vector2D(Convert.ToDouble(r.lr3x), Convert.ToDouble(r.lr3y)) }; gr.Mine = vmine; Vector2D[] voppnt = new Vector2D[] { new Vector2D(Convert.ToDouble(r.rr0x), Convert.ToDouble(r.rr0y)), new Vector2D(Convert.ToDouble(r.rr1x), Convert.ToDouble(r.rr1y)), new Vector2D(Convert.ToDouble(r.rr2x), Convert.ToDouble(r.rr2y)), new Vector2D(Convert.ToDouble(r.rr3x), Convert.ToDouble(r.rr3y)) }; gr.Oppnt = voppnt; gr.Ball = new Vector2D(Convert.ToDouble(r.ballX), Convert.ToDouble(r.ballY)); Vector2D[] vmove = new Vector2D[] { new Vector2D(Convert.ToDouble(r.lr0mx), Convert.ToDouble(r.lr0my)), new Vector2D(Convert.ToDouble(r.lr1mx), Convert.ToDouble(r.lr1my)), new Vector2D(Convert.ToDouble(r.lr2mx), Convert.ToDouble(r.lr2my)), new Vector2D(Convert.ToDouble(r.lr3mx), Convert.ToDouble(r.lr3my)) }; gr.Move = vmove; gr.fillZOrder(); if (!RuleCheck(gr, (Strategy)strategy)) { adaptedRules.Add(gr); } else { discardedDefrules++; } } //convert off rules foreach (Rule r in adaptationOffRules) { GridRule gr = new GridRule(); gr.Number = r.ruleNum; gr.Type = GridRule.RuleType.Offense; gr.Name = "AdaptedOff"; Vector2D[] vmine = new Vector2D[] { new Vector2D(Convert.ToDouble(r.lr0x), Convert.ToDouble(r.lr0y)), new Vector2D(Convert.ToDouble(r.lr1x), Convert.ToDouble(r.lr1y)), new Vector2D(Convert.ToDouble(r.lr2x), Convert.ToDouble(r.lr2y)), new Vector2D(Convert.ToDouble(r.lr3x), Convert.ToDouble(r.lr3y)) }; gr.Mine = vmine; Vector2D[] voppnt = new Vector2D[] { new Vector2D(Convert.ToDouble(r.rr0x), Convert.ToDouble(r.rr0y)), new Vector2D(Convert.ToDouble(r.rr1x), Convert.ToDouble(r.rr1y)), new Vector2D(Convert.ToDouble(r.rr2x), Convert.ToDouble(r.rr2y)), new Vector2D(Convert.ToDouble(r.rr3x), Convert.ToDouble(r.rr3y)) }; gr.Oppnt = voppnt; gr.Ball = new Vector2D(Convert.ToDouble(r.ballX), Convert.ToDouble(r.ballY)); Vector2D[] vmove = new Vector2D[] { new Vector2D(Convert.ToDouble(r.lr0mx), Convert.ToDouble(r.lr0my)), new Vector2D(Convert.ToDouble(r.lr1mx), Convert.ToDouble(r.lr1my)), new Vector2D(Convert.ToDouble(r.lr2mx), Convert.ToDouble(r.lr2my)), new Vector2D(Convert.ToDouble(r.lr3mx), Convert.ToDouble(r.lr3my)) }; gr.Move = vmove; gr.fillZOrder(); if (!RuleCheck(gr, (Strategy)strategy)) { adaptedRules.Add(gr); } else { discardedOffrules++; } } return(adaptedRules); }
public List <object> AdaptStrategy(LogHolder log, object strategy) { discardedDefrules = 0; discardedOffrules = 0; adaptationDefRules.Clear(); adaptationOffRules.Clear(); ruleNum = (int)strategy.GetType().GetMethod("CurrentRuleNumberCount").Invoke(strategy, null); //def adapt try { AdaptDefRules(log, (Strategy)strategy); } catch (Exception e) { Debug.Log(e.Message); } //off adapt try { AdaptOffRules(log, (Strategy)strategy); } catch (Exception e) { Debug.Log(e.Message); } //complete list List <object> adaptedRules = new List <object>(); //convert def rules foreach (Rule r in adaptationDefRules) { GridRule gr = new GridRule(); gr.Number = r.ruleNum; gr.Type = GridRule.RuleType.Deffense; gr.Name = "AdaptedDef"; Vector2D[] vmine = new Vector2D[] { new Vector2D(Convert.ToDouble(r.lr0x), Convert.ToDouble(r.lr0y)), new Vector2D(Convert.ToDouble(r.lr1x), Convert.ToDouble(r.lr1y)), new Vector2D(Convert.ToDouble(r.lr2x), Convert.ToDouble(r.lr2y)), new Vector2D(Convert.ToDouble(r.lr3x), Convert.ToDouble(r.lr3y)) }; gr.Mine = vmine; Vector2D[] voppnt = new Vector2D[] { new Vector2D(Convert.ToDouble(r.rr0x), Convert.ToDouble(r.rr0y)), new Vector2D(Convert.ToDouble(r.rr1x), Convert.ToDouble(r.rr1y)), new Vector2D(Convert.ToDouble(r.rr2x), Convert.ToDouble(r.rr2y)), new Vector2D(Convert.ToDouble(r.rr3x), Convert.ToDouble(r.rr3y)) }; gr.Oppnt = voppnt; gr.Ball = new Vector2D(Convert.ToDouble(r.ballX), Convert.ToDouble(r.ballY)); Vector2D[] vmove = new Vector2D[] { new Vector2D(Convert.ToDouble(r.lr0mx), Convert.ToDouble(r.lr0my)), new Vector2D(Convert.ToDouble(r.lr1mx), Convert.ToDouble(r.lr1my)), new Vector2D(Convert.ToDouble(r.lr2mx), Convert.ToDouble(r.lr2my)), new Vector2D(Convert.ToDouble(r.lr3mx), Convert.ToDouble(r.lr3my)) }; gr.Move = vmove; Debug.Log(gr.ToString()); gr.fillZOrder(); if (!RuleCheck(gr, (Strategy)strategy)) { adaptedRules.Add(gr); } else { discardedDefrules++; } Debug.Log("Discarded def rules: " + discardedDefrules); } //convert off rules foreach (Rule r in adaptationOffRules) { GridRule gr = new GridRule(); gr.Number = r.ruleNum; gr.Type = GridRule.RuleType.Offense; gr.Name = "AdaptedOff"; Vector2D[] vmine = new Vector2D[] { new Vector2D(Convert.ToDouble(r.lr0x), Convert.ToDouble(r.lr0y)), new Vector2D(Convert.ToDouble(r.lr1x), Convert.ToDouble(r.lr1y)), new Vector2D(Convert.ToDouble(r.lr2x), Convert.ToDouble(r.lr2y)), new Vector2D(Convert.ToDouble(r.lr3x), Convert.ToDouble(r.lr3y)) }; gr.Mine = vmine; Vector2D[] voppnt = new Vector2D[] { new Vector2D(Convert.ToDouble(r.rr0x), Convert.ToDouble(r.rr0y)), new Vector2D(Convert.ToDouble(r.rr1x), Convert.ToDouble(r.rr1y)), new Vector2D(Convert.ToDouble(r.rr2x), Convert.ToDouble(r.rr2y)), new Vector2D(Convert.ToDouble(r.rr3x), Convert.ToDouble(r.rr3y)) }; gr.Oppnt = voppnt; gr.Ball = new Vector2D(Convert.ToDouble(r.ballX), Convert.ToDouble(r.ballY)); Vector2D[] vmove = new Vector2D[] { new Vector2D(Convert.ToDouble(r.lr0mx), Convert.ToDouble(r.lr0my)), new Vector2D(Convert.ToDouble(r.lr1mx), Convert.ToDouble(r.lr1my)), new Vector2D(Convert.ToDouble(r.lr2mx), Convert.ToDouble(r.lr2my)), new Vector2D(Convert.ToDouble(r.lr3mx), Convert.ToDouble(r.lr3my)) }; gr.Move = vmove; Debug.Log(gr.ToString()); gr.fillZOrder(); if (!RuleCheck(gr, (Strategy)strategy)) { adaptedRules.Add(gr); } else { discardedOffrules++; } Debug.Log("Discarded off rules: " + discardedOffrules); } return(adaptedRules); }