Aller au contenu

liste d\'entité sur autocad 2005


Messages recommandés

Posté(e)

 

Bonjour

 

J'ai un souci sérieux. Je suis à la recherche d'une manip un truc pour faire une liste de toutes mes entités ( blocs ligne polyligne ....) par calque. une sorte de tableau m'indiquant que dans tel calque j'ai x blocs y ligne z texte.......

Quelqu'un aurais t'il une solution en lisp vbs ou autre ?

Cette fonction existé dans automap de pcvision ( listing entity) en arx mais elle n'existe plus ailleurs, du moins je la cherche. auriez vouz une idée.

Merci de votre aide.

 

Bon Week end de pâques.

Posté(e)

Salut,

 

Un premier jet pour enregistrer dans un fichier Excel, liste toutes les entités présentes dans le dessin et seulement elles.

 

Nouvelle version

 

(defun c:ListByLayer (/ ss n typ e_lst descr lay name file)
 (setq ss (ssget "_x"))
 (cond
   (ss
    (repeat (setq n (sslength ss))
      (if (not
     (member
       (setq
	 typ
	  (cdr (assoc 0 (entget (ssname ss (setq n (1- n))))))
       )
       e_lst
     )
   )
 (setq e_lst (cons typ e_lst))
      )
    )
    (setq e_lst (vl-sort e_lst '	   descr (apply	'strcat
		(cons "LAYER\t"
		      (mapcar '(lambda (x) (strcat x "\t")) e_lst)
		)
	 )
   lay	 (tblnext "LAYER" T)
    )
    (while lay
      (setq name  (cdr (assoc 2 lay))
     descr (strcat
	     descr
	     "\n"
	     name
	     "\t"
	     (apply
	       'strcat
	       (mapcar
		 '(lambda (x / ss)
		    (strcat
		      (if (setq
			    ss
			     (ssget "_X"
				    (list (cons 0 x) (cons 8 name))
			     )
			  )
			(itoa (sslength ss))
			"0"
		      )
		      "\t"
		    )
		  )
		 e_lst
	       )
	     )
	   )
      )
      (setq lay (tblnext "LAYER"))
    )
    (setq
      file
(open
  (getfiled "Créez ou sélectionnez un fichier" "" "xls" 1)
  "w"
)
    )
    (princ descr file)
    (close file)
   )
   (T (alert "Aucune entité dans le dessin !"))
 )
 (princ)
)

 

[Edité le 15/4/2006 par (gile)]

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

Posté(e)

Un autre ecrit rapidement. (à completer pour écrire le résultat dans un fichier)

 

((lambda ( / layer list_layers js n lst_ents typ_ent cmpt)
(setq layer (tblnext "layer" t)  cmpt 0)
(while layer
	(if (zerop (boole 1 16 (cdr (assoc 70 layer))))
	     (setq list_layers (cons (cdr (assoc 2 layer)) list_layers))
	)
	(setq layer (tblnext "layer"))
)
(cond
	(list_layers
		(textscr)
		(foreach e list_layers
			(setq js (ssget "_X" (list (cons 8 e))))
			(setq n -1 lst_ents '())
			(cond
				(js
					(repeat (sslength js)
						(setq typ_ent (cdr (assoc 0 (entget (ssname js (setq n (1+ n)))))))
						(if (not (member typ_ent lst_ents))
							(setq lst_ents (cons typ_ent lst_ents))
						)
					)
					(if lst_ents
						(progn
							(print (strcat "Le calque " e " contient: "))
							(setq cmpt (1+ cmpt))
							(foreach x lst_ents
								(if (>= cmpt 32)
									(progn
										(princ "\n<-- Tapez une touche pour la suite -->")
										(grread)
										(setq cmpt 0)
									)
									(setq cmpt (1+ cmpt))
								)
								(princ "\n\t\t")
								(princ (itoa (sslength (ssget "_X" (list (cons 0 x) (cons 8 e))))))
								(princ " ")
								(princ x)
							)
						)
					)
				)
			)
		)
	)
)
(prin1)
))

 

[Edité le 15/4/2006 par bonuscad]

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

bien (gile) ta nouvelle version ;) Plus fiable.

 

Par contre le temps de traitement peut finir par nous interroger :(

Un simple sablier serait le bienvenu.

 

Pour le temps de traitement j'ai essayé d'améliorer la mienne car je trouvais idiot de faire 2 fois un balayage de sélection.

 

Donc j'ai remplacé:

(if (not (member typ_ent lst_ents))

(setq lst_ents (cons typ_ent lst_ents))

)

 

par

(if (not (member typ_ent lst_ents))

(progn

(setq lst_ents (cons typ_ent lst_ents))

(eval (read (strcat "(setq nbr_" typ_ent " (cons 1 typ_ent))")))

)

(eval (read (strcat "(setq nbr_" typ_ent " (cons (1+ (car nbr_" typ_ent ")) typ_ent))")))

)

 

et:

(princ (itoa (sslength (ssget "_X" (list (cons 0 x) (cons 8 e))))))

 

par:

(princ (itoa (eval (read (strcat "(car nbr_" x ")")))))

 

Mais j'ai pas constaté une réelle amélioration, a part que j'ai fais un bon execice sur l'attribution de variable avec (eval) :mad:

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Merci,

 

Interéssant les attributions de variables.

 

Dans le même genre, on peut écrire :

 

(setq x (read (strcat "nbr_" typ_ent)))
(if (not (member typ_ent lst_ents))
 (progn
   (setq lst_ents (cons typ_ent lst_ents))
   (set x (cons 1 typ_ent))
 )
 (set x (cons (1+ (car (eval x))) typ_ent))
) 

 

À la place de :

 

(if (not (member typ_ent lst_ents))
(progn
(setq lst_ents (cons typ_ent lst_ents))
(eval (read (strcat "(setq nbr_" typ_ent " (cons 1 typ_ent))")))
)
(eval (read (strcat "(setq nbr_" typ_ent " (cons (1+ (car nbr_" typ_ent ")) typ_ent))")))
) 

 

Salut, et bonnes vacances, pour moi en tout cas ;)

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

Posté(e)

Il m'est venu une illumination, sur la route des vacances.

Plutot que les attributions de variables, une liste associative :

 

(("LINE" . 6) ("POINT" . 5) ...)

 

(if (setq nbr (assoc typ_ent lst_ent))
(setq lst_ent (subst (cons typ_ent (1+ (cdr nbr))) nbr lst_ent))
(setq lst_ent (cons (cons typ_ent 1) lst_ent))
) 

 

et ensuite :

 

(itoa (cdr (assoc typ_ent lst_ent)))

 

C'est fait en aveugle, a verifier.

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

Posté(e)

Merci :) mais je suis un peu perdu, :(

 

C'est bien du lisp. quand je le copie dans un fichier lsp vide, rien ne se passe. ( sur acadmap2005, Il faut taper quoi, dans l'invite de commande, Please? ( pas doué en lisp le benj90)

La deuxieme marche mais écrit tous à la suite. dur dur :casstet:

 

:angel:

Je suis un peu perdu, en fin de compte j'écris quoi dans mon fichier lisp? ( je ne suis vraimant pas doué désolé).:yltype:

 

Merci d'avance de me donner un petit coup de pouce.

'Le Benj 90 est un peu perdu, snif snif'

:(

Posté(e)

Salut,

 

Pour le premier LISP (qui copie tout dans un tableau Excel) apres avoir copier/coller le code dans le bloc note, tu l'enregistres sous le nom que tu veux avec l'extension .lsp, puis tu le charges dansAutoCAD et tu tapes listbylayer sur la ligne de commande, c'est ce qui est ecrit apres le (defunc: au debut du code.

 

Pour le code de Bonuscad qui s'execute automatiquement (c'est une fonction lambda et pas un defun donc il suffit de copier/coller le code sur la ligne de commande) si tu veux relire tranquilement, tape F2 apres l'execution.

 

Dans le dialogue suivant entre Bonus et moi il est surtout une question de "style".

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

Posté(e)

Dans le dialogue suivant entre Bonus et moi il est surtout une question de "style".

 

Au fait ton style "illuminé" fonctionne bien. Il est surtout beaucoup plus concis et lisible. ;)

 

Le pire c"est que j'y avais pensé à ce genre de liste, mais j'ai du m'embrouiller avec ma méthode, je voulais utiliser (assoc) d'une autre façon :mad:

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

:D Merci

mais la premiere est génial c'est juste ce qu'il ma fallait.

Grand merci à vous deux, Je vais essayer de me mettre au lisp c'est géant ce que l'on peux faire avec.

 

Encore Merci :)

 

PS : Connaissez vous des sites interessants car je suis un peu perdu entre lisp ARX et dcl voir même ASP. Pour commencer à étudier c'est dur quand on est un peu perdu entre c'est différent type de programmation.

 

Merci Beaucoup @+

Un benj 90 tout content. :yltype:

 

 

 

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é