| | |
| | | //[JsonIgnore] |
| | | //protected Pen PenTextNG = new Pen(Color.Red, 2); |
| | | |
| | | ///// <summary> |
| | | ///// 字体大小 |
| | | ///// </summary> |
| | | //[Category("显示属性")] |
| | | //[Description("字体大小")] |
| | | ////[Browsable(false)] |
| | | //public virtual float FontSize { get; set; } = 15; |
| | | /// <summary> |
| | | /// 字体大小 |
| | | /// </summary> |
| | | [Category("显示属性")] |
| | | [Description("字体大小")] |
| | | //[Browsable(false)] |
| | | public virtual float FontSize { get; set; } = 15; |
| | | [Description("字体设置")] |
| | | public virtual Font Font { get; set; } = new Font(new FontFamily("Tahoma"), 15, GraphicsUnit.World); |
| | | |
| | | /// <summary> |
| | | /// 字体和基元的距离 |
| | | /// </summary> |
| | |
| | | if (state != value) |
| | | { |
| | | ElementState preState = state; |
| | | state = value; |
| | | EventRouter.ChangeElementsMouseState?.Invoke(this, preState, state); |
| | | |
| | | Set(ref state, value); |
| | | EventRouter.TriggerElementsMouseStateChanged(this, preState, state); |
| | | switch (state) |
| | | { |
| | | case ElementState.MouseHover: |
| | |
| | | if (State == ElementState.MeasureDoneNG || State == ElementState.MeasureDoneOK) |
| | | return; |
| | | |
| | | if (State == ElementState.MouseInSide) |
| | | //if (State == ElementState.MouseInSide) |
| | | //{ |
| | | // State = ElementState.Selected; |
| | | //} |
| | | //else if (State == ElementState.Selected || State == ElementState.Moving) |
| | | //{ |
| | | // if (IsMouseInSide(p)) |
| | | // { |
| | | // State = ElementState.MouseInSide; |
| | | // } |
| | | //} |
| | | if (IsMouseInSide(p)) |
| | | { |
| | | State = ElementState.Selected; |
| | | } |
| | | else if (State == ElementState.Selected || State == ElementState.Moving) |
| | | { |
| | | if (IsMouseInSide(p)) |
| | | { |
| | | State = ElementState.MouseInSide; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | public virtual void OnMouseDown(Point p) |
| | | { |
| | | switch (State) |
| | | //switch (State) |
| | | //{ |
| | | // case ElementState.New: |
| | | // OnMouseDownWhenNew(p); |
| | | // break; |
| | | // case ElementState.MouseHover: |
| | | // break; |
| | | // case ElementState.MouseInSide: |
| | | // State = ElementState.Selected; |
| | | // break; |
| | | // case ElementState.Selected: |
| | | // _startPoint = p; |
| | | // State = ElementState.Moving; |
| | | // break; |
| | | // case ElementState.Normal: |
| | | // break; |
| | | //} |
| | | |
| | | if (IsMouseCanMoveElement(p) && State == ElementState.Selected) |
| | | { |
| | | case ElementState.New: |
| | | OnMouseDownWhenNew(p); |
| | | break; |
| | | case ElementState.MouseHover: |
| | | break; |
| | | case ElementState.MouseInSide: |
| | | State = ElementState.Selected; |
| | | break; |
| | | case ElementState.Selected: |
| | | _startPoint = p; |
| | | State = ElementState.Moving; |
| | | break; |
| | | case ElementState.Normal: |
| | | break; |
| | | State = ElementState.Moving; |
| | | } |
| | | else if (IsMouseCanStretchBottom(p) && State == ElementState.CanStretchBottom) |
| | | { |
| | | State = ElementState.StretchingBottom; |
| | | } |
| | | else if (IsMouseCanStretchTop(p) && State == ElementState.CanStretchTop) |
| | | { |
| | | State = ElementState.StretchingTop; |
| | | } |
| | | else if (IsMouseCanStretchLeft(p) && State == ElementState.CanStretchLeft) |
| | | { |
| | | State = ElementState.StretchingLeft; |
| | | } |
| | | else if (IsMouseCanStretchRight(p) && State == ElementState.CanStretchRight) |
| | | { |
| | | State = ElementState.StretchingRight; |
| | | } |
| | | else if (IsMouseCanStretchLeftLowerCorner(p) && State == ElementState.CanStretchLeftLowerCorner) |
| | | { |
| | | State = ElementState.StretchingLeftLowerCorner; |
| | | } |
| | | else if (IsMouseCanStretchLeftUpperCorner(p) && State == ElementState.CanStretchLeftUpperCorner) |
| | | { |
| | | State = ElementState.StretchingLeftUpperCorner; |
| | | } |
| | | else if (IsMouseCanStretchRightLowerCorner(p) && State == ElementState.CanStretchRightLowerCorner) |
| | | { |
| | | State = ElementState.StretchingRightLowerCorner; |
| | | } |
| | | else if (IsMouseCanStretchRightUpperCorner(p) && State == ElementState.CanStretchRightUpperCorner) |
| | | { |
| | | State = ElementState.StretchingRightUpperCorner; |
| | | } |
| | | } |
| | | |
| | |
| | | OnMouseMoveWhenNew(p); |
| | | break; |
| | | case ElementState.Selected: |
| | | if (IsMouseCanStretchLeft(p)) |
| | | { |
| | | State = ElementState.CanStretchLeft; |
| | | } |
| | | else if (IsMouseCanStretchRight(p)) |
| | | { |
| | | State = ElementState.CanStretchRight; |
| | | } |
| | | else if (IsMouseCanStretchTop(p)) |
| | | { |
| | | State = ElementState.CanStretchTop; |
| | | } |
| | | else if (IsMouseCanStretchBottom(p)) |
| | | { |
| | | State = ElementState.CanStretchBottom; |
| | | } |
| | | else if (IsMouseCanStretchLeftLowerCorner(p)) |
| | | { |
| | | State = ElementState.CanStretchLeftLowerCorner; |
| | | } |
| | | else if (IsMouseCanStretchLeftUpperCorner(p)) |
| | | { |
| | | State = ElementState.CanStretchLeftUpperCorner; |
| | | } |
| | | else if (IsMouseCanStretchRightLowerCorner(p)) |
| | | { |
| | | State = ElementState.CanStretchRightLowerCorner; |
| | | } |
| | | else if (IsMouseCanStretchRightUpperCorner(p)) |
| | | { |
| | | State = ElementState.CanStretchRightUpperCorner; |
| | | } |
| | | |
| | | break; |
| | | case ElementState.Moving: |
| | | _currentPoint = p; |
| | | Translate(_currentPoint.X - _startPoint.X, _currentPoint.Y - _startPoint.Y); |
| | | _startPoint = _currentPoint; |
| | | //Translate(_currentPoint.X - _startPoint.X, _currentPoint.Y - _startPoint.Y); |
| | | //_startPoint = _currentPoint; |
| | | Relocate(p); |
| | | break; |
| | | case ElementState.MouseHover: |
| | | case ElementState.MouseInSide: |
| | | case ElementState.Normal: |
| | | if (IsMouseInSide(p)) |
| | | //if (IsMouseInSide(p)) |
| | | //{ |
| | | // State = ElementState.MouseInSide; |
| | | //} |
| | | //else if (IsMouseHover(p)) |
| | | //{ |
| | | // State = ElementState.MouseHover; |
| | | //} |
| | | //else |
| | | //{ |
| | | // State = ElementState.Normal; |
| | | //} |
| | | break; |
| | | case ElementState.CanStretchBottom: |
| | | if (!IsMouseCanStretchBottom(p)) |
| | | { |
| | | State = ElementState.MouseInSide; |
| | | State = ElementState.Selected; |
| | | } |
| | | else if (IsMouseHover(p)) |
| | | break; |
| | | case ElementState.CanStretchTop: |
| | | if (!IsMouseCanStretchTop(p)) |
| | | { |
| | | State = ElementState.MouseHover; |
| | | State = ElementState.Selected; |
| | | } |
| | | else |
| | | break; |
| | | case ElementState.CanStretchLeft: |
| | | if (!IsMouseCanStretchLeft(p)) |
| | | { |
| | | State = ElementState.Normal; |
| | | State = ElementState.Selected; |
| | | } |
| | | break; |
| | | case ElementState.CanStretchRight: |
| | | if (!IsMouseCanStretchRight(p)) |
| | | { |
| | | State = ElementState.Selected; |
| | | } |
| | | break; |
| | | case ElementState.CanStretchLeftUpperCorner: |
| | | if (!IsMouseCanStretchLeftUpperCorner(p)) |
| | | { |
| | | State = ElementState.Selected; |
| | | } |
| | | break; |
| | | case ElementState.CanStretchLeftLowerCorner: |
| | | if (!IsMouseCanStretchLeftLowerCorner(p)) |
| | | { |
| | | State = ElementState.Selected; |
| | | } |
| | | break; |
| | | case ElementState.CanStretchRightLowerCorner: |
| | | if (!IsMouseCanStretchRightLowerCorner(p)) |
| | | { |
| | | State = ElementState.Selected; |
| | | } |
| | | break; |
| | | case ElementState.CanStretchRightUpperCorner: |
| | | if (!IsMouseCanStretchRightUpperCorner(p)) |
| | | { |
| | | State = ElementState.Selected; |
| | | } |
| | | break; |
| | | case ElementState.StretchingTop: |
| | | StretchTop(p); |
| | | break; |
| | | case ElementState.StretchingBottom: |
| | | StretchBottom(p); |
| | | break; |
| | | case ElementState.StretchingLeft: |
| | | StretchLeft(p); |
| | | break; |
| | | case ElementState.StretchingRight: |
| | | StretchRight(p); |
| | | break; |
| | | case ElementState.StretchingLeftLowerCorner: |
| | | StretchLeftLowerCorner(p); |
| | | break; |
| | | case ElementState.StretchingLeftUpperCorner: |
| | | StretchLeftUpperCorner(p); |
| | | break; |
| | | case ElementState.StretchingRightLowerCorner: |
| | | StretchRightLowerCorner(p); |
| | | break; |
| | | case ElementState.StretchingRightUpperCorner: |
| | | StretchRightUpperCorner(p); |
| | | break; |
| | | } |
| | | } |
| | |
| | | switch (State) |
| | | { |
| | | case ElementState.Moving: |
| | | //Calculate(null); |
| | | State = ElementState.Selected; |
| | | break; |
| | | case ElementState.Selected: |
| | | //Calculate(null); |
| | | if (!IsMouseInSide(p)) |
| | | { |
| | | State = ElementState.Normal; |
| | | } |
| | | break; |
| | | case ElementState.StretchingBottom: |
| | | State = ElementState.CanStretchBottom; |
| | | break; |
| | | case ElementState.StretchingLeft: |
| | | State = ElementState.CanStretchLeft; |
| | | break; |
| | | case ElementState.StretchingRight: |
| | | State = ElementState.CanStretchRight; |
| | | break; |
| | | case ElementState.StretchingTop: |
| | | State = ElementState.CanStretchTop; |
| | | break; |
| | | case ElementState.StretchingLeftLowerCorner: |
| | | State = ElementState.CanStretchLeftLowerCorner; |
| | | break; |
| | | case ElementState.StretchingLeftUpperCorner: |
| | | State = ElementState.CanStretchLeftUpperCorner; |
| | | break; |
| | | case ElementState.StretchingRightUpperCorner: |
| | | State = ElementState.CanStretchRightUpperCorner; |
| | | break; |
| | | case ElementState.StretchingRightLowerCorner: |
| | | State = ElementState.CanStretchRightLowerCorner; |
| | | break; |
| | | default: |
| | | State = ElementState.Normal; |
| | | break; |
| | | } |
| | | |
| | | AfterTranformOp(); |
| | | } |
| | | |
| | | public virtual void AfterTranformOp() |
| | | { |
| | | } |
| | | |
| | | #region 当基元状态为新建或可编辑时的鼠标操作动作 |
| | |
| | | public abstract bool IsMouseInSide(Point p); |
| | | |
| | | public abstract bool IsIntersect(Rectangle rect); |
| | | #region Move & Stretch & Move Anchor |
| | | public virtual bool IsMouseCanMoveElement(Point p) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | public abstract void CalculateBaseRectangle(); |
| | | public virtual bool IsMouseCanStretchLeft(Point p) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | public virtual bool IsMouseCanStretchRight(Point p) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | public virtual bool IsMouseCanStretchTop(Point p) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | public virtual bool IsMouseCanStretchBottom(Point p) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | public virtual void StretchLeft(Point p) |
| | | { |
| | | } |
| | | |
| | | public virtual void StretchRight(Point p) |
| | | { |
| | | } |
| | | |
| | | public virtual void StretchTop(Point p) |
| | | { |
| | | } |
| | | |
| | | public virtual void StretchBottom(Point p) |
| | | { |
| | | } |
| | | |
| | | public virtual bool IsMouseCanStretchLeftUpperCorner(Point p) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | public virtual bool IsMouseCanStretchRightUpperCorner(Point p) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | public virtual bool IsMouseCanStretchLeftLowerCorner(Point p) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | public virtual bool IsMouseCanStretchRightLowerCorner(Point p) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | public virtual void StretchLeftUpperCorner(Point p) |
| | | { |
| | | } |
| | | |
| | | public virtual void StretchRightUpperCorner(Point p) |
| | | { |
| | | } |
| | | |
| | | public virtual void StretchLeftLowerCorner(Point p) |
| | | { |
| | | } |
| | | |
| | | public virtual void StretchRightLowerCorner(Point p) |
| | | { |
| | | } |
| | | |
| | | public virtual bool IsMouseCanMoveAnchor(Point p) |
| | | { |
| | | return false; |
| | | } |
| | | #endregion |
| | | |
| | | #endregion |
| | | |
| | | #region 变形操作 |
| | | public abstract void Translate(int x, int y); |
| | | |
| | | public virtual void Relocate(Point point) { } |
| | | |
| | | //public abstract void RotateAt(int x, int y, float degree); |
| | | #endregion |
| | |
| | | /// 算法 |
| | | /// </summary> |
| | | /// <param name="paras">计算参数</param> |
| | | public abstract void Calculate(Bitmap image); |
| | | public virtual void Calculate(Bitmap image) { } |
| | | |
| | | public abstract void Calculate(IntPtr imagePtr, int ptrSize, int imageWidth, int imageHeight); |
| | | public virtual void Calculate(IntPtr imagePtr, int ptrSize, int imageWidth, int imageHeight) { } |
| | | |
| | | public abstract void Calculate(string imagePath); |
| | | public virtual void Calculate(string imagePath) { } |
| | | #endregion |
| | | |
| | | #region 图片保存 |