Skip to content

Calcul de Propriete

Asketyll edited this page Aug 12, 2026 · 4 revisions

Calcul de propriété

Calcule automatiquement la valeur d'une propriété personnalisée et l'écrit sur les éléments qui portent cette propriété — par exemple, tout le texte d'une cellule étiquette du groupe, les coordonnées de l'élément, ou une valeur fixe. Le Calcul de propriété est un moteur de valeur : il ne fait que remplir des valeurs, il n'attache jamais les propriétés lui-même (l'attache est le rôle des Propriétés personnalisées — il n'écrit que là où la propriété est déjà attachée). Il réutilise les propriétés personnalisées (Item Types) du DGNLib ARES partagé.

Fonctionnement — règles de calcul

La valeur de chaque propriété provient d'une règle de calcul dans ARES_Calc_Rules. Une règle s'écrit :

Prop[nom] [& condition]* = Source
  • Prop[nom] — la propriété cible (un seul nom, pas de joker). ARES écrit la valeur de cette propriété partout où elle est attachée.
  • & condition (optionnel) — les mêmes conditions que les règles d'attache : Lvl[niveau], Cell[nom], Type[type], combinées par & (ET), niées par !, avec les jokers * / ? (voir Propriétés personnalisées). La règle ne s'applique qu'aux éléments satisfaisant toutes les conditions.
  • = Source — d'où vient la valeur. L'une de :

Il existe deux familles de source : une source groupe (Cell* et GroupLength) parcourt le groupe graphique de l'élément — lui-même inclus — à la recherche d'un membre correspondant et lit la valeur sur ce membre ; une source propre lit l'attribut de l'élément lui-même.

Source Valeur
CellText[motif] Tout le texte d'une cellule du groupe graphique de l'élément dont le nom correspond à motif (jokers autorisés ; motif peut lister plusieurs alternatives séparées par |, ex. ASUF*|SP0*). Inclut l'élément lui-même — une cellule étiquette qui porte la propriété reçoit son propre texte ; une cellule correspondante non groupée reçoit aussi son propre texte.
CellCoord[motif] Les coordonnées "X;Y" de cette même cellule correspondante — la position de la cellule TAGUEUSE, pas celle de l'élément.
CellId[motif] L'identifiant de cette même cellule correspondante.
CellLvl[motif] Le nom de niveau de cette même cellule correspondante.
CellColor[motif] L'indice de couleur de cette même cellule correspondante.
CellStyle[motif] Le nom du style de trait de cette même cellule correspondante.
CellWeight[motif] L'épaisseur de trait de cette même cellule correspondante.
Value[texte] Une valeur littérale fixe (ex. Value[Type-A]).
Coord ou Coord[n] Les coordonnées "X;Y" PROPRES de l'élément (n = nombre de décimales ; défaut = ARES_Round). Recalculées quand l'élément est déplacé.
Id L'identifiant PROPRE de l'élément.
Lvl Le nom de niveau PROPRE de l'élément.
Color L'indice de couleur PROPRE de l'élément.
Style Le nom du style de trait PROPRE de l'élément.
Weight L'épaisseur de trait PROPRE de l'élément.
Length ou Length[n] La longueur géométrique PROPRE de l'élément (n = décimales ; défaut = ARES_Length_Round) — seulement si l'élément est lui-même une ligne/arc/forme/forme complexe/chaîne complexe ; vide sinon.
GroupLength ou GroupLength[n] La longueur de la première ligne/arc/forme trouvée dans le groupe graphique de l'élément (lui-même inclus) — le cas courant : la propriété est sur un texte/une cellule, et la longueur vient de la géométrie liée, comme Auto Lengths (Longueurs Auto).

Chaque source Cell* utilise la même grammaire de motif que CellText ; utilisez la famille Cell* quand une propriété doit porter un attribut de la cellule qui a groupé l'élément, pas le sien.

Plusieurs règles pour la même propriété : la première qui correspond gagne. Les règles sont essayées dans l'ordre, donc placez les règles spécifiques avant les générales. Exemple :

Prop[Repere]&Cell[ETIREF]=Value[REF] ; Prop[Repere]=CellText[ETI*] ; Prop[XY]=Coord ; Prop[Coordonnee]=CellCoord[ASUF*|SP0*] ; Prop[Longueur]=GroupLength[1]

Ici Repere vaut REF sur la cellule ETIREF (la première règle gagne), et le texte de la cellule ETI* du groupe ailleurs ; XY vaut les coordonnées propres de chaque élément ; Coordonnee vaut la position de la cellule ASUF*/SP0* qui a tagué le groupe ; Longueur vaut la longueur de la géométrie liée du groupe, arrondie à 1 décimale.

Le moteur réagit en direct : il remplit une propriété quand elle est attachée, recalcule une source propre (Coord, Length, …) quand l'élément concerné change lui-même, suit un attribut d'une cellule correspondante (texte, coordonnées, niveau, couleur, style, épaisseur) quand il est modifié, suit la longueur de la géométrie liée pour GroupLength, et vide une valeur quand sa source disparaît (ou, avec ARES_Calc_Detach_Empty activé, détache la propriété). CellId n'a jamais besoin d'être recalculé après le remplissage initial — l'identifiant d'un élément ne change jamais.

Édition des règles

La boîte d'options édite les règles de calcul une à la fois, exactement comme l'éditeur de règles d'attache des Propriétés personnalisées : une liste déroulante éditable (choisir une règle → éditer → valider remplace ; saisie libre + valider ajoute ; vide + valider supprime), avec un aperçu de syntaxe coloré en dessous (mots-clefs en gras, & bleu, ! orange, * / ? vert, une combinaison de conditions impossible en rouge). Une règle mal formée est refusée (un message dans la barre d'état, rien n'est enregistré). Les éditions en masse passent toujours par l'import/export .cfg.

Commandes

EditPropertyCalculationOptions

macro vba run [ARES]EditPropertyCalculationOptions

Ouvre les options du Calcul de propriété (l'interrupteur principal, l'option détacher-si-vide, et l'éditeur de règles de calcul). L'édition est en write-through — la config reste synchronisée, sans redémarrage.

Variables de configuration

Variable Défaut Rôle
ARES_Property_Calc False Interrupteur principal de la fonctionnalité (désactivée par défaut).
ARES_Calc_Rules (vide) Les règles de calcul : Prop[nom][&conditions]=Source ; … (Source = CellText|CellCoord|CellId|CellLvl|CellColor|CellStyle|CellWeight[motif] / Value[texte] / Coord|Length|GroupLength[n] / Id|Lvl|Color|Style|Weight ; un motif peut lister plusieurs alternatives séparées par |). La première règle qui correspond par propriété gagne.
ARES_Calc_Detach_Empty False Si active, une propriété dont la valeur calculée finit vide est détachée (le tagueur la retire) au lieu d'être conservée vide ; une règle qui l'impose encore la ré-attache (vide).

Clone this wiki locally