Ejemplo n.º 1
0
        public static bool GetOffsettedValue(PathElement peHead, double HeadOffset, int HeadElementArrivedSource, ref Point ptOut)
        {
            Point point = new Point();

            int[] sources = peHead.GetSources();
            Debug.Assert(sources.Length == 2);
            Point connectionSourcePoint = peHead.GetConnectionSourcePoint(sources[0]);
            Point point3 = peHead.GetConnectionSourcePoint(sources[1]);

            if (sources.Length != 2)
            {
                return(false);
            }
            double introduced12 = Math.Pow(connectionSourcePoint.get_X() - point3.get_X(), 2.0);
            double num          = Math.Sqrt(introduced12 + Math.Pow(connectionSourcePoint.get_Y() - point3.get_Y(), 2.0));
            double num2         = (num * HeadOffset) / ((peHead.Length == 0) ? ((double)1) : ((double)peHead.Length));
            double num3         = 1.0;
            double num4         = 0.0;

            if (!(connectionSourcePoint.get_Y() == point3.get_Y()))
            {
                num3 = Math.Abs((double)(point3.get_X() - connectionSourcePoint.get_X())) / num;
                num4 = Math.Abs((double)(point3.get_Y() - connectionSourcePoint.get_Y())) / num;
            }
            double num5 = num2 * num3;
            double num6 = num2 * num4;

            if (HeadElementArrivedSource == sources[0])
            {
                if (connectionSourcePoint.get_X() <= point3.get_X())
                {
                    connectionSourcePoint.set_X(connectionSourcePoint.get_X() + ((int)num5));
                }
                else
                {
                    connectionSourcePoint.set_X(connectionSourcePoint.get_X() - ((int)num5));
                }
                if (connectionSourcePoint.get_Y() <= point3.get_Y())
                {
                    connectionSourcePoint.set_Y(connectionSourcePoint.get_Y() + ((int)num6));
                }
                else
                {
                    connectionSourcePoint.set_Y(connectionSourcePoint.get_Y() - ((int)num6));
                }
                point = connectionSourcePoint;
            }
            else
            {
                if (point3.get_X() <= connectionSourcePoint.get_X())
                {
                    point3.set_X(point3.get_X() + ((int)num5));
                }
                else
                {
                    point3.set_X(point3.get_X() - ((int)num5));
                }
                if (point3.get_Y() <= connectionSourcePoint.get_Y())
                {
                    point3.set_Y(point3.get_Y() + ((int)num6));
                }
                else
                {
                    point3.set_Y(point3.get_Y() - ((int)num6));
                }
                point = point3;
            }
            ptOut = point;
            return(true);
        }
Ejemplo n.º 2
0
        private void DrawTrain(Canvas g, Train train, Point pt, bool small, bool allowToDraw, out Rectangle rectangle)
        {
            Color color;
            Color color2;

            rectangle = new Rectangle();
            TrainControl control = new TrainControl(train);

            control.OnTrainProperties += new TrainControl.TrainPropertiesHandler(this.TrainControl_OnTrainProperties);
            Train.GetTrainColors(train, out color, out color2);
            control.BodyColorHi = color2;
            control.BodyColorLo = color;
            Point       connectionSourcePoint = new Point(0.0, 0.0);
            Point       point2      = new Point(0.0, 0.0);
            PathElement headElement = train.HeadElement;

            if ((train.NextElement != null) && (train.NextElement != headElement))
            {
                connectionSourcePoint = train.NextElement.GetConnectionSourcePoint(train.m_nNextElementSource);
                point2 = train.HeadElement.GetConnectionSourcePoint(train.m_nHeadElementArrivedSource);
            }
            else if (train.m_nHeadElementArrivedSource != -1)
            {
                connectionSourcePoint = headElement.GetConnectionSourcePoint(headElement.GetOppositeSource(train.m_nHeadElementArrivedSource));
                point2 = headElement.GetConnectionSourcePoint(train.m_nHeadElementArrivedSource);
            }
            double rotationAngle = 0.0;

            if ((((connectionSourcePoint.get_X() != 0.0) || (connectionSourcePoint.get_Y() != 0.0)) && ((point2.get_X() != 0.0) || (point2.get_Y() != 0.0))) && (point2 != connectionSourcePoint))
            {
                rotationAngle = SilverlightHelper.GetRotationAngle(point2, connectionSourcePoint);
            }
            else if (train.HeadElement != null)
            {
                int[] sources = train.HeadElement.GetSources();
                if ((sources != null) && (sources.Length > 1))
                {
                    point2 = train.HeadElement.GetConnectionSourcePoint(sources[0]);
                    connectionSourcePoint = train.HeadElement.GetConnectionSourcePoint(sources[1]);
                    rotationAngle         = SilverlightHelper.GetRotationAngle(point2, connectionSourcePoint);
                }
            }
            control.ID          = train.ID;
            control.Tooltip     = train.GetToolTipText();
            control.IDToDisplay = train.IDToDisplay;
            control.Small       = small;
            control.Direction   = 1;
            rectangle           = new Rectangle();
            rectangle.X         = (int)pt.get_X();
            rectangle.Y         = (int)pt.get_Y();
            rectangle.Width     = (int)control.WIDTH_ACTUAL;
            rectangle.Height    = (int)control.HEIGHT_ACTUAL;
            if (allowToDraw)
            {
                control.SetValue(Canvas.LeftProperty, (double)rectangle.X);
                control.SetValue(Canvas.TopProperty, (double)rectangle.Y);
                control.SetValue(FrameworkElement.WidthProperty, (double)rectangle.Width);
                control.SetValue(FrameworkElement.HeightProperty, (double)rectangle.Height);
                double num2 = point2.get_X() - connectionSourcePoint.get_X();
                double num3 = point2.get_Y() - connectionSourcePoint.get_Y();
                int[]  textOrientationVectorHor = TextOrientationVectorHor;
                if (train.HeadElement is Track)
                {
                    Track track = train.HeadElement as Track;
                    if (track.PointMinus.get_Y() == track.PointPlus.get_Y())
                    {
                        textOrientationVectorHor = TextOrientationVectorVer;
                    }
                }
                double num4 = SilverlightHelper.GetAngleBetweenVercors((double)textOrientationVectorHor[0], (double)textOrientationVectorHor[1], num2, num3);
                control.Draw(num4 >= 90.0);
                RotateTransform transform = new RotateTransform();
                transform.set_Angle(-rotationAngle);
                control.set_RenderTransform(transform);
                g.get_Children().Add(control);
            }
            rectangle.Width += (int)(2.0 * control.NOSE_LEN);
            rectangle.Height = rectangle.Width = Math.Max(rectangle.Width, rectangle.Height);
        }
Ejemplo n.º 3
0
        public virtual Point GetTrainPoint(ArrayList alTrains, TrainBase t)
        {
            int index = -1;

            if (alTrains.Count > 1)
            {
                index = alTrains.IndexOf(t);
            }
            Point       trainPoint = this.GetTrainPoint();
            PathElement element    = this;
            Point       point2     = new Point();

            if (t.HeadElementArrivedSource != -1)
            {
                int[] sources = element.GetSources();
                Debug.Assert(sources.Length == 2);
                Point connectionSourcePoint = element.GetConnectionSourcePoint(sources[0]);
                Point point4 = element.GetConnectionSourcePoint(sources[1]);
                if (sources.Length != 2)
                {
                    return(trainPoint);
                }
                double introduced15 = Math.Pow(connectionSourcePoint.get_X() - point4.get_X(), 2.0);
                double num2         = Math.Sqrt(introduced15 + Math.Pow(connectionSourcePoint.get_Y() - point4.get_Y(), 2.0));
                double num3         = (num2 * t.HeadOffset) / ((element.Length == 0) ? ((double)1) : ((double)element.Length));
                double num4         = 1.0;
                double num5         = 0.0;
                if (!(connectionSourcePoint.get_Y() == point4.get_Y()))
                {
                    num4 = Math.Abs((double)(point4.get_X() - connectionSourcePoint.get_X())) / num2;
                    num5 = Math.Abs((double)(point4.get_Y() - connectionSourcePoint.get_Y())) / num2;
                }
                double num6 = num3 * num4;
                double num7 = num3 * num5;
                if (t.HeadElementArrivedSource == sources[0])
                {
                    if (connectionSourcePoint.get_X() <= point4.get_X())
                    {
                        connectionSourcePoint.set_X(connectionSourcePoint.get_X() + num6);
                    }
                    else
                    {
                        connectionSourcePoint.set_X(connectionSourcePoint.get_X() - num6);
                    }
                    if (connectionSourcePoint.get_Y() <= point4.get_Y())
                    {
                        connectionSourcePoint.set_Y(connectionSourcePoint.get_Y() + num7);
                    }
                    else
                    {
                        connectionSourcePoint.set_Y(connectionSourcePoint.get_Y() - num7);
                    }
                    point2 = connectionSourcePoint;
                }
                else
                {
                    if (point4.get_X() <= connectionSourcePoint.get_X())
                    {
                        point4.set_X(point4.get_X() + num6);
                    }
                    else
                    {
                        point4.set_X(point4.get_X() - num6);
                    }
                    if (point4.get_Y() <= connectionSourcePoint.get_Y())
                    {
                        point4.set_Y(point4.get_Y() + num7);
                    }
                    else
                    {
                        point4.set_Y(point4.get_Y() - num7);
                    }
                    point2 = point4;
                }
                trainPoint = point2;
                if (index != -1)
                {
                    if (connectionSourcePoint.get_Y() == point4.get_Y())
                    {
                        trainPoint.set_Y(trainPoint.get_Y() - 6.0);
                        trainPoint.set_Y(trainPoint.get_Y() + (13 * index));
                    }
                    else
                    {
                        trainPoint.set_X(trainPoint.get_X() - 6.0);
                        trainPoint.set_X(trainPoint.get_X() + (13 * index));
                    }
                }
            }
            return(trainPoint);
        }
Ejemplo n.º 4
0
 public static bool GetOffsettedValue(PathElement peHead, double HeadOffset, int HeadElementArrivedSource, ref Point ptOut)
 {
     Point point = new Point();
     int[] sources = peHead.GetSources();
     Debug.Assert(sources.Length == 2);
     Point connectionSourcePoint = peHead.GetConnectionSourcePoint(sources[0]);
     Point point3 = peHead.GetConnectionSourcePoint(sources[1]);
     if (sources.Length != 2)
     {
         return false;
     }
     double introduced12 = Math.Pow(connectionSourcePoint.get_X() - point3.get_X(), 2.0);
     double num = Math.Sqrt(introduced12 + Math.Pow(connectionSourcePoint.get_Y() - point3.get_Y(), 2.0));
     double num2 = (num * HeadOffset) / ((peHead.Length == 0) ? ((double) 1) : ((double) peHead.Length));
     double num3 = 1.0;
     double num4 = 0.0;
     if (!(connectionSourcePoint.get_Y() == point3.get_Y()))
     {
         num3 = Math.Abs((double) (point3.get_X() - connectionSourcePoint.get_X())) / num;
         num4 = Math.Abs((double) (point3.get_Y() - connectionSourcePoint.get_Y())) / num;
     }
     double num5 = num2 * num3;
     double num6 = num2 * num4;
     if (HeadElementArrivedSource == sources[0])
     {
         if (connectionSourcePoint.get_X() <= point3.get_X())
         {
             connectionSourcePoint.set_X(connectionSourcePoint.get_X() + ((int) num5));
         }
         else
         {
             connectionSourcePoint.set_X(connectionSourcePoint.get_X() - ((int) num5));
         }
         if (connectionSourcePoint.get_Y() <= point3.get_Y())
         {
             connectionSourcePoint.set_Y(connectionSourcePoint.get_Y() + ((int) num6));
         }
         else
         {
             connectionSourcePoint.set_Y(connectionSourcePoint.get_Y() - ((int) num6));
         }
         point = connectionSourcePoint;
     }
     else
     {
         if (point3.get_X() <= connectionSourcePoint.get_X())
         {
             point3.set_X(point3.get_X() + ((int) num5));
         }
         else
         {
             point3.set_X(point3.get_X() - ((int) num5));
         }
         if (point3.get_Y() <= connectionSourcePoint.get_Y())
         {
             point3.set_Y(point3.get_Y() + ((int) num6));
         }
         else
         {
             point3.set_Y(point3.get_Y() - ((int) num6));
         }
         point = point3;
     }
     ptOut = point;
     return true;
 }