#1 Mon 01 September 2003 15:16
- Jean-Christophe Lacaze
- Invité
Changement du style d'un objet sous MapX
Bonjour a tous,
Je cherche actuellement a changer le style de certains objets d'une
couche pour les mettre en evidence. Cela marche bien quand j'utilise la
propriete style de la couche mais cela reste inefficace lorsque
j'utilise la propriete style de l'objet (feature).
J'utilise MapX en environnement VB.
Mon code ressemble a ceci (en resume).
dim oFtr as MapXLib.Feature
dim oFtrs as MapXLib.Features
dim oStyle as MapXLib.Style
With oStyle
Ici je definis le nouveau style que je veux affecter aux objets
End With
For Each oFtr in oFtrs
Set oftr.style = oStyle
Next oFtr
Je n'ai alors aucun message d'erreur mais le style reste inchange... Je
pourrais copier mes objets dans une couche temporaire mais il serait
beaucoup plus efficace de changer tout simplement le style...
J'ai egalement essayer de le raisonner dans l'autre sens:
Set oStyle = oFtr.Style
With oStyle
definition du nouveau style
End With
Mais cette syntaxe n'a pas plus de succes.
J'ai egalement tente un refresh sur la couche, un refresh sur la carte,
un overridestyle sur la couche ou encore un update sur l'objet mais le
liste reste desespere inchange...
Quelqu'un aurait-il une solution?
Merci par avance.
Jean-Christophe Lacaze
DGA/SDSI/CERIT/DIG
#2 Mon 01 September 2003 15:16
- Christophe Barbier
- Invité
Re: Changement du style d'un objet sous MapX
Bonjour,
Essayez ceci:
-----------
For Each oFtr in oFtrs
Set oftr.style = oStyle.Clone
Next oFtr
-----------
Christophe Barbier, I²G
christophe.barbier@ i2g.fr
#3 Mon 01 September 2003 15:56
- Jean-Christophe Lacaze
- Invité
Re: Changement du style d'un objet sous MapX
Aucune amelioration, merci tout de meme!
#4 Mon 01 September 2003 15:56
- Christophe Barbier
- Invité
Re: Changement du style d'un objet sous MapX
Dans ce cas, il manque peut-etre aussi oftr.update
Verifiez aussi bien sur que oftr est bien un Feature original de la
carte (ce n'est pas une copie ?)
Christophe Barbier, I²G
#5 Mon 01 September 2003 16:23
- Jean-Christophe Lacaze
- Invité
Re: Changement du style d'un objet sous MapX
Non non, ce ne sont pas des copies, je travaille sur une couche normale
avec ses objets d'origine... J'ai essaye avec le clone, l'update, le
refresh de la carte, l'autoredraw a true, tous ces facteurs en meme
temps, un DoEvents en fin de syntaxe, rien n'y fait...
Je commence vraiment a me demander s'il est possible de changer le style
d'un objet...
#6 Mon 01 September 2003 16:31
- Frédéric Renversez
- Invité
Re: Changement du style d'un objet sous MapX
Bonjour,
Ce bout de code marche chez moi :
Set oFtrs = FrmMain.MyMap.Layers.Item(InsLay).selection.Clone
Set neostl = oFtrs.Item(1).Style.Clone
If neostl.PickRegion 0 Then
For Each oFtr In oFtrs
Set oFtr.Style = neostl
oFtr.Update
Next
End If
Je reconnais que ce n'est pas evident a ce niveau la car le Clone est obligatoire :
apparemment il s'agit de creer une copie du style initial et de modifier cette copie,
ensuite il faut faire pointer le style original vers la copie.
Cordialement,
Frederic RENVERSEZ
Ingenieur Developpement / SIG
frederic.renversez@ i2g.fr
#7 Tue 02 September 2003 09:47
- Jean-Christophe Lacaze
- Invité
Re: Changement du style d'un objet sous MapX
Merci pour cette reponse mais elle ne semble pas non plus fonctionner
chez moi... Voici le code exact que j'utilise, si cela peut vous
eclairer d'avantage sur mon probleme:
Dim oStyleObj as New MapXLib.Style
Dim oFtr As New MapXLib.Feature
Dim oFtrs As MapXLib.Features
Dim oSel As MapXLib.Selection
Dim strWhere as String
With oStyleObj
.RegionBorderColor = miColorRed
.RegionColor = miColorRed
.RegionPattern = miPatternDiagCross
.SymbolBitmapColor = miColorRed
.SymbolFontColor = miColorRed
.SymbolVectorColor = miColorRed
.TextFontColor = miColorRed
.LineColor = miColorRed
End With
Set oSel = NewForm.oGL1.Layers(Couches).Selection
Set oFtrs = NewForm.oGL1.Layers(Couches).Search(strWhere)
For Each oFtr In oFtrs
oSel.Add oFtr
Set oFtr.Style = oStyleObj
oFtr.Update
Next oFtr
Couches est un parametre de la fonction dans laquelle est utilisee ce
code, c'est une serie de noms de couche separes par un ; (ex:
couche1;couche2;...). Je n'ai pas fait figurer ici la boucler permettant
d'identifier les differentes couches mais elle fonctionne.
NewForm est le nom du formulaire genere.
oGL1 est mon controle carte.
J'ai tente la meme chose en ajoutant ceci a la fin:
NewForm.oGL1.AutoRedraw = True
NewForm.oGL1.Refresh
NewForm.oGL1.Layers(Couches).OverrideStyle = True
DoEvents
Ou encore en effectuant un clone:
Set oFtr.Style=oStyleObj.Clone
Mais rien de tout ceci ne fonctionne...
#8 Tue 02 September 2003 10:46
- Christophe Barbier
- Invité
Re: Changement du style d'un objet sous MapX
Quelques petites remarques:
- Clone est obligatoire : Set oFtr.Style = oStyleObj.Clone
- NewForm.oGL1.Layers(Couches).OverrideStyle = True signifie que tous les Features de la Couche doivent s'afficher avec le Style de leur Layer
Il faut donc initialiser OverrideStyle a False.
- Votre variable Couches doit pointer vers un (et un seul !) nom de couche.
- Je ne suis pas sur de moi mais, a mon avis, apres l'ajout du Feature dans la selection, il vaut mieux le recuperer a nouveau depuis l'objet Selection et faire les modifications de style sur ce Feature.
Car un Feature reste attache a ses origines.
Je ferai donc un truc du genre:
-----------
For Each oFtr In oFtrs
oSel.Add oFtr
newFeature = oSel.Item(oSel.Count)
Set newFeature.Style = oStyleObj.Clone
newFeature.Update
Next oFtr
-----------
Christophe Barbier, I²G
Chef de projet SIG
christophe.barbier@ i2g.fr
#9 Tue 02 September 2003 10:46
- Frédéric Renversez
- Invité
Re: Changement du style d'un objet sous MapX
Bonjour,
Si j'ai bien compris, vous essayez de modifier la couleur des objets
que vous ajoutez a la selection courante, objets que vous venez de
selectionner d'apres une requete.
Essayez plutot, a la place de ceci :
Set oSel = NewForm.oGL1.Layers(Couches).Selection
Set oFtrs = NewForm.oGL1.Layers(Couches).Search(strWhere)
For Each oFtr In oFtrs
oSel.Add oFtr
Set oFtr.Style = oStyleObj
oFtr.Update
Next oFtr
cela :
Set oFtrs = NewForm.oGL1.Layers(Couches).Search(strWhere)
Set oSel = NewForm.oGL1.Layers(Couches).Selection
oSel.add ftrs
For Each oFtr in oSel
set oFtr.Style = oStyleObj.Clone
oFtr.Update
Next
Ca pourrait mieux marcher, mais ce n'est pas sur.
Il n'y a pas de raison, il suffit juste de trouver le bon code. Modifier
le style d'un objet selectionne fonctionne avec MapX.
Frederic RENVERSEZ
Ingenieur Developpement / SIG
#10 Tue 02 September 2003 11:30
- Jean-Christophe Lacaze
- Invité
Re: Changement du style d'un objet sous MapX
Merci a vous et a Frederic Renversez, ca marche enfin!
Le point qui bloquait etait en fait l'OverrideStyle qu'il fallait passer
a False...