VDH-Bruno Posté(e) le 4 février 2015 Posté(e) le 4 février 2015 Bonjour à tous, Pour tester la blague du jour (testé sous AutoCAD 2007) avec ssget et les noms de calque avec un "[", créez par exemple un calque Calque1[toto], dessinez des objets dedans, puis essayez en lisp de lancer une sélection par calque au moyen de la fonction ssget :angry: . Ou au moyen de la ligne de code suivant:(sssetfirst nil (ssget "_X" (list (assoc 8 (entget (car (entsel "Effectuer une sélection par calque => Choix d'un objet :"))))))) A+(Ps: Je suppose qu'il en va de même sur les autres versions..) EDIT: modifié crochet droit [ par crochet gauche ]dans le titre et le message Apprendre => Prendre => Rendre
-Olivier- Posté(e) le 4 février 2015 Posté(e) le 4 février 2015 Bonjour Bruno, Bien vuJe suppose qu'il en va de même sur les autres versions..) Effectivement je suis en 2015 et le résultat est le même. En dehors du lisp, avec la commande sélection rapide, ou sélection similaire, cela fonctionne en revanche pour la commande filter, le résultat est identique à ssget. Olivier
bonuscad Posté(e) le 4 février 2015 Posté(e) le 4 février 2015 Bonjour, Je pense que c'est un comportement normal, on peux utiliser des caractères spéciaux pour filtrer des chaines de carcatères dans (ssget); voir la fonction (wcmatch) en utilisant cette syntaxe, ça ne pose plus de problème:(sssetfirst nil (ssget "_X" (list (cons 8 (vl-string-subst "`]" "]" (vl-string-subst "`[" "[" (cdr (assoc 8 (entget (car (entsel "Effectuer une sélection par calque => Choix d'un objet :"))))))))))) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
zebulon_ Posté(e) le 4 février 2015 Posté(e) le 4 février 2015 Bonjour, version 2014 :Commande: (setq js (ssget "_x" '((8 . "*[*"))))nil ssget ne trouve rien. mais, au niveau des filtres de ssget [...] correspond à "un seul des caractères inclus entre les crochets"[~...] sauf ceux inclus entre les crochets donc c'est normal que ça ne fonctionne pas. AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
VDH-Bruno Posté(e) le 4 février 2015 Auteur Posté(e) le 4 février 2015 (modifié) Je pense que c'est un comportement normal, on peux utiliser des caractères spéciaux pour filtrer des chaines de carcatères dans (ssget); voir la fonction (wcmatch) wcmacth maintenant que tu l'écris ça me semble évident, merci Bonuscad, pris par l'urgence de la tache je n'ai pas percuté. Je vais sécuriser mes routines de sélections ce qui m'évitera à l'avenir de redéfinir mes noms de calques du projet en toutes hâtes. En attendant d'écrire une routine plus spécifique, je vais m'inspirer de l'expression suivante, repris de ton exemple:(sssetfirst nil (ssget "_X" (list (cons 8 (vl-string-subst "`[" "[" (cdr (assoc 8 (entget (car (entsel "Effectuer une sélection par calque => Choix d'un objet :"))))) ) ) ) ) ) Pour l'anecdote dans mon urgence j'ai intervertie le crochet gauche [ qui nécessite effectivement une désactivation, pour le crochet droit ] ce n'est pas nécessaire. A+(Ps: Je rectifie le titre) Modifié le 4 février 2015 par VDH-Bruno Apprendre => Prendre => Rendre
VDH-Bruno Posté(e) le 4 février 2015 Auteur Posté(e) le 4 février 2015 [...] correspond à "un seul des caractères inclus entre les crochets"[~...] sauf ceux inclus entre les crochets donc c'est normal que ça ne fonctionne pas. Oui zebulon je me suis souvenu en lisant BonusCAD que cela venez de l'utilisation des caractères génériques, merci à toi d'avoir pris la peine de compléter. A+ Apprendre => Prendre => Rendre
zebulon_ Posté(e) le 4 février 2015 Posté(e) le 4 février 2015 j'ai commencé ma réponse et j'ai été interrompu. J'ai envoyé plus tard et la réponse de Bonuscad était déjà arrivée. Désolé. N'empêche que la connaissance de l'apostrophe inverse, qui saute les caractères spéciaux et qui permet de lire le prochain caractère littéralement, et ainsi "étouffer" son statut de caractère de remplacement, est précieuse. Merci à Bonuscad de nous l'avoir remémorée. J'aime aussi assez le nota dans l'aide de wcmatch :Attention : il se peut que d'autres caractères de remplacement soient ajoutés dans les versions ultérieures d'AutoLISP, il est souhaitable d'ignorer tous les caractères non alphanumériques afin d'assurer la compatibilité ascendante de la fonction. AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
bonuscad Posté(e) le 4 février 2015 Posté(e) le 4 février 2015 En tout cas je ne pense pas que l'utilisation de caractère spéciaux soient judicieux dans les noms de calque.Bien que:<>/\"":;?*|,= restent interdit, il reste le # ou le $ (et d'autres) Quand on lie un xref, par exemple,on se retrouve avec des $, donc si celui-ci est utilisé volontairement... faire des filtres devient laborieux! et puis ce que dit Vincent peut réserver des surprisesAttention : il se peut que d'autres caractères de remplacement soient ajoutés dans les versions ultérieures d'AutoLISP Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
VDH-Bruno Posté(e) le 4 février 2015 Auteur Posté(e) le 4 février 2015 zebulon_ à la lecture du nota de wcmatch, et en croisant les info sur l'utilisation des caractères spéciaux dans les noms de calque décrit dans la fonction snvalid et souligné par BonusCAD.Ca donne envie d'être excessif dans le traitement et la désactivation des caractères spéciaux lorsque nécessaire avec un code du genre. ;; STR-REVQUOTE VDH-Bruno ;; Insère une apostrophe inversé devant tous les caractères de la chaines ;; ;; Exemple: ;; (str-revQuote "Calque1") => "`C`a`l`q`u`e`1" (defun str-revQuote (s) (if (eq s "") s (strcat "`" (substr s 1 1) (str-revQuote (substr s 2)))) ) A tester avec l'expression suivante:(sssetfirst nil (ssget "_X" (list (cons 8 (str-revQuote (cdr (assoc 8 (entget (car (entsel)))))))))) Merci de vos réflexionsA+(ps: Nous ne sommes hélas pas toujours les décideurs des noms de calques lorsque l'on a pas la main sur les projets) Apprendre => Prendre => Rendre
lecrabe Posté(e) le 5 février 2015 Posté(e) le 5 février 2015 Hello Depuis toujours j'ai toujours parle (exhorte les gens en fait) dans mes formation de ne JAMAIS utiliser de caracteres speciaux (ni espace/blanc) dans les noms de TOUT : dossier (folder), fichier (filename), calque, bloc, style, etc J'autorise seulement le caractere "_" (underscore/souligne), et a la rigueur le caractere "-" (minus/moins) C FOU le nombre de probleme que l'on evite !! sans parler des bugs de logiciels developpes pour le US/English ... et pas trop bien testes avec les caracteres des autres langues !!! Bye, lecrabe Autodesk Expert Elite Team
zebulon_ Posté(e) le 5 février 2015 Posté(e) le 5 février 2015 Depuis toujours j'ai toujours parle (exhorte les gens en fait) dans mes formation de ne JAMAIS utiliser de caracteres speciaux (ni espace/blanc) dans les noms de TOUT : dossier (folder), fichier (filename), calque, bloc, style, etc Sage conseil ! Et dans les caractères spéciaux, on peut rajouter les lettres avec des accents. Il m'est arrivé de galérer à cause de cela. Ce n'était pas avec Autocad, mais c'était, si ma mémoire est bonne, un transfert de fichiers d'un serveur Windows vers un serveur Linux. Les noms de fichiers qui comprenait des accents, je ne vous raconte pas ce que cela donnait à l'arrivée... AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
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