using GeoSigmaDrawLib; using System; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms; using UCDraw; namespace KevServer { public class WebDrawToolSelect : WebDrawTool { private Point pointStart = new Point(0, 0); private Point pointPrev = new Point(0, 0); private Point pointCur = new Point(0, 0); public Point CacheImgLocation { get; set; } = new Point(0, 0); public WebDrawToolSelect() : base() { ToolCursor = CursorType.Select; ItemType = DrawItemType.ITEM_SELECT; } public WebDrawToolSelect(GeoSigmaXY geo) : this() { this.Geo = geo; } public override void Start() { base.Start(); } public Bitmap OnLButtonDown(MouseEventArgs e, Keys key = Keys.None) { Bitmap bmpBack = null; bool bMoving = Geo.SelectIsOnMoving(); Geo.OnLButtonDown(e.X, e.Y, IntPtr.Zero); bMoving = Geo.SelectIsOnMoving(); pointStart = e.Location; pointPrev = new Point(e.X, e.Y); // 移动轮廓图 if (Geo.SelectIsOnMoving()) { int kind = Geo.Select_GetKindOfSelectedElement(); if ((DrawElementType)kind == DrawElementType.ELEMENT_MESH && Geo.SelectGetCount() == 1) { return bmpBack; } try { int nLeft = 0, nTop = 0, nRight = 0, nBottom = 0; Geo.SelectGetTrackerRect(ref nLeft, ref nTop, ref nRight, ref nBottom); bmpBack = new Bitmap(nRight - nLeft + 1, nBottom - nTop + 1, PixelFormat.Format16bppRgb555); Graphics gBack = Graphics.FromImage(bmpBack); gBack.Clear(Color.White); IntPtr pBmpDC = gBack.GetHdc(); Geo.SelectDrawTrackPath(pBmpDC); gBack.ReleaseHdc(); CacheImgLocation = new Point(nLeft, nTop); // bmpBack.Save("C:\\temp\\bmpSelect.bmp", ImageFormat.Bmp); //bmpBack.MakeTransparent(Color.White); } catch (Exception ex) { Trace.WriteLine("图形放的太大了!\r\n" + ex.Message); } } else { return bmpBack; } return bmpBack; } public bool OnLButtonUp(MouseEventArgs e, Keys key = Keys.None) { //Bitmap bmp = (Bitmap)drawArea.Bmp.Clone(); if (Geo == null) { return false; } Geo.OnLButtonUp(e.X, e.Y, IntPtr.Zero, key); //if (drawArea.PaintingImage != null) //{ // drawArea.Bmp = (Bitmap)drawArea.PaintingImage.Clone(); // drawArea.PaintingImage = null; //} // 判断选中数量和是否移动状态 if (Geo.SelectStatusChanged() == false && Geo.SelectGetCount() == 0) { return false; } return true; } /// /// Moves the elements to. /// /// The x. /// The y. /// A bool. public bool MoveElementsTo(int x, int y) { if (Geo == null) { return false; } this.Geo.SelectMoveElementsTo(x, y); return true; } public int OnMouseMove(MouseEventArgs e) { //Trace.WriteLine($"{e.X}, {e.Y}"); if (e.X == pointPrev.X && e.Y == pointPrev.Y) { return -2; } // Trace.WriteLine($"{DateTime.Now}:{e.X},{e.Y}--{pointPrev.X},{pointPrev.Y}"); //if (cursorType == -1) //{ // drawArea.Cursor = ToolCursor; //} int handleType = -2; handleType = Geo.SelectSetCursor(e.X, e.Y); //bool shiftPressed = (Control.ModifierKeys & Keys.Shift) == Keys.Shift; //if (shiftPressed == true && handleType == 5) //{ // handleType = -1; //} pointPrev.X = e.X; pointPrev.Y = e.Y; return handleType; } public void SelectAll() { Geo.Select_SelectAll(); } } }