Aller au contenu

JPhil

Membres
  • Compteur de contenus

    207
  • Inscription

  • Dernière visite

  • Jours gagnés

    6

Tout ce qui a été posté par JPhil

  1. Testé à l'instant.Ressemble très fortement (au niveau résultat) à "TABLDYNBLOC". Concernant les défauts que tu évoques, difficile de répondre quand on n'y est pas confronter :unsure:
  2. Je viens de trouver une solution pour les blocs qui passent avec le Lisp de 2010 et qui passent pas avec le Lisp de 2019 -> refaire le bloc Je suis partie d'un bloc avec l'attribut "LEGENDE" qui fonctionne, et j'ai refait le dessin, et là ça fonctionne sans problème :D J'ai fait l'essai, juste avant, de copier l'attribut "LEGENDE" dans un bloc qui ne l'a pas, ben ça fonctionne pas <_< Merci aux intervenants :) Par contre pour des besoins plus pratique, je viens juste de renommer "TABLDYNBLOC" en "LGD". J'aurais dû le faire plus tôt dans mes phases de test :P
  3. Merci lecrabe. Je teste à l'occasion. Par contre une idée du pourquoi ces blocs là (dans cet exemple) ne contiennent pas "ATTDEF" alors qu'il y a réellement un attribut (voir plus) dedans ? "BLOCK" "L1-000" --- "LINE" "BLOCK" "L1-MT12" --- "ARC" "BLOCK" "L1-020G" --- "LINE" Y'a peut-être une erreur dans le code puisque ça fonctionne avec le lisp de 2010 :unsure: Si j'arrive un jour à franchir cette étape (qui pourra être utile même à mes collègues ARCHI), je pourrai passer à l'étape n°2 :) Faire des calculs de puissance en fonction de la zone, du couloir, du niveau, du type d'appareils, de la source (permanent/délestable) .... pour Caneco d'ALPI.
  4. Après une pause, je réponds en partie à moi-même. Le code : ;; TABLDYNBLOC ;; Crée un tableau qui liste les blocs sélectionnés (defun c:tabldynbloc (/ ss refs lst ele ins tbl row) (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*))) (prompt "\nSélectionnez les blocs à lister ou ") (or (setq ss (ssget '((0 . "INSERT")))) (setq ss (ssget "_X" '((0 . "INSERT")))) ) (if ss (progn (vlax-for x (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (or (vlax-property-available-p x 'Path) (setq refs (cons (list (cons (vla-get-EffectiveName x) (gc:GetVisibilityState x) ) (vla-get-Name x) ) refs ) ) ) ) (vla-delete ss) ) ) (foreach n refs (setq lst (if (setq ele (assoc (car n) lst)) (subst (list (car ele) (cadr ele) (1+ (caddr ele))) ele lst) (cons (list (car n) (cadr n) 1) lst) ) ) ) (initget 1) (setq ins (trans (getpoint "\nPoint d'insertion: ") 1 0)) (setq tbl (vla-addtable (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) (vlax-3d-point ins) (+ 2 (length lst)) 4 20 ; Hauteur cellule 80 ; Largeur cellule ) ) (vla-put-VertCellMargin tbl 4.0) ; Marge verticale (vla-put-TitleSuppressed tbl :vlax-false) (vla-put-HeaderSuppressed tbl :vlax-false) (vla-setText tbl 0 0 "Légende") ; Titre (vla-setText tbl 1 0 "Nom") ; Titre colonne 1 (vla-setText tbl 1 1 "Nombre") ; Titre colonne 2 (vla-setText tbl 1 2 "Symbole") ; Titre colonne 3 (vla-setText tbl 1 3 "Désignation") ; Titre colonne 4 (setq row 2) (foreach b lst (setq tag "XXXXX") (if (= (cdr (assoc 0 (entget (cdr (assoc -2 (entget (tblobjname "BLOCK" (caar B))))) '("*")))) "ATTDEF") (if (= (cdr (assoc 2 (entget (cdr (assoc -2 (entget (tblobjname "BLOCK" (caar B))))) '("*")))) "LEGENDE") (setq tag (cdr (assoc 1 (entget (cdr (assoc -2 (entget (tblobjname "BLOCK" (caar B))))) '("*"))))) ) ) (vla-SetText tbl row 0 (if (cdar B) (strcat (caar B) " (" (cdar B) ")") (caar B) ) ) (vla-SetText tbl row 1 (caddr B)) (vla-SetBlockTableRecordId tbl row 2 (vla-get-ObjectId (vla-Item *blocks* (cadr B))) :vlax-true) (vla-SetText tbl row 3 tag) (vla-setcellalignment tbl row 0 5) (vla-setcellalignment tbl row 1 5) (vla-setcellalignment tbl row 3 4) (setq row (1+ row)) ) (princ) ) ;; gc:GetVisibilityState ;; Retourne l'état de visibilité d'un bloc dynamique ou nil (defun gc:GetVisibilityState (blk / state) (if (= (vla-get-IsDynamicblock blk) :vlax-true) (foreach p (vlax-invoke blk 'GetDynamicBlockProperties) (if (= (type (car (vlax-get p 'AllowedValues))) 'STR) (setq state (vlax-get p 'Value)) ) ) ) state ) Le résultat est que pour certains blocs, le programme m'affiche bien la valeur de l'attribut "LEGENDE" et pour les autres "XXXXX". "BLOCK" "L1-000" --- "XXXXX" "BLOCK" "L1-MT12" --- "XXXXX" "BLOCK" "L1-020G" --- "XXXXX" "BLOCK" "L1-020D" --- "Extrémité aveugle coté droit Type L1-020D" "BLOCK" "EBT-HP" --- "Haut Parleur montage en saillie" Quand je tape ma commande pour en savoir plus voici le résultat : Commande: (entget (cdr (assoc -2 (entget (tblobjname "BLOCK" "L1-000")))) '("*")) ((-1 . <Nom d'entité: 3f5e4420>) (0 . "LINE") (330 . <Nom d'entité: 3f5e4400>) (5 . "27A") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbLine") (10 -0.515811 0.19 0.0) (11 -0.600839 0.19 0.0) (210 0.0 0.0 1.0)) Commande: (entget (cdr (assoc -2 (entget (tblobjname "BLOCK" "L1-MT12")))) '("*")) ((-1 . <Nom d'entité: 3f5e4640>) (0 . "ARC") (330 . <Nom d'entité: 3f5e4610>) (5 . "29C") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbCircle") (10 0.3125 -0.04 0.0) (40 . 0.0193292) (210 0.0 0.0 1.0) (100 . "AcDbArc") (50 . 1.5708) (51 . 4.71239)) Commande: (entget (cdr (assoc -2 (entget (tblobjname "BLOCK" "L1-020G")))) '("*")) ((-1 . <Nom d'entité: 52849f70>) (0 . "LINE") (330 . <Nom d'entité: 52849f60>) (5 . "629CF") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbLine") (10 -0.0495 -0.25 0.0) (11 -0.0495 0.25 0.0) (210 0.0 0.0 1.0)) Commande: (entget (cdr (assoc -2 (entget (tblobjname "BLOCK" "L1-020D")))) '("*")) ((-1 . <Nom d'entité: 52bf0ea0>) (0 . "ATTDEF") (330 . <Nom d'entité: 52bf0e90>) (5 . "6285A") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbText") (10 -0.806469 -0.415743 0.0) (40 . 0.05) (1 . "Extrémité aveugle coté droit Type L1-020D") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "EE_SIMPLEX") (71 . 0) (72 . 1) (11 0.0375786 -0.415743 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "LEGENDE") (2 . "LEGENDE") (70 . 9) (73 . 0) (74 . 0) (280 . 0)) Commande: (entget (cdr (assoc -2 (entget (tblobjname "BLOCK" "EBT-HP")))) '("*")) ((-1 . <Nom d'entité: 52846d70>) (0 . "ATTDEF") (330 . <Nom d'entité: 52846d60>) (5 . "62A27") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbText") (10 -0.615655 -0.171816 0.0) (40 . 0.05) (1 . "Haut Parleur montage en saillie") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "EE_SIMPLEX") (71 . 0) (72 . 1) (11 -0.00136891 -0.171816 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "LEGENDE") (2 . "LEGENDE") (70 . 9) (73 . 0) (74 . 0) (280 . 0)) On voit que tous les blocs non pas la valeur "ATTDEF" alors qu'il y a bien un attribut "LEGENDE" dans chaque bloc avec sa valeur : "BLOCK" "L1-000" --- "Luminaire type L1-000" "BLOCK" "L1-MT12" --- "MODULE TECHNIQUE 6 DISJONCTEURS pour 12 appareils (9+3)" "BLOCK" "L1-020G" --- "Extrémité aveugle coté gauche Type L1-020G" "BLOCK" "L1-020D" --- "Extrémité aveugle coté droit Type L1-020D" "BLOCK" "EBT-HP" --- "Haut Parleur montage en saillie" Ce qui est étrange c'est qu'avec le lisp de 2010, avec plus ou moins la même commande j'arrive à avoir toutes les infos. Une idée du pourquoi du comment ?
  5. JPhil

    Présentation...

    Merci. Pour Revit, je ne suis pas surpris, surtout pour la partie Elec de Revit MEP.
  6. Bonjour, Je reprends un ancien Lisp (08/2010) en le mettant au goût du jour avec la fonction tableau. Le but étant de faire apparaître la quantité, le nom du bloc, le symbole et la désignation. Voici donc le Lisp de base : (defun c:LGD () (progn (setq len_l_attr 0) (setq lgd "LEGENDE") (setq lgdq (getstring "Corps d'état de la légende (si rien 'LEGENDE') ? : ")) (if (/= lgdq "") (setq lgd (strcat "LEGENDE" (strcase lgdq))) ) (setq lgdt (strcat "_LGD" lgdq ".txt")) (setq source (strcase (strcat (getvar "DWGPREFIX") (getvar "dwgname") lgdt))) (setq pt_plan (getpoint "\nPosition écriture paramètres plans (Coin haut gauche): ")) (setq htxt 2) (setq lg_pt1 (polar pt_plan (* 0.5 pi) (* 1.65 htxt))) (setq lg_pt3 lg_pt1) (command "_text" pt_plan htxt 0 "Qté") (command "_text" (polar pt_plan 0 (* 3 htxt)) htxt 0 "Symbole") (command "_text" (polar pt_plan 0 (* 10 htxt)) htxt 0 "Nom Bloc") (command "_text" (polar pt_plan 0 (* 20 htxt)) htxt 0 "Type d'Appareil") (setq pt_plan (polar pt_plan (* 1.5 pi) (* 3.3 htxt))) (setq f (open (strcat source) "W")) (setq a (tblnext "block" t)) (while a (progn (setq Bl_Data (cdr (assoc -2 a))) (while Bl_Data (if (= (cdr (assoc 0 (entget Bl_Data))) "ATTDEF") (if (= lgd (cdr (assoc 2 (entget Bl_Data)))) (progn (setq bb (cdr (assoc 2 a))) (setq l_Attr (cdr (assoc 1 (entget Bl_Data)))) (setq sel (ssget "x" (list (cons 2 bb)))) (setq nb 0) (setq nb (itoa (sslength sel))) (setq cc (strcat "Quantité : " nb " / Nom du Bloc : " bb " / Type d'Appareil : " l_attr)) (write-line cc f) (totolgd) (if (> (strlen l_attr) len_l_attr) (setq len_l_attr (strlen l_attr)) ) ) ) ) (setq Bl_Data (entnext Bl_Data)) ) ; fin de while ) ; fin de progn (setq a (tblnext "block")) ) ; fin de while du début (close f) (setq lg_pt4 (polar lg_pt3 0 (+ (* (+ 3 len_l_attr) htxt) (* 10 htxt)))) (setq lg_pt3b (polar lg_pt3 pi (* 1.65 htxt))) (setq lg_pt4b (polar lg_pt4 0 (* 1.65 htxt))) (command "_line" lg_pt3b lg_pt4b "") (command "_line" (polar lg_pt3b (* 1.5 pi) (* 3.0 htxt)) (polar lg_pt4b (* 1.5 pi) (* 3.0 htxt)) "") (setq lg_pt1 (polar pt_plan (* 0.5 pi) (* 1.65 htxt))) (setq lg_pt2 (polar lg_pt1 0 (+ (* (+ 3 len_l_attr) htxt) (* 10 htxt)))) (setq lg_pt1 (polar lg_pt1 pi (* 1.65 htxt))) (setq lg_pt2 (polar lg_pt2 0 (* 1.65 htxt))) (command "_line" lg_pt1 lg_pt2 "") (command "_line" lg_pt1 lg_pt3b "") (command "_line" lg_pt2 lg_pt4b "") ) ) (defun totolgd () (command "_text" pt_plan htxt 0 nb) ;;; (command "-attdef" "" (strcat "NB" bb) bb nb pt_plan htxt 0) (command "_text" (polar pt_plan 0 (* 10 htxt)) htxt 0 bb) (command "_text" (polar pt_plan 0 (* 20 htxt)) htxt 0 l_attr) (command "-inserer" bb (polar pt_plan 0 (* 6 htxt)) "5" "5" "0") (setq pt_plan (polar pt_plan (* 1.5 pi) (* 2.9 htxt))) ) Et le Lisp plus évolué que j'ai trouvé sur ce forum : ;; TABLDYNBLOC ;; Crée un tableau qui liste les blocs sélectionnés (defun c:tabldynbloc (/ ss refs lst ele ins tbl row) (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*))) (prompt "\nSélectionnez les blocs à lister ou ") (or (setq ss (ssget '((0 . "INSERT")))) (setq ss (ssget "_X" '((0 . "INSERT")))) ) (if ss (progn (vlax-for x (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (or (vlax-property-available-p x 'Path) (setq refs (cons (list (cons (vla-get-EffectiveName x) (gc:GetVisibilityState x) ) (vla-get-Name x) ) refs ) ) ) ) (vla-delete ss) ) ) (foreach n refs (setq lst (if (setq ele (assoc (car n) lst)) (subst (list (car ele) (cadr ele) (1+ (caddr ele))) ele lst) (cons (list (car n) (cadr n) 1) lst) ) ) ) (initget 1) (setq ins (trans (getpoint "\nPoint d'insertion: ") 1 0)) (setq tbl (vla-addtable (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) (vlax-3d-point ins) (+ 2 (length lst)) 4 20 ; Hauteur cellule 80 ; Largeur cellule ) ) (vla-put-VertCellMargin tbl 4.0) ; Marge verticale (vla-put-TitleSuppressed tbl :vlax-false) (vla-put-HeaderSuppressed tbl :vlax-false) (vla-setText tbl 0 0 "Légende") ; Titre (vla-setText tbl 1 0 "Nom") ; Titre colonne 1 (vla-setText tbl 1 1 "Nombre") ; Titre colonne 2 (vla-setText tbl 1 2 "Symbole") ; Titre colonne 3 (vla-setText tbl 1 3 "Désignation") ; Titre colonne 4 (setq row 2) (foreach b lst (vla-SetText tbl row 0 (if (cdar B) (strcat (caar B) " (" (cdar B) ")") (caar B) ) ) (vla-SetText tbl row 1 (caddr B)) (vla-SetBlockTableRecordId tbl row 2 (vla-get-ObjectId (vla-Item *blocks* (cadr B))) :vlax-true) (vla-SetText tbl row 3 "LEGENDE") (vla-setcellalignment tbl row 0 5) (vla-setcellalignment tbl row 1 5) (vla-setcellalignment tbl row 3 4) (setq row (1+ row)) ) (princ) ) ;; gc:GetVisibilityState ;; Retourne l'état de visibilité d'un bloc dynamique ou nil (defun gc:GetVisibilityState (blk / state) (if (= (vla-get-IsDynamicblock blk) :vlax-true) (foreach p (vlax-invoke blk 'GetDynamicBlockProperties) (if (= (type (car (vlax-get p 'AllowedValues))) 'STR) (setq state (vlax-get p 'Value)) ) ) ) state ) Je coince dessus (vla-SetText tbl row 3 "LEGENDE"). Je n'arrive pas à reproduire ce que j'avais fait dans l'ancien Lisp. L'idée étant d'y mettre le contenu (texte) de l'attribut "LEGENDE" des blocs. Sachant que tous les blocs n'ont pas nécessairement cet attribut, je souhaiterai qu'un point "." s'affiche dans ce cas là. Sinon, pour le reste j'en suis plutôt content car plus souple que ce que j'avais en tête à ce moment là. Mais là je donne ma langue au chat :(
  7. Bonjour, 38 ans. Utilisateur d'AutoCAD (classique) depuis 2002, Revit MEP depuis 2015. Quelques Lisps à mon actif mais sans vraiment bien maitriser le langage. Je m'inscris donc pour obtenir des réponses à mes questions.
×
×
  • 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é