Aller au contenu

Selection des objets à l\'interieur d\'une polyline


Invité HAYA82

Messages recommandés

Invité HAYA82

Bonsoir,

J'ai voulu utiliser l'une de vos routines et l'adapter à mon besoin

 

La routine de départ permet de selectionner les entités (polylines, cercles...) dans une plolyline qui est définie par selection (pointage)

 

Mon souhait est de la modifierpour quelle puisse seletionner par exemple l'entité (polyline) n d'un filtre de selection , de seletionner les entité dans cette polyline et après exécutet une commande sur ce jeu de selection.

pour à la fin arriver à faire une boucle ou la routine selectionne tous les polylines appartenant à un calqua exp "carroyage" et effacer les entités dans chaqune de ces polylines

 

J'ai essayé de modifier la routine comme c'est présenté ci-après mais j'ai un mesage d'erreur qui m'indique qu'il ya trop d'arguments

 

Pourriez-vous m'aider svp

 

 

 

 

 

(defun SelByObj	(ent opt fltr / obj dist n lst prec dist p_lst ss)
 (vl-load-com)
 (if (= (type ent) 'ENAME)
   (setq obj (vlax-ename->vla-object ent))
   (setq obj ent
  ent (vlax-vla-object->ename ent)
   )
 )
 (cond
   ((member (vla-get-ObjectName obj) '("AcDbCircle" "AcDbEllipse"))
    (setq dist	(/ (vlax-curve-getDistAtParam
	     obj
	     (vlax-curve-getEndParam obj)
	   )
	   50
	)
   n	0
    )
    (repeat 50
      (setq
 lst
  (cons
    (trans
      (vlax-curve-getPointAtDist obj (* dist (setq n (1+ n))))
      0
      1
    )
    lst
  )
      )
    )
   )
   ((and (= (vla-get-ObjectName obj) "AcDbPolyline")
  (= (vla-get-Closed obj) :vlax-true)
  )
    (setq p_lst (vl-remove-if-not
	   '(lambda (x)
	      (or (= (car x) 10)
		  (= (car x) 42)
	      )
	    )
                   (setq ent1 (ssget "X" (list (cons 8 "carroyage") (cons 0 "LWPOLYLINE"))))
                   (setq ent (ssname ent1 0))
	    
	 )
    )
    (while p_lst
      (setq
 lst
  (cons
    (trans (append (cdr (assoc 10 p_lst))
			 (list (cdr (assoc 38 ent)))
		 )
		 ent
		 1
    )
    lst
  )
      )
      (if (/= 0 (cdadr p_lst))
 (progn
   (setq prec (1+ (fix (* 25 (sqrt (abs (cdadr p_lst))))))
	 dist (/ (- (if	(cdaddr p_lst)
		      (vlax-curve-getDistAtPoint
			obj
			(trans (cdaddr p_lst) ent 0)
		      )
		      (vlax-curve-getDistAtParam
			obj
			(vlax-curve-getEndParam obj)
		      )
		    )
		    (vlax-curve-getDistAtPoint
		      obj
		      (trans (cdar p_lst) ent 0)
		    )
		 )
		 prec
	      )
	 n    0
   )
   (repeat (1- prec)
     (setq
       lst (cons
	     (trans
		 (vlax-curve-getPointAtDist
		   obj
		   (+ (vlax-curve-getDistAtPoint
			obj
			(trans (cdar p_lst) ent 0)
		      )
		      (* dist (setq n (1+ n)))
		   )
		 )
		 0
		 1
	       )
	     lst
	   )
     )
   )
 )
      )
      (setq p_lst (cddr p_lst))
    )
   )
 )
 (cond
   (lst
    (vla-ZoomExtents (vlax-get-acad-object))
    (setq ss (ssget (strcat "_" opt) lst fltr))
    (vla-ZoomPrevious (vlax-get-acad-object))
    ss
   )
 )
)



(defun c:ssof (/ ss )
 (and
   (or
     (and
(setq ss (cadr(ssgetfirst) ))
         
(= 1 (sslength ss))
     )
     (and
(sssetfirst nil nil)
(setq ss (ssget	"_:S:E"
		(list
		  '(-4 . "			  '(0 . "CIRCLE")
		  '(-4 . "			  '(0 . "ELLIPSE")
		  '(41 . 0.0)
		  (cons 42 (* 2 pi))
		  '(-4 . "AND>")
		  '(-4 . "			  '(0 . "LWPOLYLINE")
		  '(-4 . "&")
		  '(70 . 1)
		  '(-4 . "AND>")
		  '(-4 . "OR>")
		)
	 )
)
     )
   )
   (sssetfirst
     nil
     (SelByObj (ssname ss 0) "Wp" nil)
   )
 )
 (princ)
 (command "_erase" ss)
) 

[Edité le 9/5/2011 par HAYA82]

 

[Edité le 9/5/2011 par HAYA82]

Lien vers le commentaire
Partager sur d’autres sites

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é