/// <summary> /// /// </summary> /// <param name="triggerPt"></param> public void AddTrigger(GTriggerPoint triggerPt) { if (!_listTriggerPts.Contains(triggerPt)) { triggerPt.Initialize(this); _listTriggerPts.Add(triggerPt); SortTriggers(); } }
public void AutoFillTriggers(int numDots) { int minDots = 1; if (numDots > 0) { List <TrigGrp> trGrps = new List <TrigGrp>(); TrigGrp trCurGrp = null; foreach (GTriggerPoint tPt in _listTriggerPts) { tPt.LeadTime = 0.0; Millimeters thisDist = new Millimeters(tPt.Distance.Val); if (trCurGrp == null) { trCurGrp = new TrigGrp(); trGrps.Add(trCurGrp); } if (tPt.Anchor && minDots == 1) { minDots = 2; } if (tPt.Anchor && trCurGrp.Start != null) { // End of a group. Signal to start a new one trCurGrp.End = thisDist; trCurGrp = null; } else { // Contiue to add to a group if (trCurGrp.Start == null) { trCurGrp.Start = thisDist; } trCurGrp.End = thisDist; } } if (trGrps.Count == 0) { trGrps.Add(new TrigGrp() { Start = 0.0, End = XYLength }); } // Handle case for not enough dots int numEachGrp = Math.Max(minDots, numDots / trGrps.Count); numDots = numEachGrp * trGrps.Count; int iTrg = 0; foreach (TrigGrp trGrp in trGrps) { double gap = (trGrp.End - trGrp.Start) / (numEachGrp - 1); for (int i = 0; i < numEachGrp; i++, iTrg++) { bool bAnchor = i == 0 || (i == numEachGrp - 1); double thisDist = double.IsInfinity(gap) || double.IsNaN(gap) ? XYLength / 2.0 : (double)(gap * i + trGrp.Start); if (iTrg < _listTriggerPts.Count) { _listTriggerPts[iTrg].Distance.Val = thisDist; _listTriggerPts[iTrg].Anchor = bAnchor; } else { GTriggerPoint newTriggerPt = CreateTrigger(); newTriggerPt.Distance.Val = thisDist; newTriggerPt.Anchor = bAnchor; _listTriggerPts.Add(newTriggerPt); newTriggerPt.Initialize(this); } } } } // Get rid of excess while (_listTriggerPts.Count > numDots) { RemoveTrigger(_listTriggerPts[numDots]); } U.LogChange(string.Format("{0}.AutoFillTriggers", Nickname)); SortTriggers(); FireOnChangedEvent(); }