#1 Mon 09 June 2008 23:58
- calito
- Participant actif
- Date d'inscription: 2 Jun 2008
- Messages: 112
programmation ArcObjet avec VBA
Bonjour,
J'ai réaliser un p'tit programme qui me permet de passer des requêtes par attribut sur une couche, Je n'sais pas comment utiliser 'query deff' en VBA pour que je puisse voir seulement les entitées sélectionnées sur la carte.
Merci pour votre aide.
Hors ligne
#2 Tue 10 June 2008 09:05
- Tnarbiv
- Participant assidu
- Lieu: Véretz
- Date d'inscription: 5 Sep 2005
- Messages: 392
Re: programmation ArcObjet avec VBA
Bonjour,
peut être que cela pourra t'aider :
Code:
' Get a reference to the first layer in the map Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument Dim pMap As IMap Set pMap = pMxDoc.FocusMap Dim pFLayer As IFeatureLayer Set pFLayer = pMap.Layer(0) ' Set the definition query of the layer Dim pFLDef As IFeatureLayerDefinition Set pFLDef = pFLayer ' QI from the FeatureLayer pFLDef.DefinitionExpression = "SUB_REGION = 'Pacific'" ' set the definition expression pMxDoc.ActiveView.Refresh
Je pense qu'il ne te reste plus qu'à mettre ta requête attributaire à la place de "SUB_REGION = 'Pacific'"
Dernière modification par Tnarbiv (Tue 10 June 2008 09:06)
Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne
#3 Wed 11 June 2008 12:11
- calito
- Participant actif
- Date d'inscription: 2 Jun 2008
- Messages: 112
Re: programmation ArcObjet avec VBA
Merci infiniment, c'est correct.
J'ai deux question:
1- Est-ce que vous pouvez me fournir un lien ou un doc numerique qui explique tres tres bien le modele ArcObjet (les schemas)?
2- J'ai fait une petite application dans laquelle j'ai passe une requête, et que j'aimerais changer la couleur des entités sélectionnées, je n'arrive pas à le faire. j'ai toujour cette erreur:Invalde use property (j'ai mal utilisé la propriété).
Voici le code:
Dim Doc As IMxDocument
Set Doc = ThisDocument
Dim mMap As IMap
Set mMap = Doc.FocusMap
Dim lLayer As IFeatureLayer
Set lLayer = mMap.Layer(0)
Dim pActiveView As IActiveView
Set pActiveView = mMap
'variable d'objet pour la couleur de selection
Dim sColor As IColor
Set sColor = New RgbColor
sColor.RGB = RGB(140, 255, 122)
Dim qQuery As IQueryFilter
Dim sSelection As IFeatureSelection
'prepare a query filter
Set qQuery = New QueryFilter
qQuery.WhereClause = "years<=" & UserForm.Slider1.Value & ""
'refresh the old selection
pActiveView.PartialRefresh esriViewGeoSelection, Nothing, Nothing
'select feautures
Set sSelection = lLayer
sSelection.SelectFeatures qQuery, esriSelectionResultNew, False
'couleur de selection
sSelection.SelectionColor.RGB
'refresh
pActiveView.PartialRefresh esriViewGeoSelection, Nothing, Nothing
--------------------------------------------------------------------------------------
Merci deja.
A+
Hors ligne
#4 Wed 11 June 2008 13:09
- Tnarbiv
- Participant assidu
- Lieu: Véretz
- Date d'inscription: 5 Sep 2005
- Messages: 392
Re: programmation ArcObjet avec VBA
bonjour,
1
si tu es en 9.1 voici le modèle objet http://edndoc.esri.com/arcobjects/9.1/A … opOMDs.pdf
Normalement quand tu installes arcgis tu peux si tu veux installer le developer kit et à ce moment là tu as un répertoire qui se créé C:\Program Files\ArcGIS\DeveloperKit\Diagrams dans lequel tu dois pouvoir trouver un modèle objet AllDesktopOMDs.pdf
2
peux tu utiliser le deboggeur pour voir où ça plante réellement.
peux tu également vérifier ta conditon qQuery.WhereClause = "years<=" & UserForm.Slider1.Value & ""
Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne
#5 Wed 11 June 2008 13:17
- Tnarbiv
- Participant assidu
- Lieu: Véretz
- Date d'inscription: 5 Sep 2005
- Messages: 392
Re: programmation ArcObjet avec VBA
la propriété SelectionColor est affectée par référence
en gros tu dois utiliser le mot clé Set devant la ligne
'couleur de selection
Set sSelection.SelectionColor.RGB
peux tu essayer ceci :
sSelection.SetSelectionSymbol = FALSE
Set sSelection.SelectionColor = sColor.RGB
Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne
#6 Wed 11 June 2008 14:15
- calito
- Participant actif
- Date d'inscription: 2 Jun 2008
- Messages: 112
Re: programmation ArcObjet avec VBA
J'ai essayé, ca'n marche pas
premierement j'ai declaré ma variable d'objet
Dim sColor As IColor
Set sColor = New RgbColor
sColor.RGB = RGB(140, 255, 122)
deuxiement, j'ai ajouter ce que tu m'avais dit:
sSelection.SetSelectionSymbol = False
Set sSelection.SelectionColor.RGB = sColor.RGB
Toujour la meme erreur: invalid use property(en selectionnant RGB)
Hors ligne
#7 Wed 11 June 2008 15:24
- Tnarbiv
- Participant assidu
- Lieu: Véretz
- Date d'inscription: 5 Sep 2005
- Messages: 392
Re: programmation ArcObjet avec VBA
peux tu essayer ça
le fichier sur lequel je travaille est stocké au sein d'une géodatabase et ça marche alors que si le fichier est un fichier de forme cela ne marche pas
Code:
Public Sub SelectMapFeaturesAndRefresh()
Dim pMxDoc As IMxDocument
Dim pMap As IMap
Dim pActiveView As IActiveView
Dim pFeatureLayer As IFeatureLayer
Dim pFeatureSelection As IFeatureSelection
Dim pQueryFilter As IQueryFilter
Set pMxDoc = ThisDocument
Set pMap = pMxDoc.FocusMap
Set pActiveView = pMap
'For simplicity sake let's use the first layer in the map
If Not TypeOf pMap.Layer(0) Is IFeatureLayer Then Exit Sub
Set pFeatureLayer = pMap.Layer(0)
Set pFeatureSelection = pFeatureLayer 'QI
'Create the query filter
Set pQueryFilter = New QueryFilter
pQueryFilter.WhereClause = "years<=" & UserForm.Slider1.Value & ""
'Invalidate only the selection cache
'Flag the original selection
pActiveView.PartialRefresh esriViewGeoSelection, Nothing, Nothing
Dim pColor As IColor
Set pColor = New RgbColor
pColor.RGB = RGB(140, 255, 122)
Set pFeatureSelection.SelectionColor = pColor
'Perform the selection
pFeatureSelection.SelectFeatures pQueryFilter, esriSelectionResultNew, False
'Flag the new selection
pActiveView.PartialRefresh esriViewGeoSelection, Nothing, Nothing
End SubDernière modification par Tnarbiv (Wed 11 June 2008 15:24)
Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne
#8 Wed 11 June 2008 23:23
- calito
- Participant actif
- Date d'inscription: 2 Jun 2008
- Messages: 112
Re: programmation ArcObjet avec VBA
j'utilise un fichier de forme. Il n'est pas stocké dans une geodatabase.
Hors ligne
#9 Wed 11 June 2008 23:39
- calito
- Participant actif
- Date d'inscription: 2 Jun 2008
- Messages: 112
Re: programmation ArcObjet avec VBA
Oui, je viens de le faire lorsque j'utilise une geodatabase mais, je voulais le faire sans utiliser une geodatabase.
Hors ligne
#10 Wed 11 June 2008 23:47
- calito
- Participant actif
- Date d'inscription: 2 Jun 2008
- Messages: 112
Re: programmation ArcObjet avec VBA
OKEY OKEY, c'est bon maintenant, je viens de le faire sans intégrer le fichier de forme dans une géodatabase.
Merci infiniment.
Hors ligne
#11 Thu 12 June 2008 09:01
- Tnarbiv
- Participant assidu
- Lieu: Véretz
- Date d'inscription: 5 Sep 2005
- Messages: 392
Re: programmation ArcObjet avec VBA
peux tu nous dire comment tu as fait ?
Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne
#12 Thu 12 June 2008 13:23
- calito
- Participant actif
- Date d'inscription: 2 Jun 2008
- Messages: 112
Re: programmation ArcObjet avec VBA
J'ai fait ce que vous m'aviez dit, mais je n'ai pas utiliser de geodatabase. J'ai ajouter une couche, et sur cette couche j'ai appliqué ma requête.
Lorsque je suis sur Windows XP, ça'n fonctionne pas, mais avec Vista ça marche
voici les codes:
Code:
Private Sub CommandButton1_Click()
Dim Doc As IMxDocument
Set Doc = ThisDocument
Dim mMap As IMap
Set mMap = Doc.FocusMap
Dim lLayer As IFeatureLayer
Set lLayer = mMap.Layer(0)
Dim pActiveView As IActiveView
Set pActiveView = mMap
Dim qQuery As IQueryFilter
Dim sSelection As IFeatureSelection
Set qQuery = New QueryFilter
qQuery.WhereClause = "Population<=100000"
Set sSelection = lLayer
Dim pColor As IColor
Set pColor = New RgbColor
pColor.RGB = RGB(255, 10, 10)
Set sSelection.SelectionColor = pColor
sSelection.SelectFeatures qQuery, esriSelectionResultAdd, False
pActiveView.PartialRefresh esriViewGeoSelection, Nothing, Nothing
End SubJe voulais l'utiliser dans une boucle. A chaque lecture d'un champ je vois que les entités selectionés avant clignote. Je crois que c'est à cause du "RFRESH". Comment je peut eviter le raffraichissement de la carte apres chaque requete?
Dernière modification par calito (Thu 12 June 2008 13:30)
Hors ligne


