Aller au contenu

[Résolu] Noms de calque et sélections, attention au crochet gauche [


Messages recommandés

Posté(e)

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

Posté(e)

Bonjour Bruno,

 

Bien vu

Je 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

Posté(e)

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

Posté(e)

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.

 

Amicalement

Vincent

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)

Posté(e) (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é par VDH-Bruno

Apprendre => Prendre => Rendre

Posté(e)

[...] 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

Posté(e)

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.

 

Amicalement

Vincent

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)

Posté(e)

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 surprises

Attention : 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

Posté(e)

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. :rolleyes:

;; 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éflexions

A+

(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

Posté(e)

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

Posté(e)
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...

 

Amicalement

Vincent

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)

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é