My form has a picturebox that draw a shape with mouse down and up.
my problem is the location of text"020"! I want to draw it in center of rectangle.
please guide me. my codes are:
how change 'RCS' ?Code:Imports System.Drawing.Drawing2D Public Class Form4 Private NewSegment As Segment Private Segments As New List(Of Segment) Private Sub PictureBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseDown NewSegment = New Segment(e.Location, e.Location) Segments.Add(NewSegment) PictureBox1.Invalidate() End Sub Private Sub PictureBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseMove If NewSegment Is Nothing Then Return NewSegment.Point2 = e.Location PictureBox1.Invalidate() End Sub Private Sub PictureBox1_MouseUp(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseUp NewSegment = Nothing PictureBox1.Invalidate() End Sub Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias For Each segment As Segment In Segments segment.Draw(e.Graphics, Nothing) Next End Sub End Class Class Segment Private Const RADIUS As Integer = 15 Private Shared rc_r As New Rectangle(New Point(-RADIUS, -RADIUS), New Size(RADIUS * 1.5, RADIUS * 1.5)) 'for rectangle Private pt1, pt2 As Point Private angle As Double = 0 Private length As Double = 0 Private Shared pen1 As New Pen(Color.Black, 1.5) Private Shared drawFontF As New Font("times new roman", 8, style:=FontStyle.Bold) Private Shared SF As StringFormat Public Sub New(startPoint As Point, endPoint As Point) Point1 = startPoint Point2 = endPoint End Sub Public Property Point1 As Point Get Return pt1 End Get Set(value As Point) pt1 = value UpdateAngleAndLength() End Set End Property Public Property Point2 As Point Get Return pt2 End Get Set(value As Point) pt2 = value UpdateAngleAndLength() End Set End Property Private Sub UpdateAngleAndLength() angle = Math.Atan2(Point2.Y - Point1.Y, Point2.X - Point1.X) * 180.0 / Math.PI length = Math.Sqrt(Math.Pow(Point2.X - Point1.X, 2) + Math.Pow(Point2.Y - Point1.Y, 2)) End Sub Public Sub Draw(gr As System.Drawing.Graphics, R As Rectangle) If Point1 = Point2 Then Return ' save the current state of the graphics Dim curState As GraphicsState = gr.Save() ' move the origin to the start point of the line gr.TranslateTransform(Point1.X, Point1.Y) ' rotate the whole surface gr.RotateTransform(angle) ' draw the line on the x-axis gr.DrawLine(pen1, 0, 0, CInt(length), 0) ' move the origin along the x-axis to where the center of the circle should be gr.TranslateTransform(length + RADIUS, 0) gr.DrawRectangle(pen1, rc_r) ' for rectangle ' orient back to the "normal" so the 90 is upright gr.RotateTransform(-angle) ' draw the 90 Dim rcS As New Rectangle(New Point(-RADIUS, -RADIUS), New Size(RADIUS * 1.5, RADIUS * 1.5)) gr.DrawString("020", drawFontF, Brushes.DimGray, rcS, SF) gr.Restore(curState) End Sub End Class




Reply With Quote
