Fraid Posté(e) le 4 mars 2011 Posté(e) le 4 mars 2011 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 ;) https://github.com/Fraiddd
bryce Posté(e) le 4 mars 2011 Posté(e) le 4 mars 2011 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] Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
Fraid Posté(e) le 4 mars 2011 Auteur Posté(e) le 4 mars 2011 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. https://github.com/Fraiddd
bryce Posté(e) le 4 mars 2011 Posté(e) le 4 mars 2011 Je suis sûr que si un Jedi du lisp passe dans le coin, il aura des solutions bien plus élégantes à proposer.Moi ça fait moins d'un mois que je fais du lisp, alors bon... :P Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
Fraid Posté(e) le 4 mars 2011 Auteur Posté(e) le 4 mars 2011 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 https://github.com/Fraiddd
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant