DPB6804 Posté(e) le 24 mai 2021 Posté(e) le 24 mai 2021 Bonjour à tous, J'ai un problème sur mes plans. Je viens d'ajouter un attribut dans mes blocs luminaires et lorsque j'enregistre ce bloc l'orientation de ceux-ci change. Quelle est la solution pour que cela n'arrive plus? Ca n'arrivait pas avant. Une variable aurait sauté? Je précise que ces blocs ont des paramètre de déplacement et de rotation. Help. Alain Citer
DPB6804 Posté(e) le 25 mai 2021 Auteur Posté(e) le 25 mai 2021 Bonjour, Personne n’a jamais eu le cas? Je copie un attribut dans le bloc, je l’associe avec les paramètres de déplacement, j’enregistre le bloc et pan tous les blocs existants ont tournés. Je suis bon pour les retourner un par un. J’ai déjà eu le cas mais je ne sais plus comment j’avais résolu le problème. Bonne journée. Alain Citer
lili2006 Posté(e) le 25 mai 2021 Posté(e) le 25 mai 2021 Bonjour à toutes et tous, Si tes blocs sont annotatifs, alors ça se passe dans la palette des propriétés,.. Citer Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
DPB6804 Posté(e) le 25 mai 2021 Auteur Posté(e) le 25 mai 2021 Ils ne sont pas annotatifs. Juste 3 point de déplacements qui déplace tout. Et une propriété de rotation qui tourne le bloc sans les attributs. Citer
didier Posté(e) le 25 mai 2021 Posté(e) le 25 mai 2021 Bonjour @DPB6804 Lorsqu'on redéfinit ou qu'injecte un nouvel attribut, la mise à jour des blocs se fait avec leurs paramètres par défaut. Il faut chercher sur CadXP il existe une routine qui fait cette mise à jour en mémorisant les propriétés modifiées des blocs ce que ne fait pas ATTSYNC. Par contre, je ne sais plus qui l'a faite, ni comment elle s'appelle, bonne recherche, à moins qu'un "sachant" intervienne. Amicalement Citer Éternel débutant... Mon site perso : Programmer dans AutoCAD
lecrabe Posté(e) le 25 mai 2021 Posté(e) le 25 mai 2021 Hello Et si tu essayais la merveilleuse routine "SYN" de notre regrette Patrick_35 !? La Sante, Bye, lecrabe (triste & fatigue) ;;;================================================================= ;;; ;;; SYN.LSP V1.23 ;;; ;;; Synchroniser en conservant ou pas la valeur, la position ;;; et l'angle des attributs. ;;; ;;; Copyright (C) Patrick_35 ;;; ;;;================================================================= (defun patrick:synchro_att(cmd / ang att blo boite_dialogue choix def doc ent lst lstbl msg nombl oui-non pos question rep s sel str val *errret*) (defun *errret* (msg) (or (member (strcase msg) '("FUNCTION CANCELLED" ""QUIT / EXIT ABORT"" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) (vla-endundomark doc) (setq *error* s) (princ) ) (defun nombl(bl) (if (vlax-property-available-p bl 'effectivename) (vla-get-effectivename bl) (vla-get-name bl) ) ) (defun msg(js) (if js (princ (strcat "\nSélection actuel : " js)) (princ "\nSélection actuel : Tout") ) ) (defun choix(chx cmd / bl js lst nom sel) (princ "\nSélectionnez le(s) bloc(s) : ") (and (ssget (list (cons 0 "insert") (cons 66 1))) (progn (vlax-for bl (setq sel (vla-get-activeselectionset doc)) (or (member (setq nom (nombl bl)) lst) (setq lst (cons nom lst)) ) (redraw (vlax-vla-object->ename bl) 4) ) (foreach nom lst (and (eq (vla-get-isxref (vla-item (vla-get-blocks doc) nom)) :vlax-false) (if js (setq js (strcat js "," nom)) (setq js nom) ) ) ) (vla-delete sel) ) ) (or js (setq js chx)) (and cmd (msg js)) js ) (defun boite_dialogue(titre / blo choix_aucun choix_lst choix_tout chx dcl fil js liste_bl loc rech rep res sel str tmp vao) (defun choix_lst(val / pos lst) (while (setq pos (read val)) (if lst (setq lst (strcat lst "," (nth pos liste_bl))) (setq lst (nth pos liste_bl)) ) (setq val (substr val (+ 2 (strlen (itoa pos))))) ) (setq js lst chx "Nom" ) ) (defun choix_tout(/ pos val str) (setq pos 0) (while (setq val (nth pos liste_bl)) (if str (setq str (strcat str " " (itoa pos))) (setq str (itoa pos)) ) (setq pos (1+ pos)) ) (setq js nil chx "Tout" sel str ) (set_tile "lst" sel) ) (defun choix_aucun() (setq js nil chx nil sel "" ) (set_tile "lst" sel) ) (defun rech() (and (member (substr str 1 loc) liste_bl) (setq vao (itoa (- (length liste_bl) (length (member (substr str 1 loc) liste_bl))))) (if sel (setq sel (strcat sel " " vao)) (setq sel vao) ) ) ) (setq tmp (vl-filename-mktemp "ret" nil ".dcl") fil (open tmp "w") ) (foreach txt '( "ret : dialog {" " key = titre;" " is_cancel = true;" " fixed_width = true;" " alignment = centered;" " : list_box {label = \"Blocs\"; key = \"lst\"; multiple_select = true; width = 40; height = 20;}" " : boxed_column {" " label = \"Conserver dans les attributs\";" " : row {" " : toggle {label = \"Les valeurs\"; key = \"val\";}" " : toggle {label = \"Les positions\"; key = \"pos\";}" " : toggle {label = \"Les angles\"; key = \"ang\";}" " }" " spacer;" " }" " spacer;" " : row {" " : button {label = \"Tout\"; key = \"tout\";}" " : button {label = \"Aucun\"; key = \"aucun\";}" " : button {label = \">>\"; key = \"sel\";}" " ok_cancel;" " }" "}" ) (write-line txt fil) ) (close fil) (vlax-for blo (vla-get-blocks doc) (or (wcmatch (vla-get-name blo) "`**,*|*") (eq (vla-get-isxref blo) :vlax-true) (vlax-for ent blo (and (eq (vla-get-objectname ent) "AcDbAttributeDefinition") (not (member (vla-get-name blo) liste_bl)) (setq liste_bl (cons (vla-get-name blo) liste_bl)) ) ) ) ) (setq liste_bl (acad_strlsort liste_bl) dcl (load_dialog tmp) sel "" ) (while (not (member res '(0 1))) (new_dialog "ret" dcl "") (start_list "lst") (mapcar 'add_list liste_bl) (end_list) (set_tile "titre" titre) (set_tile "lst" sel) (set_tile "val" val) (set_tile "pos" pos) (set_tile "ang" ang) (action_tile "lst" "(choix_lst $value)") (action_tile "tout" "(choix_tout)") (action_tile "aucun" "(choix_aucun)") (action_tile "val" "(setq val $value)") (action_tile "pos" "(setq pos $value)") (action_tile "ang" "(setq ang $value)") (action_tile "sel" "(done_dialog 2)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq res (start_dialog)) (cond ((eq res 1) (setq rep (list chx js val pos ang)) ) ((eq res 2) (and (setq js (choix js nil)) (progn (setq str js sel nil chx "Nom" ) (while (setq loc (vl-string-search "," str)) (rech) (setq str (substr str (+ 2 loc))) ) (rech) (or sel (setq sel "")) ) ) ) (T (setq rep (list nil nil val pos ang)) ) ) ) (unload_dialog dcl) (vl-file-delete tmp) rep ) (defun question(/ choixbl lst rep sel) (defun choixbl(chx / js nom pos sel) (defun nom(txt / str) (setq txt (vl-string-left-trim " " txt) txt (vl-string-right-trim " " txt) ) (if (tblsearch "block" txt) (setq str txt) (princ (strcat "\nLe bloc \"" txt "\" n'existe pas.")) ) (and str (if (and js (wcmatch (strcase js) (strcase (strcat str "," str "`,*" ",*`," str "`,*,*`," str)))) (princ (strcat "\nLe bloc \"" str "\" est déjà selectionné.")) (if js (setq js (strcat js "," str)) (setq js str) ) ) ) ) (setq js chx) (while (/= (setq sel (getstring t "\nIndiquez le(s) nom(s) du/des bloc(s) : ")) "") (while (setq pos (vl-string-search "," sel)) (nom (substr sel 1 pos)) (setq sel (substr sel (+ 2 pos))) ) (nom sel) (msg js) ) (and (eq js chx) (msg js)) js ) (setq sel "Tout" rep sel) (while (/= sel "Fin") (initget "Tout Sélection Nom Fin") (or (setq sel (getkword (strcat "\nChoix des blocs [Tout/Sélection/Nom/Fin] <" sel "> : "))) (progn (setq sel rep) (and (eq rep "Tout") (setq sel "Fin") ) ) ) (cond ((eq sel "Tout") (setq rep sel) ) ((eq sel "Sélection") (setq rep sel lst (choix lst T) ) ) ((eq sel "Nom") (setq rep sel lst (choixbl lst) ) ) ) ) (list rep lst) ) (defun oui-non(que o-n / rep) (initget "Oui Non") (setq rep (getkword (strcat "\n" que " [Oui/Non] <" (if (eq o-n "0") "Non" "Oui") "> : "))) (cond ((eq rep "Oui") (setq rep "1") ) ((eq rep "Non") (setq rep "0") ) (T (setq rep o-n) ) ) ) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object)) s *error* *error* *errret* ) (vla-startundomark doc) (or (setq val (getenv "Patrick_35_syn_val")) (setq val "1") ) (or (setq pos (getenv "Patrick_35_syn_pos")) (setq pos "0") ) (or (setq ang (getenv "Patrick_35_syn_ang")) (setq ang "0") ) (if (and (or (and (eq cmd 0) (setq rep (boite_dialogue "SYN V1.23") val (nth 2 rep) pos (nth 3 rep) ang (nth 4 rep) rep (list (nth 0 rep) (nth 1 rep)) ) ) (and (eq cmd 1) (setq rep (question)) (setq val (oui-non "Conserver la valeur des attributs" val)) (setq pos (oui-non "Conserver la position des attributs" pos)) (setq ang (oui-non "Conserver l'angle des attributs" ang)) ) ) (car rep) ) (progn (or (eq (car rep) "Tout") (cadr rep) (setq rep (list "Tout" nil)) ) (and (if (cadr rep) (ssget "x" (list (cons 0 "insert") (cons 2 (strcat "`**," (cadr rep))) (cons 66 1))) (ssget "x" (list (cons 0 "insert") (cons 66 1))) ) (progn (vlax-for blo (setq sel (vla-get-activeselectionset doc)) (setq str (nombl blo) att nil ) (and (or (eq (car rep) "Tout") (and (cadr rep) (wcmatch (strcase (cadr rep)) (strcase (strcat str "," str "`,*" ",*`," str "`,*,*`," str))) ) ) (progn (foreach ent (vlax-invoke blo 'getattributes) (setq att (cons (list (vlax-get ent 'textstring) (vlax-get ent 'insertionpoint) (vlax-get ent 'textalignmentpoint) (vlax-get ent 'alignment) (vlax-get ent 'rotation) ) att ) ) ) (setq lst (cons (cons blo att) lst)) (or (member (nombl blo) lstbl) (setq lstbl (cons (nombl blo) lstbl)) ) ) ) ) (vla-delete sel) (and lst (progn (setq def (getvar "cmdecho")) (setvar "cmdecho" 0) (vlax-for blo (vla-get-blocks doc) (and (eq (vla-get-islayout blo) :vlax-false) (setq str (vla-get-name blo)) (member str lstbl) (progn (vl-cmdf "_.attsync" "_name" str) (princ (strcat (chr 8) " pour le bloc " str ".")) ) ) ) (setvar "cmdecho" def) (and (or (eq val "1") (eq pos "1") (eq ang "1")) (foreach blo lst (mapcar '(lambda(a b) (and (eq val "1") (vl-catch-all-apply 'vlax-put (list a 'textstring (nth 0 b))) ) (and (eq pos "1") (progn (vl-catch-all-apply 'vlax-put (list a 'insertionpoint (nth 1 b))) (vl-catch-all-apply 'vlax-put (list a 'textalignmentpoint (nth 2 b))) (vl-catch-all-apply 'vlax-put (list a 'alignment (nth 3 b))) ) ) (and (eq ang "1") (vl-catch-all-apply 'vlax-put (list a 'rotation (nth 4 b))) ) ) (vlax-invoke (car blo) 'getattributes) (reverse (cdr blo)) ) ) ) (setenv "Patrick_35_syn_val" val) (setenv "Patrick_35_syn_pos" pos) (setenv "Patrick_35_syn_ang" ang) ) ) ) ) ) ) (vla-endundomark doc) (setq *error* s) (princ) ) (defun c:syn() (if (zerop (getvar "cmdactive")) (patrick:synchro_att 0) (patrick:synchro_att 1) ) ) (defun c:-syn() (patrick:synchro_att 1) ) (setq nom_lisp "SYN") (if app (if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp) (princ (strcat "..." nom_lisp " chargé.")) (princ (strcat "\n" nom_lisp ".LSP Chargé.....Tapez " nom_lisp " pour l'éxecuter."))) (princ (strcat "\n" nom_lisp ".LSP Chargé......Tapez " nom_lisp " pour l'éxecuter."))) (setq nom_lisp nil) (princ) Citer Autodesk Expert Elite Team
Steven Posté(e) le 25 mai 2021 Posté(e) le 25 mai 2021 8 hours ago, DPB6804 said: Bonjour, Personne n’a jamais eu le cas? Je copie un attribut dans le bloc, je l’associe avec les paramètres de déplacement, j’enregistre le bloc et pan tous les blocs existants ont tournés. Je suis bon pour les retourner un par un. J’ai déjà eu le cas mais je ne sais plus comment j’avais résolu le problème. Bonne journée. Alain Bonjour @DPB6804, Du fait que tu parles de paramètres de déplacement, il semblerait que tu parles de blocs dynamiques. Si c'est le cas, il serait utile de le préciser... Aussi, serait-il possible de nous partager le ou lesdit blocs ? Citer 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.
DPB6804 Posté(e) le 26 mai 2021 Auteur Posté(e) le 26 mai 2021 16 hours ago, didier said: Bonjour @DPB6804 Lorsqu'on redéfinit ou qu'injecte un nouvel attribut, la mise à jour des blocs se fait avec leurs paramètres par défaut. Il faut chercher sur CadXP il existe une routine qui fait cette mise à jour en mémorisant les propriétés modifiées des blocs ce que ne fait pas ATTSYNC. Par contre, je ne sais plus qui l'a faite, ni comment elle s'appelle, bonne recherche, à moins qu'un "sachant" intervienne. Amicalement C'est exactement ça qu'il fait, lorsque je redéfini ou quand j'injecte le nouvel attribut. Au moment ou je fais ATTSYNC ça part en cacahuète. Merci du renseignement, je vois que LECRABE a trouvé une routine pour faire ce que je recherche. Ce sera plus facile que de retourner chaque blocs manuellement. Bonne journée. Alain Citer
DPB6804 Posté(e) le 26 mai 2021 Auteur Posté(e) le 26 mai 2021 11 hours ago, Steven said: Bonjour @DPB6804, Du fait que tu parles de paramètres de déplacement, il semblerait que tu parles de blocs dynamiques. Si c'est le cas, il serait utile de le préciser... Aussi, serait-il possible de nous partager le ou lesdit blocs ? Bonjour Steven, Désolé mais c'est effectivement un bloc dynamique, j'avais expliqué ce que je faisais sans dire qu'il était dynamique, pour moi ça coulait de source. Je vais essayer la routine que viens de partager LECRABE. Merci et bonne journée. Citer
DPB6804 Posté(e) le 26 mai 2021 Auteur Posté(e) le 26 mai 2021 16 hours ago, lecrabe said: Hello Et si tu essayais la merveilleuse routine "SYN" de notre regrette Patrick_35 !? La Sante, Bye, lecrabe (triste & fatigue) ;;;================================================================= ;;; ;;; SYN.LSP V1.23 ;;; ;;; Synchroniser en conservant ou pas la valeur, la position ;;; et l'angle des attributs. ;;; ;;; Copyright (C) Patrick_35 ;;; ;;;================================================================= (defun patrick:synchro_att(cmd / ang att blo boite_dialogue choix def doc ent lst lstbl msg nombl oui-non pos question rep s sel str val *errret*) (defun *errret* (msg) (or (member (strcase msg) '("FUNCTION CANCELLED" ""QUIT / EXIT ABORT"" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) (vla-endundomark doc) (setq *error* s) (princ) ) (defun nombl(bl) (if (vlax-property-available-p bl 'effectivename) (vla-get-effectivename bl) (vla-get-name bl) ) ) (defun msg(js) (if js (princ (strcat "\nSélection actuel : " js)) (princ "\nSélection actuel : Tout") ) ) (defun choix(chx cmd / bl js lst nom sel) (princ "\nSélectionnez le(s) bloc(s) : ") (and (ssget (list (cons 0 "insert") (cons 66 1))) (progn (vlax-for bl (setq sel (vla-get-activeselectionset doc)) (or (member (setq nom (nombl bl)) lst) (setq lst (cons nom lst)) ) (redraw (vlax-vla-object->ename bl) 4) ) (foreach nom lst (and (eq (vla-get-isxref (vla-item (vla-get-blocks doc) nom)) :vlax-false) (if js (setq js (strcat js "," nom)) (setq js nom) ) ) ) (vla-delete sel) ) ) (or js (setq js chx)) (and cmd (msg js)) js ) (defun boite_dialogue(titre / blo choix_aucun choix_lst choix_tout chx dcl fil js liste_bl loc rech rep res sel str tmp vao) (defun choix_lst(val / pos lst) (while (setq pos (read val)) (if lst (setq lst (strcat lst "," (nth pos liste_bl))) (setq lst (nth pos liste_bl)) ) (setq val (substr val (+ 2 (strlen (itoa pos))))) ) (setq js lst chx "Nom" ) ) (defun choix_tout(/ pos val str) (setq pos 0) (while (setq val (nth pos liste_bl)) (if str (setq str (strcat str " " (itoa pos))) (setq str (itoa pos)) ) (setq pos (1+ pos)) ) (setq js nil chx "Tout" sel str ) (set_tile "lst" sel) ) (defun choix_aucun() (setq js nil chx nil sel "" ) (set_tile "lst" sel) ) (defun rech() (and (member (substr str 1 loc) liste_bl) (setq vao (itoa (- (length liste_bl) (length (member (substr str 1 loc) liste_bl))))) (if sel (setq sel (strcat sel " " vao)) (setq sel vao) ) ) ) (setq tmp (vl-filename-mktemp "ret" nil ".dcl") fil (open tmp "w") ) (foreach txt '( "ret : dialog {" " key = titre;" " is_cancel = true;" " fixed_width = true;" " alignment = centered;" " : list_box {label = \"Blocs\"; key = \"lst\"; multiple_select = true; width = 40; height = 20;}" " : boxed_column {" " label = \"Conserver dans les attributs\";" " : row {" " : toggle {label = \"Les valeurs\"; key = \"val\";}" " : toggle {label = \"Les positions\"; key = \"pos\";}" " : toggle {label = \"Les angles\"; key = \"ang\";}" " }" " spacer;" " }" " spacer;" " : row {" " : button {label = \"Tout\"; key = \"tout\";}" " : button {label = \"Aucun\"; key = \"aucun\";}" " : button {label = \">>\"; key = \"sel\";}" " ok_cancel;" " }" "}" ) (write-line txt fil) ) (close fil) (vlax-for blo (vla-get-blocks doc) (or (wcmatch (vla-get-name blo) "`**,*|*") (eq (vla-get-isxref blo) :vlax-true) (vlax-for ent blo (and (eq (vla-get-objectname ent) "AcDbAttributeDefinition") (not (member (vla-get-name blo) liste_bl)) (setq liste_bl (cons (vla-get-name blo) liste_bl)) ) ) ) ) (setq liste_bl (acad_strlsort liste_bl) dcl (load_dialog tmp) sel "" ) (while (not (member res '(0 1))) (new_dialog "ret" dcl "") (start_list "lst") (mapcar 'add_list liste_bl) (end_list) (set_tile "titre" titre) (set_tile "lst" sel) (set_tile "val" val) (set_tile "pos" pos) (set_tile "ang" ang) (action_tile "lst" "(choix_lst $value)") (action_tile "tout" "(choix_tout)") (action_tile "aucun" "(choix_aucun)") (action_tile "val" "(setq val $value)") (action_tile "pos" "(setq pos $value)") (action_tile "ang" "(setq ang $value)") (action_tile "sel" "(done_dialog 2)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq res (start_dialog)) (cond ((eq res 1) (setq rep (list chx js val pos ang)) ) ((eq res 2) (and (setq js (choix js nil)) (progn (setq str js sel nil chx "Nom" ) (while (setq loc (vl-string-search "," str)) (rech) (setq str (substr str (+ 2 loc))) ) (rech) (or sel (setq sel "")) ) ) ) (T (setq rep (list nil nil val pos ang)) ) ) ) (unload_dialog dcl) (vl-file-delete tmp) rep ) (defun question(/ choixbl lst rep sel) (defun choixbl(chx / js nom pos sel) (defun nom(txt / str) (setq txt (vl-string-left-trim " " txt) txt (vl-string-right-trim " " txt) ) (if (tblsearch "block" txt) (setq str txt) (princ (strcat "\nLe bloc \"" txt "\" n'existe pas.")) ) (and str (if (and js (wcmatch (strcase js) (strcase (strcat str "," str "`,*" ",*`," str "`,*,*`," str)))) (princ (strcat "\nLe bloc \"" str "\" est déjà selectionné.")) (if js (setq js (strcat js "," str)) (setq js str) ) ) ) ) (setq js chx) (while (/= (setq sel (getstring t "\nIndiquez le(s) nom(s) du/des bloc(s) : ")) "") (while (setq pos (vl-string-search "," sel)) (nom (substr sel 1 pos)) (setq sel (substr sel (+ 2 pos))) ) (nom sel) (msg js) ) (and (eq js chx) (msg js)) js ) (setq sel "Tout" rep sel) (while (/= sel "Fin") (initget "Tout Sélection Nom Fin") (or (setq sel (getkword (strcat "\nChoix des blocs [Tout/Sélection/Nom/Fin] <" sel "> : "))) (progn (setq sel rep) (and (eq rep "Tout") (setq sel "Fin") ) ) ) (cond ((eq sel "Tout") (setq rep sel) ) ((eq sel "Sélection") (setq rep sel lst (choix lst T) ) ) ((eq sel "Nom") (setq rep sel lst (choixbl lst) ) ) ) ) (list rep lst) ) (defun oui-non(que o-n / rep) (initget "Oui Non") (setq rep (getkword (strcat "\n" que " [Oui/Non] <" (if (eq o-n "0") "Non" "Oui") "> : "))) (cond ((eq rep "Oui") (setq rep "1") ) ((eq rep "Non") (setq rep "0") ) (T (setq rep o-n) ) ) ) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object)) s *error* *error* *errret* ) (vla-startundomark doc) (or (setq val (getenv "Patrick_35_syn_val")) (setq val "1") ) (or (setq pos (getenv "Patrick_35_syn_pos")) (setq pos "0") ) (or (setq ang (getenv "Patrick_35_syn_ang")) (setq ang "0") ) (if (and (or (and (eq cmd 0) (setq rep (boite_dialogue "SYN V1.23") val (nth 2 rep) pos (nth 3 rep) ang (nth 4 rep) rep (list (nth 0 rep) (nth 1 rep)) ) ) (and (eq cmd 1) (setq rep (question)) (setq val (oui-non "Conserver la valeur des attributs" val)) (setq pos (oui-non "Conserver la position des attributs" pos)) (setq ang (oui-non "Conserver l'angle des attributs" ang)) ) ) (car rep) ) (progn (or (eq (car rep) "Tout") (cadr rep) (setq rep (list "Tout" nil)) ) (and (if (cadr rep) (ssget "x" (list (cons 0 "insert") (cons 2 (strcat "`**," (cadr rep))) (cons 66 1))) (ssget "x" (list (cons 0 "insert") (cons 66 1))) ) (progn (vlax-for blo (setq sel (vla-get-activeselectionset doc)) (setq str (nombl blo) att nil ) (and (or (eq (car rep) "Tout") (and (cadr rep) (wcmatch (strcase (cadr rep)) (strcase (strcat str "," str "`,*" ",*`," str "`,*,*`," str))) ) ) (progn (foreach ent (vlax-invoke blo 'getattributes) (setq att (cons (list (vlax-get ent 'textstring) (vlax-get ent 'insertionpoint) (vlax-get ent 'textalignmentpoint) (vlax-get ent 'alignment) (vlax-get ent 'rotation) ) att ) ) ) (setq lst (cons (cons blo att) lst)) (or (member (nombl blo) lstbl) (setq lstbl (cons (nombl blo) lstbl)) ) ) ) ) (vla-delete sel) (and lst (progn (setq def (getvar "cmdecho")) (setvar "cmdecho" 0) (vlax-for blo (vla-get-blocks doc) (and (eq (vla-get-islayout blo) :vlax-false) (setq str (vla-get-name blo)) (member str lstbl) (progn (vl-cmdf "_.attsync" "_name" str) (princ (strcat (chr 8) " pour le bloc " str ".")) ) ) ) (setvar "cmdecho" def) (and (or (eq val "1") (eq pos "1") (eq ang "1")) (foreach blo lst (mapcar '(lambda(a b) (and (eq val "1") (vl-catch-all-apply 'vlax-put (list a 'textstring (nth 0 b))) ) (and (eq pos "1") (progn (vl-catch-all-apply 'vlax-put (list a 'insertionpoint (nth 1 b))) (vl-catch-all-apply 'vlax-put (list a 'textalignmentpoint (nth 2 b))) (vl-catch-all-apply 'vlax-put (list a 'alignment (nth 3 b))) ) ) (and (eq ang "1") (vl-catch-all-apply 'vlax-put (list a 'rotation (nth 4 b))) ) ) (vlax-invoke (car blo) 'getattributes) (reverse (cdr blo)) ) ) ) (setenv "Patrick_35_syn_val" val) (setenv "Patrick_35_syn_pos" pos) (setenv "Patrick_35_syn_ang" ang) ) ) ) ) ) ) (vla-endundomark doc) (setq *error* s) (princ) ) (defun c:syn() (if (zerop (getvar "cmdactive")) (patrick:synchro_att 0) (patrick:synchro_att 1) ) ) (defun c:-syn() (patrick:synchro_att 1) ) (setq nom_lisp "SYN") (if app (if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp) (princ (strcat "..." nom_lisp " chargé.")) (princ (strcat "\n" nom_lisp ".LSP Chargé.....Tapez " nom_lisp " pour l'éxecuter."))) (princ (strcat "\n" nom_lisp ".LSP Chargé......Tapez " nom_lisp " pour l'éxecuter."))) (setq nom_lisp nil) (princ) Bonjour LECRABE, Toujours prompt à trouver des solutions. Tu ne serais pas la table des matières du forum? 😁 Je teste et te tiens au courant. Encore merci. Alain Citer
DPB6804 Posté(e) le 26 mai 2021 Auteur Posté(e) le 26 mai 2021 Euh, je ne comprends plus rien, Je viens de faire une copie de mon plan (pour ne pas faire de bêtises) et j'ai refait la même manipulation de mes blocs. 1. éditer le bloc 2. coller l'attribut venant d'un autre bloc 3. modifier les 2-3 paramètres de déplacement (ça dépend des blocs) en incluant le nouvel attribut 4. enregistrer mon bloc 5. faire attsync en sélectionnant le bloc Oh miracle, l'attribut est mis à jour et les blocs ont gardés leurs orientations. Comprends pas. Citer
DPB6804 Posté(e) le 26 mai 2021 Auteur Posté(e) le 26 mai 2021 Sinon, voici un de mes blocs. type J - bras 1m - sur mât.dwg.zip Citer
Messages recommandés