Ejemplo n.º 1
0
        /// <summary>
        /// Selects the shape contains point.
        /// </summary>
        /// <param name="shapes">Shape collection.</param>
        /// <param name="point">Point to check.</param>
        /// <returns>Hit position of the selected shape.</returns>
        protected HitPositions SelectShape(ShapeCollection shapes, Point point)
        {
            if (Control.ModifierKeys != Keys.Control)
            {
                Select.UnselectAll(shapes);
            }

            HitPositions hitPosition = HitPositions.None;

            for (int i = shapes.Count - 1; i >= 0; i--)
            {
                IShape shape = shapes[i];

                hitPosition = shape.HitTest(point);
                if (hitPosition != HitPositions.None)
                {
                    shapes.BringToFront(shape);
                    shape.Selected     = true;
                    _lastSelectedShape = shape;

                    return(hitPosition);
                }
            }

            return(HitPositions.None);
        }
Ejemplo n.º 2
0
Archivo: Shape.cs Proyecto: nistck/Jx
        /// <summary>
        /// Returns the center point of the clicked grabber.
        /// </summary>
        /// <param name="hitPosition">hit position.</param>
        /// <returns>Point.</returns>
        virtual public PointF GetGrabberPoint(HitPositions hitPosition)
        {
            if (hitPosition == HitPositions.Right ||
                hitPosition == HitPositions.BottomRight ||
                hitPosition == HitPositions.Bottom)
            {
                return(new PointF(this.Location.X, this.Location.Y));
            }
            else if (
                hitPosition == HitPositions.BottomLeft ||
                hitPosition == HitPositions.Left)
            {
                return(new PointF(this.Location.X + this.Dimension.Width, this.Location.Y));
            }
            else if (
                hitPosition == HitPositions.TopLeft ||
                hitPosition == HitPositions.Top ||
                hitPosition == HitPositions.Left)
            {
                return(new PointF(this.Location.X + this.Dimension.Width, this.Location.Y + this.Dimension.Height));
            }
            else if (hitPosition == HitPositions.TopRight)
            {
                return(new PointF(this.Location.X, this.Location.Y + this.Dimension.Height));
            }

            return(new PointF(0, 0));
        }
Ejemplo n.º 3
0
        public virtual PointF GetGrabberPoint(HitPositions hitPosition)
        {
            PointF result;

            if (hitPosition == HitPositions.Right || hitPosition == HitPositions.BottomRight || hitPosition == HitPositions.Bottom)
            {
                result = new PointF(this.Location.X, this.Location.Y);
            }
            else if (hitPosition == HitPositions.BottomLeft || hitPosition == HitPositions.Left)
            {
                result = new PointF(this.Location.X + this.Dimension.Width, this.Location.Y);
            }
            else if (hitPosition == HitPositions.TopLeft || hitPosition == HitPositions.Top || hitPosition == HitPositions.Left)
            {
                result = new PointF(this.Location.X + this.Dimension.Width, this.Location.Y + this.Dimension.Height);
            }
            else if (hitPosition == HitPositions.TopRight)
            {
                result = new PointF(this.Location.X, this.Location.Y + this.Dimension.Height);
            }
            else
            {
                result = new PointF(0f, 0f);
            }
            return(result);
        }
Ejemplo n.º 4
0
Archivo: Pointer.cs Proyecto: nistck/Jx
        /// <summary>
        /// Mouse down function.
        /// </summary>
        /// <param name="document">Informations transferred from DrawingPanel.</param>
        /// <param name="e">MouseEventArgs.</param>
        public override void MouseDown(IDocument document, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left)
            {
                return;
            }

            base.MouseDown(document, e);

            HitPositions hitPosition = SelectShape(document.Shapes, e.Location);

            switch (hitPosition)
            {
            case HitPositions.Center:
                _tool = new Move();
                break;

            case HitPositions.None:
                _tool = new MultiSelect();
                break;

            default:
                _tool = new Resize();
                break;
            }

            _tool.MouseDown(document, e);
        }
