Aller au contenu

Selection Similaire cde ou Lisp?


Messages recommandés

Posté(e)

Bonjour à toutes et à tous

 

Je cherche une commande pour effectuer une selection similaire d'un bloc dans un dessin.

Je sais que cette commande existe sur les version MAP mais je ne la possède pas.

 

Quelqu'un aurait il une commande ou un lisp que je puisse utiliser;

 

merci pour vos réponses

 

 

Allez Salut les P'tits Gars

Posté(e)

Bonjour,

 

Tu peux sans doute t'en tirer avec la commande "Sélection rapide".

 

Sinon voici un lisp que j'ai trouvé sur le net :

 

;|
Select Similar
(based on a command found in a few versions of AutoCAD-based products)
written by Adam Wuellner 
all rights released

Edited by Marc Scherer for www.cad.de
Changes: The selsim command now identifies the "Simliar" Objects not only by
 the Entity-Type and Layername.
 The Identification is based on the resulting entget-list from the
 Sub-Function "FILTER-DXFCODES".
 This Function first removes all DXF-Codes which Datatypes are not
 String or Real (f.e. Layernames, Textstyles, Hatchnames, Textheights...)
 Then it removes all DXF-Codes that are defined in the second Argument of
 the member function within. Feel free to change this List for your own purposes.
 You can find this List if you search this code for the Text:
 "Here is the List of DXF-Codes that have to be removed"
|;
(defun C:SELSIM	(/ SS1 I ENT FILTER_LIST TYPE-LAYER FILTER SSTEMP)
 (defun SS:UNION (SS1 SS2 / ENAME SS-SMALLER SS-LARGER C)
   (cond ((and SS1 SS2)
   (setq C 0)
   (if (< (sslength SS1) (sslength SS2))
     (setq SS-SMALLER
	    SS1
	   SS-LARGER SS2
     )
     (setq SS-LARGER SS1
	   SS-SMALLER
	    SS2
     )
   )
   (while (< C (sslength SS-SMALLER))
     (setq ENAME (ssname SS-SMALLER C)
	   C	 (1+ C)
     )
     (if (not (ssmemb ENAME SS-LARGER))
       (ssadd ENAME SS-LARGER)
     )
   )
   SS-LARGER
  )
  (SS1 SS1)
  (SS2 SS2)
  (t NIL)
   )
 )
 (defun FILTER-DXFCODES (LST-ENTGETDATA /)
   ;; At first remove all DXF-Codes which Datatypes are not String or Real
   (if	(setq LST-ENTGETDATA
       (vl-remove-if-not
	 '(lambda (X)
	    (setq OBJTYPE (type (cdr X)))
	    (or (= OBJTYPE 'STR) (= OBJTYPE 'REAL))
	  )
	 LST-ENTGETDATA
       )
)
     ;; Then remove all DXF-Code that are defined in the second Argument of
     ;; the member function. Feel free to change this List for your own purposes.
     (setq LST-ENTGETDATA
     (vl-remove-if
       '(lambda	(X)
	  (member
	    (car X)
	    ;; Here is the List of DXF-Codes that have to be removed
	    '(1	   	3    5	  40   41   42	 43   44   45
	      46   49	50   51	  52   53   54	 100  102  300
	      410  460	461  462  470
	     )
	  )
	)
       LST-ENTGETDATA
     )
     )
   )
   LST-ENTGETDATA
 )
 (if (not (setq SS1 (cadr (ssgetfirst))))
   (setq SS1 (ssget))
 )
 (setq	I 0
FILTER_LIST
 '()
 )
 (if SS1
   (progn
     (repeat (sslength SS1)
(setq ENT (FILTER-DXFCODES (entget (ssname SS1 I)))
      I	  (1+ I)
)
(setq TYPE-LAYER ENT)
(if (not (member TYPE-LAYER FILTER_LIST))
  (setq FILTER_LIST (cons TYPE-LAYER FILTER_LIST))
)
     )
     (foreach FILTER FILTER_LIST
(setq SSTEMP (ssget "X" FILTER))
(setq SS1    (SS:UNION SS1 SSTEMP)
      SSTEMP NIL
)
     )
     (princ (strcat "\nFilter: "
	     (vl-prin1-to-string FILTER_LIST)
     )
     )
     (sssetfirst NIL SS1)
     (princ (strcat "\n>"
	     (itoa (sslength SS1))
	     "< similar Objects selected!"
     )
     )
   )
   (princ "\nNo Filter Objects selected!")
 )
 (princ)
)
(princ)

La commande à utiliser est SELSIM.

On peut choisir dans le code LISP les codes DXF à filtrer.

J'ai déjà retiré le code 2 qui correspond au nom, de façon à ce que seuls les blocs du même nom et sur le même calque soient sélectionnés.

 

 

 

 

[Edité le 9/11/2010 par bryce]

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é