Sélection 2 points et suppression

Fermé
Paolo - 27 mai 2015 à 09:08
Matt 666 Messages postés 38 Date d'inscription jeudi 7 mars 2013 Statut Membre Dernière intervention 28 octobre 2020 - 5 mars 2016 à 11:49
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

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 jeudi 7 mars 2013 Statut Membre Dernière intervention 28 octobre 2020
5 mars 2016 à 11:49
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