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é ?

#1 Thu 21 February 2008 14:03

Guillaume D
Participant occasionnel
Lieu: Dijon
Date d'inscription: 11 Jan 2007
Messages: 14
Site web

création de halo sur un symbole (programmation)

Bonjour,
j'ai une macro qui me permet d'appliquer une symbologie sur une carte

Connaissez vous comment rajouter un halo en vba ?

Merci beaucoup

Code:

Sub symbologie()
Dim pDoc As IMxDocument
Set pDoc = ThisDocument
Dim pMap As IMap
Set pMap = pDoc.FocusMap
Dim pLayer As ILayer
Set pLayer = pMap.Layer(0)
Dim pFLayer As IFeatureLayer
Set pFLayer = pLayer
Dim pLyr As IGeoFeatureLayer
Set pLyr = pFLayer
'créer une symbolisation et classifier les données
Dim pCBR As IClassBreaksRenderer
Set pCBR = New ClassBreaksRenderer
With pCBR
.BreakCount = 3
.Break(0) = 1
.Break(1) = 2
.Break(2) = 3
.Field = "repro_tota"
.Label(0) = "Adultes uniquement"
.Label(1) = "Reproduction possible"
.Label(2) = "Reproduction certaine"
End With

Dim pColorEnum As IEnumColors
Dim pAColorRamp As IAlgorithmicColorRamp
Dim pColor1 As IRgbColor
Dim pColor2 As IRgbColor
Dim pColor3 As IRgbColor
Dim pSMSym As ISimpleMarkerSymbol
Dim pSFSym As ISimpleFillSymbol

' couleur des symboles
Set pColor1 = New RgbColor
pColor1.RGB = RGB(255, 0, 0) ' ROUGE
Set pColor2 = New RgbColor
pColor2.RGB = RGB(0, 0, 0) ' blanc
Set pColor3 = New RgbColor
pColor3.RGB = RGB(255, 255, 255) ' blanc

' assigner la symbolisation de remplissage de chaque classe
Dim symbolesize As Integer
Dim halosize As Integer
symbolesize = 2

Set pSMSym = New SimpleMarkerSymbol
Set pSFSym = New SimpleFillSymbol

For i = 0 To 2

symbolesize = symbolesize + 6
pSMSym.Color = pColor1
pSMSym.Style = esriSMSCircle
pSMSym.size = symbolesize
pSMSym.Outline = True
pSMSym.OutlineSize = 0.8
pSMSym.OutlineColor = pColor2

pCBR.Symbol(i) = pSMSym

Next i

'assigner la symbolisation à la couche
Set pLyr.Renderer = pCBR
' Établir une en-tête de légende dans la table des matières de la légende (TOC)
Dim pLegendInfo As ILegendInfo
Set pLegendInfo = pCBR
pLegendInfo.LegendGroup(0).Heading = "Degré d'autochtonie"
' redessiner la table des matières (TOC) et la carte
pDoc.UpdateContents
pDoc.ActiveView.Refresh
End Sub

Dernière modification par Guillaume D (Thu 21 February 2008 14:03)

Hors ligne

 

#2 Fri 22 February 2008 07:27

Kevin Jousseaume
Participant assidu
Lieu: Nanterre, région parisienne
Date d'inscription: 20 Mar 2006
Messages: 217

Re: création de halo sur un symbole (programmation)

Bonjour,

Pourriez-vous préciser ce sur quoi vous souhaitez appliquer un halo ? A ma connaissance, ce terme s'applique spécifiquement aux symboles de type texte (-> ITextSymbol) utilisés principalement pour les étiquettes et annotations. Or votre code ne semble porter que sur la symbologie des entités de votre couche, par sur leurs étiquettes.

Au cas où, je vous mets ci-dessous du code que je n'ai pas testé (je l'ai trouvé sur le forum EDN d'Esri, http://forums.esri.com/Thread.asp?c=93& … 578#602436) mais qui a été écrit par Kirk Kuykendall, un "grand nom" sur ce forum smile

Code:

Sub Test()
    [...]
    Dim pTextElement As ITextElement
    Set pTextElement = New TextElement
    pTextElement.Text = "My Text"
    pTextElement.Symbol = MakeHaloSymbol("Arial", 10, 1, vbWhite)
    [...]
End Sub

Function MakeHaloSymbol(sFntName As String, dSize As Double, _
                        dHaloSize As Double, lRGB As Long) As ITextSymbol
    Dim pFont As New StdFont
    pFont.Name = sFntName
    Set MakeHaloSymbol = New TextSymbol
    MakeHaloSymbol.Font = pFont
    MakeHaloSymbol.Size = dSize

    Dim pMask As IMask
    Set pMask = MakeHaloSymbol
    pMask.MaskStyle = esriMSHalo
    pMask.MaskSize = dHaloSize
    Set pMask.MaskSymbol = MakeFillSym(MakeColor(lRGB))
End Function

Function MakeFillSym(pColor As IColor) As ISimpleFillSymbol
    Set MakeFillSym = New SimpleFillSymbol
    MakeFillSym.Color = pColor
    MakeFillSym.Style = esriSFSSolid
    MakeFillSym.Outline = MakeLineSym(vbWhite, 0, esriSLSNull)
End Function

Function MakeColor(lRGB As Long) As IRgbColor
    Set MakeColor = New RgbColor
    MakeColor.RGB = lRGB
End Function

Function MakeLineSym(lRGB As Long, dWidth As Double, _
                     lStyle As esriSimpleLineStyle) As ISimpleLineSymbol
    Set MakeLineSym = New SimpleLineSymbol
    MakeLineSym.Color = MakeColor(lRGB)
    MakeLineSym.Style = lStyle
    MakeLineSym.Width = dWidth
End Function

Cordialement,
Kevin Jousseaume.

Dernière modification par Kevin Jousseaume (Fri 22 February 2008 07:29)

Hors ligne

 

#3 Fri 22 February 2008 14:38

Kevin Jousseaume
Participant assidu
Lieu: Nanterre, région parisienne
Date d'inscription: 20 Mar 2006
Messages: 217

Re: création de halo sur un symbole (programmation)

Effectivement, j'aurais mieux fait d'attendre d'être au boulot et de vérifier avant d'écrire ma réponse, ça m'apprendra hmm

Je n'ai donc pas de réponse pour l'instant. Sachez toutefois que, au lieu de définir votre symbologie par code, vous avez aussi la possibilité d'utiliser 1 fichier de couche. En plus de vous permettre plus facilement de définir votre symbologie à votre guise, cela rendrait votre fonctionnalité plus facilement paramétrable (en modifiant le fichier de couche via ArcMap) smile

En fouillant un peu dans mes archives, je devrais pouvoir vous retrouver du code vous permettant de le faire. Par contre ce sera du VB et non du VBA, il y aura peut-être quelques petits points à modifier. Si cela vous intéresse, je vous invite à me contacter par mail.

Kevin Jousseaume.

Hors ligne

 

#4 Fri 22 February 2008 14:52

Guillaume D
Participant occasionnel
Lieu: Dijon
Date d'inscription: 11 Jan 2007
Messages: 14
Site web

Re: création de halo sur un symbole (programmation)

en effet, je voulais avoir un halo sur des symboles
[img]http://guillaume.doucet.free.fr/doc/sans_et_avec_halo.jpg[/img]

Pour cela j'ai trouvé une bidouille.

Je charge deux fois la couche.
Je fais une première symbologie en blanc (couleur du halo) de rayon x.

Je fais ensuite sur la deuxième couche une analyse avec la couleur souhaitée (rouge dans l'exemple) de rayon x-2 (2 = taille du halo).

Hors ligne

 

Pied de page des forums

Powered by FluxBB