Aller au contenu

Adaptation d'un Lisp


Messages recommandés

Posté(e)

Bonjour à tous

J'utilise régulièrement un lisp qui me permet de faire une rotation de 180° sur un attribut choisit mais j'aimerais l'adapter pour qu'en plus de la rotation la justification du texte soit changée en milieu droit cela est-il possible.

Ci-joint le code :

(defun c:ATTROT180 (/ name)

    (while (and (setq name (car (nentsel "\nVeuillez cliquer sur un attribut : ")))
                (= (cdr (assoc 0 (entget name))) "ATTRIB")
           )
        (entmod (subst (cons 50 (+ (cdr (assoc 50 (entget name))) (/ pi 1.0))) (assoc 50 (entget name)) (entget name)))
    )
    (if name
        (prompt "\nErreur : L'objet sélectionné n'est pas un attribut")
        (prompt "\nFin de la commande")
    )
    (princ)

)

Merci et bonne journée

Posté(e)

Coucou,

Normalement il s'agit des codes 72 et 73 qui régissent l'alignement d'un texte donc il te suffit de copier la ligne (entmod ...) et de remplacer le code 50 par les codes 72, puis 73 (dans une 3ème ligne) et de spécifier la valeur souhaitée.
 

Citation

72

Horizontal text justification type (optional, default = 0) integer codes (not bit-coded):

0 = Left

1= Center

2 = Right

3 = Aligned (if vertical alignment = 0)

4 = Middle (if vertical alignment = 0)

5 = Fit (if vertical alignment = 0)

See the Group 72 and 73 integer codes table for clarification

Citation

73

Vertical text justification type (optional, default = 0): integer codes (not bit-coded):

0 = Baseline

1 = Bottom

2 = Middle

3 = Top

See the Group 72 and 73 integer codes table for clarification

Citation

Group 72 and 73 integer codes

Group 73

 

Group 72

0

 

1

 

2

 

3

 

4

 

5

3 (top)

TLeft

TCenter

TRight

 

 

 

2 (middle)

MLeft

MCenter

MRight

 

 

 

1 (bottom)

BLeft

BCenter

BRight

 

 

 

0 (baseline)

Left

Center

Right

Aligned

Middle

Fit

If group 72 and/or 73 values are nonzero, then the first alignment point values are ignored and AutoCAD calculates new values based on the second alignment point and the length and height of the text string itself (after applying the text style). If the 72 and 73 values are zero or missing, then the second alignment point is meaningless.

Cela donnerait quelque chose du genre :

(defun c:ATTROT180 (/ name)

    (while (and (setq name (car (nentsel "\nVeuillez cliquer sur un attribut : ")))
                (= (cdr (assoc 0 (entget name))) "ATTRIB")
           )
        (entmod (subst (cons 50 (+ (cdr (assoc 50 (entget name))) (/ pi 1.0))) (assoc 50 (entget name)) (entget name)))
        (entmod (subst (cons 73 0) (assoc 73 (entget name)) (entget name)))
        (entmod (subst (cons 72 4) (assoc 72 (entget name)) (entget name)))
    )
    (if name
        (prompt "\nErreur : L'objet sélectionné n'est pas un attribut")
        (prompt "\nFin de la commande")
    )
    (princ)

)

Bisous,
Luna

  • Like 1
Posté(e)
Il y a 4 heures, Luna a dit :

Coucou,

Normalement il s'agit des codes 72 et 73 qui régissent l'alignement d'un texte donc il te suffit de copier la ligne (entmod ...) et de remplacer le code 50 par les codes 72, puis 73 (dans une 3ème ligne) et de spécifier la valeur souhaitée.
 

Cela donnerait quelque chose du genre :

(defun c:ATTROT180 (/ name)

    (while (and (setq name (car (nentsel "\nVeuillez cliquer sur un attribut : ")))
                (= (cdr (assoc 0 (entget name))) "ATTRIB")
           )
        (entmod (subst (cons 50 (+ (cdr (assoc 50 (entget name))) (/ pi 1.0))) (assoc 50 (entget name)) (entget name)))
        (entmod (subst (cons 73 0) (assoc 73 (entget name)) (entget name)))
        (entmod (subst (cons 72 4) (assoc 72 (entget name)) (entget name)))
    )
    (if name
        (prompt "\nErreur : L'objet sélectionné n'est pas un attribut")
        (prompt "\nFin de la commande")
    )
    (princ)

)

Bisous,
Luna

Encore un tout grand merci Luna

Petite question est-il possible de ne pas sortir du lisp si je clique à coté de l'attribut?

 

Bonne journée

Posté(e)
(defun c:ATTROT180 (/ infinitySel break name)
	(defun infinitySel (msg / break g r e)
 	 (princ msg)
 	 (while (and (not break) (setq g (grread nil 12 2)))
 	   (cond
 	     ((= 3 (car g))
 	       (setq
 	         e (nentselp (cadr g))
 	         r
 	           (cond
 	             ((null e) nil)
 	             ((= (length e) 2) e)
 	             (T (list (last (last e)) (cadr g)))
 	           )
		  break r
	        )
	      )
	      (T (setq break T))
	    )
	  )
	  r
	)

    (while (and (setq name (car (infinitySel "\nVeuillez cliquer sur un attribut : ")))
                (= (cdr (assoc 0 (entget name))) "ATTRIB")
           )
        (entmod (subst (cons 50 (+ (cdr (assoc 50 (entget name))) (/ pi 1.0))) (assoc 50 (entget name)) (entget name)))
        (entmod (subst (cons 73 0) (assoc 73 (entget name)) (entget name)))
        (entmod (subst (cons 72 4) (assoc 72 (entget name)) (entget name)))
    )
    (if name
        (prompt "\nErreur : L'objet sélectionné n'est pas un attribut")
        (prompt "\nFin de la commande")
    )
    (princ)

)
  • Like 1

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é