コード例 #1
0
ファイル: SimObjDrawer.cs プロジェクト: AtiX/objectTable
        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;
                }
            }
        }
コード例 #2
0
ファイル: SimObjDrawer.cs プロジェクト: AtiX/objectTable
 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);
 }
コード例 #3
0
ファイル: SimObjDrawer.cs プロジェクト: AtiX/objectTable
 public void RemoveObjectGfx(SimulationObject SimO)
 {
     if (_tmgr.BeamerScreen.Dispatcher.CheckAccess())
     {
         RemoveAllGfx(SimO);
     }
     else
     {
         _tmgr.BeamerScreen.Dispatcher.BeginInvoke((Action) (() => RemoveAllGfx(SimO)));
     }
 }
コード例 #4
0
ファイル: SimulationEngine.cs プロジェクト: AtiX/objectTable
        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);
        }
コード例 #5
0
ファイル: SimulationEngine.cs プロジェクト: AtiX/objectTable
        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;
        }
コード例 #6
0
ファイル: SimObjDrawer.cs プロジェクト: AtiX/objectTable
        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;
                }
            }
        }