Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous.

 

Voilà, aujourd'hui, je cherche à savoir si un calque contenant "ASS" existe.

 

J'ai donc un (tblsearch mais je ne peut pas y mettre des caractères génériques. comme ceci :

(tblsearch "layer" "*ASS*")

Qui me donne comme réponse nil, ce qui est normal puisqu’il n’existe pas de calque nommé "*ASS*"...

 

Si quelqu'un a une astuce, un conseil... Je suis preneur...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Salut,

 

Il faut utiliser wcmatch (avec strcase pour que la recherche ne soit pas sensible à la casse) dans une boucle avec tblnext.

 

(defun tblmatch (table pattern / rec lst)
 (setq pattern (strcase pattern))
 (while (setq rec (tblnext table (not rec)))
   (if (wcmatch (strcase (cdr (assoc 2 rec))) pattern)
     (setq lst (cons rec lst))
   )
 )
 (reverse lst)
)

 

(tblmatch "layer" "*ASS*")

retourne la liste de tous les calques dont le nom correspond au modèle ("*ASS*).

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut Patrick_35, et merci pour ton aide.

 

J'avoue ne jamais avoir utilisé wcmatch... Et l'aide est très "light"... Je tente de faire quelques tests mais rien de probant...

(defun c:DHWcMatch ()
 ;;Teste pour chercher un calques avec caractères génériques
 (if (/= (wcmatch LAYER "*ASS*") nil)
   (princ "\nCalque trouvé")
   (princ "\nCalque non trouvé")
 ) ;_ Fin de if
)

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)
(if (/= (wcmatch LAYER "*ASS*") nil) ...)

Traduit en français, ça donne : "si la correspondance entre LAYER et "*ASS*" n'est pas fausse ...".

L'usage de la double négation peut être vu comme un effet de style en littérature, mais en programmation, on évite.

On préfère dire plus simplement "si la correspondance entre LAYER et "*ASS*" est vraie ...", ce qui se traduit simplement par :

(if (wcmatch LAYER "*ASS*") ...)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut (gile) et merci de m'aider...

 

C'est exactement ce que je cherchais... Mais j'étais à mille lieux de la solution...

 

Oui, la double négation est un peu "capilotractée"... ;)

 

Effectivement, la routine de (gile) est encore "complexe" pour mon piètre niveau... Mais elle m'en apprend tout de même...

 

Encore merci à vous deux...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Salut Patrick_35, et merci pour ton aide.

 

J'avoue ne jamais avoir utilisé wcmatch... Et l'aide est très "light"... Je tente de faire quelques tests mais rien de probant...

(defun c:DHWcMatch ()
 ;;Teste pour chercher un calques avec caractères génériques
 (if (/= (wcmatch LAYER "*ASS*") nil)
   (princ "\nCalque trouvé")
   (princ "\nCalque non trouvé")
 ) ;_ Fin de if
)

 

Juste un petit conseil.

Quand tu essayes de comprendre une fonction en faisant des tests (ce qui est une très bonne méthode), tu n'as pas besoin de définir une nouvelle fonction/commande.

Utilise simplement la console de l'éditeur avec de simples expressions qui appellent la fonction à tester :

(wcmatch "DenisH" "*ni*")

Ton code utilise une variable globale (LAYER) dont on ne sait rien, c'est ça qui rend les tests peu probants...

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Si je décompose la routine de (gile)

 

(tblnext "layer" T) --> Trouver le 1er calque

(tblnext "layer") --> Calque suivant

(tblnext "layer") --> Calque suivant

(tblnext "layer") --> Calque suivant

...

(tblnext "layer") --> Calque suivant

(tblnext "layer") --> nil --> Plus de calques

 

 

Ensuite, un (tblnext "layer" T) retourne par exemple ((0 . "LAYER") (2 . "0") (70 . 0) (62 . 7) (6 . "Continuous"))

Reste à exploiter le code dxf 2 avec wcmatch et à mettre le tout dans une boucle.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Merci à vous deux pour toutes ces précisions...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é