Les Shape de Visual Foxpro permettent de faire des arrondis simples dans les coins avec Curvature.
On peut aussi faire des formes libres grâce à Polypoints.
La classe ShpCorners vous permet de faire différents types de coins :
- l'arrondi classique (ou sortant)
- l'arrondi rentrant
- le coin bizauté ou diagonale
- le coin rentrant
Le type peut être défini séparément pour chaque coin grâce aux propriétés cHGcorner, cHDcorner, cBDcorner, cBGcorner (haut gauche, haut droit, ...). On définit également le nombre de points ou le % (par rapport à largeur et hauteur) servant de base au coin.
(Chaine caractère de la forme nnn.nn%C ou nnnnC : Pourcentage ou Nombre de points pour coin + type coin (si vide coin normal, si pas de nn 10% par défaut / types : A = Arrondi sortant, R = Arrondi rentrant, D = coin diagonale, I = coin inversé)
Dans le zip, un fichier exemple pour illustrer l'utilisation.
Height = 17 Width = 100 WhatsThisHelpID = 0 *-- Coin HG : Chaine caractère de la forme nnn.nn%C ou nnnnC : Pourcentage ou Nombre de points pour coin + type coin (si vide coin normal, si pas de nn 10% par défaut / types : A = Arrondi sortant, R = Arrondi rentrant, D = coin diagonale, I = coin inversé
chgcorner = "" *-- Coin HD : Chaine caractère de la forme nnn.nn%C ou nnnnC : Pourcentage ou Nombre de points pour coin + type coin (si vide coin normal, si pas de nn 10% par défaut / types : A = Arrondi sortant, R = Arrondi rentrant, D = coin diagonale, I = coin inversé
chdcorner = "" *-- Coin BD : Chaine caractère de la forme nnn.nn%C ou nnnnC : Pourcentage ou Nombre de points pour coin + type coin (si vide coin normal, si pas de nn 10% par défaut / types : A = Arrondi sortant, R = Arrondi rentrant, D = coin diagonale, I = coin inversé
cbdcorner = "" *-- Coin BG : Chaine caractère de la forme nnn.nn%C ou nnnnC : Pourcentage ou Nombre de points pour coin + type coin (si vide coin normal, si pas de nn 10% par défaut / types : A = Arrondi sortant, R = Arrondi rentrant, D = coin diagonale, I = coin inversé
cbgcorner = "" Name = "shpcorners"
*-- Tableau de points utilisés pour périmètre Shape si angles spéciaux DIMENSIONtbpoints[1,2]
*-- Ajoute un point au tableau tbPoints (paramètres lpnX, lpnY) PROCEDURE _addpoint LPARAMETERS lpnX, lpnY
IFEMPTY(This.cHGCorner) ANDEMPTY(This.cHDCorner) ; ANDEMPTY(This.cBGCorner) ANDEMPTY(This.cBDCorner) *Shape Normal : pas de PolyPoints This.PolyPoints = ""
ELSE
LOCAL lcTypeNARDI, lnArrondiV, lnArrondiH
lcTypeNARDI = "N" STORE 0 TO lnArrondiV, lnArrondiH
*coin Haut gauche This._cCornerToVariables(This.cHGCorner, @m.lcTypeNARDI, @m.lnArrondiV, @m.lnArrondiH) DOCASE CASE m.lcTypeNARDI = "N" *coin normal This._addpoint(0, 0)
CASE m.lcTypeNARDI = "D" *coin diagonale This._addpoint(0, m.lnArrondiH) This._addpoint(m.lnArrondiV, 0)
*coin haut droit
lcTypeNARDI = "N" STORE 0 TO lnArrondiV, lnArrondiH This._cCornerToVariables(This.cHDCorner, @m.lcTypeNARDI, @m.lnArrondiV, @m.lnArrondiH) DOCASE CASE m.lcTypeNARDI = "N" *coin normal This._addpoint(100, 0)
*coin bas droit
lcTypeNARDI = "N" STORE 0 TO lnArrondiV, lnArrondiH This._cCornerToVariables(This.cBDCorner, @m.lcTypeNARDI, @m.lnArrondiV, @m.lnArrondiH) DOCASE CASE m.lcTypeNARDI = "N" *coin normal This._addpoint(100, 100)
*coin bas gauche
lcTypeNARDI = "N" STORE 0 TO lnArrondiV, lnArrondiH This._cCornerToVariables(This.cBGCorner, @m.lcTypeNARDI, @m.lnArrondiV, @m.lnArrondiH) DOCASE CASE m.lcTypeNARDI = "N" *coin normal This._addpoint(0, 100)
LOCAL lnAngle, lnX, lnY
lnAngle = 0 *Boucle de placement des points FOR lnAngle = m.lpnAngleDeb TO m.lpnAngleFin STEP (m.lpnPas * IIF(m.lpnAngleDeb < m.lpnAngleFin, 1, -1))
lnX = ROUND((m.lpnVRayon * COS(DTOR(m.lnAngle))) + m.lpnVCentre, 4)
lnY = ROUND((m.lpnHRayon * SIN(DTOR(m.lnAngle))) + m.lpnHCentre, 4)
This._addpoint(m.lnX, m.lnY) ENDFOR
*sécurité pour point de sortie si le pas nous l'a fait sauter IF m.lnAngle <> m.lpnAngleFin
lnAngle = m.lpnAngleFin
lnX = ROUND((m.lpnVRayon * COS(DTOR(m.lnAngle))) + m.lpnVCentre, 4)
lnY = ROUND((m.lpnHRayon * SIN(DTOR(m.lnAngle))) + m.lpnHCentre, 4)
This._addpoint(m.lnX, m.lnY) ENDIF
RELEASE lnAngle, lnX, lnY ENDPROC
*-- convertit le cCorner en 3 variables : type, pourcentage V, pourcentage H (paramètres lpcCoin, rcTypeNARDI, rnPCV, rnPCH) PROCEDURE _ccornertovariables LPARAMETERS lpcCoin, rcTypeNARDI, rnPCV, rnPCH