/// <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); }
/// <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)); }
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); }
/// <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); }
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); }
/// <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); }
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); } } }
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); }
/// <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); }
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; } }
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(); } }
/// <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); }
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; } }
/// <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; } } }
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; } }
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); }
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(); }
/// <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; } } }