Aller au contenu

récupérer la liste des calques des xrefs


Fraid

Messages recommandés

Bonjour,

 

Dansle cadre mon apprentissage du VLA, je modifie mes routines existantes que j'ai réalisés en autolisp simple.

 

et bien...ce n'est pas si simple... :P

 

de simples commandes peuvent devenir compliquées en VLA.

 

voila un de mes problème:

 

pour remplacer

 

(command "_-layer" "g" "albert")

 

par

 


(gelaybyname "albert")

(defun gelaybyname ( nomlay / listlay)

(vlax-for listlay (vla-get-layers *acdoc*)
   (if	(= (vla-get-Name listlay ) nomlay)
     (vla-put-Freeze listlay :vlax-true)
   )
 )
)

 

pas de soucis, ça marche

 

par contre

 

1)si albert est un calque d'une xref cela ne fonctionne pas (nil)

faut il récupérer la liste des calques dans les xrefs? dans ce cas la dans quoi allons nous chercher avec le vla-get-layers?

 

2) si nomlay est une liste faut il rajouter un vlax-for? mais a quel niveau?

peut etre une façon moins compliqué existe t'il?

 

je vous épargne de mes essais lamentables...

 

je sais qu'il existe un tas d'exemple, sur ce forum et ailleurs, mais comme je voudrai comprendre...j'ose poser ma question.

 

merci de prêter attention a mon petit probleme sans importance ;)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Je dirais remplacer

 

(if	(= (vla-get-Name listlay ) nomlay)

 

par

 

(if	(wcmatch (vla-get-Name listlay ) (strcat "*" nomlay))

 

puisque si une xref contient un calque "albert", le nom du calque est "nomdelaxref|albert".

 

Avec wcmatch on choppe tous les calques qui se terminent par albert.

 

Pour être plus sûr :

 

(if	(or (wcmatch (vla-get-Name listlay ) (strcat "*" nomlay)) (= (vla-get-Name listlay ) nomlay))

 

 

Edit: pour la question 2, en utilisant la fonction member pour tester si (vla-get-Name listlay ) appartient à la liste nomlay ?

 

 

 

[Edité le 4/3/2011 par bryce]

Lien vers le commentaire
Partager sur d’autres sites

Merci

 

j'etais partis, en voulant selectionné les xrefs :o

 

c'est la premiere chose que j'avais essayé, le * puisque c'est comme cela que je fais en autolisp qui lui n'a pas besoin de wcmatch !

 

du coup je vais m'en souvenir de celle la.

 

et member j'aurai pu y penser

 

encore merci

 

:P j'ai encore beaucoup de progrès a faire, mais je m'accroche...

je me suis équipé d'une lampe frontale, car je suis loin de voir la lumière au bout du tunnel.

Lien vers le commentaire
Partager sur d’autres sites

Donc pour cloturé ce sujet

 

 

(mapcar 'gelaybyname '("albert" "gustave" "*ierre" "*ean*"))

(defun gelaybyname ( nomlay / listlay)

(vlax-for listlay (vla-get-layers *acdoc*)
   (if	(wcmatch   (vla-get-Name listlay ) nomlay)
(vla-put-Freeze listlay :vlax-true)
   )
 )
)

 

je préfère en fin de compte gérer la liste dés le départ afin d’alléger la fonction.

 

en plus je vais pouvoir m'en servir comme modele :D

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité