#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
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
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)
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