CadXP: NOMBRE D'ENTITE DANS UN BLOC - CadXP

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

NOMBRE D'ENTITE DANS UN BLOC

#1 L'utilisateur est hors-ligne   PHILPHIL 

  • ceinture noire 2em dan
  • Groupe : Membres
  • Messages : 1 074
  • Inscrit(e) : 24-janvier 06
  • LocationNANTES

Posté 27 novembre 2020 - 10:58

bonjour

je rencontre un souci, je n'arrive plus a mettre en XREF ou bloc des fichiers *.dwg
issus de fichier REVIT ou ARCHICAD ... AVEZ VOUS LE MEME SOUCI ?

soit trop de blocs internes, ou noms trop longs ?

avec des fichiers *.dwg récupérés a base de fichier REVIT ou ARCHICAD
on se retrouve avec des blocs par milliers qui sont UNIQUES
et possedant tres peu d’entités ( ligne, polyligne, cercle, arc ... ) dedans
je cherche un bout de Lisp me permettant de calculer combien il y a d’entités dans un bloc.
et si suivant un nombre que j'aurais decide si je l'explose ou le deplace a x unites pour vérifier.

comment calculer le nombre d'entites dans un bloc.
chercher tous les cercles, puis les arcs, puis les lignes ... et additionner ?

merci, a+, Phil
Autodesk Architecture 2019 sous windows 10 64
24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
0

#2 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 9 447
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42) Forez

Posté 27 novembre 2020 - 11:46

Hello

Voici une routine VLisp "Cnt_Into_Blk" (06/2016) du REGRETTE Patrick_35
qui te donne TOUTES les Entites dans TOUS les Blocs du DWG ...

SVP si qq'un pouvait la modifier pour avoir une selection classique AutoCAD
et non pas TOUT le DWG, cela serait pratique !?

D'ailleurs j ai demande sur le forums US Lisp/VLisp Autodesk :
https://forums.autod...on/td-p/9899151

Extraction de mon stock de 3001 routines ...

LA SANTE, Bye, lecrabe ... Deja 58 jours de retraite ...

PS: Le Ventrachoux du 42 aide le Nantais du 44 !

;;
;; Routine: Cnt_Into_Blk by Patrick_35
;; 
;; Count entities inside ALL blocks of the DWG
;; 

