Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

J'essaie depuis un moment d'adapter le lisp "CBL" en vain ...

Ce lisp recense tous les blocs sélectionnés dans Excel avec leur nom en colonne 1 et leur nombre en colonne 2.

Mais pour un bloc bien particulier, (toujours dans la sélection et toujours avec le même nom), je voudrais la valeur du 1er attribut, et pas le nombre (il n'y en aura toujours qu'un seul dans la sélection de toute façon)

 

j'ai donné du: (setq att (vlax-invoke val 'getattributes)) mais je m'embrouille dans le tri ... HELP

 

le code CBL d'origine:

 

 ;; Helper function 'count-blocks'

;; written by Fatty T.O.H. () 2005 * all rights removed
(defun count-blocks (/ acsp adoc bname bname_list tmp_list ss tmp)
 (vl-load-com)
 (setq	adoc (vla-get-activedocument
       (vlax-get-acad-object)
     )
acsp (vla-get-block
       (vla-get-activelayout adoc)
     )
 )
 (command "_.zoom" "_e")
 (setq	ss (ssget "_X"
	  (list (cons 0 "INSERT") ;|(cons 2 "block1,block2,block3")|;);your desired block names here
   )
 )
 (vlax-for a (vla-get-activeselectionset adoc)
   (if	(wcmatch (vla-get-objectname a) "AcDbBlockReference*")
     (progn
(setq bname (vla-get-name a))
(setq bname_list (cons bname bname_list))
     )
   )
 )
 (while (car bname_list)
   (setq tmp (list (vl-remove-if-not
	      (function	(lambda	(a)
			  (eq a (car bname_list))
			)
	      )
	      bname_list
	    )
      )
   )
   (setq tmp_list (cons (car tmp) tmp_list))
   (setq bname_list
   (vl-remove-if
     (function (lambda (a)
		 (eq a (car bname_list))
	       )
     )
     bname_list
   )
   )
   (setq tmp nil)
 )

 (setq	tmp_list	(mapcar	(function (lambda (x)
			    (list (car x) (length x))
			  )
		)
		(reverse tmp_list)
	)
 )

 tmp_list
)
;CaLL:(count-blocks);ok

;; 		Main program			;

;;; Based on program 'Excel' written by
;;; ALEJANDRO LEGUIZAMON - arquingeneu@gmail.com
;;; edited by Fatty

(defun c:cbl (/ LAYER# LIST# N ROW TOTALVALUE VALUE)

 (vl-load-com)
 (setq	*AplExcel*	   (vlax-get-or-create-object "Excel.application")
*Books-Colection*  (vlax-get-property *AplExcel* "Workbooks")
*New-Book*	   (vlax-invoke-method *Books-Colection* "Add")
*Sheet-Collection* (vlax-get-property *New-Book* "Sheets")
*Sheet#1*	   (vlax-get-property *Sheet-Collection* "Item" 1)
*excell-cells*	   (vlax-get-property *Sheet#1* "Cells")
 )
 (vla-put-visible *AplExcel* :vlax-true)
 (setq row 4)
 (setq n 0)
 (setq totalvalue 0)
 (princ "\nCOUNTING BLOCKS IN DRAWING")
 (setq list# (count-blocks))

 (setq totalvalue (apply '+ (mapcar 'cadr list#)))
 (repeat (length list#)
   (setq value (cadar list#))
   (vlax-put-property
     *excell-cells*
     "Item"
     row
     2
     (vl-princ-to-string value)
   )

   (setq layer# (caar list#))
   (vlax-put-property
     *excell-cells*
     "Item"
     row
     1
     (vl-princ-to-string layer#)
   )
   (setq list# (cdr list#))
   (setq n (+ n 1))
   (setq row (+ row 1))
 )

 (setq row (+ row 1))
 (vlax-put-property
   *excell-cells*
   "Item"
   row
   1
   (vl-princ-to-string "TOTAL")
 )

 (vlax-put-property
   *excell-cells*
   "Item"
   row
   2
   (vl-princ-to-string totalvalue)
 )

 (vlax-put-property
   *excell-cells*
   "Item"
   1
   1
   (vl-princ-to-string
     " Based on routine by  ALEJANDRO LEGUIZAMON -  http://arquingen.tripod.com.co"
   )
 )

 (vlax-put-property
   *excell-cells*
   "Item"
   2
   1
   (vl-princ-to-string
     (strcat "COUNTING BLOCKS IN DRAWING: " (getvar "dwgprefix"))
   )
 )
 (vlax-put-property
   *excell-cells*
   "Item"
   3
   1
   (vl-princ-to-string "Block name")
 )
 (vlax-put-property
   *excell-cells*
   "Item"
   3
   2
   (vl-princ-to-string "Subtotal")
 )

 (vlax-release-object *excell-cells*)
 (vlax-release-object *Sheet#1*)
 (vlax-release-object *Sheet-Collection*)
 (vlax-release-object *New-Book*)
 (vlax-release-object *Books-Colection*)
 (vlax-release-object *AplExcel*)
 (alert "Save Excel file manually")
)

(prompt "\nType CBL to execute ...")
(princ)

Posté(e)

Salut,

 

(setq att (vlax-invoke val 'getattributes))

retourne la liste des objets (vla-object) attribut de la référence de bloc 'val'.

Le premier attribut est retourné par :

(setq att (car atts))

ou

(setq att (nth 0 atts))

 

La valeur de cet attribut :

(vla-get-TextString att)

 

on peut aussi faire une recherche de l'attribut dans la liste par son étiquette avec vla-get-TagString

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

Posté(e)

je m'excuse d'être aussi nul, mais je ne parviens pas à insérer correctement ceci dans le lisp. en fait je ne comprends pas si les attributs font parti de la même liste que les noms ou pas. Faut-il insérer ces lignes en parallele de la démarche pde tri our les noms au début, ou dans la boucle d'écriture finale dans Excel?

parce que ça me retourne toujours VLA-Objet nil !?

encore désolé d'être aussi nul ...

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é