#1 Mon 23 June 2008 16:27
- calito
- Participant actif
- Date d'inscription: 2 Jun 2008
- Messages: 112
modifier la Symbologie d'une couche - VBA
Bonsoir,
Je viens de commencer un petit programme qui doit me permetre de changer la couleur de mes entitées(Fill) pour une couche, et leurs contours(outline). J'ai declaré une variable d'objet de type "defaultLayerSymbology", ça'n donne rien.
J'ai utlisé le "SelectionSymbole" de l'interface IFeatureselection, toujours rien.
Comment je peux le faire?
Merci
Hors ligne
#2 Mon 23 June 2008 17:10
- Tnarbiv
- Participant assidu
- Lieu: Véretz
- Date d'inscription: 5 Sep 2005
- Messages: 392
Re: modifier la Symbologie d'une couche - VBA
bonjour,
je crois qu'il faut travailler avec les objets renderer
Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne
#3 Mon 23 June 2008 19:27
- calito
- Participant actif
- Date d'inscription: 2 Jun 2008
- Messages: 112
Re: modifier la Symbologie d'une couche - VBA
Avec render, je'n comprend pas. J'ai essayé comme ça, malheureusement ça'n donne rien.
Code:
Dim Doc As IMxDocument Dim pMap As IMap Dim pLayer As IFeatureLayerSymbology Dim Fill As IFillSymbol Dim i As Integer Set Doc = ThisDocument Set pMap = Doc.FocusMap Set pLayer = pMap.Layer(ComboBox1.ListIndex) Set Fill = pLayer Dim pColor As IColor Set pColor = New RgbColor pColor.RGB = RGB(255, 150, 122) Set Fill.Color = pColor
Hors ligne
#4 Mon 23 June 2008 23:50
- Tnarbiv
- Participant assidu
- Lieu: Véretz
- Date d'inscription: 5 Sep 2005
- Messages: 392
Re: modifier la Symbologie d'une couche - VBA
voici un exemple permettant de paramétrer un symbole simple
Code:
Private Sub ApplySimpleRenderer(SomeLayer As IGeoFeatureLayer) Dim pSRenderer As ISimpleRenderer Set pSRenderer = New SimpleRenderer Dim pFillSymbol As ISimpleFillSymbol Set pFillSymbol = New SimpleFillSymbol pFillSymbol.Style = esriSFSForwardDiagonal Dim pColor As IRgbColor Set pColor = New RgbColor pColor.RGB = vbBlue pFillSymbol.Color = pColor 'La propriété est affectée par référence donc on utilise "Set" … Set pSRenderer.Symbol = pFillSymbol pSRenderer.Label = "USA" 'La propriété Renderer de IGeoFeatureLayer est aussi affectée par référence Set SomeLayer.Renderer = pSRenderer Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument pMxDoc.UpdateContents 'Rafraîchit la table des matière pMxDoc.ActiveView.Refresh 'rafraîchit la zone d'affichage End Sub
autre chose importante as tu pensais à rafraichir la carte ainsi que la table des matieres ?
Dernière modification par Tnarbiv (Mon 23 June 2008 23:52)
Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne
#5 Tue 24 June 2008 17:01
- calito
- Participant actif
- Date d'inscription: 2 Jun 2008
- Messages: 112
Re: modifier la Symbologie d'une couche - VBA
J'ai essayé avec, ça n'a pas marcher. Lorsque je click sur mon boutton, rien ne se passe.
J'ai remarqué qu'on n'a pas declarer une variable d'objet(IMap), je'n sais pas pourquoi.
Hors ligne
#6 Tue 22 July 2008 10:41
- Tnarbiv
- Participant assidu
- Lieu: Véretz
- Date d'inscription: 5 Sep 2005
- Messages: 392
Re: modifier la Symbologie d'une couche - VBA
normal que rien ne se passe car pour la ligne
Code:
Set SomeLayer.Renderer = pSRenderer
le terme SomeLayer insinue que l'on a récupérer une autre couche dans cette variable (d'ailleurs c'est un argument de la procédure).
Dans l'exemple on utilise pas d'objet IMap car encore une fois le code ci-dessus est juste un extrait d'un code plus complet.
Voici un exemple de code qui fonctionne, il ne te reste plus qu'à l'adapter selon tes besoins.
Code:
Public Sub ApplySimpleRenderer() Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument Dim pMap As IMap Set pMap = pMxDoc.FocusMap Dim pLayer As ILayer Set pLayer = pMap.Layer(0) Dim pGFLayer As IGeoFeatureLayer Set pGFLayer = pLayer Dim pSRenderer As ISimpleRenderer Set pSRenderer = New SimpleRenderer Dim pFillSymbol As ISimpleFillSymbol Set pFillSymbol = New SimpleFillSymbol pFillSymbol.Style = esriSFSForwardDiagonal Dim pColor As IRgbColor Set pColor = New RgbColor pColor.RGB = vbBlue pFillSymbol.Color = pColor 'La propriété est affectée par référence donc on utilise "Set" … Set pSRenderer.Symbol = pFillSymbol pSRenderer.Label = "Départements français" 'La propriété Renderer de IGeoFeatureLayer est aussi affectée par référence Set pGFLayer.Renderer = pSRenderer pMxDoc.UpdateContents 'Rafraîchit la table des matière pMxDoc.ActiveView.Refresh 'rafraîchit la zone d'affichage End Sub
Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne