Accueil > > > RECTANGLES ARRONDIS
RECTANGLES ARRONDIS
Information sur la source
Description
Adptation vb.net du source de sebmafate sur www.csharpfr.com : http://www.csharpfr.com/code.aspx?ID=35392 Permet de créer des rectangles arrondis avec des dégradés de couleur (tout le mérite est pour lui)
Source
- Imports System
- Imports System.Collections.Generic
- Imports System.Text
- Imports System.Drawing.Drawing2D
- Imports System.Drawing
- Public Class clsRoundedCorner
- ''' <summary>
- ''' Enregistre les informations n??cessaires ?? la cr??ation d'un Rectangle dont
- ''' les coins sont arrondis
- ''' </summary>
- Public Structure RoundedRectangle
-
- Private x_ As Integer
-
- Private y_ As Integer
-
- Private width_ As Integer
-
- Private height_ As Integer
-
- Private radius_ As Single
-
- Private roundedCorner_ As RoundedCorner
-
- Public Shared Empty As RoundedRectangle
-
- ''' <summary>
- ''' Initialise un rectangle avec les coins arrondis dont le point sup??rieur gauche
- ''' aura pour coordonn??es (<i>x_</i>,<i>y_</i>), comme largeur/hauteur <i>width_</i> et <i>height_</i>, des arrondis
- ''' aux coins <i>rc</i> et enfin les arrondis auront comme rayon <i>radius_</i>
- ''' </summary>
- ''' <param name="x_">Abscisse du point sup??rieur gauche</param>
- ''' <param name="y_">Ordonn??e du point sup??rieur gauche</param>
- ''' <param name="width_">Largeur du rectangle</param>
- ''' <param name="height_">Hauteur du rectangle</param>
- ''' <param name="rc">Coins arrondis</param>
- ''' <param name="radius_">Rayon des arrondis</param>
- Public Sub New(ByVal x_ As Integer, ByVal y_ As Integer, ByVal width_ As Integer, ByVal height_ As Integer, _
- ByVal rc As RoundedCorner, ByVal radius_ As Single)
- Me.x_ = x_
- Me.y_ = y_
- Me.width_ = width_
- Me.height_ = height_
- Me.radius_ = radius_
- Me.roundedCorner_ = rc
- End Sub
-
- ''' <summary>
- ''' Initialise un rectangle ?? partir du Rectangle <i>rect</i>, des arrondis
- ''' aux coins <i>rc</i> et enfin les arrondis auront comme rayon <i>radius_</i>
- ''' </summary>
- ''' <param name="rect">Rectangle de base</param>
- ''' <param name="rc">Coins arrondis</param>
- ''' <param name="radius_">Rayon des arrondis</param>
- Public Sub New(ByVal rect As Rectangle, ByVal rc As RoundedCorner, ByVal radius_ As Single)
- Me.x_ = rect.X
- Me.y_ = rect.Y
- Me.width_ = rect.Width
- Me.height_ = rect.Height
- Me.radius_ = radius_
- Me.roundedCorner_ = rc
- End Sub
-
- ''' <summary>
- ''' Initialise un rectangle avec les coins arrondis dont le point sup??rieur gauche
- ''' aura pour coordonn??es <i>location</i>, comme taille <i>size</i>, des arrondis
- ''' aux coins <i>rc</i> et enfin les arrondis auront comme rayon <i>radius_</i>
- ''' </summary>
- ''' <param name="location"></param>
- ''' <param name="size"></param>
- ''' <param name="rc">Coins arrondis</param>
- ''' <param name="radius_">Rayon des arrondis</param>
- Public Sub New(ByVal location As Point, ByVal size As Size, ByVal rc As RoundedCorner, _
- ByVal radius_ As Single)
- Me.x_ = location.X
- Me.y_ = location.Y
- Me.width_ = size.Width
- Me.height_ = size.Height
- Me.radius_ = radius_
- Me.roundedCorner_ = rc
- End Sub
-
- ''' <summary>
- ''' Obtient ou d??fini une enum??ration indiquant les coins arrondis
- ''' </summary>
- Public Property RoundedCorners() As RoundedCorner
- Get
- Return Me.roundedCorner_
- End Get
- Set(ByVal value As RoundedCorner)
- Me.roundedCorner_ = value
- End Set
- End Property
-
- ''' <summary>
- ''' Obtient ou d??fini la taille du rectangle
- ''' </summary>
- Public Property Size() As Size
- Get
- Return New Size(Me.width_, Me.height_)
- End Get
- Set(ByVal value As Size)
- Me.width_ = value.Width
- Me.height_ = value.Height
- End Set
- End Property
-
- ''' <summary>
- ''' Obtient ou d??fini l'abscisse du coin sup??rieur gauche du rectangle
- ''' </summary>
- Public Property X() As Integer
- Get
- Return Me.x_
- End Get
- Set(ByVal value As Integer)
- Me.x_ = value
- End Set
- End Property
-
- ''' <summary>
- ''' Obtient ou d??fini l'ordonn??e du coin sup??rieur gauche du rectangle
- ''' </summary>
- Public Property Y() As Integer
- Get
- Return Me.y_
- End Get
- Set(ByVal value As Integer)
- Me.y_ = value
- End Set
- End Property
-
- ''' <summary>
- ''' Obtient ou d??fini la largeur du rectangle
- ''' </summary>
- Public Property Width() As Integer
- Get
- Return Me.width_
- End Get
- Set(ByVal value As Integer)
- Me.width_ = value
- End Set
- End Property
-
- ''' <summary>
- ''' Obtient ou d??fini la hauteur du rectangle
- ''' </summary>
- Public Property Height() As Integer
- Get
- Return Me.height_
- End Get
- Set(ByVal value As Integer)
- Me.height_ = value
- End Set
- End Property
-
- ''' <summary>
- ''' Obtient l'abscisse des coins de gauche
- ''' </summary>
- Public ReadOnly Property Left() As Integer
- Get
- Return Me.x_
- End Get
- End Property
-
- ''' <summary>
- ''' Obtient l'abscisse des coins de droit
- ''' </summary>
- Public ReadOnly Property Right() As Integer
- Get
- Return (Me.x_ + Me.width_)
- End Get
- End Property
-
- ''' <summary>
- ''' Obtient l'ordonn??e des coins du haut
- ''' </summary>
- Public ReadOnly Property Top() As Integer
- Get
- Return Me.y_
- End Get
- End Property
-
- ''' <summary>
- ''' Obtient l'ordonn??e des coins du bas
- ''' </summary>
- Public ReadOnly Property Bottom() As Integer
- Get
- Return (Me.y_ + Me.height_)
- End Get
- End Property
-
- ''' <summary>
- ''' Obtient ou d??fini l'emplacement du coin sup??rieur gauche
- ''' </summary>
- Public Property Location() As Point
- Get
- Return New Point(Me.x_, Me.y_)
- End Get
- Set(ByVal value As Point)
- Me.x_ = value.X
- Me.y_ = value.Y
- End Set
- End Property
-
- ''' <summary>
- ''' Obtient ou d??fini le rayon de courbure des coins
- ''' </summary>
- Public Property Radius() As Single
- Get
- Return radius_
- End Get
- Set(ByVal value As Single)
- radius_ = value
- End Set
- End Property
-
- ''' <summary>
- ''' Agrandi le rectangle de la taille sp??cifi??e
- ''' </summary>
- ''' <param name="width_">largeur</param>
- ''' <param name="height_">hauteur</param>
- Public Overloads Sub Inflate(ByVal width_ As Integer, ByVal height_ As Integer)
- Me.x_ = (Me.x_ - width_)
- Me.y_ = (Me.y_ - height_)
- Me.width_ = (Me.width_ + (2 * width_))
- Me.height_ = (Me.height_ + (2 * height_))
- End Sub
-
- ''' <summary>
- ''' Agrandi le rectangle de la taille sp??cifi??e
- ''' </summary>
- ''' <param name="size">taille</param>
- Public Overloads Sub Inflate(ByVal size As Size)
- Me.Inflate(size.Width, size.Height)
- End Sub
-
- ''' <summary>
- ''' Cr??e et retourne une copie RoundedRectangle agrandi de la taille sp??cifi??.
- ''' </summary>
- ''' <param name="rrect">RoundedRectangle</param>
- ''' <param name="width_">Largeur</param>
- ''' <param name="height_">Hauteur</param>
- ''' <returns>Une copie du RoundedRectangle agrandie</returns>
- Public Overloads Shared Function Inflate(ByVal rrect As RoundedRectangle, _
- ByVal width_ As Integer, ByVal height_ As Integer) As RoundedRectangle
- Dim r As RoundedRectangle = rrect
- r.Inflate(width_, height_)
- Return r
- End Function
-
- ''' <summary>
- ''' Retourne un RoundRectangle correspondant ?? l'intersection des RoundRectangles a et b
- ''' </summary>
- ''' <param name="a">RoundedRectangle</param>
- ''' <param name="b">RoundedRectangle</param>
- ''' <param name="rc">Coins ?? arrondir</param>
- ''' <param name="radius_">Rayon de coubure des arrondis</param>
- ''' <returns></returns>
- ''' <remarks>Si aucune intersection n'est trouv??e entre les RoundRectangles, un RoundedRectangle est retourn??</remarks>
- Public Overloads Shared Function Intersect(ByVal a As RoundedRectangle, _
- ByVal b As RoundedRectangle, ByVal rc As RoundedCorner, _
- ByVal radius_ As Single) As RoundedRectangle
- Dim left As Integer = Math.Max(a.Left, b.Left)
- Dim right As Integer = Math.Min(a.Right, b.Right)
- Dim top As Integer = Math.Max(a.Top, b.Top)
- Dim bottom As Integer = Math.Min(a.Bottom, b.Bottom)
- If ((left <= right) _
- AndAlso (top <= bottom)) Then
- Return New RoundedRectangle(left, (right - left), top, (bottom - top), rc, radius_)
- End If
- Return RoundedRectangle.Empty
- End Function
-
- ''' <summary>
- ''' Replace ce RoundedRectangle par l'intersection de celui-ci de rrect
- ''' </summary>
- ''' <param name="rrect">RoundedRectangle</param>
- Public Overloads Sub Intersect(ByVal rrect As RoundedRectangle)
- Dim r As RoundedRectangle = RoundedRectangle.Intersect(rrect, Me, _
- Me.roundedCorner_, Me.radius_)
- Me.x_ = r.x_
- Me.y_ = r.y_
- Me.width_ = r.width_
- Me.height_ = r.height_
- End Sub
-
- ''' <summary>
- ''' Retourne <i>true</i> si ce RoundedRectangle poss??de une intersection avec rrect, <i>false</i> sinon
- ''' </summary>
- ''' <param name="rrect">RoundedRectangle</param>
- ''' <returns><i>true</i> si intersection, <i>false</i> sinon</returns>
- Public Function IntersectWith(ByVal rrect As RoundedRectangle) As Boolean
- Return (((rrect.Left < Me.Right) _
- AndAlso (Me.Left < rrect.Right)) _
- AndAlso ((rrect.Top < Me.Bottom) _
- AndAlso (Me.Top < rrect.Bottom)))
- 'if (((rect.X < (this.X + this.Width)) && (this.X < (rect.X + rect.Width))) && (rect.Y < (this.Y + this.Height)))
- '{
- ' return (this.Y < (rect.Y + rect.Height));
- '}
- 'return false;
- End Function
-
- ''' <summary>
- ''' Retourne un RoundedRectangle qui correspond ?? l'intersection des RoundedRectangle a et b et dont les
- ''' coins <i>rc</i> sont arrondis d'un rayon de <i>radius_</i>
- ''' </summary>
- ''' <param name="a">RoundedRectangle</param>
- ''' <param name="b">RoundedRectangle</param>
- ''' <param name="rc">Coins ?? arrondir</param>
- ''' <param name="radius_">Rayon de courbure des arrondis</param>
- ''' <returns>RoundedRectangle de l'union</returns>
- Public Shared Function Union(ByVal a As RoundedRectangle, _
- ByVal b As RoundedRectangle, ByVal rc As RoundedCorner, _
- ByVal radius_ As Single) As RoundedRectangle
- Dim left As Integer = Math.Min(a.Left, b.Left)
- Dim right As Integer = Math.Max(a.Right, b.Right)
- Dim top As Integer = Math.Min(a.Top, b.Top)
- Dim bottom As Integer = Math.Max(a.Bottom, b.Bottom)
- Return New RoundedRectangle(left, (right - left), top, (bottom - top), rc, radius_)
- End Function
-
- ''' <summary>
- ''' D??place le RoundedRectangle d'apr??s les coordonn??es sp??cifi??s
- ''' </summary>
- ''' <param name="x_">D??placement sur l'axe des abscisses</param>
- ''' <param name="y_">D??placement sur l'axe des ordon??es</param>
- Public Overloads Sub Offset(ByVal x_ As Integer, ByVal y_ As Integer)
- Me.x_ = (Me.x_ + x_)
- Me.y_ = (Me.y_ + y_)
- End Sub
-
- ''' <summary>
- ''' D??place le RoundedRectangle d'apr??s les ccordonn??es sp??cifi??es
- ''' </summary>
- ''' <param name="point">Point contenant les informations de d??placements</param>
- Public Overloads Sub Offset(ByVal point As Point)
- Me.x_ = (Me.x_ + point.X)
- Me.y_ = (Me.y_ + point.Y)
- End Sub
-
- ''' <summary>
- ''' Retourne un bool??en indiquant si le point sp??cifi?? fait partie du RoundedRectangle
- ''' </summary>
- ''' <param name="x_">Abscisse</param>
- ''' <param name="y_">Ordonn??e</param>
- ''' <returns><i>true</i> si le point se trouve ?? l'int??rieur du RoundedRectangle, <i>false</i> sinon</returns>
- Public Overloads Function Contains(ByVal x_ As Integer, ByVal y_ As Integer) As Boolean
- Return ((Me.x_ <= x_) _
- AndAlso ((x_ <= Me.Right) _
- AndAlso ((Me.y_ <= y_) _
- AndAlso (y_ <= Me.Bottom))))
- End Function
-
- ''' <summary>
- ''' Retourne un bool??en indiquant si le point sp??cifi?? fait partie du RoundedRectangle
- ''' </summary>
- ''' <param name="pt">Point ?? v??rifier</param>
- ''' <returns><i>true</i> si le point se trouve ?? l'int??rieur du RoundedRectangle, <i>false</i> sinon</returns>
- Public Overloads Function Contains(ByVal pt As Point) As Boolean
- Return Contains(pt.X, pt.Y)
- End Function
-
- ''' <summary>
- ''' Retourne un <see cref="GraphicsPath"/> repr??sentant le RoundedRectangle.
- ''' </summary>
- ''' <returns><see cref="GraphicsPath"/></returns>
- ''' <seealso cref="GraphicsPath"/>
- Public Function ToGraphicsPath() As GraphicsPath
- Dim gp As GraphicsPath
- 'Dim temp As PointF
- gp = New GraphicsPath
- 'Rectangle baseRect = new Rectangle(this.Location, this.Size);
- ' si le rayon est inf??rieur ou ??gal ?? 0
- ' on retourne le rectangle de base
- If (radius_ <= 0.0!) Then
- gp.AddRectangle(New Rectangle(Me.Location, Me.Size))
- gp.CloseFigure()
- Return gp
- End If
- Dim diameter As Single = (radius_ * 2.0!)
- If (Me.height_ <= Me.width_) Then
- If ((diameter >= Me.height_) _
- AndAlso (((Me.roundedCorner_ _
- And (RoundedCorner.BottomLeft Or RoundedCorner.TopLeft)) _
- = (RoundedCorner.BottomLeft Or RoundedCorner.TopLeft)) _
- OrElse ((Me.roundedCorner_ _
- And (RoundedCorner.BottomRight Or RoundedCorner.TopRight)) _
- = (RoundedCorner.BottomRight Or RoundedCorner.TopRight)))) Then
- diameter = Me.height_
- End If
- ElseIf ((diameter >= Me.width_) _
- AndAlso (((Me.roundedCorner_ _
- And (RoundedCorner.BottomLeft Or RoundedCorner.BottomRight)) _
- = (RoundedCorner.BottomLeft Or RoundedCorner.BottomRight)) _
- OrElse ((Me.roundedCorner_ _
- And (RoundedCorner.TopLeft Or RoundedCorner.TopRight)) _
- = (RoundedCorner.TopLeft Or RoundedCorner.TopRight)))) Then
- diameter = Me.width_
- End If
- Dim size As SizeF = New SizeF(diameter, diameter)
- Dim arc As RectangleF = New RectangleF(Me.Location, size)
- ' arc en haut ?? gauche
- If ((Me.roundedCorner_ And RoundedCorner.TopLeft) _
- = RoundedCorner.TopLeft) Then
- gp.AddArc(arc, 180, 90)
- Else
- gp.AddLine(New PointF(arc.Left, arc.Top), New PointF(arc.Left, arc.Top))
- End If
- ' arc en haut ?? droite
- arc.X = (CType(Me.Right, Single) - diameter)
- If ((Me.roundedCorner_ And RoundedCorner.TopRight) _
- = RoundedCorner.TopRight) Then
- gp.AddArc(arc, 270, 90)
- Else
- gp.AddLine(New PointF(arc.Right, arc.Top), New PointF(arc.Right, arc.Top))
- End If
- arc.Y = (CType(Me.Bottom, Single) - diameter)
- ' arc en bas ?? droite
- If ((Me.roundedCorner_ And RoundedCorner.BottomRight) _
- = RoundedCorner.BottomRight) Then
- gp.AddArc(arc, 0, 90)
- Else
- gp.AddLine(New PointF(arc.Right, arc.Bottom), New PointF(arc.Right, arc.Bottom))
- End If
- ' arc en bas ?? gauche
- arc.X = CType(Me.Left, Single)
- If ((Me.roundedCorner_ And RoundedCorner.BottomLeft) _
- = RoundedCorner.BottomLeft) Then
- gp.AddArc(arc, 90, 90)
- Else
- gp.AddLine(New PointF(arc.Left, arc.Bottom), New PointF(arc.Left, arc.Bottom))
- End If
- gp.CloseFigure()
- Return gp
- End Function
-
- ''' <summary>
- ''' Retourne un <see cref="Rectangle"/>
- ''' </summary>
- ''' <returns><see cref="Rectangle"/></returns>
- Public Function ToRectangle() As Rectangle
- Return New Rectangle(Me.Location, Me.Size)
- End Function
-
- #Region " overrides "
- Public Overrides Function ToString() As String
- Return String.Format("{{X={0},Y={1},Width={2},Height={3},Radius={4}}}", Me.x_, _
- Me.y_, Me.width_, Me.height_, Me.radius_)
- End Function
-
- Public Shared Operator =(ByVal a As RoundedRectangle, ByVal b As RoundedRectangle) As Boolean
- Return (a.X = b.X And a.Y = b.Y And a.Width = b.Width And a.Height = b.Height)
- End Operator
-
- Public Shared Operator <>(ByVal a As RoundedRectangle, ByVal b As RoundedRectangle) As Boolean
- Return Not (a = b)
- End Operator
-
- Public Overrides Function Equals(ByVal obj As Object) As Boolean
- Dim ret As Boolean = False
- If (obj.GetType.Name = GetType(RoundedRectangle).Name) Then
- Dim r As RoundedRectangle = obj
- ret = (r.X = Me.X And r.Y = Me.Y And r.Width = Me.Width And r.Height = Me.Height)
- End If
- Return ret
- End Function
-
- Public Overrides Function GetHashCode() As Integer
- Return Me.GetHashCode()
- End Function
- #End Region
- End Structure
-
- <Flags()> _
- Public Enum RoundedCorner
-
- TopLeft = 2
-
- TopRight = 4
-
- BottomLeft = 8
-
- BottomRight = 16
-
- All = TopLeft Or TopRight Or BottomLeft Or BottomRight
- End Enum
- End Class
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Drawing.Drawing2D
Imports System.Drawing
Public Class clsRoundedCorner
''' <summary>
''' Enregistre les informations n??cessaires ?? la cr??ation d'un Rectangle dont
''' les coins sont arrondis
''' </summary>
Public Structure RoundedRectangle
Private x_ As Integer
Private y_ As Integer
Private width_ As Integer
Private height_ As Integer
Private radius_ As Single
Private roundedCorner_ As RoundedCorner
Public Shared Empty As RoundedRectangle
''' <summary>
''' Initialise un rectangle avec les coins arrondis dont le point sup??rieur gauche
''' aura pour coordonn??es (<i>x_</i>,<i>y_</i>), comme largeur/hauteur <i>width_</i> et <i>height_</i>, des arrondis
''' aux coins <i>rc</i> et enfin les arrondis auront comme rayon <i>radius_</i>
''' </summary>
''' <param name="x_">Abscisse du point sup??rieur gauche</param>
''' <param name="y_">Ordonn??e du point sup??rieur gauche</param>
''' <param name="width_">Largeur du rectangle</param>
''' <param name="height_">Hauteur du rectangle</param>
''' <param name="rc">Coins arrondis</param>
''' <param name="radius_">Rayon des arrondis</param>
Public Sub New(ByVal x_ As Integer, ByVal y_ As Integer, ByVal width_ As Integer, ByVal height_ As Integer, _
ByVal rc As RoundedCorner, ByVal radius_ As Single)
Me.x_ = x_
Me.y_ = y_
Me.width_ = width_
Me.height_ = height_
Me.radius_ = radius_
Me.roundedCorner_ = rc
End Sub
''' <summary>
''' Initialise un rectangle ?? partir du Rectangle <i>rect</i>, des arrondis
''' aux coins <i>rc</i> et enfin les arrondis auront comme rayon <i>radius_</i>
''' </summary>
''' <param name="rect">Rectangle de base</param>
''' <param name="rc">Coins arrondis</param>
''' <param name="radius_">Rayon des arrondis</param>
Public Sub New(ByVal rect As Rectangle, ByVal rc As RoundedCorner, ByVal radius_ As Single)
Me.x_ = rect.X
Me.y_ = rect.Y
Me.width_ = rect.Width
Me.height_ = rect.Height
Me.radius_ = radius_
Me.roundedCorner_ = rc
End Sub
''' <summary>
''' Initialise un rectangle avec les coins arrondis dont le point sup??rieur gauche
''' aura pour coordonn??es <i>location</i>, comme taille <i>size</i>, des arrondis
''' aux coins <i>rc</i> et enfin les arrondis auront comme rayon <i>radius_</i>
''' </summary>
''' <param name="location"></param>
''' <param name="size"></param>
''' <param name="rc">Coins arrondis</param>
''' <param name="radius_">Rayon des arrondis</param>
Public Sub New(ByVal location As Point, ByVal size As Size, ByVal rc As RoundedCorner, _
ByVal radius_ As Single)
Me.x_ = location.X
Me.y_ = location.Y
Me.width_ = size.Width
Me.height_ = size.Height
Me.radius_ = radius_
Me.roundedCorner_ = rc
End Sub
''' <summary>
''' Obtient ou d??fini une enum??ration indiquant les coins arrondis
''' </summary>
Public Property RoundedCorners() As RoundedCorner
Get
Return Me.roundedCorner_
End Get
Set(ByVal value As RoundedCorner)
Me.roundedCorner_ = value
End Set
End Property
''' <summary>
''' Obtient ou d??fini la taille du rectangle
''' </summary>
Public Property Size() As Size
Get
Return New Size(Me.width_, Me.height_)
End Get
Set(ByVal value As Size)
Me.width_ = value.Width
Me.height_ = value.Height
End Set
End Property
''' <summary>
''' Obtient ou d??fini l'abscisse du coin sup??rieur gauche du rectangle
''' </summary>
Public Property X() As Integer
Get
Return Me.x_
End Get
Set(ByVal value As Integer)
Me.x_ = value
End Set
End Property
''' <summary>
''' Obtient ou d??fini l'ordonn??e du coin sup??rieur gauche du rectangle
''' </summary>
Public Property Y() As Integer
Get
Return Me.y_
End Get
Set(ByVal value As Integer)
Me.y_ = value
End Set
End Property
''' <summary>
''' Obtient ou d??fini la largeur du rectangle
''' </summary>
Public Property Width() As Integer
Get
Return Me.width_
End Get
Set(ByVal value As Integer)
Me.width_ = value
End Set
End Property
''' <summary>
''' Obtient ou d??fini la hauteur du rectangle
''' </summary>
Public Property Height() As Integer
Get
Return Me.height_
End Get
Set(ByVal value As Integer)
Me.height_ = value
End Set
End Property
''' <summary>
''' Obtient l'abscisse des coins de gauche
''' </summary>
Public ReadOnly Property Left() As Integer
Get
Return Me.x_
End Get
End Property
''' <summary>
''' Obtient l'abscisse des coins de droit
''' </summary>
Public ReadOnly Property Right() As Integer
Get
Return (Me.x_ + Me.width_)
End Get
End Property
''' <summary>
''' Obtient l'ordonn??e des coins du haut
''' </summary>
Public ReadOnly Property Top() As Integer
Get
Return Me.y_
End Get
End Property
''' <summary>
''' Obtient l'ordonn??e des coins du bas
''' </summary>
Public ReadOnly Property Bottom() As Integer
Get
Return (Me.y_ + Me.height_)
End Get
End Property
''' <summary>
''' Obtient ou d??fini l'emplacement du coin sup??rieur gauche
''' </summary>
Public Property Location() As Point
Get
Return New Point(Me.x_, Me.y_)
End Get
Set(ByVal value As Point)
Me.x_ = value.X
Me.y_ = value.Y
End Set
End Property
''' <summary>
''' Obtient ou d??fini le rayon de courbure des coins
''' </summary>
Public Property Radius() As Single
Get
Return radius_
End Get
Set(ByVal value As Single)
radius_ = value
End Set
End Property
''' <summary>
''' Agrandi le rectangle de la taille sp??cifi??e
''' </summary>
''' <param name="width_">largeur</param>
''' <param name="height_">hauteur</param>
Public Overloads Sub Inflate(ByVal width_ As Integer, ByVal height_ As Integer)
Me.x_ = (Me.x_ - width_)
Me.y_ = (Me.y_ - height_)
Me.width_ = (Me.width_ + (2 * width_))
Me.height_ = (Me.height_ + (2 * height_))
End Sub
''' <summary>
''' Agrandi le rectangle de la taille sp??cifi??e
''' </summary>
''' <param name="size">taille</param>
Public Overloads Sub Inflate(ByVal size As Size)
Me.Inflate(size.Width, size.Height)
End Sub
''' <summary>
''' Cr??e et retourne une copie RoundedRectangle agrandi de la taille sp??cifi??.
''' </summary>
''' <param name="rrect">RoundedRectangle</param>
''' <param name="width_">Largeur</param>
''' <param name="height_">Hauteur</param>
''' <returns>Une copie du RoundedRectangle agrandie</returns>
Public Overloads Shared Function Inflate(ByVal rrect As RoundedRectangle, _
ByVal width_ As Integer, ByVal height_ As Integer) As RoundedRectangle
Dim r As RoundedRectangle = rrect
r.Inflate(width_, height_)
Return r
End Function
''' <summary>
''' Retourne un RoundRectangle correspondant ?? l'intersection des RoundRectangles a et b
''' </summary>
''' <param name="a">RoundedRectangle</param>
''' <param name="b">RoundedRectangle</param>
''' <param name="rc">Coins ?? arrondir</param>
''' <param name="radius_">Rayon de coubure des arrondis</param>
''' <returns></returns>
''' <remarks>Si aucune intersection n'est trouv??e entre les RoundRectangles, un RoundedRectangle est retourn??</remarks>
Public Overloads Shared Function Intersect(ByVal a As RoundedRectangle, _
ByVal b As RoundedRectangle, ByVal rc As RoundedCorner, _
ByVal radius_ As Single) As RoundedRectangle
Dim left As Integer = Math.Max(a.Left, b.Left)
Dim right As Integer = Math.Min(a.Right, b.Right)
Dim top As Integer = Math.Max(a.Top, b.Top)
Dim bottom As Integer = Math.Min(a.Bottom, b.Bottom)
If ((left <= right) _
AndAlso (top <= bottom)) Then
Return New RoundedRectangle(left, (right - left), top, (bottom - top), rc, radius_)
End If
Return RoundedRectangle.Empty
End Function
''' <summary>
''' Replace ce RoundedRectangle par l'intersection de celui-ci de rrect
''' </summary>
''' <param name="rrect">RoundedRectangle</param>
Public Overloads Sub Intersect(ByVal rrect As RoundedRectangle)
Dim r As RoundedRectangle = RoundedRectangle.Intersect(rrect, Me, _
Me.roundedCorner_, Me.radius_)
Me.x_ = r.x_
Me.y_ = r.y_
Me.width_ = r.width_
Me.height_ = r.height_
End Sub
''' <summary>
''' Retourne <i>true</i> si ce RoundedRectangle poss??de une intersection avec rrect, <i>false</i> sinon
''' </summary>
''' <param name="rrect">RoundedRectangle</param>
''' <returns><i>true</i> si intersection, <i>false</i> sinon</returns>
Public Function IntersectWith(ByVal rrect As RoundedRectangle) As Boolean
Return (((rrect.Left < Me.Right) _
AndAlso (Me.Left < rrect.Right)) _
AndAlso ((rrect.Top < Me.Bottom) _
AndAlso (Me.Top < rrect.Bottom)))
'if (((rect.X < (this.X + this.Width)) && (this.X < (rect.X + rect.Width))) && (rect.Y < (this.Y + this.Height)))
'{
' return (this.Y < (rect.Y + rect.Height));
'}
'return false;
End Function
''' <summary>
''' Retourne un RoundedRectangle qui correspond ?? l'intersection des RoundedRectangle a et b et dont les
''' coins <i>rc</i> sont arrondis d'un rayon de <i>radius_</i>
''' </summary>
''' <param name="a">RoundedRectangle</param>
''' <param name="b">RoundedRectangle</param>
''' <param name="rc">Coins ?? arrondir</param>
''' <param name="radius_">Rayon de courbure des arrondis</param>
''' <returns>RoundedRectangle de l'union</returns>
Public Shared Function Union(ByVal a As RoundedRectangle, _
ByVal b As RoundedRectangle, ByVal rc As RoundedCorner, _
ByVal radius_ As Single) As RoundedRectangle
Dim left As Integer = Math.Min(a.Left, b.Left)
Dim right As Integer = Math.Max(a.Right, b.Right)
Dim top As Integer = Math.Min(a.Top, b.Top)
Dim bottom As Integer = Math.Max(a.Bottom, b.Bottom)
Return New RoundedRectangle(left, (right - left), top, (bottom - top), rc, radius_)
End Function
''' <summary>
''' D??place le RoundedRectangle d'apr??s les coordonn??es sp??cifi??s
''' </summary>
''' <param name="x_">D??placement sur l'axe des abscisses</param>
''' <param name="y_">D??placement sur l'axe des ordon??es</param>
Public Overloads Sub Offset(ByVal x_ As Integer, ByVal y_ As Integer)
Me.x_ = (Me.x_ + x_)
Me.y_ = (Me.y_ + y_)
End Sub
''' <summary>
''' D??place le RoundedRectangle d'apr??s les ccordonn??es sp??cifi??es
''' </summary>
''' <param name="point">Point contenant les informations de d??placements</param>
Public Overloads Sub Offset(ByVal point As Point)
Me.x_ = (Me.x_ + point.X)
Me.y_ = (Me.y_ + point.Y)
End Sub
''' <summary>
''' Retourne un bool??en indiquant si le point sp??cifi?? fait partie du RoundedRectangle
''' </summary>
''' <param name="x_">Abscisse</param>
''' <param name="y_">Ordonn??e</param>
''' <returns><i>true</i> si le point se trouve ?? l'int??rieur du RoundedRectangle, <i>false</i> sinon</returns>
Public Overloads Function Contains(ByVal x_ As Integer, ByVal y_ As Integer) As Boolean
Return ((Me.x_ <= x_) _
AndAlso ((x_ <= Me.Right) _
AndAlso ((Me.y_ <= y_) _
AndAlso (y_ <= Me.Bottom))))
End Function
''' <summary>
''' Retourne un bool??en indiquant si le point sp??cifi?? fait partie du RoundedRectangle
''' </summary>
''' <param name="pt">Point ?? v??rifier</param>
''' <returns><i>true</i> si le point se trouve ?? l'int??rieur du RoundedRectangle, <i>false</i> sinon</returns>
Public Overloads Function Contains(ByVal pt As Point) As Boolean
Return Contains(pt.X, pt.Y)
End Function
''' <summary>
''' Retourne un <see cref="GraphicsPath"/> repr??sentant le RoundedRectangle.
''' </summary>
''' <returns><see cref="GraphicsPath"/></returns>
''' <seealso cref="GraphicsPath"/>
Public Function ToGraphicsPath() As GraphicsPath
Dim gp As GraphicsPath
'Dim temp As PointF
gp = New GraphicsPath
'Rectangle baseRect = new Rectangle(this.Location, this.Size);
' si le rayon est inf??rieur ou ??gal ?? 0
' on retourne le rectangle de base
If (radius_ <= 0.0!) Then
gp.AddRectangle(New Rectangle(Me.Location, Me.Size))
gp.CloseFigure()
Return gp
End If
Dim diameter As Single = (radius_ * 2.0!)
If (Me.height_ <= Me.width_) Then
If ((diameter >= Me.height_) _
AndAlso (((Me.roundedCorner_ _
And (RoundedCorner.BottomLeft Or RoundedCorner.TopLeft)) _
= (RoundedCorner.BottomLeft Or RoundedCorner.TopLeft)) _
OrElse ((Me.roundedCorner_ _
And (RoundedCorner.BottomRight Or RoundedCorner.TopRight)) _
= (RoundedCorner.BottomRight Or RoundedCorner.TopRight)))) Then
diameter = Me.height_
End If
ElseIf ((diameter >= Me.width_) _
AndAlso (((Me.roundedCorner_ _
And (RoundedCorner.BottomLeft Or RoundedCorner.BottomRight)) _
= (RoundedCorner.BottomLeft Or RoundedCorner.BottomRight)) _
OrElse ((Me.roundedCorner_ _
And (RoundedCorner.TopLeft Or RoundedCorner.TopRight)) _
= (RoundedCorner.TopLeft Or RoundedCorner.TopRight)))) Then
diameter = Me.width_
End If
Dim size As SizeF = New SizeF(diameter, diameter)
Dim arc As RectangleF = New RectangleF(Me.Location, size)
' arc en haut ?? gauche
If ((Me.roundedCorner_ And RoundedCorner.TopLeft) _
= RoundedCorner.TopLeft) Then
gp.AddArc(arc, 180, 90)
Else
gp.AddLine(New PointF(arc.Left, arc.Top), New PointF(arc.Left, arc.Top))
End If
' arc en haut ?? droite
arc.X = (CType(Me.Right, Single) - diameter)
If ((Me.roundedCorner_ And RoundedCorner.TopRight) _
= RoundedCorner.TopRight) Then
gp.AddArc(arc, 270, 90)
Else
gp.AddLine(New PointF(arc.Right, arc.Top), New PointF(arc.Right, arc.Top))
End If
arc.Y = (CType(Me.Bottom, Single) - diameter)
' arc en bas ?? droite
If ((Me.roundedCorner_ And RoundedCorner.BottomRight) _
= RoundedCorner.BottomRight) Then
gp.AddArc(arc, 0, 90)
Else
gp.AddLine(New PointF(arc.Right, arc.Bottom), New PointF(arc.Right, arc.Bottom))
End If
' arc en bas ?? gauche
arc.X = CType(Me.Left, Single)
If ((Me.roundedCorner_ And RoundedCorner.BottomLeft) _
= RoundedCorner.BottomLeft) Then
gp.AddArc(arc, 90, 90)
Else
gp.AddLine(New PointF(arc.Left, arc.Bottom), New PointF(arc.Left, arc.Bottom))
End If
gp.CloseFigure()
Return gp
End Function
''' <summary>
''' Retourne un <see cref="Rectangle"/>
''' </summary>
''' <returns><see cref="Rectangle"/></returns>
Public Function ToRectangle() As Rectangle
Return New Rectangle(Me.Location, Me.Size)
End Function
#Region " overrides "
Public Overrides Function ToString() As String
Return String.Format("{{X={0},Y={1},Width={2},Height={3},Radius={4}}}", Me.x_, _
Me.y_, Me.width_, Me.height_, Me.radius_)
End Function
Public Shared Operator =(ByVal a As RoundedRectangle, ByVal b As RoundedRectangle) As Boolean
Return (a.X = b.X And a.Y = b.Y And a.Width = b.Width And a.Height = b.Height)
End Operator
Public Shared Operator <>(ByVal a As RoundedRectangle, ByVal b As RoundedRectangle) As Boolean
Return Not (a = b)
End Operator
Public Overrides Function Equals(ByVal obj As Object) As Boolean
Dim ret As Boolean = False
If (obj.GetType.Name = GetType(RoundedRectangle).Name) Then
Dim r As RoundedRectangle = obj
ret = (r.X = Me.X And r.Y = Me.Y And r.Width = Me.Width And r.Height = Me.Height)
End If
Return ret
End Function
Public Overrides Function GetHashCode() As Integer
Return Me.GetHashCode()
End Function
#End Region
End Structure
<Flags()> _
Public Enum RoundedCorner
TopLeft = 2
TopRight = 4
BottomLeft = 8
BottomRight = 16
All = TopLeft Or TopRight Or BottomLeft Or BottomRight
End Enum
End Class
Conclusion
(J'ai trouvé util de le traduire pour l'intégrer à mes applications)
''''Exemple d'utilisation Private Sub form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint sbDesign(e) End Sub
Private Sub sbDesign(ByVal e As System.Windows.Forms.PaintEventArgs) Dim rect As New Rectangle(0, 0, Me.Width, Me.Height) Dim gc As Graphics = Me.CreateGraphics() gc.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality Dim rr As clsRoundedCorner.RoundedRectangle = _ New clsRoundedCorner.RoundedRectangle(0, 0, Width, Height, RoundedCorner.All, 16) rr.RoundedCorners = RoundedCorner.All gc.FillPath(New Drawing2D.LinearGradientBrush(rr.ToRectangle(), _ Color.Honeydew, Color.LightGreen, _ Drawing2D.LinearGradientMode.ForwardDiagonal), rr.ToGraphicsPath()) End Sub
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Largeur du trait d'un rectangle arrondi [ par pledoux ]
Bonjour,J'utilise le fonction RoundRect de l'API pour imprimer un rectangle avec les coins arrondis. Mais je ne trouve pas la propriété qui
Imprimer un rectangle arrondi [ par sreef ]
Salut je cherche comment faire pour imprimer un rectangle avec des angles arrondis contenu dans un picture box.Sreef
Impression Rectangle arrondi avec API [ par sreef ]
J'ai créé un rectangle arrondi avec les API (RoundRect) mais je n'arrive pas à l'imprimer, j'ai essayé de différentes manières mais je n'y arrive pas,
dessiner un rectangle à coins arrondis en visual asic [ par nihadelg ]
j aimerai avoir une representation graphique des elments en VB et comment dessiner des boutons sous forme des rectangles à coins arrondis ainsi que d
rounded + GradientFill [ par peug ]
Hello,J'ai une fonction qui dessine un rectangle arrondi dans le genre :lr=RoundRect(hdc, X1, Y1, X1 + lWidth, Y1 + lheight, 5, 5)Mais j'aimeria qu'il
Problème power point (pr JP Forestier) [ par chtoune ]
Bonjour, Suite au message ci-dessous, j'ai trouvé la solution à mon problème cependant, il y a un pet
ajouter un graphics dans un graphics [ par dragon ]
Bonjour à tous, j'ai un petit problèmeje suis en train de me créer un System.Drawing.Printing.PrintDocument qui gère parfaitement les sauts de page. B
exploiter l'espace d'un rectangle dans lequel on reproduit le maximum de fois des objets selectionnés [ par akram85ing ]
sur autocad 2004, je veux un code (vba ou lisp) avec lequel je peux faire ceci :* je selectionne un ensemble des objets.* connaitre, dans un recta
placer une forme géometrique plusieurs fois dans un rectangle [ par akram85ing ]
bonjouron a :un rectangle de longueur L et de largeur l une forme géométrique quelconquequel est le nombre maximal de cette forme que peut c
Faire varier la grandeur d'un rectangle vers le haut. (vb6) [ par gaudreaua ]
Bonjour,J'ai un petit problème de programmation que je porte à votre attention... à qui la chance de m'aider Je vous explique...je veux créer un recta
|
Derniers Blogs
[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|