PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2025 → Points de liaison dans diagramme
Points de liaison dans diagramme
Started by JCM, Oct., 21 2024 9:59 AM - 9 replies
Registered member
12 messages
Posted on October, 21 2024 - 9:59 AM
Bonjour,

est-ce qu'il est possible dans win2024 d'augmenter le nombre de points d'intersections sur un rectangle dans un champ diagramme ?
Comme dans l'exemple ici, je voudrais pouvoir mettre un plus grand nombre de liaisons (flèches...) entre les deux formes,





merci :)

JCM

--
JCM
V2024 WB WD WDM
Message modified, October, 21 2024 - 10:00 AM
Registered member
950 messages
Posted on October, 21 2024 - 11:41 AM
Bonjour,

diagPointDAttache (Type de variable)
https://aide.pcsoft.fr/fr-FR/…

PointDAttache (Propriété)
https://doc.pcsoft.fr/fr-FR/?1410088471

Cdlt
Registered member
12 messages
Posted on October, 21 2024 - 3:38 PM
Bonjour @Cédric_34,

merci, on parle dans la doc de points par programmation, je cherche à pouvoir augmenter le nombre de points disponibles lorsque l'utilisateur exploite le champ diagramme, est-ce que c'est possible ?
Sur l'exemple affiché ci-dessus j'aimerai par exemple avoir 15 points sur la verticale... je ne vois pas comment faire,
merci :)

--
JCM
V2024 WB WD WDM
Message modified, October, 21 2024 - 3:39 PM
Registered member
950 messages
Posted on October, 21 2024 - 5:03 PM
Dans ce cas, créez un :
diagPolygone (Type de variable)
https://aide.pcsoft.fr/fr-FR/…

Vous créez ce rectangle avec plusieurs points par arête, par exemple pour l'arête Haute x=0, y=0, x=25, y=0, x=50, y=0 puis vous descendez de même pour l'arête droite, etc...
Ainsi vous avez pour l'arête haute 3 segments, chaque segment à ces points d'attache (3 par segment). A vous de créer autant de segment que nécessaire et enfin vous sauvez la forme (le polygone) dans la bibliothèque.

Cdlt
Message modified, October, 21 2024 - 5:06 PM
Registered member
950 messages
Posted on October, 21 2024 - 5:14 PM
Résultat




sur cette image, un lien part pour chaque point d'attache.
Registered member
950 messages
Posted on October, 21 2024 - 9:12 PM
Bonsoir,
Une information que j'ai oublié de transmettre, dans la version de Windev que j'ai utilisé, il faut déclarer les propriétés (MaForme.Largeur) et (MaForme.Hauteur) avant de décrire les coordonnées des points sinon vous aurez les poignées de redimensionnement de la forme qui ne correspondront pas à la dimension de la forme.
De plus, si vous utilisez : MaForme.Ouvert = Faux, la description de 3 cotés du rectangle devrait suffire (les points d'attache du coté non décrit correspondront aux points d'attache du coté opposé).

MaForme est un diagPolygone

MaForme.Largeur = 50
MaForme.Hauteur = 100

MaForme.Point[1].X = 0
MaForme.Point[1].Y = 0
MaForme.Point[2].X = 25
MaForme.Point[2].Y = 0
MaForme.Point[3].X = 50
MaForme.Point[3].Y = 0
MaForme.Point[4].X = 50
MaForme.Point[4].Y = 25
MaForme.Point[5].X = 50
MaForme.Point[5].Y = 50
MaForme.Point[6].X = 50
MaForme.Point[6].Y = 75
MaForme.Point[7].X = 50
MaForme.Point[7].Y = 100
MaForme.Point[8].X = 25
MaForme.Point[8].Y = 100
MaForme.Point[9].X = 0
MaForme.Point[9].Y = 100

MaForme.X = 100
MaForme.Y = 100

MaForme.Ouvert = Faux

MonDiagramme est un Diagramme <- MonDiag // MonDiag correspond au nom du champ Editeur de Diagramme
Ajoute(MonDiagramme.Forme, MaForme)






