ahbv Posté(e) le 12 septembre 2016 Posté(e) le 12 septembre 2016 Bonjour, j'ai voulu tester un lisp qu'avait proposé patrick35 ici "http://cadxp.com/topic/13905-selection-et-exploser-toutes-les-references-de-bloc/Mon lien" dont je voulais l'utiliser pour selectionner "certains" blocs (j'ai rajouté "el-*,5???_*,*u????" pour ne prendre que cela) et les exploser (en finalité je voudrais aussi puger le plan mais ca je peux le faire manuellement) mais le lisp ne fonctionne pas et je ne sais pas pourquoi étant toujours novice en lisp ??? voici le lisp:---------------(defun c:expb ( / x n) (while (setq n (ssget "_X" '((0 . "INSERT") (2 . "el-*,5???_*,*u????")))) (setq x 0) (repeat (sslength n) (vla-explode (vlax-ename->vla-object (ssname n x))) (vla-delete (vlax-ename->vla-object (ssname n x))) (setq x (+ x 1))) ) (princ) )---------------------------cependant lorsque je l’exécute j'ai ceci: Command: expb Cannot invoke (command) from *error* without prior call to (*push-error-using-command*).Converting (command) calls to (command-s) is recommended.Command: quelqu'un pourrait résoudre ce problème ???Merci infiniment d'avance.AHG
DenisHen Posté(e) le 12 septembre 2016 Posté(e) le 12 septembre 2016 Salut. Je vais peut-être dire une co**erie, mais si tu ajoute (vl-load-com) après la première ligne du LISP ? 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)
ahbv Posté(e) le 12 septembre 2016 Auteur Posté(e) le 12 septembre 2016 Salut. Je vais peut-être dire une co**erie, mais si tu ajoute (vl-load-com) après la première ligne du LISP ? je viens d'essayer mais non, merci pour la réponse. j'ai modifié comme cela(defun c:expb ( / x n) (vl-load-com) (while (setq n (ssget "_X" '((0 . "INSERT") (2 . "el-*,5???_*,*u????"))))
DenisHen Posté(e) le 12 septembre 2016 Posté(e) le 12 septembre 2016 Dommage... C'est curieux qu'il te parle de (command) alors qu'il n'y en a pas... 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)
(gile) Posté(e) le 12 septembre 2016 Posté(e) le 12 septembre 2016 Salut, Je pense que le problème vient de l'utilisation des caractères génériques dans le filtre de sélection.Tu peux utiliser la fonction wcmath dans la console de l'éditeur Visual LISP (ou en ligne commande) pour faire des tests. "el-*" prendra tous les blocs dont le nom commence par "el-" (ou "El-", "eL-", "EL-", contrairement à wcmatch les filtres de sélection sur les noms de blocs, de calque, de styles, etc ne sont pas sensibles à la casse).exemples : "el-", "el-123", "el-abcd", "el-? "5???_*" prendra tous les blocs dont le nom commence par 5 suivi de 3 caractères quelconques et d'un underscore.exemples : "5123_", "5abc_123", "5..._abc" "*u????" prendra tous les blocs dont le nom se termine par "u" (ou "U") suivi de 4 caractères quelconques.exemples : "*U1234", mais aussi : "uabcd", "pataugera", "-----u----" Pour les deux premiers modèles, je ne pourrais dire s'ils sont valides ne connaissant pas les noms des blocs recherché.Mais le dernier semble vouloir récupérer les blocs anonymes dont les "noms" commencent par "*U" suivi de un ou plusieurs chiffres. Comme l'astérisque (*) est un caractère générique, si on recherche précisément ce caractère, il faut le faire précéder de caractère d’échappement pour ces caractères génériques : l'accent grave (Alt Gr + 7) et comme l'astérisque est un caractère réservé à AutoCAD pour les noms de blocs, un nom de bloc commençant par une astérisque est forcément un bloc anonyme On n'a donc pas à s'iquiéter du nombre de caractères après le U. Le modèle couramment utilisé pour filtrer les blocs anonymes issus de blocs dynamiques est :"`*U*" Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
ahbv Posté(e) le 12 septembre 2016 Auteur Posté(e) le 12 septembre 2016 Salut. Je vais peut-être dire une co**erie, mais si tu ajoute (vl-load-com) après la première ligne du LISP ? j'ai redemarré autocad et relancé le lisp et là cela fonctionne donc merci à DENISH et (gile) pour les explications !(quelle commande dois je rajouter pour purger les blocs apres la fin du lisp,svp ?)AHG
(gile) Posté(e) le 12 septembre 2016 Posté(e) le 12 septembre 2016 cependant lorsque je l’exécute j'ai ceci: Command: expb Cannot invoke (command) from *error* without prior call to (*push-error-using-command*).Converting (command) calls to (command-s) is recommended.Command: quelqu'un pourrait résoudre ce problème ???Merci infiniment d'avance.AHG Ce problème semble venir d'une redéfinition de la fonction *error*. Ça vient très certainement d'un autre LISP chargé dans le dessin qui redéfinit *error* (en utilisant la fonction command dans la redéfinition) sans déclarer localement cette redéfinition.Il faut que tu cherches dans les LISP chargés. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
ahbv Posté(e) le 12 septembre 2016 Auteur Posté(e) le 12 septembre 2016 précision:le "*u????" est utiliser pour sélectionner les objets de type "réseau" , je ne sais pas si c'est le code (je ne veux surtout pas exploser les blocs dynamiques).
(gile) Posté(e) le 12 septembre 2016 Posté(e) le 12 septembre 2016 Je ne sais pas ce que sont "les blocs de type réseau", c'est toi qui, connaissant les noms possibles des blocs, qui doit ton construire ton modèle (pattern) le plus précisément possible pour n'écarter aucun bloc que tu veux sélection mais aussi pour être sûr d'écarter ceux que tu ne veux pas. Le modèle "*u????" sélectionnera les blocs dynamiques dont le nom commence par "*U" suivi de 4 chiffres (ex: "*U1234").Pour éviter ça, il faut ajouter un critère pour accepter n'importe quoi devant le "u" sauf le caractère "*" :"*[~`*]u????" Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
ahbv Posté(e) le 12 septembre 2016 Auteur Posté(e) le 12 septembre 2016 Je ne sais pas ce que sont "les blocs de type réseau", c'est toi qui, connaissant les noms possibles des blocs, qui doit ton construire ton modèle (pattern) le plus précisément possible pour n'écarter aucun bloc que tu veux sélection mais aussi pour être sûr d'écarter ceux que tu ne veux pas. Le modèle "*u????" sélectionnera les blocs dynamiques dont le nom commence par "*U" suivi de 4 chiffres (ex: "*U1234").Pour éviter ça, il faut ajouter un critère pour accepter n'importe quoi devant le "u" sauf le caractère "*" :"*[~`*]u????" la commande "RESEAU (ou ARRAY)" permet de crée une copie paramétrable en x,y,z de l'objet et donc l'identification (ou le nom) du "réseau" est *U123 (par exemple) l'info lambda de l'entité donne ceci(-1 . <Entity name: 7ffff78aa10>) (0 . "INSERT") (5 . "6E241") (102 . "{ACAD_REACTORS") (330 . <Entity name: 7ffff78aac0>) (102 . "}") (330 . <Entity name: 7ffff7039f0>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbBlockReference") (2 . "*U238") (10 28789.0 37936.3 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0) donc pour pouvoir sélectionner automatiquement les blocs (ou entités) provenant de la commande reseau je selectionne ceci "(2 . "*U???"), par contre si il existe une autre méthode plus sûr et fiable je suis partant..
Patrick_35 Posté(e) le 12 septembre 2016 Posté(e) le 12 septembre 2016 Le modèle "*u????" sélectionnera les blocs dynamiques dont le nom commence par "*U" suivi de 4 chiffres (ex: "*U1234").Salut (gile) Je pense que pour sélectionner des blocs anonymes type "*U....", j'utiliserai le quote inversé devant l'astérix, sinon cela indique tous les blocs se finissant par "U...." @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
ahbv Posté(e) le 12 septembre 2016 Auteur Posté(e) le 12 septembre 2016 juste encore pour info, la commande qselect (je suis sur un autocad 2015 Anglais) permet de trouver/selectionner les ARRAY (reseau en fr) mais pas la commande filter (filtre) qui elle donne un nom de bloc "*Uxxx" après selection de l'objet , vraiment bizarre !!! (donc il doit bien exister un moyen de ne selectionner que les "array" indépendamment des blocs dynamiques (qui ont 2 noms un principal et un anonyme) mais comment ???
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