jms Posté(e) le 24 mars 2005 Posté(e) le 24 mars 2005 Salut toutes et tous,J'ignore si le thème a déjà été abordé : il s'agit de trouver une procédure pour orienter tous les attributs d'un bloc donné dans une même direction. Concrètement, imaginez un plateau de bureau occupé par 200 sièges qui sont autant de blocs comportant un seul attribut, qui n'est autre que le n° de ce siège. Chaque siège étant orienté différemment, il convient de traiter les attributs au cas par cas, si on souhaite que le texte reste orienté à 0°. Autocad permet certes de modifier les paramètres des attributs, sans devoir redéfinir le bloc, mais ça ne m'avance pas plus.Qui voit quoi ?
jms Posté(e) le 24 mars 2005 Auteur Posté(e) le 24 mars 2005 Re-salut,A ce stade, j'ai trouvé une solution qui me permet déjà de semi-automatiser le redressement des attributs. Solution pas trop fûtée mais bon, ça marche et le gain de temp est substantiel.Je commence manuellement au clavier :Command: -ATTEDITEdit attributes one at a time? [Yes/No] :Enter block name specification <*>: [NOM_DU_BLOC]Enter attribute tag specification <*>:Enter attribute value specification <*>:Select Attributes: Specify opposite corner: 16 foundSelect Attributes:16 attributes selected.Enter an option [Value/Position/Height/Angle/Style/Layer/Color/Next] : A Puis à partir d'ici, j'utilise un bouton auquel j'ai simplement affecté :A;0;;J'appuie dessus autant de fois qu'il y a de blocs.Artisanal mais efficace !
Patrick_35 Posté(e) le 24 mars 2005 Posté(e) le 24 mars 2005 Un exemple qui est de Bruno_lpour les reacteurs voici un petit lisp qui redresse l' attribut "REF" aprés un commande rotation d'un bloc @+ (defun REDRESSE () (setq JEU_BLOC NIL CX NIL DEF_LE_BLOC NIL FILS NIL DEF_FILS NIL TYPE_ENTITE NIL ) ;_ Fin de setq (setq JEU_BLOC (ssget "p")) (setq CX 0) (while (setq LE_BLOC (ssname JEU_BLOC CX)) (setq CX (1+ CX) DEF_LE_BLOC (entget LE_BLOC) ) ;_ Fin de setq (if (= "INSERT" (cdr (assoc 0 DEF_LE_BLOC))) (progn (setq FILS LE_BLOC) (while (/= "SEQEND" (setq TYPE_ENTITE (cdr (assoc 0 (setq DEF_FILS (entget (setq FILS (entnext FILS)))) ) ;_ Fin de assoc ) ;_ Fin de cdr ) ;_ Fin de setq ) ;_ Fin de /= (if (and (= "ATTRIB" TYPE_ENTITE) (= "REF" (cdr (assoc 2 (entget FILS)))) ) ;_ Fin de and (progn (setq P41 (cdr (assoc 41 DEF_LE_BLOC)) P42 (cdr (assoc 42 DEF_LE_BLOC)) ) ;_ Fin de setq (cond ((= 0 (- P41 P42)) (setq F41 1.0) ) (t (setq F41 -1.0)) ) ;_ Fin de cond (setq DEF_FILS (subst (cons 41 F41) (assoc 41 DEF_FILS) DEF_FILS ) ;_ Fin de subst ) ;_ Fin de setq (setq DEF_FILS (subst '(50 . 0.0) (assoc 50 DEF_FILS) DEF_FILS ) ;_ Fin de subst ) ;_ Fin de setq (entmod DEF_FILS) (entupd LE_BLOC) ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de while ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de while ) et le lisp initialisant le reacteur ;;; chargement des extensions lisp (vl-load-com) (vlr-remove-all) ;;; fonction cleanreac ;;; nettoyage de tous les reacteurs (defun CLEANREAC () (mapcar 'vlr-remove-all '(:vlr-acdb-reactor :vlr-editor-reactor :vlr-linker-reactor :vlr-object-reactor ) ) ) ;;; (defun CHOIX_REAC (REACTEUR COMMANDE) (setq reaction "rien") (setq NOM_CDE (car COMMANDE)) (cond ((= "ROTATE" NOM_CDE) (REDRESSE)) ;((= "DDATTE" NOM_CDE) (chgbloc)) ) ) ;; appel de cleanreac (CLEANREAC) ;;; initialisation des reacteurs ;;; quand on execute une commande appel de la fonction de redressement des attributs (vlr-command-reactor NIL '((:vlr-commandended . choix_reac))) Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
jms Posté(e) le 24 mars 2005 Auteur Posté(e) le 24 mars 2005 Merci pour le "petit" lisp. Comme je tarde décidément à me mettre à ce langage, je vais me le garder jusqu'au jour où j'y serai plus a l'aise. Par exemple, j'ignore déjà à quel moment lancer ce script et sous quel forme etc. Enfin, encore un monde à découvrir !
Patrick_35 Posté(e) le 24 mars 2005 Posté(e) le 24 mars 2005 Ce lisp est automatique. Il suffit de le lancer une fois et ensuite, à chaque fois que tu fais une rotation sur un bloc qui contient un attribut nommé REF, l'angle de rotation de cet attribut est remis à zéro et sans rien faire d'autre (comme par exemple avec -attedit)On se sert de ce que l'on appelle des réacteurs. C'est à dire que le dessin commence à devenir intelligent et interactif @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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