Ejemplo n.º 5
0
        protected HitPositions SelectShape(ShapeCollection shapes, Point point)
        {
            if (Control.ModifierKeys != Keys.Control)
            {
                Select.UnselectAll(shapes);
            }
            HitPositions result;

            for (int i = shapes.Count - 1; i >= 0; i--)
            {
                IShape       shape        = shapes[i];
                HitPositions hitPositions = shape.HitTest(point);
                if (hitPositions != HitPositions.None)
                {
                    if (!shape.Locked)
                    {
                        shapes.BringToFront(shape);
                        shape.Selected            = true;
                        Select._lastSelectedShape = shape;
                    }
                    result = hitPositions;
                    return(result);
                }
            }
            result = HitPositions.None;
            return(result);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Mouse down function.
        /// </summary>
        /// <param name="document">Informations transferred from DrawingPanel.</param>
        /// <param name="e">MouseEventArgs.</param>
        public override void MouseDown(IDocument document, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left)
            {
                return;
            }

            base.MouseDown(document, e);


            //Added By rm 920617

            ShapeCollection sTemp = new ShapeCollection();

            foreach (var ss in document.Shapes)
            {
                if (ss is BodyBackground)
                {
                    continue;
                }
                sTemp.Add(ss);
            }
            //Added By rm 920617



            //if (Control.ModifierKeys == Keys.Control && ((document.DrawingControl as DrawingPanel).BackgroundLayer != null))
            //  {
            //      _tool = new Hand();
            //  }
            //else
            {
                // HitPositions hitPosition = SelectShape(document.Shapes, e.Location); //Commented By rm 920617

                HitPositions hitPosition = SelectShape(sTemp, e.Location);

                switch (hitPosition)
                {
                case HitPositions.Center:
                    _tool = new Move();
                    break;

                case HitPositions.None:
                    _tool = new MultiSelect();
                    break;

                default:
                    _tool = new Resize();
                    break;
                }
            }



            _tool.MouseDown(document, e);
        }
Ejemplo n.º 7
0
 public void Scale(float scaleX, float scaleY, HitPositions reference)
 {
     if (this._shape.Parent != null || (this._shape.Selected && !this._shape.Locked))
     {
         if (reference != HitPositions.None && reference != HitPositions.Center)
         {
             PointF grabberPoint = this._shape.GetGrabberPoint(reference);
             this.Scale(scaleX, scaleY, grabberPoint);
         }
     }
 }
Ejemplo n.º 8
0
 public void AddMove(Command move, HitPos hitPosition, int damage,
                     CrushProp crushProperty            = CrushProp.None,
                     PositionProp positionProperty      = PositionProp.Stand,
                     PositionProp enemyPositionProperty = PositionProp.Stand)
 {
     Commands.Add(move);
     HitPositions.Add(hitPosition);
     Damages.Add(damage);
     CrushProperties.Add(crushProperty);
     PositionProperties.Add(positionProperty);
 }
Ejemplo n.º 9
0
        /// <summary>
        /// Scales the shape.
        /// </summary>
        /// <param name="scaleX">Scale x.</param>
        /// <param name="scaleY">Scale y.</param>
        /// <param name="reference">Reference hit position.</param>
        public void Scale(float scaleX, float scaleY, HitPositions reference)
        {
            if (_shape.Parent == null && (!_shape.Selected || _shape.Locked))
                return;

            if (reference == HitPositions.None || reference == HitPositions.Center)
                return;

            PointF grabberPoint = _shape.GetGrabberPoint(reference);

            Scale(scaleX, scaleY, grabberPoint);
        }
Ejemplo n.º 10
0
        public void InitializeVersors(HitPositions hitPosition)
        {
            this._horizontalMirror = true;
            this._verticalMirror   = true;
            switch (hitPosition)
            {
            case HitPositions.TopLeft:
                this._horizontalVersor = HorizontalVersors.RightLeft;
                this._verticalVersor   = VerticalVersors.BottomTop;
                break;

            case HitPositions.Top:
                this._horizontalVersor = HorizontalVersors.LeftRight;
                this._verticalVersor   = VerticalVersors.BottomTop;
                this._horizontalMirror = false;
                break;

            case HitPositions.TopRight:
                this._horizontalVersor = HorizontalVersors.LeftRight;
                this._verticalVersor   = VerticalVersors.BottomTop;
                break;

            case HitPositions.Right:
                this._horizontalVersor = HorizontalVersors.LeftRight;
                this._verticalVersor   = VerticalVersors.TopBottom;
                this._verticalMirror   = false;
                break;

            case HitPositions.BottomRight:
                this._horizontalVersor = HorizontalVersors.LeftRight;
                this._verticalVersor   = VerticalVersors.TopBottom;
                break;

            case HitPositions.Bottom:
                this._horizontalVersor = HorizontalVersors.LeftRight;
                this._verticalVersor   = VerticalVersors.TopBottom;
                this._horizontalMirror = false;
                break;

            case HitPositions.BottomLeft:
                this._horizontalVersor = HorizontalVersors.RightLeft;
                this._verticalVersor   = VerticalVersors.TopBottom;
                break;

            case HitPositions.Left:
                this._horizontalVersor = HorizontalVersors.RightLeft;
                this._verticalVersor   = VerticalVersors.TopBottom;
                this._verticalMirror   = false;
                break;
            }
        }
