#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 Subautre 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 SubAyez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne


