public void CancelMove(Coordinates orig, WorldTransform t)
 {
     throw new NotSupportedException();
 }
        public void Render(Graphics g, WorldTransform t)
        {
            Coordinates wll = t.WorldLowerLeft;
            Coordinates wup = t.WorldUpperRight;

            if ((position.X < wll.X || position.X > wup.X || position.Y < wll.Y || position.Y > wup.Y))
            {
                return;
            }

            Matrix bodyTrans = new Matrix();

            bodyTrans.Rotate((float)(this.Heading) * 180 / (float)Math.PI - 90);
            bodyTrans.Translate((float)position.X, (float)position.Y, MatrixOrder.Append);

            Matrix origTrans = g.Transform.Clone();

            bodyTrans.Multiply(g.Transform, MatrixOrder.Append);
            g.Transform = bodyTrans;

            float penWidth = nomPixelWidth / t.Scale;

            using (Pen p = new Pen(color, penWidth))
            {
                DrawRectangle(g, p, bodyRect);

                // build the transform for the rear wheels
                // do the left wheel
                Matrix wheelTransform = bodyTrans.Clone();
                wheelTransform.Translate(-wheelOffset, 0, MatrixOrder.Prepend);
                try
                {
                    g.Transform = wheelTransform;
                    g.FillRectangle(Brushes.White, wheelRectL);
                    DrawRectangle(g, p, wheelRectL);
                }
                catch (Exception)
                {
                }

                // do the right wheel
                wheelTransform = bodyTrans.Clone();
                wheelTransform.Translate(wheelOffset, 0, MatrixOrder.Prepend);
                try
                {
                    g.Transform = wheelTransform;
                    g.FillRectangle(Brushes.White, wheelRectR);
                    DrawRectangle(g, p, wheelRectR);
                }
                catch (Exception)
                {
                }

                // do the front wheels
                // do the left wheel
                wheelTransform = bodyTrans.Clone();
                wheelTransform.Translate(-wheelOffset, wheelbase, MatrixOrder.Prepend);
                wheelTransform.Rotate(steeringAngle * 180 / (float)Math.PI, MatrixOrder.Prepend);
                try
                {
                    g.Transform = wheelTransform;
                    g.FillRectangle(Brushes.White, wheelRectL);
                    DrawRectangle(g, p, wheelRectL);
                }
                catch (Exception)
                {
                }

                // do the right wheel
                wheelTransform = bodyTrans.Clone();
                wheelTransform.Translate(wheelOffset, wheelbase, MatrixOrder.Prepend);
                wheelTransform.Rotate(steeringAngle * 180 / (float)Math.PI, MatrixOrder.Prepend);
                try
                {
                    g.Transform = wheelTransform;
                    g.FillRectangle(Brushes.White, wheelRectR);
                    DrawRectangle(g, p, wheelRectR);
                }
                catch (Exception)
                {
                }
            }

            g.Transform = origTrans;

            // draw Position
            DrawingUtility.DrawControlPoint(this.position, color, null, ContentAlignment.MiddleCenter, ControlPointStyle.LargeX, g, t);
        }
 public void CompleteMove(Coordinates orig, Coordinates offset, WorldTransform t)
 {
     throw new NotSupportedException();
 }
        public void Render(Graphics g, WorldTransform t)
        {
            if (this.observedVehicle.ObservationState != ObservedVehicleState.Deleted ||
                (this.observedVehicle.ObservationState == ObservedVehicleState.Deleted &&
                 DrawingUtility.DisplayDeletedVehicles))
            {
                Coordinates wll = t.WorldLowerLeft;
                Coordinates wup = t.WorldUpperRight;

                if ((Position.X < wll.X || Position.X > wup.X || Position.Y < wll.Y || Position.Y > wup.Y))
                {
                    return;
                }

                Matrix bodyTrans = new Matrix();
                bodyTrans.Rotate((float)(this.Heading) * 180 / (float)Math.PI - 90);
                bodyTrans.Translate((float)Position.X, (float)Position.Y, MatrixOrder.Append);

                Matrix origTrans = g.Transform.Clone();
                bodyTrans.Multiply(g.Transform, MatrixOrder.Append);
                g.Transform = bodyTrans;

                float penWidth = nomPixelWidth / t.Scale;
                using (Pen p = new Pen(color, penWidth))
                {
                    DrawRectangle(g, p, bodyRect);

                    // build the transform for the rear wheels
                    // do the left wheel
                    Matrix wheelTransform = bodyTrans.Clone();
                    wheelTransform.Translate(-WheelOffset, 0, MatrixOrder.Prepend);
                    try
                    {
                        g.Transform = wheelTransform;
                        g.FillRectangle(Brushes.White, wheelRectL);
                        DrawRectangle(g, p, wheelRectL);
                    }
                    catch (Exception)
                    {
                    }

                    // do the right wheel
                    wheelTransform = bodyTrans.Clone();
                    wheelTransform.Translate(WheelOffset, 0, MatrixOrder.Prepend);
                    try
                    {
                        g.Transform = wheelTransform;
                        g.FillRectangle(Brushes.White, wheelRectR);
                        DrawRectangle(g, p, wheelRectR);
                    }
                    catch (Exception)
                    {
                    }

                    // do the front wheels
                    // do the left wheel
                    wheelTransform = bodyTrans.Clone();
                    wheelTransform.Translate(-WheelOffset, WheelBase, MatrixOrder.Prepend);
                    wheelTransform.Rotate(steeringAngle * 180 / (float)Math.PI, MatrixOrder.Prepend);
                    try
                    {
                        g.Transform = wheelTransform;
                        g.FillRectangle(Brushes.White, wheelRectL);
                        DrawRectangle(g, p, wheelRectL);
                    }
                    catch (Exception)
                    {
                    }

                    // do the right wheel
                    wheelTransform = bodyTrans.Clone();
                    wheelTransform.Translate(WheelOffset, WheelBase, MatrixOrder.Prepend);
                    wheelTransform.Rotate(steeringAngle * 180 / (float)Math.PI, MatrixOrder.Prepend);
                    try
                    {
                        g.Transform = wheelTransform;
                        g.FillRectangle(Brushes.White, wheelRectR);
                        DrawRectangle(g, p, wheelRectR);
                    }
                    catch (Exception)
                    {
                    }
                }

                g.Transform = origTrans;

                // draw Position
                DrawingUtility.DrawControlPoint(this.Position, color, this.observedVehicle.Id.ToString(), ContentAlignment.MiddleCenter, ControlPointStyle.LargeBox, g, t);

                Coordinates head = this.Position + this.observedVehicle.Heading.Normalize(this.observedVehicle.Length / 2.0);
                DrawingUtility.DrawControlLine(this.Position, head, color, g, t);
            }
        }