Ejemplo n.º 11
0
        private void DesignVertex(IDisplay display, HitPositions hit, double x, double y)
        {
            //IMultiPoint mPoint = Grabbers(display, false);
            IPointCollection pColl = Vertices(_template, -1);

            if (pColl != null || pColl.PointCount > hit.HitID)
            {
                //if (_hit != hit)
                //{
                //    _hit = hit;

                //    _fixPoint = new Point(pColl[hit.HitID].X, pColl[hit.HitID].Y);

                //    _oldFixPoint = new Point(_fixPoint.X, _fixPoint.Y);
                //    ScaleGeometry(_oldFixPoint, _scaleX, _scaleY);
                //    RotateGeometry(_oldFixPoint, Math.Cos(_angle), Math.Sin(_angle));
                //    TranslateGeometry(_oldFixPoint, _xOffset, _yOffset);
                //}

                IPoint point = new Point(x, y);
                TranslateGeometry(point, -_xOffset, -_yOffset);
                RotateGeometry(point, Math.Cos(-_angle), Math.Sin(-_angle));
                ScaleGeometry(point, 1.0 / _scaleX, 1.0 / _scaleY);

                pColl[hit.HitID].X = point.X;
                pColl[hit.HitID].Y = point.Y;

                IGeometry geometry = this.TransformGeometry();
                if (geometry != null)
                {
                    this.Template = geometry;

                    IEnvelope env = geometry.Envelope;
                    this._angle = 0;
                    this.Scale(env.Width, env.Height);
                    this.Translation(env.minx, env.miny);
                }
                //if (!(this is Ghost))
                //{
                //    this.Template = _template;
                //    _scaleX = pColl.Envelope.Width;
                //    _scaleY = pColl.Envelope.Height;
                //}
                //SnapToFixPoint();
            }
        }
Ejemplo n.º 12
0
Archivo: Shape.cs Proyecto: nistck/Jx
        /// <summary>
        /// Gets the shape hit position.
        /// </summary>
        /// <param name="point">Point to check.</param>
        /// <returns>Hit position.</returns>
        virtual public HitPositions HitTest(Point point)
        {
            HitPositions hitPosition = HitPositions.None;

            Rectangle[] grabbers = GetGrabbers();

            if (grabbers[0].Contains(point))
            {
                hitPosition = HitPositions.TopLeft;
            }
            else if (grabbers[1].Contains(point))
            {
                hitPosition = HitPositions.Top;
            }
            else if (grabbers[2].Contains(point))
            {
                hitPosition = HitPositions.TopRight;
            }
            else if (grabbers[3].Contains(point))
            {
                hitPosition = HitPositions.Right;
            }
            else if (grabbers[4].Contains(point))
            {
                hitPosition = HitPositions.BottomRight;
            }
            else if (grabbers[5].Contains(point))
            {
                hitPosition = HitPositions.Bottom;
            }
            else if (grabbers[6].Contains(point))
            {
                hitPosition = HitPositions.BottomLeft;
            }
            else if (grabbers[7].Contains(point))
            {
                hitPosition = HitPositions.Left;
            }
            else if (Contains(point))
            {
                hitPosition = HitPositions.Center;
            }

            return(hitPosition);
        }
