Aller au contenu

nombre de bloc dans un fichier


Messages recommandés

Posté(e)

Dans quelques uns des projets sur lesquels je travaille,

on me demande de valider le nombre de dispenseur de savon,

de papier-toilette, de bac à ordures etc....

Ces items sont indérés sous forme de blocs.

Avec Autocad 2011, existe-il une manière d'en extraire le

nombre avec facilité??

Posté(e)

Hello

 

Avec un vrai AutoCAD, la routine BCNT c tip-top !

Il suffit de trier dans l'ecran texte ce qui t'interesse ...

 

lecrabe

Autodesk Expert Elite Team

Posté(e)

Bonjour,

moi j'utilise celle-ci (qui n'est pas de moi hein :ph34r: mais je crois de (gille) ) qui à l'avantage de te proposer d'enregistrer un fichier avec les résultat.

par contre les resultat dans la Fenetre de texte ne sont pas aussi bien rangés :(

Peut-être un mélange des deux routines pourrait etre bien ...:wub:

mais moi je ne sais pas faire :wacko:

 

Ciao.

 

(defun c:cnt-blk (/ obj ss n bl nom lst str file)
(vl-load-com)
(prompt "\nSélectionnez les blocs ou < Objet >: ")
(if (not (setq ss (ssget '((0 . "INSERT")))))
(if
(setq
obj
(car
(entsel "\nSélectionnez l'objet délimitant la sélection: ")
)
)
(if (member (cdr (assoc 0 (entget obj)))
'("CIRCLE" "ELLIPSE" "LWPOLYLINE")
)
(progn
(ZoomObject (list (vlax-ename->vla-object obj)))
(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] < 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)
)

;; ZoomObject Effectue un zoom sur les objets contenus dans la liste
;;
;; Argument
;; objlst : une liste de vla-object
;;
;; Variables
;; dir : normale du plan de la vue courante
;; ang : angle de la vue courante
;; 3x3 : matrice de transformation du SCG vers la vue courante (dimension 3)
;; 4x4 : matrice de transformation du SCG vers la vue courante (dimension 4)
;; ptlst : liste des points minimum et maximum des bounding-boxes des objets sélectionnés (SCG)

(defun ZoomObject (objlst / dir ang 3x3 4x4 ptlst)
(vl-load-com)
(setq dir (mapcar '-
(trans (getvar "viewdir") 1 0)
(trans '(0 0 0) 1 0)
)
ang (- (getvar "viewtwist"))
3x3 (mxm (mapcar '(lambda (x) (trans x 0 dir))
'((1 0 0) (0 1 0) (0 0 1))
)
(list (list (cos ang) (- (sin ang)) 0)
(list (sin ang) (cos ang) 0)
'(0 0 1)
)
)
4x4 (append
(mapcar
'(lambda (v o)
(append v (list o))
)
3x3
'(0 0 0)
)
(list '(0 0 0 1))
)
)
(foreach obj objlst
(vla-TransformBy obj (vlax-tmatrix (trp 4x4)))
(vla-getBoundingBox obj 'minpt 'maxpt)
(vla-TransformBy obj (vlax-tmatrix 4x4))
(setq ptlst (cons (vlax-safearray->list minpt)
(cons (vlax-safearray->list maxpt) ptlst)
)
)
)
(vla-ZoomWindow
(vlax-get-acad-object)
(vlax-3d-point (mxv 3x3 (apply 'mapcar (cons 'min ptlst))))
(vlax-3d-point (mxv 3x3 (apply 'mapcar (cons 'max ptlst))))
)
)

;; transpose une matrice Doug Wilson

(defun trp (m)
(apply 'mapcar (cons 'list m))
)

;; Apply a transformation matrix to a vector by Vladimir Nesterovsky

(defun mxv (m v)
(mapcar '(lambda (r) (apply '+ (mapcar '* r v))) m)
)

;; Multiply two matrices by Vladimir Nesterovsky

(defun mxm (m q)
(mapcar '(lambda (r) (mxv (trp q) r)) m)
)

;;; 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 un objet (cercle, ellipse, polyligne fermée)
;;; Arguments :
;;; - ent : un objet (ename ou vla-object)
;;; - opt : un mode de sélection (Cp ou Wp)
;;; - fltr : un filtre de sélection (liste) ou nil

(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)
)
)
(entget ent)
)
)
(while p_lst
(setq
lst
(cons
(trans (append (cdr (assoc 10 p_lst))
(list (cdr (assoc 38 (entget 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
(setq ss (ssget (strcat "_" opt) lst fltr))
ss
)
)
)

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

Posté(e)

Salut

 

Je vais y aller aussi avec mon petit lisp

A la différence des autres, il permet le décompte avec la distinction ou pas des attributs.

Par exemple, on a sur nos plans des blocs luminaires qui ont le même nom, mais qui sont distingués par un attribut pour dire que c'est le type 1, type 2, etc...

C'est galère pour les différencier, d'où ce lisp.

 

@+

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)

Salut

 

Je vais y aller aussi avec mon petit lisp

A la différence des autres, il permet le décompte avec la distinction ou pas des attributs.

Par exemple, on a sur nos plans des blocs luminaires qui ont le même nom, mais qui sont distingués par un attribut pour dire que c'est le type 1, type 2, etc...

C'est galère pour les différencier, d'où ce lisp.

 

@+

 

Tu a raison Patrick_35 ton lisp est vraiment pratique et en plus je l'utilise régulièrement.

Toutefois si tu me le permet je trouve vraiment dommage que, tout comme les autres, il ne propose pas d'enregistrer un fichier Excel avec les résultat, peut-etre tu pourrait rajouter cette option ? :wub:

 

Ciao.

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

Posté(e)

L'option existe déjà.

Tu choisis écrire dans un fichier et soit tu ouvres le fichier txt directement depuis excel ou tu changes l'extension txt en xls.

Dans Excel, le trie est par colonne.

 

@+

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)

L'option existe déjà.

Tu choisis écrire dans un fichier et soit tu ouvres le fichier txt directement depuis excel ou tu changes l'extension txt en xls.

Dans Excel, le trie est par colonne.

 

@+

 

oups...:unsure:

je suis confus, toutes mes excuses maitre :wub:

 

La prochaine fois je mettrais mes lunette avant !

 

Ciao.

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

Posté(e)

oups...:unsure:

je suis confus, toutes mes excuses maitre :wub:

De rien mon padawan, avec tous les lisps que l'on peut trouver, on est loin de connaitre toutes les options de chacuns.

 

(je sens que mes chevilles commencent à gonfler)

 

@+

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

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é