Aller au contenu

Quantifier des blocs dans un espace délimité par une polyligne


Messages recommandés

Posté(e)

Bonjour à tous,

actuellement pour quantifier mes blocs je me sert de l’outil « Extraction d’attributs » (eattext) ce qui me donne aussi la possibilité de différencier des blocs à l’apparence identique mais destiné à un usage différent, au moyen d’un ou plusieurs attributs de ces blocs.

Ce que je voudrais pouvoir faire c’est : délimiter la zone de comptage par une polyligne fer-mée (seule possibilité qui n’est pas offerte par l’outil « Extraction d’attributs »).

 

Est-ce que quelqu’un connaît la solution à mon problème ?

Je suis ouvert à tout même si cela implique de changer d’outils de comptage…

 

Merci d’avance à toutes les bonnes volontés.

 

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

Salut Patrick_35,

Je sais je suis impardonnable et pourtant je te jure j’ai cherché avant de poser la question mais je suis impardonnable quand même…bon passons. :red:

Merci pour ta réponse rapide mais j’ai quand même 2 petites questions :

- Quelle est la différence entre ton lisp CTT.LSP et ton lisp LSTBLT.LSP (je les ai chargés tous les deux dans AutoCAD)

- A quel moment CTT.LSP (ou LSTBLT.LSP ?) me propose de faire une sélection par polyli-gne ?

Merci d’avance de ton aide.

 

[Edité le 14/3/2007 par salvanorigatore]

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

LSTBL fait un décompte sur tout le dessin alors que CT permet une sélection et ne fait le décompte que dans cette sélection (comme pour bcount des express)

Tu ne choisis pas une polyligne, mais tu peux lors de la sélection, utiliser le paramètre sp ou cp.

 

Je sais je suis impardonnable

Non, la recherche n'est pas toujours évidente

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Ok Patrick_35,

C’est impeccable. ;)

Laisse-moi seulement te faire quelques petites demandes (qui ne demande rien n'a rien, disait mon grand père, ou quelqu'un d’autre ...) :

- Serait il possible de choisir un polygone ou une polyligne déjà existants dans le dessin plutôt que d’en créer une ?

- Pour l’export sur Excel y-t-il mieux que « copier-coller » ?

- Y-t-il moyen de faire la différence entre les blocs grâce aux attributs comme dans l’outils « Extraction d’attributs » (eattext) ?

 

(en fait « Extraction d’attributs » (eattext) serait parfait s’il donnait la possibilité de délimiter la zone de comptage, dommage… ):mad:

 

Voilà c’est tout (et c’est déjà pas mal) !

Salut.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

Salut,

 

Un petit LISP fait avec la routine SelByObj (fonctionne avec les polylignes fermées les cercles et ellipses).

 

(defun c:test (/ obj ss n bl nom lst)
 (if (setq
obj (car
      (entsel "\nSélectionnz l'objet délimitant la sélection: ")
    )
     )
   (if	(member	(cdr (assoc 0 (entget obj)))
	'("CIRCLE" "ELLIPSE" "LWPOLYLINE")
)
     (if (setq ss (SelByObj obj "WP" '((0 . "INSERT"))))
(progn
  (setq n (sslength ss))
  (princ (strcat "\n\t" (itoa n) " blocs dans la sélection :"))
  (repeat n
    (setq bl  (vlax-ename->vla-object (ssname ss (setq n (1- n))))
	  nom (if (vlax-property-available-p bl 'EffectiveName)
		(vla-get-EffectiveName bl)
		(vla-get-Name bl)
	      )
	  lst (if (assoc nom lst)
		(subst (cons nom (1+ (cdr (assoc nom lst))))
		       (assoc nom lst)
		       lst
		)
		(cons (cons nom 1) lst)
	      )
    )
  )
  (mapcar '(lambda (x)
	     (princ (strcat "\n- \"" (car x) "\" : " (itoa (cdr x))))
	   )
	  lst
  )
  (textscr)
)
(princ "\nAucun Bloc dans la sélection.")
     )
     (princ "\nEntité non valide.")
   )
   (princ "\naucune entité sélectionnée.")
 )
 (princ)
)

;;; SelByObj -Gilles Chanteau- 06/10/06
;;; Crée un jeu de sélection avec tous les objets contenus ou 
;;; capturés, dans la vue courante, par l'objet sélectionné
;;; (cercle, ellipse, polyligne fermée).
;;; Arguments :
;;; - un nom d'entité (ename) 
;;; - un mode de sélection (Cp ou Wp)
;;; - un filtre de sélection ou nil

(defun SelByObj	(ent opt fltr / obj dist n lst prec dist p_lst)
 (vl-load-com)
 (setq obj (vlax-ename->vla-object ent))
 (cond
   ((member (cdr (assoc 0 (entget ent))) '("CIRCLE" "ELLIPSE"))
    (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
  )
      )
    )
   )
   (T
    (setq p_lst (vl-remove-if-not
	   '(lambda (x)
	      (or (= (car x) 10)
		  (= (car x) 42)
	      )
	    )
	   (entget ent)
	 )
    )
    (while p_lst
      (setq
 lst (append
       lst
       (list (trans (append (cdr (assoc 10 p_lst))
			    (list (cdr (assoc 38 (entget ent))))
		    )
		    ent
		    1
	     )
       )
     )
      )
      (if (/= 0 (cdadr p_lst))
 (progn
   (setq prec (1+ (fix (* 50 (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 (append
	     lst
	     (list
	       (trans
		 (vlax-curve-getPointAtDist
		   obj
		   (+ (vlax-curve-getDistAtPoint
			obj
			(trans (cdar p_lst) ent 0)
		      )
		      (* dist (setq n (1+ n)))
		   )
		 )
		 0
		 1
	       )
	     )
	   )
     )
   )
 )
      )
      (setq p_lst (cddr p_lst))
    )
   )
 )
 (ssget (strcat "_" opt) lst fltr)
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour à vous,

Non, je n’avais pas oublié…

Tout d’abord un grand bravo et merci à (gile) : ton lisp fonctionne très bien, c’est bien sympa de ta part.

Maintenant je m’adresse à Patrick_35 : pourquoi tu ne mettrais pas ce lisp parmi les tiens (Lisps de Patrick_35) ?

Si tu décide de le mettre à mon avis l’idéal serait de fondre les 2 lisps, le tien et celui de (gile) avec la possibilité de choisir soit de sélectionner une polyligne existante soit de tracer un polygone (peut un créant une petite boite de dialogue comme tu sais si bien les faire…)

Et si possible prévoir un moyen d’exporter sur Excel (autre que « copier-coller »).

Enfin voilà c’était juste une suggestion mais je pense que ce serait utile à pal mal de gens…

En tout cas merci pour ce que tu à déjà fait.

Bonne fin de journée à tous.

 

[Edité le 21/3/2007 par salvanorigatore]

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

Salut

Et pourquoi pas la rubrique les Lisps de (gile) :D

Li'idée est intéressante, mais je n'ai actuellement pas le temps pour l'instant.

Si quelqu'un veux bien prendre le flambeau (Bred, Gile ou bien sur quelqu'un d'autres ?)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Bonjour,

je ne suis pas contre … :D

toc, toc, (gile) est-tu là ?

Est-ce que tu peux faire quelque chose ? :o

Si oui merci d’avance, sinon merci quand même.

Toutefois si d’autres peuvent et veulent s’impliquer aussi surtout n’hésitez pas !

Merci à toutes les bonnes volontés. :yltype:

Bonne journée à tous.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

J'ai modifié Le LISP ci-dessus pour permettre, soit une sélection "normale" (fenêtre ou polygone en tapant "sp" ou "cp"), soit une sélection à l'aide d'un objet (taper "Entrée" "Espace" ou faire clic droit pour accéder à la sélection par objet).

 

Il est proposé d'enregitrer les résultats dans un fichier Excel.

 

Nota : la routine "SelbyObj" doit être chargée.

 

(defun c:cnt-blk (/ obj ss n bl nom lst str file)
 (vl-load-com)
 (prompt "\nSélectionnez les blocs ou : ")
 (if (not (setq ss (ssget '((0 . "INSERT")))))
   (if
     (setq
obj
 (car
   (entsel "\nSélectionnz l'objet délimitant la sélection: ")
 )
     )
      (if (member (cdr (assoc 0 (entget obj)))
	   '("CIRCLE" "ELLIPSE" "LWPOLYLINE")
   )
 (setq ss (SelByObj obj "WP" '((0 . "INSERT"))))
 (princ "\nEntité non valide.")
      )
      (princ "\nAucune entité sélectionnée.")
   )
 )
 (if ss
   (progn
     (setq n (sslength ss))
     (setq str	(strcat "\n" (itoa n) " blocs dans la sélection\n")
     )
     (repeat n
(setq bl  (vlax-ename->vla-object (ssname ss (setq n (1- n))))
      nom (if (vlax-property-available-p bl 'EffectiveName)
	    (vla-get-EffectiveName bl)
	    (vla-get-Name bl)
	  )
      lst (if (assoc nom lst)
	    (subst (cons nom (1+ (cdr (assoc nom lst))))
		   (assoc nom lst)
		   lst
	    )
	    (cons (cons nom 1) lst)
	  )
)
     )
     (setq str
     (apply 'strcat
	    (cons str
		  (mapcar
		    '(lambda (x)
		       (strcat (car x)
			       "\t"
			       (itoa (cdr x))
			       "\n"
		       )
		     )
		    lst
		  )
	    )
     )
     )
     (textscr)
     (princ str)
     (initget "Oui Non")
     (if
(= (getkword
     "\nEnregistrer dans un fichier ? [Oui/Non] : "
   )
   "Oui"
)
 (progn
   (setq
     file
      (open
	(getfiled "Créez ou sélectionnez un fichier"
		  ""
		  "xls"
		  1
	)
	"a"
      )
   )
   (princ str file)
   (close file)
 )
     )
     (graphscr)
   )
   (princ "\nAucune entité sélectionnée.")
 )
 (princ)
) 

 

[Edité le 25/3/2007 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour,

Merci beaucoup (gile) c’est exactement ce que je voulais obtenir. :D

C’est très sympa de ta part de m’avoir donné un coup de main (merci quand même aussi à Pa-trick_35).

Maintenant je voudrais aller plus loin mais je crois que pour ça il est préférable que je crée un nouveau sujet, donc je t’invite (et les autres aussi) à lire mon nouveau sujet et si possible à y apporter ta contribution.

Merci encore et merci d’avance.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

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é