Cdlt
Registered member
12 messages
Posted on October, 22 2024 - 9:42 AM
Bonjour,
merci beaucoup, je vais tester tout ça :)
JCM

--
JCM
V2024 WB WD WDM
Registered member
950 messages
Posted on June, 19 2025 - 3:21 PM
Points d’Attache champ éditeur de Diagramme

Bonjour,
Suite à une demande sur la possibilité de placer des points d’attache sur une forme dans l’éditeur de Diagramme pour créer des composants type Circuit Intégré, j’ai repris le projet pour lequel j’avais fourni une méthode (post #4, #5, #6, ci-dessus).
Le moins que l’on puisse dire, c’est que cette méthode n’est finalement pas concluante (Présence des points aléatoire, impossible de placer les points avec précision, etc… , donc résultat très limite).

Je me suis orienté vers la propriété "PointDAttache" en programmation pour un résultat bien plus précis.

J’ai placé sur ma fenêtre un Champ Saisie (en haut sur la copie d’écran) contenant les coordonnées des points d’attache à placer sur la forme.
Le champ de Saisie contient :

200,5;200,15;200,50;200,70;200,80;200,120;200,150;200,180;200,220;200,240;200,260

(Les couples de coordonnées sont séparés par des points Virgule, et les coordonnées X et Y d’un couple sont séparées par une virgule)
Je place les points d’attache sur une forme (rectangle) de 200 de large et 400 de haut, mes points d’attache sont donc situés pour cet exemple sur la Hauteur Droite du rectangle (Tous les X à 200).






VarN, ID_Attache sont des entiers
TabCoordonnees est un tableau de * par 2 entiers
MaForme1, MaForme2 sont des diagRectangles

ChaîneVersTableau(SansCaractèreDroite(Saisie1, ";"), TabCoordonnees, ";", ",")

// Obtient une référence sur le diagramme affiché
MonDiagramme est un Diagramme <- EDiag_MonDiagramme

//Désactivation de l'affichage pour masquer les opérations sur le Diagramme
Fen_Diag1.AffichageActif = Faux

// Création de Forme1 (rectangle)
MaForme1.X = 100
MaForme1.Y = 100
MaForme1.Largeur = 200
MaForme1.Hauteur = 400
MaForme1.Fond.Couleur = RougePastel

// Ajoute Forme1 (rectangle) dans le diagramme
VarN = Ajoute(MonDiagramme.Forme, MaForme1)
// Reprend une référence sur le rectangle Forme1
"MaForme1" <- MonDiagramme.Forme[VarN]

// Création de Forme2 (rectangle) (sans l'ajouter physiquement dans le Diagramme)
MaForme2.X = 500
MaForme2.Y = 100
MaForme2.Largeur = 100
MaForme2.Hauteur = 100

// Création des points d'attache ...
// Boucle sur chaque chaque couple de coordonnées dans le Tableau
POUR ID_Attache = 1 _À_ TableauOccurrence(TabCoordonnees)
MonLien1 est un diagLien

// Il est nécessaire d'ajouter le DiagLien (MonLien1) puis de le supprimer à chaque ...
// boucle pour ne pas perdre les points d'attache précédents
VarN = Ajoute(MonDiagramme.Forme, MonLien1)
// Reprend une référence sur le DiagLien MonLien1
MonLien1 <- MonDiagramme.Forme[VarN]

// Ajout des Points d'attache
MonLien1.Départ.PointDAttache = MaForme1.PointDAttache[ID_Attache]
MonLien1.Départ.PointDAttache.X = TabCoordonnees[ID_Attache, 1]
MonLien1.Départ.PointDAttache.Y = TabCoordonnees[ID_Attache, 2]

MonLien1.Arrivée.PointDAttache = MaForme2.PointDAttache[1]
MonLien1.Arrivée.PointDAttache.X = 0
MonLien1.Arrivée.PointDAttache.Y = 50

// Suppression du DiagLien (MonLien1)
VarN = Supprime(MonDiagramme.Forme, VarN)
FIN

DiagrammeSelectMoins(EDiag_MonDiagramme)

// Sauve le diagramme sur le disque (Les points d'attache sont maintenus)
sFichier est une chaîne = ComplèteRep(fRepExe) + "Multi_Attaches.wddiag"
MonDiagramme.Sauve( sFichier )

// Charge le diagramme en tant que bibliothèque
MaBibli est une diagBibliothèque
MaBibli.ChargeBibliothèque( sFichier )
MaBibli.Nom = "Electro"

// Ajoute la bibliothèque au diagramme
Ajoute(EDiag_MonDiagramme.Bibliothèque, MaBibli )

// Réactivation de l'affichage
Fen_Diag1.AffichageActif = Vrai

ToastAffiche( "La bibliothèque personnelle a été ajoutée dans la liste" )


Les points d’attache sont conservés dans la sauvegarde de la forme et sont utilisables sur les formes stockées dans une bibliothèque.

Comme d’habitude, je livre ici le code test, pas le code finalisé avec la gestion des erreurs, etc…

Si ça peut aider l’un d’entre vous.
Cdlt
Registered member
950 messages
Posted on June, 22 2025 - 2:09 PM
Bonjour
Je poursuis les test pour répondre à la demande qui m'a été faite.
Voici un test avec création dynamique des variables DiagLiens via la fonction "Compile" (pas vraiment utile pour le cas présent car un tableau suffit, mais je voulais savoir si c'était possible avec les DiagLiens).
Cette fois, je n'utilise pas le rectangle forme2 et donc pas de point d'attache à créer sur ce rectangle (évidemment :D)

Toujours avec la méthode de la zone de Saisie décrite au post #8.

Je livrerai le test avec un Agrandissement de Tableau sur le prochain Post.

VarN, i sont des entiers
sMonLien, sresultat, sresultatCompile sont des chaînes

TabCoordonnees est un tableau de * par 2 entiers

MaForme1 est un diagRectangle

ChaîneVersTableau(SansCaractèreDroite(Saisie1, ";"), TabCoordonnees, ";", ",")

// Obtient une référence sur le diagramme affiché
MonDiagramme est un Diagramme <- EDiag_MonDiagramme

//Désactivation de l'affichage pour masquer les opérations sur le Diagramme
Fen_Diag1.AffichageActif = Faux

// créer Forme1 (rectangle)
MaForme1.X = 100
MaForme1.Y = 100
MaForme1.Largeur = 200
MaForme1.Hauteur = 400
MaForme1.Fond.Couleur = RougePastel

// Ajoute Forme1 (rectangle) dans le diagramme
VarN = Ajoute(MonDiagramme.Forme, MaForme1)
"MaForme1" <- MonDiagramme.Forme[VarN]

// Déclaration des variables dynamiques pour les Diagliens via Compile
// Les Diagliens ne sont pas créés physiquement (inutile dans ce cas car on déclare un Diaglien par point d'attache)
// Création des points d'attache
POUR i = 1 _À_ TableauOccurrence(TabCoordonnees)
// Ajout des Points d'attache (En valeur (.X = 200) ou Pourcentage (.XPourcentage = 100))
sMonLien = "MonLien" + i + " est un diaglien"
sMonLien = "Global" + RC + sMonLien
sresultatCompile = Compile("Liens_Dynamiques", sMonLien)

SELON sresultatCompile
CAS "" : ExécuteTraitement("Liens_Dynamiques", trtProcedure)
CAS "ERR" : Info("Compilation impossible. " + RC + ErreurInfo())
AUTRE CAS : sresultat = sresultatCompile
FIN

{"MonLien" + (i) + ".Départ.PointDAttache", indVariable} = MaForme1.PointDAttache[i]
{"MonLien" + (i) + ".Départ.PointDAttache.X", indVariable} = TabCoordonnees[i, 1]
{"MonLien" + (i) + ".Départ.PointDAttache.Y", indVariable} = TabCoordonnees[i, 2]

FIN

DiagrammeSelectMoins(EDiag_MonDiagramme)

// sauve le diagramme sur le disque
sFichier est une chaîne = ComplèteRep(fRepExe) + "Multi_Attaches_2.wddiag"
MonDiagramme.Sauve( sFichier )

// Réactivation de l'affichage
Fen_Diag1.AffichageActif = Vrai

ToastAffiche( "Le Diagramme a été enregistré sous le nom " + fExtraitChemin(sFichier, fFichier))


Cdlt
Message modified, June, 22 2025 - 2:12 PM
Registered member
950 messages
Posted on June, 22 2025 - 4:49 PM
Essai avec déclaration dynamique des Diagliens via un agrandissement de Tableau (ainsi, tous les couples de coordonnées de la zone de saisie sont traités).
(Pour la Zone de Saisie, voir post '#8').





VarN, VarL, i sont des entiers
TabCoordonnees est un tableau de * par 2 entiers

// Déclaration dynamique des Diagliens par agrandissement du Tableau
TabLiens est un tableau <agrandissement> de diagLiens

MaForme1 est un diagRectangle
MaForme2 est un diagRectangle

ChaîneVersTableau(SansCaractèreDroite(Saisie1, ";"), TabCoordonnees, ";", ",")

// Obtient une référence sur le diagramme affiché
MonDiagramme est un Diagramme <- EDiag_MonDiagramme

//Désactivation de l'affichage pour masquer les opérations sur le Diagramme
Fen_Diag1.AffichageActif = Faux

// Créer Forme1 (rectangle)
MaForme1.X = 100
MaForme1.Y = 100
MaForme1.Largeur = 200
MaForme1.Hauteur = 400
MaForme1.Fond.Couleur = RougePastel

// Ajoute Forme1 (rectangle) dans le diagramme
VarN = Ajoute(MonDiagramme.Forme, MaForme1)
"MaForme1" <- MonDiagramme.Forme[VarN]

// Créer Forme2 (rectangle)
MaForme2.X = 500
MaForme2.Y = 100
MaForme2.Largeur = 200
MaForme2.Hauteur = 400

// Ajoute Forme2 (rectangle) dans le diagramme
VarN = Ajoute(MonDiagramme.Forme, MaForme2)
"MaForme2" <- MonDiagramme.Forme[VarN]

POUR i = 1 _À_ TableauOccurrence(TabCoordonnees)
VarL = Ajoute(MonDiagramme.Forme, TabLiens[i])
TabLiens[i] <- MonDiagramme.Forme[VarL]

// Ajout des Points d'attache (En valeur (.X = 200) ou Pourcentage (.XPourcentage = 100))
TabLiens[i].Départ.PointDAttache = MaForme1.PointDAttache[i]
TabLiens[i].Départ.PointDAttache.X = TabCoordonnees[i, 1]
TabLiens[i].Départ.PointDAttache.Y = TabCoordonnees[i, 2]

TabLiens[i].Arrivée.PointDAttache = MaForme2.PointDAttache[i]
TabLiens[i].Arrivée.PointDAttache.X = 0
TabLiens[i].Arrivée.PointDAttache.Y = TabCoordonnees[i, 2]
FIN

////Test Suppression de tous les liens (du dernier au premier)
//k est un entier
//pour k = (TableauOccurrence(TabCoordonnees) + VarN) _a_ (1 + VarN) pas -1
// Supprime(MonDiagramme.Forme, k)
//fin

DiagrammeSelectMoins(EDiag_MonDiagramme)

// sauve le diagramme sur le disque
sFichier est une chaîne = ComplèteRep(fRepExe) + "Multi_Attaches_3.wddiag"
MonDiagramme.Sauve( sFichier )


// Réactivation de l'affichage
Fen_Diag1.AffichageActif = Vrai

ToastAffiche( "Le Diagramme a été enregistré sous le nom " + fExtraitChemin(sFichier, fFichier))


Cdlt
Message modified, June, 22 2025 - 4:51 PM