Oeil2bidule Posté(e) le 27 mai 2020 Posté(e) le 27 mai 2020 Bonjour les gros bras du Dév ! il semble impossible de pouvoir automatiser la quantités de bloc dans une cellule d'un tableau pour une légende.Le "champ" permet de de toruver le nom du bloc, pourquoi ne peux t'il pas trouver le quantité de bloc dans l'objet? Je suis preneur si vous avez une illumination :) Amicalement votre.
Curlygoth Posté(e) le 20 août 2020 Posté(e) le 20 août 2020 Hello, Alors personnellement je peux te proposer ce qui va suivre. Il faut parcourir le dessin et compter le nombre de fois que tu as ton blocs et enfin remplir ton tableau.met ça en fonction : tu pourras boucler sur tous tes nom de blocsca va te donner des listes Function NB_BLOC(NOM_BLOC) For i = 0 To ThisDrawing.ModelSpace.Count - 1 Set entity = ThisDrawing.ModelSpace.Item(i) NOMCALQUE = entity.Layer If entity.ObjectName = "AcDbBlockReference" Then Set blocref = entity if blocref.effectivename = NOM_BLOC then cp1 = cp1 + 1 else end if next i NB_BLOC = cp1 et ensuite la table sub remplir_tableau ... 'Remplir une table en bouclant sur la function ... Point = ThisDrawing.Utility.GetPoint(, "Selectionner l'endroit où implanter la table ") NBLIGNE = NB_BLOC_TOTAL + 1 'Pour le titre de ton champ) NBCOL = 3 'nombre de colonne Dim MyModelSpace As AcadModelSpace Set MyModelSpace = ThisDrawing.ModelSpace Set MT = MyModelSpace.AddTable(Point, NBLIGNE, NBCOL, H_LIGNE, L_COLONNE) 'H_LIGNE Hauteur de la ligne / L_COLONNE la largeur de la colonne On Error Resume Next MT.Layer = "0" MT.Layer = Calque MT.StyleName = "Standard" MT.StyleName = STYLE_TABLE On Error GoTo 0 MT.SetText 0, 0, "TON TITRE" MT.SetText 1, 0, "NOM" MT.SetText 1, 1, "QTE" MT.SetText 1, 1, "BLOC" 'Tu fais une boucle pour remplir le tableau en fonction de ta table: L = 'ta ligne C = 'ta colonne MT.SetText L,C,VALEUR 'et tu remplis avec les corrdonnées Mon site Web (en cours de construction) : Site DA-CODE de @didier
capde06 Posté(e) le 20 août 2020 Posté(e) le 20 août 2020 J'avais fait ca, il y a longtemps...sur une base de tabloblo (defun c:tablobloc () ;(/ libloc liidbloc ss col liref ptins tableVL cont row) (vl-load-com) (setq liblkdescrip nil cont nil libloc nil liref nil) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (prompt "\nSélectionnez les blocs à lister ou <Toute la collection>") (or (setq ss (ssget '((0 . "INSERT")))) (setq ss (ssget "_X" '((0 . "INSERT"))) col T ) ) (if ss (progn (vlax-for x (setq ss (vla-get-ActiveSelectionSet *acdoc*) ) (or (vlax-property-available-p x 'Path) (setq liref (cons (if (vlax-property-available-p x 'EffectiveName) (vla-get-EffectiveName x) (vla-get-Name x) ) liref ) ) ) ) (vla-delete ss) ) ) (if col (vlax-for i (vla-get-Blocks *acdoc*) (if (and (not (wcmatch (setq name (vla-get-Name i)) "`**,*|*")) (= :vlax-false (vla-get-IsXref i)) ) (setq libloc (append libloc (list (vla-get-name i)));(vla-get-name i) liidbloc (append liidbloc (list (vla-get-ObjectID i))) ) ) ) (setq libloc (remove_doubles liref) ;liblkdescrip (remove_doubles liblkdescrip) liidbloc (mapcar '(lambda (x) (vla-get-ObjectID (vla-item (vla-get-Blocks *acdoc*) x ) ) ) libloc ) ) ) (initget 1) (setq ptins (trans (getpoint "\nPoint d'insertion: ") 1 0)) (setq tableVL (vla-addtable (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) (vlax-3d-point ptins) (+ 2 1 (length libloc)) 4 ;3 20 ; Hauteur cellule 80 ; Largeur cellule ) ) (vla-put-VertCellMargin tableVL 4.0) ; Marge verticale (vla-put-TitleSuppressed tableVL :vlax-false) (vla-put-HeaderSuppressed tableVL :vlax-false) (vla-setText tableVL 0 0 "Blocs") ; Titre (vla-setText tableVL 1 0 "Nom du bloc ") ; Titre colonne 1 (vla-setText tableVL 1 1 "Description") ; Titre colonne 2 (vla-setText tableVL 1 2 "Nombre") ; Titre colonne 3 (vla-setText tableVL 1 3 "Symbole") (setq cont -1 row 1 ) (repeat (- (vla-get-Rows tableVL) 2) (vla-settext tableVL (setq row (1+ row)) 0 (setq nombl (nth (setq cont (1+ cont)) libloc)) ) ;;;;;;;;;;;;;;;;;; description (vla-settext tableVL row 1 (cdr(assoc 4 (tblsearch "BLOCK" nombl))) ) (vla-settext tableVL row 2 (length (vl-remove-if-not '(lambda (n) (= n (nth cont libloc))) liref ) ) ) (vla-SetBlockTableRecordId tableVL row 3 (nth cont liidbloc) :vlax-true ) (vla-setcellalignment tableVL row 0 5) (vla-setcellalignment tableVL row 1 5) ) (princ) ) ;;; REMOVE_DOUBLES - Suprime tous les doublons d'une liste (defun REMOVE_DOUBLES (lst) (if lst (cons (car lst) (REMOVE_DOUBLES (vl-remove (car lst) lst))) ) ) Vous fîtes ce que vous pûtes et vous m'épatâtes !!!!
lecrabe Posté(e) le 20 août 2020 Posté(e) le 20 août 2020 Hello Voici une Super Routine "ListBlock" du Grand Maitre Gilles ! Je l utilise pour faire des "jolis" quantitatifs et aussi faire des "jolies" legendes (en supprimant la colonne des quantites) ... A ameliorer pour traiter et rentrer dans les Reseaux Associatifs rectangulaire / polaire-circulaire / trajectoire (qui ne sont pas traités) afin de recuperer les vrais noms de blocs utilises ! Et les inclure dans le quantitatif genere ... Ces réseaux associatifs sont en fait des sortes de blocs anonymes, un peu comme les blocs dynamiques... LA SANTE (Stay Safe), Bye, lecrabe "triste"Automne 2020, la retraite ;; ;; https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/lisp-table/m-p/7822698#M365879 ;; ;; Routine: ListBlock par GC ;; ;; Table des Blocs : Nom , Nombre , Graphisme du Bloc ;; ;; ;; Voir aussi ce sujet par GC : ;; https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/block-in-table/m-p/7827274#M366031 ;; ;; To be clearer, you can set the text height bay row type: ;; Only data rows (bit 1) ;; (vla-SetTextHeight table 1 height) ;; Only title row (bit 2) ;; (vla-SetTextHeight table 2 height) ;; Only header row (bit 4) ;; (vla-SetTextHeight table 1 height) ;; You can also combinate this, e.g. for the entire table (+ 1 2 4): ;; (vla-SetTextHeight table 7 height) ;; ;;;;; ;;;;; Hauteur des Textes dans la Table = 5.0 ;;;;; ;;;;; (vla-SetTextHeight table 7 5.0) ;;;;; (defun c:ListBlock (/ ss name block blocks insPt table row) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*)) ) ;; Select blocks (prompt "\nSelect blocks to list or <All>") (or (setq ss (ssget '((0 . "INSERT")))) (setq ss (ssget "_X" '((0 . "INSERT"))) ) ) (if ss (progn ;; Build a list of dotted pairs (blockName . numberOfReferences) from the selection set (vlax-for x (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (if (not (vlax-property-available-p x 'Path)) (setq name (vla-get-EffectiveName x) blocks (if (setq block (assoc name blocks)) (subst (cons name (1+ (cdr block))) block blocks) (cons (cons name 1) blocks) ) ) ) ) (vla-delete ss) ;; Prompt for insertion point (initget 1) (setq insPt (trans (getpoint "\nInsertion point: ") 1 0)) ;; Create the table (setq table (vla-addtable (vla-get-modelspace *acdoc*) (vlax-3d-point insPt) (+ 2 (length blocks)) ; number of rows (including title and header) 3 ; number of colums 20 ; cell height 80 ; row width ) ) (vla-put-VertCellMargin table 4.0) (vla-put-TitleSuppressed table :vlax-false) (vla-put-HeaderSuppressed table :vlax-false) ;; Fill the titel and the header ; (vla-setText table 0 0 "Blocks") ; (vla-setText table 1 0 "Name") ; (vla-setText table 1 1 "Count") ; (vla-setText table 1 2 "Symbol") ;; Textes version Francaise (vla-setText table 0 0 "Quantitatif des Blocs") (vla-setText table 1 0 "Nom") (vla-setText table 1 1 "Nombre") (vla-setText table 1 2 "Symbole") ;;;;; Hauteur des Textes dans la Table = 5.0 ;;;;; (vla-SetTextHeight table 7 5.0) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; fill the following rows from the list contents (setq row 2) (foreach item blocks (vla-settext table row 0 (car item)) ; block name (vla-settext table row 1 (cdr item)) ; references count (vla-SetBlockTableRecordId ; block symbol table row 2 (vla-get-ObjectId (vla-Item *blocks* (car item))) :vlax-true ) (setq row (1+ row)) ) ) ) (princ) ) Autodesk Expert Elite Team
Steven Posté(e) le 20 août 2020 Posté(e) le 20 août 2020 Bonjour les gros bras du Dév ! il semble impossible de pouvoir automatiser la quantités de bloc dans une cellule d'un tableau pour une légende.Le "champ" permet de de toruver le nom du bloc, pourquoi ne peux t'il pas trouver le quantité de bloc dans l'objet? Je suis preneur si vous avez une illumination :) Amicalement votre. Salut,Sinon, sans Lisp, tu peux aussi, faire un tableau avec l'extraction de données. Tu pourras le mettre à jour lorsque tu copieras ou ajouteras les blocs que tu souhaites quantifier.Là, tu as de quoi faire, avec ou sans Lisp Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant