private void UpdateObjecCircle(SimulationObject SimO, SimObjGraphicsSettings gfxSet) { if (gfxSet.DrawCircle) { if (gfxSet.CircleRef == null) { gfxSet.CircleRef = new ObjectCircle(SimO.LastTableObject.Center); _tmgr.DisplayManager.AddElement(gfxSet.CircleRef, DisplayManager.DisplayLayer.top); } else { gfxSet.CircleRef.Center = SimO.LastTableObject.Center; } gfxSet.CircleRef.SetColor(gfxSet.CircleColor); gfxSet.CircleRef.SetText(1, gfxSet.Text1); gfxSet.CircleRef.SetText(2, gfxSet.Text2); } else { //Do not draw circle if (gfxSet.CircleRef != null) { _tmgr.DisplayManager.DeleteElement(gfxSet.CircleRef); gfxSet.CircleRef = null; } } }
private void RemoveAllGfx(SimulationObject SimO) { if (SimO.GraphicsSettings.CircleRef != null) _tmgr.DisplayManager.DeleteElement(SimO.GraphicsSettings.CircleRef); if (SimO.GraphicsSettings.PrimScreenLineRef != null) _tmgr.DisplayManager.DeleteElement(SimO.GraphicsSettings.PrimScreenLineRef); if (SimO.GraphicsSettings.SecScreenLineRef != null) _tmgr.DisplayManager.DeleteElement(SimO.GraphicsSettings.SecScreenLineRef); }
public void RemoveObjectGfx(SimulationObject SimO) { if (_tmgr.BeamerScreen.Dispatcher.CheckAccess()) { RemoveAllGfx(SimO); } else { _tmgr.BeamerScreen.Dispatcher.BeginInvoke((Action) (() => RemoveAllGfx(SimO))); } }
private void CalculateObjSources(SimulationObject obj) { obj.SourceObjects = _objectList.Where(o => o.Destinations.Contains(obj)).ToList(); List<double> distances = new List<double>(); foreach (SimulationObject sob in obj.SourceObjects) { distances.Add(obj.LastTableObject.Center.DistanceTo(sob.LastTableObject.Center, TPoint.PointCreationType.screen)); } //sort - nearest objects first SortByDistance(distances, obj.SourceObjects); }
private List<SimulationObject> CalculateDestinations(SimulationObject obj, Vector direction) { if (obj.LastTableObject == null) return new List<SimulationObject>(); if (obj.LastTableObject.RotationDefined == false) return new List<SimulationObject>(); obj.LastTableObject.Center.CalculateScreenfromDepthCoords(); Vector stütztV = new Vector(obj.LastTableObject.Center.ScreenX, obj.LastTableObject.Center.ScreenY); Strecke beam = new Strecke(stütztV, direction); List<SimulationObject> targets = new List<SimulationObject>(); List<double> distances = new List<double>(); //Do this for all objects with the same layer (except for the object itself) foreach(SimulationObject simObj in _objectList.Where(o => o.Layer == obj.Layer).Where(o => o.LastTableObject != null).Where(o => o.LastTableObject.ObjectID != obj.LastTableObject.ObjectID)) { Point pcenter = new Point(simObj.LastTableObject.Center.ScreenX, simObj.LastTableObject.Center.ScreenY); double distance = beam.AbstandAbStartpunkt(pcenter); if ((distance > 0)&&(distance <= LocalSettingsManager.PrgTblSet.DestinationObjectMaxBeamDistance)) { targets.Add(simObj); //distance between two objects distances.Add(obj.LastTableObject.Center.DistanceTo(simObj.LastTableObject.Center,TPoint.PointCreationType.screen)); } } //sort - nearest objects first SortByDistance(distances, targets); return targets; }
private void UpdateSecScreenLine(SimulationObject SimO, SimObjGraphicsSettings gfxSet) { if (gfxSet.DrawSecScreenLine && SimO.LastTableObject.RotationDefined) { bool recalculate = false; if (gfxSet.SecScreenLineDest != null) { //Case 1: a target object is set if (gfxSet.SecScreenLineRef == null) { gfxSet.SecScreenLineRef = new ScreenLine(SimO.LastTableObject.Center, gfxSet.SecScreenLineDest.LastTableObject.Center, gfxSet.SecSlElementType); gfxSet.SecScreenLineRef.LineElementColor = gfxSet.SecSlElementColor; _tmgr.DisplayManager.AddElement(gfxSet.SecScreenLineRef, DisplayManager.DisplayLayer.middle); recalculate = true; } else { gfxSet.SecScreenLineRef.LineElementColor = gfxSet.SecSlElementColor; if (!gfxSet.SecScreenLineRef.Source.Equals(SimO.LastTableObject.Center)) { gfxSet.SecScreenLineRef.Source = SimO.LastTableObject.Center; recalculate = true; } if (!gfxSet.SecScreenLineRef.Destination.Equals(gfxSet.SecScreenLineDest.LastTableObject.Center)) { gfxSet.SecScreenLineRef.Destination = gfxSet.SecScreenLineDest.LastTableObject.Center; recalculate = true; } } } else { //Case 2: Use direction Vector if (gfxSet.SecScreenLineRef == null) { gfxSet.SecScreenLineRef = new ScreenLine(SimO.LastTableObject.Center, gfxSet.SecScreenLineDirection, gfxSet.SecSlElementType); gfxSet.SecScreenLineRef.LineElementColor = gfxSet.SecSlElementColor; _tmgr.DisplayManager.AddElement(gfxSet.SecScreenLineRef, DisplayManager.DisplayLayer.middle); recalculate = true; } else { gfxSet.SecScreenLineRef.LineElementColor = gfxSet.SecSlElementColor; if (!gfxSet.SecScreenLineRef.Source.Equals(SimO.LastTableObject.Center)) { gfxSet.SecScreenLineRef.Source = SimO.LastTableObject.Center; recalculate = true; } TPoint dest = new TPoint( Convert.ToInt32(SimO.LastTableObject.Center.ScreenX + gfxSet.SecScreenLineDirection.X * 1000), Convert.ToInt32(SimO.LastTableObject.Center.ScreenY + gfxSet.SecScreenLineDirection.Y * 1000), TPoint.PointCreationType.screen); if (!gfxSet.SecScreenLineRef.Destination.Equals(dest)) { gfxSet.SecScreenLineRef.Destination = dest; recalculate = true; } } } if (recalculate) gfxSet.SecScreenLineRef.CalculateLine(); } else { //Do not draw ScreenLine if (gfxSet.SecScreenLineRef != null) { _tmgr.DisplayManager.DeleteElement(gfxSet.SecScreenLineRef); gfxSet.SecScreenLineRef = null; } } }