Sélection 2 points et suppression

Paolo -  
Matt 666 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Dans autocad, je souhaite faire en lisp une sélection du point (x=172,y=273) au point (x=273,y=47.5) et supprimer tout ce qui aura été sélectionné.

(defun c:test(/ ss)
(setq ss (ssget "F" '(172 273) '(203 47)))
(command ".erase" ss "" "")
)
Mais le retour est
Commande: TEST
; erreur: liste de points incorrecte

Pourriez vous m'aider ?
Merci
A voir également:

2 réponses

Yoda
 
Bonjour,

Pour sélectionner des objets dans une fenêtre
(setq ss (ssget "_W" '(172 273) '(203 47)))

Pour effacer une sélection d'objets
(command "_erase" ss "")

Cordialement
0
Matt 666 Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
 
Salut, je déterre un peu, mais si jamais qqn se pose la question, voici la réponse :
Il faut utiliser le mode "C" dans la commande SSGET pour sélectionner tous les objets traversés par la ligne entre deux points.
Essayez ceci en donnant deux points à l'écran :
(sssetfirst nil (ssget "C" (getpoint "\nPt1 : ")(getpoint "\nPt2 : ")))

Ensuite on peut soit passer par la commande autocad comme tu l'as fait Paolo, ou bien le faire en lisp. Voici un petit bout de code pour faire tout ça en lisp :
;; Supprime toute entité traversant 2 points utilisateur
(defun c:2psup (/ p1 p2 sel cmdecho n)
	(if (and
			(setq p1 (getpoint "\n1er point : "))
			(setq p2 (getpoint p1 "\n2eme point : "))
			(setq sel (ssget "C" p1 p2))
		)
		(progn
			(setq cmdecho (getvar "cmdecho"))
			(setvar "cmdecho" 0);ne pas voir les commandes acad
			(command "_.UNDO" "_Begin")
			(repeat (setq n (sslength sel))
				(entdel (ssname sel (setq n (1- n))))
			)
			(redraw)
			(command "_.UNDO" "_End")
			(setvar "cmdecho" cmdecho)
		);progn	
	);if
	(princ)
)
0