#1 Mon 23 January 2006 14:07
- Jaq2
- Participant occasionnel
- Lieu: Niort
- Date d'inscription: 7 Oct 2005
- Messages: 18
Etiquette de la même couleur que l'objet etiquetté
Bonjour,
Je cherche à réaliser des etiquette qui auraient la même la même couleur que l'objet etiquetté.Pour l'exemple concret, j'ai un réseau hydraulique composé de tronçon. Chaque tronçon a une couleur et je veux que les etiquettes aient une couleur identique a tronçon qui lui correspond.
Si quelqu'un à une idée, je susi preneur
Je vous remerie
Stéphane GONZALEZ
Hors ligne
#2 Mon 23 January 2006 14:34
- Emilie Duc
- Juste Inscrit !
- Date d'inscription: 26 Sep 2005
- Messages: 5
Re: Etiquette de la même couleur que l'objet etiquetté
Bonjour,
Si le nombre de couleurs n'est pas trop important, vous pouvez créer des classes d'étiquettes.
Une classe d'étiquette permet de définir un style particulier pour les objets répondant à une requête SQL donnée.
C'est une piste... J'espère qu'elle vous sera utile.
Bon courage.
Hors ligne
#3 Mon 23 January 2006 14:44
- Jaq2
- Participant occasionnel
- Lieu: Niort
- Date d'inscription: 7 Oct 2005
- Messages: 18
Re: Etiquette de la même couleur que l'objet etiquetté
Disons que je voulais automatier la chose car j'ai un grand nombre d'entité et chauqe entité à une couleur. J'ai commencé à explorer cette solution mais elle est laborieuse.
Je vous remercie de cette participation.
Stéphane Gonzalez
Dernière modification par Jaq2 (Mon 23 January 2006 14:45)
Hors ligne
#4 Mon 23 January 2006 19:24
- Pascal LAMBERT
- Participant actif
- Lieu: Orry la Ville
- Date d'inscription: 16 Sep 2005
- Messages: 112
Re: Etiquette de la même couleur que l'objet etiquetté
Il suffit d'utiliser dans l'onglet "étiquettes" de ta couche la méthode "
utiliser différentes classes d'entité" : pour chaque classe, tu définit une
requête qui correspond à une couleur donnée et tu lui attribue une étiquette
définie avec la couleur de ton choix.
Cordialement,
Pascal LAMBERT,
chargé de mission SIG/Evaluation
tel. : 03 44 63 65 62
---------------------------------------------------------
Parc naturel régional Oise-Pays de France
Château du Fond de l'Arche - 1, avenue de Compiègne
60300 Senlis
Tel : 03 44 63 65 65 Fax: 03 44 63 65 60
Hors ligne
#5 Mon 23 January 2006 19:25
- Pascal LAMBERT
- Participant actif
- Lieu: Orry la Ville
- Date d'inscription: 16 Sep 2005
- Messages: 112
Re: Etiquette de la même couleur que l'objet etiquetté
Ça me parait difficile à faire ! à moins d'être un dieu vivant du VBA ou du
PYTHON ;-))
Par contre je te libre une idée qui m'a traversé l'esprit : si tu duplique
ta couche en autant de catégorie de couleur nécessaire, et pour chaque
duplication, tu crées un ensemble de définition qui sélectionne les tronçons
pour une couleur donnée : tu n'as plus alors qu'à définir pour chaque
duplication une étiquettes avec la couleur de ton choix (chaque tronçons de
chaque duplication étant transparents si tu veux garder l'ensemble des
tronçons apparents sous la même couche).
Si tu regroupe chaque couche dupliquée sous un groupe que tu appelles
"étiquette", tu peux cocher/décocher les étiquettes très facilement...
Je ne suis pas sur que cette méthode change considérablement la donne par
rapport à la méthode "classe d'étiquette", mais bon, à toi de voir....
Cordialement,
Pascal LAMBERT,
chargé de mission SIG/Evaluation
tel. : 03 44 63 65 62
---------------------------------------------------------
Parc naturel régional Oise-Pays de France
Château du Fond de l'Arche - 1, avenue de Compiègne
60300 Senlis
Tel : 03 44 63 65 65 Fax: 03 44 63 65 60
Hors ligne
#6 Mon 23 January 2006 19:27
- Pascal LAMBERT
- Participant actif
- Lieu: Orry la Ville
- Date d'inscription: 16 Sep 2005
- Messages: 112
Re: Etiquette de la même couleur que l'objet etiquetté
PS : quand je dis "dupliquer la couche", j'entend bien sur copier la couche
dans le projet en x exemplaires (c'est toujours la même source de donnée),
ou x est le nombre de couleur dont tu as besoin... en espérant avoir été
assez clair...
Pascal LAMBERT,
chargé de mission SIG/Evaluation
tel. : 03 44 63 65 62
---------------------------------------------------------
Parc naturel régional Oise-Pays de France
Château du Fond de l'Arche - 1, avenue de Compiègne
60300 Senlis
Tel : 03 44 63 65 65 Fax: 03 44 63 65 60
Hors ligne
#7 Tue 24 January 2006 08:54
- Christophe Tourret
- Participant actif
- Date d'inscription: 5 Sep 2005
- Messages: 63
Re: Etiquette de la même couleur que l'objet etiquetté
Bonjour,
En fait, il y a une fonction qui fait déjà la moitié du travail (c'est déjà ça...) :
1) vous mettez en place votre légende sur les entités linéaires
2) vous allez mettre en place les étiquettes :
- Dans les propriétés de couche, "étiquettes", vous choissisez la méthode "Define Classes of features(...)", désolé, c'est la version US sur mon poste !
- Vous cliquez sur le bouton "Get Symbol Classes" et vous créez magiquement un classe d'étiquettes par classe de symbole dans votre légende !
3) il ne vous reste plus que la partie manuelle du process : affecter la bonne couleur de police pour chaque classe en fonction de la couleur de chaque symbole...
Christophe
Hors ligne
#8 Tue 24 January 2006 12:33
- Jaq2
- Participant occasionnel
- Lieu: Niort
- Date d'inscription: 7 Oct 2005
- Messages: 18
Re: Etiquette de la même couleur que l'objet etiquetté
Merci de vos réponse.
Cependant, le fait de passer par la commande "utiliser les différentes classes d'entités" dans le menu "Etiquette" n'automatise pas la tâche d'attribution, de la couleur à la police de l'étiquette. Pour vous donner une idée, j'ai 190 entités différentes donc étiquettes qui y sont rattachées. Si je définis pour chaque etiquette la couleur cela me fais 190 fois la même opération sans compter qu'il faut que je consulte, au préalable, le code couleur de l'entité afin de l'attribuer à l'etiquette. Cette opération me paraît assez laborieuse et d'autre part, il ne faut pas re-changer le code couleur d'un grand nombre d'entité par la suite.
J'ai téléphoné à la hotligne d'Esri, il m'ont précisé qu'utiliser les différentes classes d'entités etait la seule solution ou alorsil fallat developper.
Merci je continue mes recherches et vous tiens au courant
Stéphane gonzalerz
Dernière modification par Jaq2 (Tue 24 January 2006 13:28)
Hors ligne
#9 Tue 24 January 2006 15:22
- Pascal LAMBERT
- Participant actif
- Lieu: Orry la Ville
- Date d'inscription: 16 Sep 2005
- Messages: 112
Re: Etiquette de la même couleur que l'objet etiquetté
Je ne comprend pas bien le problème : si tu définis une classe d'étiquette
qui sélectionne l'ensemble des entités associés à la couleur "rouge" (par
une requête sur le ou les champs thématiques), peu importe le nombre
d'entité correspondant ! il te faut créer autant de classe que de couleur
simplement (chaque classe regroupe l'ensemble des entités associées à une
couleur donnée), et cela une fois pour toute... et pour chaque classe, tu
définis un modèle d'étiquette, une fois pour toute aussi...
Pascal LAMBERT,
chargé de mission SIG/Evaluation
tel. : 03 44 63 65 62
---------------------------------------------------------
Parc naturel régional Oise-Pays de France
Château du Fond de l'Arche - 1, avenue de Compiègne
60300 Senlis
Tel : 03 44 63 65 65 Fax: 03 44 63 65 60
Hors ligne
#10 Wed 25 January 2006 11:21
- Jaq2
- Participant occasionnel
- Lieu: Niort
- Date d'inscription: 7 Oct 2005
- Messages: 18
Re: Etiquette de la même couleur que l'objet etiquetté
Merci pascal,
j'ai peut être mal compris ta façon de procéder.
Pour te répondre, j'ai effectué une symbologie en valeur unique sur le code tronçon de mes 190 entités. Sachant que chaque code tronçon est unique, j'ai au total 190 classes d'entités qui contiennnent chacune 1 entité. Donc définir la couleur de chaque classe d'entité ne me permet pas d'automatiser le système. Est-ce que je t'éclaire où est ce que c'est moi qui est mal compris?
Merci
Hors ligne
#11 Thu 26 January 2006 14:47
- Pascal LAMBERT
- Participant actif
- Lieu: Orry la Ville
- Date d'inscription: 16 Sep 2005
- Messages: 112
Re: Etiquette de la même couleur que l'objet etiquetté
S'il y a autant de couleur que de tronçon, je ne vois pas trop comment tu
peux faire!
J'entrevois toutefois une solution, mais elle est complexe :
Il faut créer une couche surfacique qui contient des petits rectangles situé
au centre de chaque tronçon (on peut "facilement" récupérer le centroïde des
tronçons, et créer un code VBA qui crée un rectangle de taille défini,
placer au niveau du centroïde en question) : à chaque rectangle, tu associe
le même identifiant que le tronçon, ainsi que la légende que tu veux faire
apparaître.
Ensuite tu fais "appliquer le style d'une couche" sur cette couche
étiquette, en reprenant les codes couleurs de ta couche tronçon (j'ignore si
le système permet de passer une symbologie d'une couche polyligne à une
couche polygone !) et tu fais apparaître l'étiquette au centre de chaque
rectangle (il faut définir une bonne taille de rectangle pour que ta légende
ne dépasse pas).
Le plus compliqué c'est de créer le code qui génère les rectangles en les
plaçant sur les centroïdes des tronçons (ensuite avec une jointure spatiale,
tu affecte l'identifiant des tronçons aux rectangles appropriés) : pour
info, tu trouveras des exemple de code générant des rectangles dans
l'aide...
Bon courage...
Pascal LAMBERT,
chargé de mission SIG/Evaluation
tel. : 03 44 63 65 62
---------------------------------------------------------
Parc naturel régional Oise-Pays de France
Château du Fond de l'Arche - 1, avenue de Compiègne
60300 Senlis
Tel : 03 44 63 65 65 Fax: 03 44 63 65 60
Hors ligne
#12 Fri 27 January 2006 14:38
- Frédéric Prally
- Participant occasionnel
- Date d'inscription: 25 Oct 2005
- Messages: 16
Re: Etiquette de la même couleur que l'objet etiquetté
Bonjour,
Ce petit bout de code devrait faire l'affaire.
Il permet d'appliquer à toutes les étiquettes créées (classes d'étiquettes), la même couleur qui est utilisée pour représenter les entités linéaires.
Procédure d'utilisation :
- Copier le code suivant dans une feuille Editeur Visual basic du projet courant :
.Outils > Macros > Editeur Visual basic
- Lancement de la procédure :
.Outils > Macros > Macro,
.Choisir dans la liste le nom de la macro intitulée "CouleurEtiquetteIdentiqueEntite"
.Cliquer sur Exécuter
- A l'invite d'une boite de dialogue, il faut saisir le nom de la couche sur lequel on veut que le processus fonctionne. (Nom identique à celui qui apparait dans la TOC).
Code:
Public Sub CouleurEtiquetteIdentiqueEntite() 'Description : Applique la même couleur des entités représentées aux classes d'étiquettes créées 'Limitation : il faut que les entités de la couche soit représentée en valeur unique 'Auteur : F. Prally 'Date : Janvier 2006 Dim pMxDocument As IMxDocument Dim pFeatureLayer As IFeatureLayer Dim pGeoLayer As IGeoFeatureLayer Dim pRenderer As IFeatureRenderer Dim pUVRenderer As IUniqueValueRenderer Dim pAnnoPropsCollection As IAnnotateLayerPropertiesCollection Dim pLabelEngine As ILabelEngineLayerProperties Dim pALayerProperties As IAnnotateLayerProperties Dim pTextSym As ITextSymbol Dim pFont As IFontDisp Dim sValue As String Dim MyLayer As String, sLabelField As String Dim i As Long, j As Long Dim pSymbol As ISymbol Dim pLineSymbol As ILineSymbol Dim pColor As IColor Dim pRgbColor As IRgbColor Dim sNameClass As String Set pMxDocument = ThisDocument 'Récupére le nom de la couche MyLayer = InputBox("Saisir le nom de la couche :", "Couleur étiquetage identique entité") If MyLayer = "" Then Exit Sub Set pFeatureLayer = GetLayer(MyLayer) Set pGeoLayer = pFeatureLayer 'Test si on a bien à faire UniqueValueRenderer If Not TypeOf pGeoLayer.Renderer Is IUniqueValueRenderer Then MsgBox "Veuillez représenter votre couche en valeur unique.", vbInformation Exit Sub End If 'Récupére le renderer de la couche Set pUVRenderer = pGeoLayer.Renderer Set pRenderer = pGeoLayer.Renderer 'Identification du champ devant servir à l'étiquetage sLabelField = pUVRenderer.Field(FieldValue) '***Part 2 : Affichage des annotations 'Définition des propriétés des étiquettes Set pAnnoPropsCollection = pGeoLayer.AnnotationProperties pAnnoPropsCollection.Clear 'Pour chaque valeur on crée une classe d'étiquettes For j = 0 To pUVRenderer.ValueCount - 1 Set pLabelEngine = New LabelEngineLayerProperties Set pALayerProperties = pLabelEngine 'Récupère le nom de la classe sNameClass = pUVRenderer.Value(j) 'Création de la classe pALayerProperties.Class = sNameClass 'Récupère la couleur du symbole Set pLineSymbol = pUVRenderer.Symbol(sNameClass) Set pColor = pLineSymbol.Color Set pRgbColor = New RgbColor pRgbColor.RGB = pColor.RGB 'Création de la requete SQL pALayerProperties.WhereClause = "[" & sLabelField & "]=" & sNameClass Set pLabelEngine = pALayerProperties 'Supprime l'expression précédente pLabelEngine.Expression = "" 'Ecriture du champ de l'étiquette pLabelEngine.Expression = "[" & sLabelField & "]" 'Applique la couleur à l'étiquette Set pTextSym = New TextSymbol pTextSym.Color = pRgbColor Set pFont = New StdFont With pFont .Bold = True .size = 12 End With Set pLabelEngine.Symbol = pTextSym 'Valider les propriétés d'étiquetage pAnnoPropsCollection.Add pALayerProperties 'Valide l'étiquetage de cette classe pALayerProperties.DisplayAnnotation = True Next j 'N'affiche pas la classe toutes les valeurs Dim k As Long For k = 0 To pAnnoPropsCollection.Count - 1 pAnnoPropsCollection.QueryItem k, pALayerProperties Select Case pALayerProperties.Class Case "<Toutes les autres valeurs>" pALayerProperties.DisplayAnnotation = False Case "Par défaut" pALayerProperties.DisplayAnnotation = False End Select Next k 'Valide l'étiquetage de cette couche pGeoLayer.DisplayAnnotation = True 'Rafraichissement des vues pMxDocument.ActiveView.Refresh 'Vide les variables Set pMxDocument = Nothing Set pFeatureLayer = Nothing Set pGeoLayer = Nothing Set pRenderer = Nothing Set pUVRenderer = Nothing Set pAnnoPropsCollection = Nothing Set pLabelEngine = Nothing Set pALayerProperties = Nothing Set pTextSym = Nothing Set pSymbol = Nothing Set pLineSymbol = Nothing Set pColor = Nothing Set pRgbColor = Nothing End Sub Public Function GetLayer(strLayerName As String, Optional pMap As IMap = Nothing) As ILayer If pMap Is Nothing Then Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument Set pMap = pMxDoc.FocusMap End If Dim pLayer As ILayer Dim i As Integer For i = 0 To pMap.LayerCount - 1 Set pLayer = pMap.Layer(i) If pLayer.Name = strLayerName Then Set GetLayer = pLayer Exit Function End If Next Set GetLayer = Nothing End Function
En espérant que cela t'aide.
Hors ligne
#13 Wed 22 March 2006 17:06
- autocartho
- Participant occasionnel
- Lieu: MOULINS
- Date d'inscription: 22 Mar 2006
- Messages: 22
Re: Etiquette de la même couleur que l'objet etiquetté
Merci pour ce code !! J'avais le même besoin et c'est presque résolu.
J'arrive à récupérer la couleur de l'entité pour chaque classe mais j'ai un message d'erreur pour l'affichage des étiquettes type "Erreur FD0 : l'affichage des étiquettes a échoué". Sauriez vous d'où pourrais venir ce pb ?
Par ailleurs, est il possible de récupérer la couleur pour la mettre en fond d'étiquettes rectangulaire avec un texte noir ? Comment faire ?
Merci
Hors ligne
#14 Mon 22 May 2006 17:33
- Jaq2
- Participant occasionnel
- Lieu: Niort
- Date d'inscription: 7 Oct 2005
- Messages: 18
Re: Etiquette de la même couleur que l'objet etiquetté
Pareil pour moi,
J'arrive à récupérer les couleurs poura chaque classe d'étiquette mais une erreur m'empèche d'afficher les étiquettes en question:
Voici l'erreur :
Code:
Une ou plusieurs couches n'ont pas été dessinées: FDO error: 0 [L'étiquetage de la couche HYDROMM pour la classe II0002 a échoué.
Si quelqu'un à une idée
Hors ligne
#15 Tue 01 March 2011 12:20
- laure.briard
- Participant occasionnel
- Lieu: Laon
- Date d'inscription: 18 Aug 2008
- Messages: 22
Re: Etiquette de la même couleur que l'objet etiquetté
Bonjour à tous,
Même erreur pour moi !
Une ou plusieurs couches n'ont pas été dessinées:
FDO error: 0 [L'étiquetage de la couche texte pour la classe 1 a échoué.
Je pense que quelqu'un a finalement réussi à régler le problème depuis 2005...
Merci d'avance !
Hors ligne