Bonjour à tous.
J'ai créé vite fait une simple routine qui marche correctement que vous pourriez tester dans le .DWG en PJ.
J'ai appliqué la fonction (command "_erase" ....) mais le problème c'est que dans l'historique des commande il y a ça (cf. image ci-dessous).
J'ai essayé la fonction ENTDEL mais qui ne fonctionne pas très bien (je ne le maitrise pas correctement).
J'ai aussi essayé de mettre la variable "INPUTHISTORYMODE" à 0 mais ça marche pas.
Est-ce que quelqu'un pourrait m'aider à résoudre e problème, SVP????
Voici la routine en question.
(defun c:SUPPTPDOUB
(/ ss ss2 idx idx2 n x elm1 elm2 enx enx2 enxpt enxpt2 sub)
(setq ss (ssget '((0 . "INSERT") (8 . "Point"))))
(setq idx (sslength ss))
(setq n 0)
(setq ss2 (ssget '((0 . "INSERT") (8 . "Point_CACHE"))))
(setq idx2 (sslength ss2))
(while (< n idx)
(setq elm1 (ssname ss n))
(setq enx (entget elm1))
(setq enxpt (rtos (car (cdr (assoc 10 enx))) 2 4))
(setq x 0)
(while (< x idx2)
(setq elm2 (ssname ss2 x))
(setq enx2 (entget elm2))
(setq enxpt2 (rtos (car (cdr (assoc 10 enx2))) 2 4))
(if (= enxpt2 enxpt)
(setq listdel (cons elm2 listdel))
)
(setq x (+ 1 x))
)
(setq n (+ 1 n))
)
(foreach sub listdel
(command "_erase"sub "")
)
)
Merci bcp 🙂 🙂 🙂
Résolu ! Accéder à la solution.
Résolu par Luna1. Accéder à la solution.
Résolu par CADaSchtroumpf. Accéder à la solution.
Bonjour,
Et avec le code écrit sous cette forme, le problème disparaît-il?
Je préfère la fonction (equal) avec un fuzz que de comparer seulement le X du point sous forme de chaîne, cela peut se révéler insuffisant ou effectuer un effacement incorrect.
(defun c:SUPPTPDOUB ( / ss ss2 n lst_pt en pt)
(setq ss (ssget "_X" '((0 . "INSERT") (8 . "Point"))))
(setq ss2 (ssget "_X" '((0 . "INSERT") (8 . "Point_CACHE"))))
(cond
((and ss ss2)
(repeat (setq n (sslength ss))
(setq lst_pt (cons (cdr (assoc 10 (entget (ssname ss (setq n (1- n)))))) lst_pt))
)
(repeat (setq n (sslength ss2))
(setq en (ssname ss2 (setq n (1- n))))
(setq pt (cdr (assoc 10 (entget en))))
(mapcar '(lambda (x) (if (equal x pt 1E-04) (entdel en))) lst_pt)
)
)
)
(prin1)
)
Coucou,
Bien que cela n'agisse pas sur l'historique de la commande ANNULER, il existe la variable CMDECHO (attention il est toujours préférable de définir une fonction de gestion d'erreur pour ramener cette variable à sa valeur initiale !) que l'on peut désactiver pour limiter les retours dans l'historique développé des commandes (F2).
En clair, dans ton cas cela permet de supprimer les messages du genre
Commande: _erase
Sélectionner des objets: 1 trouvé(s)
Sélectionner des objets:
Une autre solution alternative de celle proposée par @CADaSchtroumpf serait d'utiliser la commande _ERASE uniquement à la toute fin en lui spécifiant un jeu de sélection, et non une entité 😉
Autrement dit, au lieu de construire une liste avec les entités à supprimer, il faut construire un 3ème jeu de sélection (ou bien vider le 2nd jeu de sélection si la condition n'est pas vérifiée) et passer ce jeu de sélection en argument à la commande _ERASE. Ainsi l'(expression LISP) interviendra une seule fois et non N fois.
Mais évidemment c'est plus propre lorsque l'on peut s'épargner les utilisations de (command), c'est uniquement à but informatif !
Bisous,
Luna
Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.