private bool checkLineProximity(int indexno, int identifier, Graphics daGe) //checks whether if the mouse pointer is on an object (i.e. shape) { Graphics g = daGe; Pen lePen = new Pen(Color.Yellow, 1); //g = this.CreateGraphics(); g.TranslateTransform(8, canvasHeight + 8); //transforms point-of-origin to the lower left corner of the canvas. g.SmoothingMode = SmoothingMode.HighQuality; switch (identifier) //depending on the "identifier" value, the relevant object will be highlighted { case 2: //Line { Line line = (Line)drawingList[indexno]; if (mainScale == 0) { mainScale = 1; } if (line.Highlight(lePen, g, aPoint, mainScale)) { this.Cursor = Cursors.Hand; line.highlighted = true; return(true); } break; } case 3: //rectangle { rectangle rect = (rectangle)drawingList[indexno]; if (rect.Highlight(lePen, g, aPoint)) { this.Cursor = Cursors.Hand; rect.highlighted = true; return(true); } break; } case 4: //circle { circle tempCircle = (circle)drawingList[indexno]; if (mainScale == 0) { mainScale = 1; } if (tempCircle.Highlight(lePen, g, aPoint, mainScale)) { this.Cursor = Cursors.Hand; tempCircle.highlighted = true; return(true); } break; } case 5: //polyline { polyline tempPoly = (polyline)drawingList[indexno]; if (mainScale == 0) { mainScale = 1; } if (tempPoly.Highlight(lePen, g, aPoint, mainScale)) { this.Cursor = Cursors.Hand; tempPoly.highlighted = true; return(true); } break; } case 6: //arc { Arc tempArc = (Arc)drawingList[indexno]; if (mainScale == 0) { mainScale = 1; } if (tempArc.Highlight(lePen, g, aPoint, mainScale)) { this.Cursor = Cursors.Hand; tempArc.highlighted = true; return(true); } break; } } return(false); }
public void Draw(Graphics g) { //int xOffSet = 0; Pen lePen = new Pen(Color.White, 3); Size scrollOffset = new Size(this.AutoScrollPosition); g.TranslateTransform(1 + scrollOffset.Width, canvasHeight - 1 + scrollOffset.Height); if (YMin < 0) { g.TranslateTransform(0, -(int)Math.Abs(YMin)); //transforms point-of-origin to the lower left corner of the canvas. } if (XMin < 0) { g.TranslateTransform((int)Math.Abs(XMin), 0); } // g.SmoothingMode = SmoothingMode.AntiAlias; showForks(g, lePen.Brush); foreach (DrawingObject obj in objectIdentifier) //iterates through the objects { switch (obj.shapeType) { case 2: //line { Line temp = (Line)drawingList[obj.indexNo]; lePen.Color = temp.ContourColor; lePen.Width = temp.LineWidth; highlightedRegion.Location = temp.GetStartPoint; highlightedRegion.Width = temp.GetStartPoint.X - temp.GetEndPoint.X; highlightedRegion.Height = temp.GetStartPoint.Y - temp.GetEndPoint.Y; int centerX = (temp.GetStartPoint.X + temp.GetEndPoint.X) / 2; int centerY = (temp.GetStartPoint.Y + temp.GetEndPoint.Y) / 2; if (mainScale == 0) { mainScale = 1; } temp.Draw(lePen, g, mainScale); g.DrawString("L" + obj.indexNo, new Font("宋体", 10), lePen.Brush, centerX, centerY); break; } case 3: //rectangle { rectangle temp = (rectangle)drawingList[obj.indexNo]; lePen.Color = temp.ContourColor; lePen.Width = temp.LineWidth; temp.Draw(lePen, g); break; } case 4: //circle { circle temp = (circle)drawingList[obj.indexNo]; lePen.Color = temp.ContourColor; lePen.Width = temp.LineWidth; if (mainScale == 0) { mainScale = 1; } temp.Draw(lePen, g, mainScale); break; } case 5: //polyline { polyline temp = (polyline)drawingList[obj.indexNo]; lePen.Color = temp.ContourColor; lePen.Width = temp.LineWidth; if (mainScale == 0) { mainScale = 1; } temp.Draw(lePen, g, mainScale); break; } case 6: //arc { Arc temp = (Arc)drawingList[obj.indexNo]; lePen.Color = temp.ContourColor; lePen.Width = temp.LineWidth; if (mainScale == 0) { mainScale = 1; } temp.Draw(lePen, g, mainScale); g.DrawString("A" + obj.indexNo, new Font("宋体", 10), lePen.Brush, temp.CenterPoint); break; } } } // g.Dispose(); //not disposed because "g" is get from the paintbackground event.. lePen.Dispose(); }