Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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 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@texte-a-enlever.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@texte-a-enlever.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@texte-a-enlever.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...

 

Pied de page des forums

Powered by FluxBB