Aller au contenu

Orientation des blocs change lors d'une modification de ceux-ci.


Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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)
      

 

Autodesk Expert Elite Team

Posté(e)
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 ?

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.

Posté(e)
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

Posté(e)
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.

Posté(e)
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

Posté(e)

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.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é