(defun c:Cnt_Into_Blk (/ blo doc js lst n tbl)
  (vl-load-com)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (vlax-for blo (vla-get-blocks doc)
    (or (wcmatch (vla-get-name blo) "`**,*|*")
	(eq (vla-get-isxref blo) :vlax-true)
      (progn
	(setq lst nil)
	(vlax-for ent blo
	  (setq tbl (cons (vla-get-objectname ent) tbl))
	)
 	(while tbl	
	  (setq n   (length tbl)
		js  (car tbl)
		tbl (vl-remove js tbl)
		lst (cons (cons (itoa (- n (length tbl))) js) lst)
	  )
	)
	(princ (strcat "\nWe have into the block : " (vla-get-name blo)))
	(foreach n (vl-sort lst '(lambda (a B) (< (cdr a) (cdr B))))
	  (princ (strcat "\n"
			 (substr "     " 1 (- 5 (strlen (car n))))
			 (car n)
			 " "
			 (substr (cdr n) 5)
		 )
	  )
	)
      )
    )
  )
  (princ)
)

Autodesk Expert Elite Team
0

#3 L'utilisateur est hors-ligne   zebulon_ 

  • ceinture noire 2em dan
  • Groupe : Membres
  • Messages : 1 445
  • Inscrit(e) : 02-mai 03
  • LocationSchnersheim

Posté 27 novembre 2020 - 19:53

Bonjour
(defun c:ccbloc ()
  (setq js (ssget '((0 . "INSERT"))))
  (if js
    (progn
      (setq I 0)
      (repeat (sslength js)
        (setq e (ssname js I))
        (setq I (1+ I))
        (setq a (entget e))
        (setq NBLOC (cdr (assoc 2 a)))
        (setq BL (tblobjname "BLOCK" NBLOC))
        (setq J 1)
        (princ (strcat "\nBloc : " NBLOC))
        (while (setq BL (entnext BL))
          (princ (strcat "\n" (itoa J) " : " (cdr (assoc 0 (entget BL)))))
          (setq J (1+ J))
        )  
      )
    )
    (alert "rien sélectionné")
  )
  (princ)
)


amicalement
Vincent
C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
0

#4 L'utilisateur est hors-ligne   PHILPHIL 

  • ceinture noire 2em dan
  • Groupe : Membres
  • Messages : 1 074
  • Inscrit(e) : 24-janvier 06
  • LocationNANTES

Posté 30 novembre 2020 - 20:38

bonjour

merci a vous

si besoin j'en ai fait ca
(correction j=0 )

;;;------------------------------
;;;COMPTE LES ENTITES DANS UN BLOC
;;;------------------------------

(defun c:COMPTE_ENTITE_DANS_BLOC ()
  (setq js (ssget '((0 . "INSERT"))))
  (if js
    (progn
      (setq I 0)
      (repeat (sslength js)
        (setq e (ssname js I))
        (setq I (1+ I))
        (setq a (entget e))
        (setq NBLOC (cdr (assoc 2 a)))
        (setq BL (tblobjname "BLOCK" NBLOC))
        (setq J 0)
        (while (setq BL (entnext BL))
          (setq J (1+ J))
        )
        (princ (strcat "\nLE BLOC : " nbloc " CONTIENT : " (itoa j) " ENTITE(S) "))
      )
    )
    (alert "rien sélectionné")
  )
  (princ)
)





;;;----------------------------------------------------
;;;DECOMPOSE UN BLOC SUIVANT NOMBRE ENTITE DANS UN BLOC
;;;----------------------------------------------------

(defun c:decompose_bloc_suivant_nombre_entite_dans_bloc ()
  (setq nbentiteblocmini (atoi (getcfg "APPDATA/nbENTITEBLOCmini")))
  (initget 4)
  (setq tmp (getint (strcat "\nENTRER LE NOMBRE D'ENTITE(S) MINIUM DANS LES BLOCS A DECOMPOSER <"
                            (rtos nbentiteblocmini 2 0)
                            ">: "
                    )
            )
  )
  (if tmp
    (setq nbentiteblocmini tmp)
  )
  (setcfg "APPDATA/nbENTITEBLOCmini" (rtos nbentiteblocmini 2 0))
  (prompt "\nSELECTIONNER LES BLOCS POUVANT ETRE DECOMPOSES :")
  (setq js (ssget '((0 . "INSERT"))))
  (if js
    (progn (setq i 0)
           (setq nbexp 0)
           (repeat (sslength js)
             (setq e (ssname js i))
             (setq i (1+ i))
             (setq a (entget e))
             (setq nbloc (cdr (assoc 2 a)))
             (setq bl (tblobjname "BLOCK" nbloc))
             (setq j 0)
             (while (setq bl (entnext bl)) (setq j (1+ j)))
              (if (<= j nbentiteblocmini)
               (progn (princ (strcat "\nLE BLOC : " nbloc " CONTIENT : " (itoa j) " ENTITE(S) [ DECOMPOSE ]"))
                 (command "_explode" e) (setq nbexp (1+ nbexp)))
                (princ (strcat "\nLE BLOC : " nbloc " CONTIENT : " (itoa j) " ENTITE(S) [ NON DECOMPOSE ]"))
             )
           )
           (alert (strcat "\n"
                          (itoa nbexp)
                          " BLOCS ON ETE DECOMPOSE(S) SUR "
                          (itoa (sslength js))
                          " SELECTIONNE(S)  "
                  )
           )
    )
    (alert "rien sélectionné")
  )
  (princ)
)


a+

Phil
Autodesk Architecture 2019 sous windows 10 64
24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
0

#5 L'utilisateur est hors-ligne   zebulon_ 

  • ceinture noire 2em dan
  • Groupe : Membres
  • Messages : 1 445
  • Inscrit(e) : 02-mai 03
  • LocationSchnersheim

Posté 30 novembre 2020 - 21:20

Bonjour
Tu peux commencer à compter J à 0, ça t'évite de faire un 1- à la fin.
Amicalement
Vincent
C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)