Aller au contenu

Paramétrage global d\'attributs


Messages recommandés

Posté(e)

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 ?

 

Posté(e)

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: -ATTEDIT

Edit 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 found

Select 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 !

 

Posté(e)

Un exemple qui est de Bruno_l

pour 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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 !

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é