banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

 

Pied de page des forums

Powered by FluxBB