Ejemplo n.º 13
0
        virtual public void Design(IDisplay display, HitPositions hit, double dx, double dy)
        {
            if (display == null || display.GraphicsContainer == null || hit == null)
            {
                return;
            }

            switch (display.GraphicsContainer.EditMode)
            {
            case GrabberMode.Pointer:
                DesignPointer(display, hit, dx, dy);
                break;

            case GrabberMode.Vertex:
                DesignVertex(display, hit, dx, dy);
                break;
            }
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Mouse down function.
        /// </summary>
        /// <param name="document">Informations transferred from DrawingPanel.</param>
        /// <param name="e">MouseEventArgs.</param>
        public override void MouseDown(IDocument document, MouseEventArgs e)
        {
            base.MouseDown(document, e);

            foreach (IShape shape in document.Shapes)
            {
                _hitPosition = shape.HitTest(e.Location);
                if (_hitPosition != HitPositions.None)
                {
                    this.Ghost.Shape = shape;

                    UpdateSize(Ghost, shape.Location);

                    Ghost.MouseDown(document, e);
                    Ghost.Location = shape.Location;
                }
            }
        }
Ejemplo n.º 15
0
        public void Design(IDisplay display, HitPositions hit, double dx, double dy)
        {
            if (_geometry == null)
            {
                return;
            }
            IPointCollection pColl = gView.Framework.SpatialAlgorithms.Algorithm.GeometryPoints(_geometry, false);

            if (pColl == null || pColl.PointCount == 0)
            {
                return;
            }

            if (hit.HitID >= 0 && hit.HitID < pColl.PointCount)
            {
                pColl[hit.HitID].X = dx;
                pColl[hit.HitID].Y = dy;
            }
        }
Ejemplo n.º 16
0
        public virtual HitPositions HitTest(Point point)
        {
            HitPositions result = HitPositions.None;

            Rectangle[] grabbers = this.GetGrabbers();
            if (grabbers[0].Contains(point))
            {
                result = HitPositions.TopLeft;
            }
            else if (grabbers[1].Contains(point))
            {
                result = HitPositions.Top;
            }
            else if (grabbers[2].Contains(point))
            {
                result = HitPositions.TopRight;
            }
            else if (grabbers[3].Contains(point))
            {
                result = HitPositions.Right;
            }
            else if (grabbers[4].Contains(point))
            {
                result = HitPositions.BottomRight;
            }
            else if (grabbers[5].Contains(point))
            {
                result = HitPositions.Bottom;
            }
            else if (grabbers[6].Contains(point))
            {
                result = HitPositions.BottomLeft;
            }
            else if (grabbers[7].Contains(point))
            {
                result = HitPositions.Left;
            }
            else if (this.Contains(point))
            {
                result = HitPositions.Center;
            }
            return(result);
        }
Ejemplo n.º 17
0
        private void DesignPointer(IDisplay display, HitPositions hit, double dx, double dy)
        {
            if (_hit != hit)
            {
                _hit        = hit;
                _oldScaleX  = _scaleX;
                _oldScaleY  = _scaleY;
                _oldXOffset = _xOffset;
                _oldYOffset = _yOffset;
                _oldAngle   = _angle;

                IMultiPoint grabbers = Grabbers(display, false);
                _oldAnglePoint = grabbers[8];

                ScaleGeometry(_oldAnglePoint, _scaleX, _scaleY);
                RotateGeometry(_oldAnglePoint, Math.Cos(_angle), Math.Sin(_angle));
                TranslateGeometry(_oldAnglePoint, _xOffset, _yOffset);

                switch ((GrabberIDs)hit.HitID)
                {
                case GrabberIDs.left:
                    _fixPoint = grabbers[(int)GrabberIDs.right];
                    break;

                case GrabberIDs.right:
                    _fixPoint = grabbers[(int)GrabberIDs.left];
                    break;

                case GrabberIDs.lower:
                    _fixPoint = grabbers[(int)GrabberIDs.upper];
                    break;

                case GrabberIDs.upper:
                    _fixPoint = grabbers[(int)GrabberIDs.lower];
                    break;

                case GrabberIDs.lowerLeft:
                    _fixPoint = grabbers[(int)GrabberIDs.upperRight];
                    break;

                case GrabberIDs.upperRight:
                    _fixPoint = grabbers[(int)GrabberIDs.lowerLeft];
                    break;

                case GrabberIDs.lowerRight:
                    _fixPoint = grabbers[(int)GrabberIDs.upperLeft];
                    break;

                case GrabberIDs.upperLeft:
                    _fixPoint = grabbers[(int)GrabberIDs.lowerRight];
                    break;

                default:
                    _fixPoint = null;
                    break;
                }
                if (_fixPoint != null)
                {
                    _oldFixPoint = new Point(_fixPoint.X, _fixPoint.Y);
                    ScaleGeometry(_oldFixPoint, _scaleX, _scaleY);
                    RotateGeometry(_oldFixPoint, Math.Cos(_angle), Math.Sin(_angle));
                    TranslateGeometry(_oldFixPoint, _xOffset, _yOffset);
                }
            }
            if (hit.HitID < 0 || hit.HitID > 9)
            {
                return;
            }

            if ((GrabberIDs)hit.HitID != GrabberIDs.move && (GrabberIDs)hit.HitID != GrabberIDs.rotation)
            {
                double x = dx, y = dy;
                dx = Math.Cos(_angle) * x - Math.Sin(_angle) * y;
                dy = Math.Sin(_angle) * x + Math.Cos(_angle) * y;
            }

            switch ((GrabberIDs)hit.HitID)
            {
            case GrabberIDs.upperRight:
                _scaleX = _oldScaleX + dx;
                _scaleY = _oldScaleY + dy;
                break;

            case GrabberIDs.upperLeft:
                _xOffset = _oldXOffset + dx;
                _scaleX  = _oldScaleX - dx;
                _scaleY  = _oldScaleY + dy;
                break;

            case GrabberIDs.lowerLeft:
                _xOffset = _oldXOffset + dx;
                _scaleX  = _oldScaleX - dx;
                _yOffset = _oldYOffset + dy;
                _scaleY  = _oldScaleY - dy;
                break;

            case GrabberIDs.lowerRight:
                _scaleX  = _oldScaleX + dx;
                _yOffset = _oldYOffset + dy;
                _scaleY  = _oldScaleY - dy;
                break;

            case GrabberIDs.lower:
                _yOffset = _oldYOffset + dy;
                _scaleY  = _oldScaleY - dy;
                SnapToFixPoint();
                break;

            case GrabberIDs.upper:
                _scaleY = _oldScaleY + dy;
                break;

            case GrabberIDs.right:
                _scaleX = _oldScaleX + dx;
                break;

            case GrabberIDs.left:
                _xOffset = _oldXOffset + dx;
                _scaleX  = _oldScaleX - dx;
                break;

            case GrabberIDs.rotation:
                IPoint point = new Point(_rotationCenter.X, _rotationCenter.Y);
                ScaleGeometry(point, _scaleX, _scaleY);
                TranslateGeometry(point, _xOffset, _yOffset);
                dx = _oldAnglePoint.X + dx - point.X;
                dy = _oldAnglePoint.Y + dy - point.Y;

                //this.Rotation = Math.Atan2(dx, dy) * 180.0 / Math.PI;
                _angle = Math.Atan2(dx, dy);
                //if (_scaleY < 0) _angle += Math.PI;
                //if (_angle > 2.0 * Math.PI) _angle -= 2.0 * Math.PI;
                break;

            case GrabberIDs.move:
                _xOffset = _oldXOffset + dx;
                _yOffset = _oldYOffset + dy;
                break;
            }
            SnapToFixPoint();
        }
Ejemplo n.º 18
0
Archivo: Ghost.cs Proyecto: nistck/Jx
        /// <summary>
        /// Initializes versors relative to ghosted shape
        /// </summary>
        /// <param name="hitPosition">Ghosted shape hit position</param>
        protected void InitializeVersors(HitPositions hitPosition)
        {
            _horizontalMirror = true;
            _verticalMirror   = true;

            switch (hitPosition)
            {
            case HitPositions.TopLeft:
            {
                _horizontalVersor = HorizontalVersors.RightLeft;
                _verticalVersor   = VerticalVersors.BottomTop;

                break;
            }

            case HitPositions.Top:
            {
                _horizontalVersor = HorizontalVersors.LeftRight;
                _verticalVersor   = VerticalVersors.BottomTop;

                _horizontalMirror = false;

                break;
            }

            case HitPositions.TopRight:
            {
                _horizontalVersor = HorizontalVersors.LeftRight;
                _verticalVersor   = VerticalVersors.BottomTop;

                break;
            }

            case HitPositions.Right:
            {
                _horizontalVersor = HorizontalVersors.LeftRight;
                _verticalVersor   = VerticalVersors.TopBottom;

                _verticalMirror = false;

                break;
            }

            case HitPositions.BottomRight:
            {
                _horizontalVersor = HorizontalVersors.LeftRight;
                _verticalVersor   = VerticalVersors.TopBottom;

                break;
            }

            case HitPositions.Bottom:
            {
                _horizontalVersor = HorizontalVersors.LeftRight;
                _verticalVersor   = VerticalVersors.TopBottom;

                _horizontalMirror = false;

                break;
            }

            case HitPositions.BottomLeft:
            {
                _horizontalVersor = HorizontalVersors.RightLeft;
                _verticalVersor   = VerticalVersors.TopBottom;

                break;
            }

            case HitPositions.Left:
            {
                _horizontalVersor = HorizontalVersors.RightLeft;
                _verticalVersor   = VerticalVersors.TopBottom;

                _verticalMirror = false;

                break;
            }
            }
        }